diff --git a/CHANGELOG.md b/CHANGELOG.md index 6398e6d7..2cf7fffd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,8 @@ See [extension/CHANGELOG.md](extension/CHANGELOG.md). ### Build tools - Many toolchains are now WASI builds: cc65 (pinned to 2021 6ac4aa4), DASM 2.20.17, acme, zmac, yasm and merlin32. +- SDCC 4 mos6502 backend: C64 presets (`hello-sdcc.c`, `screen_ram-sdcc.c`, `joymove-sdcc.c`, `siegegame-sdcc.c`, `sprite_collision-sdcc.c`, `fullscrollgame-sdcc.c`); `load_header` platform param wraps the image as a DOS 3.3 binary (apple2) or a PRG with a `SYS` stub (c64). +- C64 `fullscrollgame.c` now takes its level data from `level2-data.c` (the same data as `level2.s`, in C) so the SDCC build can link it; `scrolling2.c` uses plain C copies under SDCC. - Updated batari BASIC; sdcc now parses `#symbol` directives and fixes lost link errors. - New build directives replace the legacy CFGFILE-style ones; build parameters no longer leak between builds. - `#pragma compile("...")` and oscar64 symbol/listing parsing. @@ -63,6 +65,10 @@ See [extension/CHANGELOG.md](extension/CHANGELOG.md). - cc65 toolchain (cc65/ca65/ld65 WASI builds and the per-platform include/lib zips) updated from the 2021 build (`6ac4aa4`) to cc65 `d8a486a` (V2.19-3867, 2026-09-26). The compiler runs with `--disable-opt OptLoadStore1` (the new step drops stores after loads of the same address, which breaks hardware registers and inline asm) and `-unreachable-code`. - cc65 `a2.lo.s` (Apple II lo-res TGI) patched in `8bitworkshop-compilers/patches/cc65-apple2-lo-tgi.patch`: a stray `bpl :+` in `INSTALL` made `tgi_install(a2_lo_tgi)` crash on a non-enhanced Apple II. - Presets adjusted for the newer cc65: NES `chase` closes its zero-page `#pragma` region, C64 `side_scroller` uses an unsigned fixed-point constant, and the Atari vector presets no longer recurse into `main()`. `neslib.h` no longer redefines `NULL` if `stddef.h` already did. +- SDCC: both 3.6.5 and 4.x are bundled; 3.6.5 is the default (several times faster to build) and `//#tooldef c sdcc=4` opts in to 4.x (the default is `SDCC_DEFAULT_VERSION` in `toolmeta.ts`). Programs without an `opt_code*` pragma now build with `--no-peep --nolospre --max-allocs-per-node 500`, including Game Boy, which previously always got the full optimizer. See *SDCC versions* in the build directives docs. +- SDCC 4 mos6502 backend (experimental): a `.sdcc` or `-sdcc.c` file on `devel-6502` or `apple2` builds with sdcc, `sdas6500` and `sdld6808` (see `hello-sdcc.c` in those presets). Apple II programs link as a DOS 3.3 binary at `$803`. `.sdcc` now selects SDCC on every Z80 and 6502 platform. +- `//#tooldef ld code_start=ADDR` and `data_start=ADDR` move SDCC's code and RAM data. The Apple II preset `cosmic-sdcc.c` builds the Cosmic Impalas game with SDCC by including `cosmic.c`, which now has `__SDCC` alternatives for `conio` and inline assembly. +- `devel-6502` runs headless in the `8bws` CLI, and the new `serial` run-script command prints what the program sent to its serial port. - Build is now only `esbuild` through `scripts/build.mjs`; code split into a headless `src/common/projectcore.ts` / `toolselect.ts`. - New `buildpresets` script that builds and runs every preset. diff --git a/gen/apple2-RMS6MFCB.js b/gen/apple2-XAUBDC5F.js similarity index 85% rename from gen/apple2-RMS6MFCB.js rename to gen/apple2-XAUBDC5F.js index d184b4e1..66aed89d 100644 --- a/gen/apple2-RMS6MFCB.js +++ b/gen/apple2-XAUBDC5F.js @@ -1,13 +1,13 @@ -import{a as i0}from"./chunk-TANFDIIN.js";import{G as s0,m as e0,r as t0,z as r0}from"./chunk-QYEDG265.js";import{h as O}from"./chunk-UACHXWHT.js";import{L as U,g as W,i as X,l as $,m as x0,s as a0,u as d}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var P=class extends t0{constructor(){super();this.cpuFrequency=1022727;this.sampleRate=this.cpuFrequency;this.cpuCyclesPerLine=65;this.cpuCyclesPerFrame=this.cpuCyclesPerLine*262;this.canvasWidth=280;this.numVisibleScanlines=192;this.numTotalScanlines=262;this.defaultROMSize=77824;this.cpuCyclesPaddleUnit=11;this.cpuCyclesPaddleMax=255*this.cpuCyclesPaddleUnit;this.LOAD_BASE=0;this.HDR_SIZE=0;this.ram=new Uint8Array(77824);this.cpu=new e0;this.grdirty=new Array(384);this.grparams={dirty:this.grdirty,grswitch:E,mem:this.ram};this.kbdlatch=0;this.soundstate=0;this.auxRAMselected=!1;this.auxRAMbank=1;this.writeinhibit=!0;this.bank2rdoffset=0;this.bank2wroffset=0;this.paddleValues=[0,0,0,0];this.paddleButtons=[!1,!1,!1];this.paddleLastTriggered=0;this.slots=new Array(8);this.fakeDrive={readROM:x=>{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return this.LOAD_BASE&255;case 2:return this.LOAD_BASE>>8&255;default:return 0}else switch(x){case 0:return this.rom&&this.loadRAMWithProgram(),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new $().decode(x0(atob(u0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,c=this.frameCycles-this.paddleLastTriggered;return c=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1;else if(x<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-8].write(x&15,a),this.probe.logIOWrite(x,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new l0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&x{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return this.LOAD_BASE&255;case 2:return this.LOAD_BASE>>8&255;default:return 0}else switch(x){case 0:return this.rom&&this.loadRAMWithProgram(),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new $().decode(x0(atob(u0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,c=this.frameCycles-this.paddleLastTriggered;return c=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1;else if(x<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-8].write(x&15,a),this.probe.logIOWrite(x,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new b0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&x>8|(D&127)<<1|(D&512)>>1;for(p=0;p<7;p++){var M;(2<>4],h=0;h<4;h++)n[s]=n[s+1]=n[s+2]=n[s+3]=n[s+4]=n[s+5]=n[s+6]=l,s+=x}function h0(o,i,b,h){var s=(i<<3)*x+o*7,A,l;h?(A=t,l=r):(A=r,l=t);for(var S=0;S<8;S++){var k=d0[(b<<3)+S];n[s]=(k&64)>0?A:l,n[s+1]=(k&32)>0?A:l,n[s+2]=(k&16)>0?A:l,n[s+3]=(k&8)>0?A:l,n[s+4]=(k&4)>0?A:l,n[s+5]=(k&2)>0?A:l,n[s+6]=(k&1)>0?A:l,s+=x}}this.getAddressForScanline=function(o){var i=m[o];return e.grswitch&z&&(o<160||!(e.grswitch&L))?i=i|(e.grswitch&v?16384:8192):i=i&1023|(e.grswitch&v?2048:1024),i};function Y(o,i){for(var b=o*x;o>7]){b+=x;continue}for(var s,A,l=0,S=e.mem[h]&255,k=0;k<20;k++){for(var H=e.mem[h+1]&255,V=e.mem[h+2]&255,o0=((l&64)<<2|S|H<<9)&1023,B=0;B<7;B++)n[b+B]=R[o0*7+B];for(var b0=((S&64)<<2|H|V<<9)&1023,B=0;B<7;B++)n[b+7+B]=R[b0*7+7168+B];b+=14,h+=2,l=H,S=V}}}function q(o){for(var i=u[o]+((e.grswitch&v)!=0?2048:1024),b=0;b<40;b++){var h=e.mem[i+b]&255;h!=f[o*40+b]&&(f0(b,o,h),f[o*40+b]=h)}}function j(o,i){for(var b=u[o]+((e.grswitch&v)!=0?2048:1024),h=0;h<40;h++){var s=e.mem[b+h]&255,A;s>=128?A=!1:s>=64?(A=i,i?s-=64:s+=64):A=!0,s!=f[o*40+h]&&(h0(h,o,s&127,A),f[o*40+h]=s)}}this.updateScreen=function(o){var i,b=new Date().getTime()%(g<<1)>g;if(e.grswitch!=c&&(c=e.grswitch,o=!0),o){if((e.grswitch&E)!=0||(e.grswitch&L)!=0)for(i=0;i<24;i++)for(var h=0;h<40;h++)f[i*40+h]=-1;for(var s=0;s>1]:this.track_data=null}toLongString(){return"Track: "+this.track/2+` +`}}},E=1,L=2,v=4,z=8,b0=function(n,e){var x=280,a=192,r=4294967295,t=4278190080,c=-1,f=new Array(960);let g=250,k=[d(0,0,0),d(227,30,96),d(96,78,189),d(255,68,253),d(0,163,96),d(156,156,156),d(20,207,253),d(208,195,255),d(96,114,3),d(255,106,60),d(156,156,156),d(255,160,208),d(20,245,60),d(208,221,141),d(114,255,208),d(255,255,255)],u=[0,128,256,384,512,640,768,896,40,168,296,424,552,680,808,936,80,208,336,464,592,720,848,976],m=[0,1024,2048,3072,4096,5120,6144,7168,128,1152,2176,3200,4224,5248,6272,7296,256,1280,2304,3328,4352,5376,6400,7424,384,1408,2432,3456,4480,5504,6528,7552,512,1536,2560,3584,4608,5632,6656,7680,640,1664,2688,3712,4736,5760,6784,7808,768,1792,2816,3840,4864,5888,6912,7936,896,1920,2944,3968,4992,6016,7040,8064,40,1064,2088,3112,4136,5160,6184,7208,168,1192,2216,3240,4264,5288,6312,7336,296,1320,2344,3368,4392,5416,6440,7464,424,1448,2472,3496,4520,5544,6568,7592,552,1576,2600,3624,4648,5672,6696,7720,680,1704,2728,3752,4776,5800,6824,7848,808,1832,2856,3880,4904,5928,6952,7976,936,1960,2984,4008,5032,6056,7080,8104,80,1104,2128,3152,4176,5200,6224,7248,208,1232,2256,3280,4304,5328,6352,7376,336,1360,2384,3408,4432,5456,6480,7504,464,1488,2512,3536,4560,5584,6608,7632,592,1616,2640,3664,4688,5712,6736,7760,720,1744,2768,3792,4816,5840,6864,7888,848,1872,2896,3920,4944,5968,6992,8016,976,2e3,3024,4048,5072,6096,7120,8144,120,1144,2168,3192,4216,5240,6264,7288,248,1272,2296,3320,4344,5368,6392,7416,376,1400,2424,3448,4472,5496,6520,7544,504,1528,2552,3576,4600,5624,6648,7672,632,1656,2680,3704,4728,5752,6776,7800,760,1784,2808,3832,4856,5880,6904,7928,888,1912,2936,3960,4984,6008,7032,8056,1016,2040,3064,4088,5112,6136,7160,8184,0,1024,2048,3072,4096,5120];var R;{R=new Array(256*4*2*7);var p,w,y,Q,C0=15,J=0;for(w=0;w<2;w++)for(var D=0;D<1024;D++){(D&128)==0?(y=3,Q=12):(y=6,Q=9);var _=(D&256)>>8|(D&127)<<1|(D&512)>>1;for(p=0;p<7;p++){var M;(2<>4],h=0;h<4;h++)n[s]=n[s+1]=n[s+2]=n[s+3]=n[s+4]=n[s+5]=n[s+6]=b,s+=x}function h0(o,i,l,h){var s=(i<<3)*x+o*7,A,b;h?(A=t,b=r):(A=r,b=t);for(var B=0;B<8;B++){var C=d0[(l<<3)+B];n[s]=(C&64)>0?A:b,n[s+1]=(C&32)>0?A:b,n[s+2]=(C&16)>0?A:b,n[s+3]=(C&8)>0?A:b,n[s+4]=(C&4)>0?A:b,n[s+5]=(C&2)>0?A:b,n[s+6]=(C&1)>0?A:b,s+=x}}this.getAddressForScanline=function(o){var i=m[o];return e.grswitch&z&&(o<160||!(e.grswitch&L))?i=i|(e.grswitch&v?16384:8192):i=i&1023|(e.grswitch&v?2048:1024),i};function Y(o,i){for(var l=o*x;o>7]){l+=x;continue}for(var s,A,b=0,B=e.mem[h]&255,C=0;C<20;C++){for(var H=e.mem[h+1]&255,V=e.mem[h+2]&255,o0=((b&64)<<2|B|H<<9)&1023,S=0;S<7;S++)n[l+S]=R[o0*7+S];for(var l0=((B&64)<<2|H|V<<9)&1023,S=0;S<7;S++)n[l+7+S]=R[l0*7+7168+S];l+=14,h+=2,b=H,B=V}}}function q(o){for(var i=u[o]+((e.grswitch&v)!=0?2048:1024),l=0;l<40;l++){var h=e.mem[i+l]&255;h!=f[o*40+l]&&(f0(l,o,h),f[o*40+l]=h)}}function j(o,i){for(var l=u[o]+((e.grswitch&v)!=0?2048:1024),h=0;h<40;h++){var s=e.mem[l+h]&255,A;s>=128?A=!1:s>=64?(A=i,i?s-=64:s+=64):A=!0,s!=f[o*40+h]&&(h0(h,o,s&127,A),f[o*40+h]=s)}}this.updateScreen=function(o){var i,l=new Date().getTime()%(g<<1)>g;if(e.grswitch!=c&&(c=e.grswitch,o=!0),o){if((e.grswitch&E)!=0||(e.grswitch&L)!=0)for(i=0;i<24;i++)for(var h=0;h<40;h++)f[i*40+h]=-1;for(var s=0;s>1]:this.track_data=null}toLongString(){return"Track: "+this.track/2+` Offset: `+this.track_index+` Mode: `+(this.read_mode?"READ":"WRITE")+` Motor: `+this.motor+` Data: `+(this.track_data?W(this.track_data[this.track_index]):"-")+` -`}read_latch(){return this.track_index=(this.track_index+1)%F,this.track_data?this.track_data[this.track_index]&255:this.emu.floatbus()|128}write_latch(e){this.track_index=(this.track_index+1)%F,this.track_data!=null&&(this.track_data[this.track_index]=e)}readROM(e){return c0[e]}readConst(e){return c0[e]}read(e){return this.doIO(e,0)}write(e,x){this.doIO(e,x)}doIO(e,x){switch(e&15){case 1:case 3:case 5:case 7:var a,r,t;t=this.track,a=e>>1&3,a==(t-1&3)?t>0&&t--:a==(t+1&3)&&t>1],console.log("track",t/2)):this.track_data=null,this.track=t;break;case 8:this.motor=!1;break;case 9:this.motor=!0;break;case 10:break;case 11:break;case 15:this.read_mode=!1;case 12:if(this.read_mode)return this.read_latch();break;case 14:this.read_mode=!0;case 13:return x>=0&&!this.read_mode&&!this.write_protect&&this.write_latch(x),this.write_protect?128:0}return this.emu.floatbus()}},G=[150,151,154,155,157,158,159,166,167,171,172,173,174,175,178,179,180,181,182,183,185,186,187,188,189,190,191,203,205,206,207,211,214,215,217,218,219,220,221,222,223,229,230,231,233,234,235,236,237,238,239,242,243,244,245,246,247,249,250,251,252,253,254,255],m0=[0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15];function g0(n,e,x,a,r,t,c){var f,g,C,u,m=new Uint8Array(258);for(u=0,f=0;f<14;f++)t[c++]=255;for(t[c++]=213,t[c++]=170,t[c++]=150,t[c++]=n>>1|170,t[c++]=n|170,g=n,t[c++]=e>>1|170,t[c++]=e|170,g^=e,t[c++]=x>>1|170,t[c++]=x|170,g^=x,t[c++]=g>>1|170,t[c++]=g|170,t[c++]=222,t[c++]=170,t[c++]=235,f=0;f<6;f++)t[c++]=255;for(t[c++]=213,t[c++]=170,t[c++]=173,f=0;f<256;f++)m[f]=a[f+r]&255;for(m[256]=0,m[257]=0,C=0,f=0;f<86;f++)u=(m[f]&1)<<1,u|=(m[f]&2)>>1,u|=(m[f+86]&1)<<3,u|=(m[f+86]&2)<<1,u|=(m[f+172]&1)<<5,u|=(m[f+172]&2)<<3,t[c++]=G[u^C],C=u;for(f=0;f<256;f++)u=m[f]>>2,t[c++]=G[u^C],C=u;t[c++]=G[u],t[c++]=222,t[c++]=170,t[c++]=235}function p0(n,e,x){for(var a=new Uint8Array(F),r=0,t=0;t<16;t++)g0(n,e,t,x,m0[t]<<8,a,r),r+=A0;for(;r>1&3,a==(t-1&3)?t>0&&t--:a==(t+1&3)&&t>1],console.log("track",t/2)):this.track_data=null,this.track=t;break;case 8:this.motor=!1;break;case 9:this.motor=!0;break;case 10:break;case 11:break;case 15:this.read_mode=!1;case 12:if(this.read_mode)return this.read_latch();break;case 14:this.read_mode=!0;case 13:return x>=0&&!this.read_mode&&!this.write_protect&&this.write_latch(x),this.write_protect?128:0}return this.emu.floatbus()}},G=[150,151,154,155,157,158,159,166,167,171,172,173,174,175,178,179,180,181,182,183,185,186,187,188,189,190,191,203,205,206,207,211,214,215,217,218,219,220,221,222,223,229,230,231,233,234,235,236,237,238,239,242,243,244,245,246,247,249,250,251,252,253,254,255],m0=[0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15];function g0(n,e,x,a,r,t,c){var f,g,k,u,m=new Uint8Array(258);for(u=0,f=0;f<14;f++)t[c++]=255;for(t[c++]=213,t[c++]=170,t[c++]=150,t[c++]=n>>1|170,t[c++]=n|170,g=n,t[c++]=e>>1|170,t[c++]=e|170,g^=e,t[c++]=x>>1|170,t[c++]=x|170,g^=x,t[c++]=g>>1|170,t[c++]=g|170,t[c++]=222,t[c++]=170,t[c++]=235,f=0;f<6;f++)t[c++]=255;for(t[c++]=213,t[c++]=170,t[c++]=173,f=0;f<256;f++)m[f]=a[f+r]&255;for(m[256]=0,m[257]=0,k=0,f=0;f<86;f++)u=(m[f]&1)<<1,u|=(m[f]&2)>>1,u|=(m[f+86]&1)<<3,u|=(m[f+86]&2)<<1,u|=(m[f+172]&1)<<5,u|=(m[f+172]&2)<<3,t[c++]=G[u^k],k=u;for(f=0;f<256;f++)u=m[f]>>2,t[c++]=G[u^k],k=u;t[c++]=G[u],t[c++]=222,t[c++]=170,t[c++]=235}function p0(n,e,x){for(var a=new Uint8Array(F),r=0,t=0;t<16;t++)g0(n,e,t,x,m0[t]<<8,a,r),r+=A0;for(;r;\n soundstate: number;\n auxRAMselected, writeinhibit: boolean;\n auxRAMbank: number;\n}\n\ninterface AppleIIControlsState {\n inputs: Uint8Array; // unused?\n kbdlatch: number;\n}\n\ninterface AppleIIState extends AppleIIStateBase, AppleIIControlsState {\n c: MOS6502State;\n grswitch: number;\n slots: SlotDevice[];\n paddleValues: number[];\n paddleButtons: boolean[];\n}\n\ninterface SlotDevice extends Bus {\n readROM(address: number): number;\n readConst(address: number): number;\n}\n\nexport class AppleII extends BasicScanlineMachine implements AcceptsBIOS, AcceptsPaddleInput {\n\n // approx: http://www.cs.columbia.edu/~sedwards/apple2fpga/\n cpuFrequency = 1022727;\n sampleRate = this.cpuFrequency;\n cpuCyclesPerLine = 65;\n cpuCyclesPerFrame = this.cpuCyclesPerLine * 262;\n canvasWidth = 280;\n numVisibleScanlines = 192;\n numTotalScanlines = 262;\n defaultROMSize = 0x13000; // we'll never need one that big, but...\n cpuCyclesPaddleUnit = 11; // ~11 cycles per paddle unit\n cpuCyclesPaddleMax = 255 * this.cpuCyclesPaddleUnit;\n\n // these are set later\n LOAD_BASE = 0;\n HDR_SIZE = 0;\n\n ram = new Uint8Array(0x13000); // 64K + 16K LC RAM - 4K hardware + 12K ROM\n bios: Uint8Array;\n cpu = new MOS6502();\n grdirty = new Array(0xc000 >> 7);\n grparams = { dirty: this.grdirty, grswitch: GR_TXMODE, mem: this.ram };\n ap2disp;\n kbdlatch = 0;\n soundstate = 0;\n // language card switches\n auxRAMselected = false;\n auxRAMbank = 1;\n writeinhibit = true;\n // value to add when reading & writing each of these banks\n // bank 1 is E000-FFFF, bank 2 is D000-DFFF\n bank2rdoffset = 0;\n bank2wroffset = 0;\n // Paddle/joystick, PDL0-PDL3 values (0-255).\n paddleValues = [0, 0, 0, 0];\n paddleButtons = [false, false, false];\n paddleLastTriggered = 0;\n // disk II\n slots: SlotDevice[] = new Array(8);\n // fake disk drive that loads program into RAM\n fakeDrive: SlotDevice = {\n readROM: (a) => {\n var pc = this.cpu.getPC();\n if (pc >= 0xC600 && pc < 0xC700) {\n // We're reading code to EXECUTE.\n // Load the built program directly into memory, and \"read\"\n // a JMP directly to it.\n //console.log(`fakeDrive (EXEC): ${a.toString(16)}`);\n switch (a) {\n // JMP VM_BASE\n case 0:\n // SHOULD load program into RAM here, but have to do it\n // below instead.\n return 0;\n case 1: return this.LOAD_BASE & 0xff;\n case 2: return (this.LOAD_BASE >> 8) & 0xff;\n default: return 0;\n }\n }\n else {\n // We're reading code, but not executing it.\n // This is probably the Monitor routine to identify whether\n // this slot is a Disk ][ drive, so... give it what it wants.\n //console.log(`fakeDrive (NOEX): ${a.toString(16)}`);\n switch (a) {\n case 0:\n // Actually, if we get here, we probably ARE being\n // executed. For some reason, the instruction at $C600\n // gets read for execution, BEFORE the PC gets set to\n // the correct location. So we handle loading the program\n // into RAM and returning the JMP here, instead of above\n // where it would otherwise belong.\n if (this.rom) {\n this.loadRAMWithProgram();\n }\n return 0x4c; // JMP\n case 1: return 0x20;\n case 3: return 0x00;\n case 5: return 0x03;\n case 7: return 0x3c;\n default: return 0;\n }\n }\n },\n readConst: (a) => {\n return 0;\n },\n read: (a) => { return this.floatbus(); },\n write: (a, v) => { }\n };\n\n constructor() {\n super();\n this.loadBIOS(new lzgmini().decode(stringToByteArray(atob(APPLEIIGO_LZG))));\n this.connectCPUMemoryBus(this);\n // This line is inappropriate for real ROMs, but was there for\n // the APPLE][GO ROM, so keeping it only in the constructor, for\n // that special case (in case it really is important for this\n // address to be an RTS).\n this.bios[0xD39A - (0x10000 - this.bios.length)] = 0x60; // $d39a = RTS\n }\n saveState(): AppleIIState {\n // TODO: automagic\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(),\n kbdlatch: this.kbdlatch,\n soundstate: this.soundstate,\n grswitch: this.grparams.grswitch,\n auxRAMselected: this.auxRAMselected,\n auxRAMbank: this.auxRAMbank,\n writeinhibit: this.writeinhibit,\n slots: this.slots.map((slot) => { return slot && slot['saveState'] && slot['saveState']() }),\n paddleValues: this.paddleValues.slice(),\n paddleButtons: this.paddleButtons.slice(),\n inputs: this.ram.slice(0, 0) // unused\n };\n }\n loadState(s: AppleIIState) {\n this.cpu.loadState(s.c);\n this.ram.set(s.ram);\n this.kbdlatch = s.kbdlatch;\n this.soundstate = s.soundstate;\n this.grparams.grswitch = s.grswitch;\n this.auxRAMselected = s.auxRAMselected;\n this.auxRAMbank = s.auxRAMbank;\n this.writeinhibit = s.writeinhibit;\n this.setupLanguageCardConstants();\n for (var i = 0; i < this.slots.length; i++)\n if (this.slots[i] && this.slots[i]['loadState'])\n this.slots[i]['loadState'](s.slots[i]);\n this.paddleValues = s.paddleValues.slice();\n this.paddleButtons = s.paddleButtons.slice();\n this.ap2disp.invalidate(); // repaint entire screen\n }\n saveControlsState(): AppleIIControlsState {\n return { inputs: null, kbdlatch: this.kbdlatch };\n }\n loadControlsState(s: AppleIIControlsState) {\n this.kbdlatch = s.kbdlatch;\n }\n loadBIOS(data, title?) {\n if (data.length != 0x3000) {\n console.log(`apple2 loadBIOS !!!WARNING!!!: BIOS wants length 0x3000, but BIOS '${title}' has length 0x${data.length.toString(16)}`);\n console.log(\"will load BIOS to end of memory anyway...\");\n }\n this.bios = Uint8Array.from(data);\n }\n loadROM(data, title?, origin?: number) {\n // is it a 16-sector 35-track disk image?\n if (data.length == 16 * 35 * 256) {\n var diskii = new DiskII(this, data);\n this.slots[6] = diskii;\n this.reset();\n } else { // it's a binary, use a fake drive\n // set this.rom variable\n super.loadROM(data);\n // AppleSingle header? https://github.com/cc65/cc65/blob/master/libsrc/apple2/exehdr.s\n if (arrayCompare(this.rom.slice(0, 4), [0x00, 0x05, 0x16, 0x00])) {\n this.LOAD_BASE = this.rom[0x39] | (this.rom[0x38] << 8); // big endian\n this.HDR_SIZE = 58;\n } else {\n // 4-byte DOS header? (TODO: hacky detection)\n const hdrOrigin = this.rom[0] | (this.rom[1] << 8);\n const size = this.rom[2] | (this.rom[3] << 8);\n let isPlausible = hdrOrigin < 0xc000\n && hdrOrigin + size < 0x13000;\n if (size == data.length - 4 && isPlausible) {\n this.LOAD_BASE = hdrOrigin;\n this.HDR_SIZE = 4;\n } else {\n // Load @ specified origin, fallback to $803\n this.LOAD_BASE = origin ?? 0x803;\n this.HDR_SIZE = 0;\n }\n }\n this.slots[6] = this.fakeDrive;\n }\n }\n loadRAMWithProgram() {\n console.log(`Loading program into Apple ][ RAM at \\$${this.LOAD_BASE.toString(16)} (${this.HDR_SIZE} bytes skipped for header)`);\n // truncate if needed to fit into RAM\n const exedata = this.rom.slice(this.HDR_SIZE, this.HDR_SIZE + this.ram.length - this.LOAD_BASE);\n this.ram.set(exedata, this.LOAD_BASE);\n // fake DOS detect for CC65 (TODO?)\n if (this.HDR_SIZE == 58) {\n this.ram[0xbf00] = 0x4c;\n this.ram[0xbf6f] = 0x01;\n }\n }\n reset() {\n this.auxRAMselected = false;\n this.auxRAMbank = 1;\n this.writeinhibit = true;\n this.ram.fill(0, 0x300, 0x400); // Clear soft-reset vector\n // (force hard reset)\n super.reset();\n this.skipboot();\n }\n skipboot() {\n // execute until $c600 boot\n for (var i = 0; i < 2000000; i++) {\n this.cpu.advanceClock();\n if ((this.cpu.getPC() >> 8) == 0xc6) break;\n }\n // get out of $c600 boot\n for (var i = 0; i < 2000000; i++) {\n this.cpu.advanceClock();\n if ((this.cpu.getPC() >> 8) < 0xc6) break;\n }\n }\n readConst(address: number): number {\n if (address < 0xc000) {\n return this.ram[address];\n } else if (address >= 0xd000) {\n if (!this.auxRAMselected)\n return this.bios[address - (0x10000 - this.bios.length)];\n else if (address >= 0xe000)\n return this.ram[address];\n else\n return this.ram[address + this.bank2rdoffset];\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readConst(address & 0xff)) | 0;\n } else {\n return 0;\n }\n }\n read(address: number): number {\n address &= 0xffff;\n if (address < 0xc000 || address >= 0xd000) {\n return this.readConst(address);\n } else if (address < 0xc100) {\n this.probe.logIORead(address, 0); // TODO: value\n var slot = (address >> 4) & 0x0f;\n switch (slot) {\n case 0: // $C00x\n return this.kbdlatch;\n case 1: // $C01x\n this.kbdlatch &= 0x7f;\n break;\n case 3: // $C03x\n this.soundstate = this.soundstate ^ 1;\n break;\n case 5: // $C05x\n if ((address & 0x0f) < 8) {\n // graphics\n if ((address & 1) != 0)\n this.grparams.grswitch |= 1 << ((address >> 1) & 0x07);\n else\n this.grparams.grswitch &= ~(1 << ((address >> 1) & 0x07));\n }\n break;\n case 6: // $C06x\n // tapein, joystick, buttons\n switch (address & 7) {\n case 1: // $C061 / $C069 - GAME SW0\n case 2: // $C062 / $C06A - GAME SW1\n case 3: // $C063 / $C06B - GAME SW2\n // buttons\n var btn = (address & 7) - 1;\n if (this.paddleButtons[btn])\n return this.floatbus() | 0x80;\n else\n return this.floatbus() & 0x7f;\n case 4: // $C064 / $C06C - GAME PDL0\n case 5: // $C065 / $C06D - GAME PDL1\n case 6: // $C066 / $C06E - GAME PDL2\n case 7: // $C067 / $C06F - GAME PDL3\n var pdl = (address & 0x0f) - 4;\n var elapsed = this.frameCycles - this.paddleLastTriggered;\n // Bit 7 remains high until paddle value reached.\n if (elapsed < this.paddleValues[pdl] * this.cpuCyclesPaddleUnit)\n return this.floatbus() | 0x80;\n else\n return this.floatbus() & 0x7f;\n default:\n return this.floatbus();\n }\n case 7: // $C07x\n // Strobing PTRIG ($C070) triggers paddles.\n if (address == 0xc070) {\n this.paddleLastTriggered = this.frameCycles;\n return this.floatbus() | 0x80;\n }\n case 8: // $C08x\n return this.doLanguageCardIO(address);\n case 9: // $C09x\n case 10: // $C0Ax\n case 11: // $C0Bx\n case 12: // $C0Cx\n case 13: // $C0Dx\n case 14: // $C0Ex\n case 15: // $C0Fx\n return (this.slots[slot - 8] && this.slots[slot - 8].read(address & 0xf)) | 0;\n }\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readROM(address & 0xff)) | 0;\n }\n return this.floatbus();\n }\n write(address: number, val: number): void {\n address &= 0xffff;\n val &= 0xff;\n if (address < 0xc000) {\n this.ram[address] = val;\n this.grdirty[address >> 7] = 1;\n } else if (address < 0xc090) {\n this.read(address); // strobe address, discard result\n } else if (address < 0xc100) {\n var slot = (address >> 4) & 0x0f;\n this.slots[slot - 8] && this.slots[slot - 8].write(address & 0xf, val);\n this.probe.logIOWrite(address, val);\n } else if (address >= 0xd000 && !this.writeinhibit) {\n if (address >= 0xe000)\n this.ram[address] = val;\n else\n this.ram[address + this.bank2wroffset] = val;\n }\n }\n // http://www.deater.net/weave/vmwprod/megademo/vapor_lock.html\n // https://retrocomputing.stackexchange.com/questions/14012/what-is-dram-refresh-and-why-is-the-weird-apple-ii-video-memory-layout-affected\n // http://www.apple-iigs.info/doc/fichiers/TheappleIIcircuitdescription1.pdf\n // http://rich12345.tripod.com/aiivideo/softalk.html\n // https://github.com/MiSTer-devel/Apple-II_MiSTer/blob/master/rtl/timing_generator.vhd\n floatbus(): number {\n var fcyc = this.frameCycles;\n var yline = Math.floor(fcyc / 65);\n var xcyc = Math.floor(fcyc % 65);\n var addr = this.ap2disp.getAddressForScanline(yline);\n return this.readConst(addr + xcyc);\n }\n\n connectVideo(pixels: Uint32Array) {\n super.connectVideo(pixels);\n this.ap2disp = this.pixels && new Apple2Display(this.pixels, this.grparams);\n }\n startScanline() {\n }\n drawScanline() {\n // TODO: draw scanline via ap2disp\n }\n advanceFrame(trap): number {\n var clocks = super.advanceFrame(trap);\n this.ap2disp && this.ap2disp.updateScreen();\n return clocks;\n }\n postFrame() {\n this.paddleLastTriggered -= this.frameCycles;\n // Prevent extreme negative values if paddles aren't read.\n if (this.paddleLastTriggered < -this.cpuCyclesPaddleMax) {\n this.paddleLastTriggered = -this.cpuCyclesPaddleMax;\n }\n }\n advanceCPU() {\n this.audio.feedSample(this.soundstate, 1);\n return super.advanceCPU();\n }\n\n setKeyInput(key: number, code: number, flags: number): void {\n console.log(`setKeyInput: ${key} ${code} ${flags}`);\n if (flags & KeyFlags.KeyDown) {\n code = 0;\n switch (key) {\n case 16: case 17: case 18: case 91:\n return; // ignore shift/ctrl/alt - don't set any key\n case 8:\n code = 8; // left\n if (flags & KeyFlags.Shift) {\n // (possibly) soft reset\n this.cpu.reset();\n return;\n }\n break;\n case 13: code = 13; break; // return\n case 27: code = 27; break; // escape\n case 37: code = 8; break; // left\n case 39: code = 21; break; // right\n case 38: code = 11; break; // up\n case 40: code = 10; break; // down\n case 48: code = (flags & KeyFlags.Shift) ? 0x29 : 0x30; break; // ) or 0\n case 49: code = (flags & KeyFlags.Shift) ? 0x21 : 0x31; break; // ! or 1\n case 50: code = (flags & KeyFlags.Shift) ? 0x40 : 0x32; break; // @ or 2\n case 51: code = (flags & KeyFlags.Shift) ? 0x23 : 0x33; break; // # or 3\n case 52: code = (flags & KeyFlags.Shift) ? 0x24 : 0x34; break; // $ or 4\n case 53: code = (flags & KeyFlags.Shift) ? 0x25 : 0x35; break; // % or 5\n case 54: code = (flags & KeyFlags.Shift) ? 0x5e : 0x36; break; // ^ or 6\n case 55: code = (flags & KeyFlags.Shift) ? 0x26 : 0x37; break; // & or 7\n case 56: code = (flags & KeyFlags.Shift) ? 0x2a : 0x38; break; // * or 8\n case 57: code = (flags & KeyFlags.Shift) ? 0x28 : 0x39; break; // ( or 9\n case 61: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _ or -\n case 173: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // + or =\n case 59: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break; // : or ;\n case 186: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break; // : or ;\n case 187: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // + or =\n case 188: code = (flags & KeyFlags.Shift) ? 0x3c : 0x2c; break;\n case 189: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _ or -\n case 190: code = (flags & KeyFlags.Shift) ? 0x3e : 0x2e; break;\n case 191: code = (flags & KeyFlags.Shift) ? 0x3f : 0x2f; break;\n case 222: code = (flags & KeyFlags.Shift) ? 0x22 : 0x27; break;\n default:\n code = key;\n // convert to uppercase for Apple ][\n if (code >= 0x61 && code <= 0x7a) code -= 32;\n // convert to control codes if Ctrl pressed\n if (code >= 65 && code < 65 + 26) {\n if (flags & KeyFlags.Ctrl) code -= 64; // ctrl\n }\n }\n if (code) {\n this.kbdlatch = (code | 0x80) & 0xff;\n }\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n if (controller >= 0 && controller < this.paddleValues.length) {\n this.paddleValues[controller] = value & 0xff;\n }\n }\n\n setPaddleButton(index: number, pressed: boolean): void {\n if (index >= 0 && index < this.paddleButtons.length) {\n this.paddleButtons[index] = pressed;\n }\n }\n\n doLanguageCardIO(address: number) {\n // TODO: require two writes in a row for some things\n switch (address & 0x0f) {\n // Select aux RAM bank 2, write protected.\n case 0x0:\n case 0x4:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 2.\n case 0x1:\n case 0x5:\n this.auxRAMselected = false;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select ROM, write protect aux RAM (either bank).\n case 0x2:\n case 0x6:\n case 0xA:\n case 0xE:\n this.auxRAMselected = false;\n this.writeinhibit = true;\n break;\n // Select aux RAM bank 2, write enabled.\n case 0x3:\n case 0x7:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write protected.\n case 0x8:\n case 0xC:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 1.\n case 0x9:\n case 0xD:\n this.auxRAMselected = false;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write enabled.\n case 0xB:\n case 0xF:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n }\n this.setupLanguageCardConstants();\n return this.floatbus();\n }\n\n setupLanguageCardConstants() {\n // reset language card constants\n if (this.auxRAMbank == 2)\n this.bank2rdoffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2rdoffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n if (this.auxRAMbank == 2)\n this.bank2wroffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2wroffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n }\n\n getDebugCategories() {\n return ['CPU', 'Stack', 'I/O', 'Disk'];\n }\n getDebugInfo(category: string, state: AppleIIState) {\n switch (category) {\n case 'I/O': return \"AUX RAM Bank: \" + state.auxRAMbank +\n \"\\nAUX RAM Select: \" + state.auxRAMselected +\n \"\\nAUX RAM Write: \" + !state.writeinhibit +\n \"\\n\\nGR Switches: \" + printFlags(state.grswitch, [\"Graphics\", \"Mixed\", \"Page2\", \"Hires\"], false) +\n \"\\n\";\n case 'Disk': return (this.slots[6] && this.slots[6]['toLongString'] && this.slots[6]['toLongString']()) || \"\\n\";\n }\n }\n}\n\nconst GR_TXMODE = 1;\nconst GR_MIXMODE = 2;\nconst GR_PAGE1 = 4;\nconst GR_HIRES = 8;\n\ntype AppleGRParams = { dirty: boolean[], grswitch: number, mem: Uint8Array };\n\nvar Apple2Display = function (pixels: Uint32Array, apple: AppleGRParams) {\n var XSIZE = 280;\n var YSIZE = 192;\n var PIXELON = 0xffffffff;\n var PIXELOFF = 0xff000000;\n\n var oldgrmode = -1;\n var textbuf = new Array(40 * 24);\n\n const flashInterval = 250;\n\n // https://mrob.com/pub/xapple2/colors.html\n const loresColor = [\n RGBA(0, 0, 0),\n RGBA(227, 30, 96),\n RGBA(96, 78, 189),\n RGBA(255, 68, 253),\n RGBA(0, 163, 96),\n RGBA(156, 156, 156),\n RGBA(20, 207, 253),\n RGBA(208, 195, 255),\n RGBA(96, 114, 3),\n RGBA(255, 106, 60),\n RGBA(156, 156, 156),\n RGBA(255, 160, 208),\n RGBA(20, 245, 60),\n RGBA(208, 221, 141),\n RGBA(114, 255, 208),\n RGBA(255, 255, 255)\n ];\n\n const text_lut = [\n 0x000, 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380,\n 0x028, 0x0a8, 0x128, 0x1a8, 0x228, 0x2a8, 0x328, 0x3a8,\n 0x050, 0x0d0, 0x150, 0x1d0, 0x250, 0x2d0, 0x350, 0x3d0\n ];\n\n const hires_lut = [\n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400, 0x1800, 0x1c00,\n 0x0080, 0x0480, 0x0880, 0x0c80, 0x1080, 0x1480, 0x1880, 0x1c80,\n 0x0100, 0x0500, 0x0900, 0x0d00, 0x1100, 0x1500, 0x1900, 0x1d00,\n 0x0180, 0x0580, 0x0980, 0x0d80, 0x1180, 0x1580, 0x1980, 0x1d80,\n 0x0200, 0x0600, 0x0a00, 0x0e00, 0x1200, 0x1600, 0x1a00, 0x1e00,\n 0x0280, 0x0680, 0x0a80, 0x0e80, 0x1280, 0x1680, 0x1a80, 0x1e80,\n 0x0300, 0x0700, 0x0b00, 0x0f00, 0x1300, 0x1700, 0x1b00, 0x1f00,\n 0x0380, 0x0780, 0x0b80, 0x0f80, 0x1380, 0x1780, 0x1b80, 0x1f80,\n 0x0028, 0x0428, 0x0828, 0x0c28, 0x1028, 0x1428, 0x1828, 0x1c28,\n 0x00a8, 0x04a8, 0x08a8, 0x0ca8, 0x10a8, 0x14a8, 0x18a8, 0x1ca8,\n 0x0128, 0x0528, 0x0928, 0x0d28, 0x1128, 0x1528, 0x1928, 0x1d28,\n 0x01a8, 0x05a8, 0x09a8, 0x0da8, 0x11a8, 0x15a8, 0x19a8, 0x1da8,\n 0x0228, 0x0628, 0x0a28, 0x0e28, 0x1228, 0x1628, 0x1a28, 0x1e28,\n 0x02a8, 0x06a8, 0x0aa8, 0x0ea8, 0x12a8, 0x16a8, 0x1aa8, 0x1ea8,\n 0x0328, 0x0728, 0x0b28, 0x0f28, 0x1328, 0x1728, 0x1b28, 0x1f28,\n 0x03a8, 0x07a8, 0x0ba8, 0x0fa8, 0x13a8, 0x17a8, 0x1ba8, 0x1fa8,\n 0x0050, 0x0450, 0x0850, 0x0c50, 0x1050, 0x1450, 0x1850, 0x1c50,\n 0x00d0, 0x04d0, 0x08d0, 0x0cd0, 0x10d0, 0x14d0, 0x18d0, 0x1cd0,\n 0x0150, 0x0550, 0x0950, 0x0d50, 0x1150, 0x1550, 0x1950, 0x1d50,\n 0x01d0, 0x05d0, 0x09d0, 0x0dd0, 0x11d0, 0x15d0, 0x19d0, 0x1dd0,\n 0x0250, 0x0650, 0x0a50, 0x0e50, 0x1250, 0x1650, 0x1a50, 0x1e50,\n 0x02d0, 0x06d0, 0x0ad0, 0x0ed0, 0x12d0, 0x16d0, 0x1ad0, 0x1ed0,\n 0x0350, 0x0750, 0x0b50, 0x0f50, 0x1350, 0x1750, 0x1b50, 0x1f50,\n 0x03d0, 0x07d0, 0x0bd0, 0x0fd0, 0x13d0, 0x17d0, 0x1bd0, 0x1fd0,\n // just for floating bus, y >= 192\n 0x0078, 0x0478, 0x0878, 0x0c78, 0x1078, 0x1478, 0x1878, 0x1c78,\n 0x00f8, 0x04f8, 0x08f8, 0x0cf8, 0x10f8, 0x14f8, 0x18f8, 0x1cf8,\n 0x0178, 0x0578, 0x0978, 0x0d78, 0x1178, 0x1578, 0x1978, 0x1d78,\n 0x01f8, 0x05f8, 0x09f8, 0x0df8, 0x11f8, 0x15f8, 0x19f8, 0x1df8,\n 0x0278, 0x0678, 0x0a78, 0x0e78, 0x1278, 0x1678, 0x1a78, 0x1e78,\n 0x02f8, 0x06f8, 0x0af8, 0x0ef8, 0x12f8, 0x16f8, 0x1af8, 0x1ef8,\n 0x0378, 0x0778, 0x0b78, 0x0f78, 0x1378, 0x1778, 0x1b78, 0x1f78,\n 0x03f8, 0x07f8, 0x0bf8, 0x0ff8, 0x13f8, 0x17f8, 0x1bf8, 0x1ff8,\n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400,\n ];\n\n var colors_lut;\n\n /**\n * This function makes the color lookup table for hires mode.\n * We make a table of 1024 * 2 * 7 entries.\n * Why? Because we assume each color byte has 10 bits\n * (8 real bits + 1 on each side) and we need different colors\n * for odd and even addresses (2) and each byte displays 7 pixels.\n */\n {\n colors_lut = new Array(256 * 4 * 2 * 7);\n var i, j;\n var c1, c2, c3 = 15;\n var base = 0;\n\n // go thru odd and even\n for (j = 0; j < 2; j++) {\n // go thru 1024 values\n for (var b1 = 0; b1 < 1024; b1++) {\n // see if the hi bit is set\n if ((b1 & 0x80) == 0) {\n c1 = 3; c2 = 12; // purple & green\n } else {\n c1 = 6; c2 = 9; // blue & orange\n }\n // make a value consisting of:\n // the 8th bit, then bits 0-7, then the 9th bit\n var b = ((b1 & 0x100) >> 8) | ((b1 & 0x7f) << 1) |\n ((b1 & 0x200) >> 1);\n // go through each pixel\n for (i = 0; i < 7; i++) {\n var c;\n // is this pixel lit?\n if (((2 << i) & b) != 0) {\n // are there pixels lit on both sides of this one?\n if (((7 << i) & b) == (7 << i))\n // yes, make it white\n c = 15;\n else\n // no, choose color based on odd/even byte\n // and odd/even pixel column\n c = ((((j ^ i) & 1) == 0) ? c1 : c2);\n } else {\n // are there pixels lit in the previous & next\n // column but none in this?\n if (((5 << i) & b) == (5 << i))\n // color this pixel\n c = ((((j ^ i) & 1) != 0) ? c1 : c2);\n else\n c = 0;\n }\n colors_lut[base] = loresColor[c];\n base++;\n }\n }\n }\n }\n\n function drawLoresChar(x, y, b) {\n var i, base, adr, c;\n base = (y << 3) * XSIZE + x * 7; //(x<<2) + (x<<1) + x\n c = loresColor[b & 0x0f];\n for (i = 0; i < 4; i++) {\n pixels[base] =\n pixels[base + 1] =\n pixels[base + 2] =\n pixels[base + 3] =\n pixels[base + 4] =\n pixels[base + 5] =\n pixels[base + 6] = c;\n base += XSIZE;\n }\n c = loresColor[b >> 4];\n for (i = 0; i < 4; i++) {\n pixels[base] =\n pixels[base + 1] =\n pixels[base + 2] =\n pixels[base + 3] =\n pixels[base + 4] =\n pixels[base + 5] =\n pixels[base + 6] = c;\n base += XSIZE;\n }\n }\n\n function drawTextChar(x, y, b, invert) {\n var base = (y << 3) * XSIZE + x * 7; // (x<<2) + (x<<1) + x\n var on, off;\n if (invert) {\n on = PIXELOFF;\n off = PIXELON;\n } else {\n on = PIXELON;\n off = PIXELOFF;\n }\n\n for (var yy = 0; yy < 8; yy++) {\n var chr = apple2_charset[(b << 3) + yy];\n pixels[base] = ((chr & 64) > 0) ? on : off;\n pixels[base + 1] = ((chr & 32) > 0) ? on : off;\n pixels[base + 2] = ((chr & 16) > 0) ? on : off;\n pixels[base + 3] = ((chr & 8) > 0) ? on : off;\n pixels[base + 4] = ((chr & 4) > 0) ? on : off;\n pixels[base + 5] = ((chr & 2) > 0) ? on : off;\n pixels[base + 6] = ((chr & 1) > 0) ? on : off;\n base += XSIZE;\n }\n }\n\n this.getAddressForScanline = function (y: number): number {\n var base = hires_lut[y];\n if ((apple.grswitch & GR_HIRES) && (y < 160 || !(apple.grswitch & GR_MIXMODE)))\n base = base | ((apple.grswitch & GR_PAGE1) ? 0x4000 : 0x2000);\n else\n base = (base & 0x3ff) | ((apple.grswitch & GR_PAGE1) ? 0x800 : 0x400);\n return base;\n }\n\n function drawHiresLines(y, maxy) {\n var yb = y * XSIZE;\n for (; y < maxy; y++) {\n var base = hires_lut[y] + (((apple.grswitch & GR_PAGE1) != 0) ? 0x4000 : 0x2000);\n if (!apple.dirty[base >> 7]) {\n yb += XSIZE;\n continue;\n }\n var c1, c2;\n var b = 0;\n var b1 = apple.mem[base] & 0xff;\n for (var x1 = 0; x1 < 20; x1++) {\n var b2 = apple.mem[base + 1] & 0xff;\n var b3 = apple.mem[base + 2] & 0xff;\n var d1 = (((b & 0x40) << 2) | b1 | b2 << 9) & 0x3ff;\n for (var i = 0; i < 7; i++)\n pixels[yb + i] = colors_lut[d1 * 7 + i];\n var d2 = (((b1 & 0x40) << 2) | b2 | b3 << 9) & 0x3ff;\n for (var i = 0; i < 7; i++)\n pixels[yb + 7 + i] = colors_lut[d2 * 7 + 7168 + i];\n yb += 14;\n base += 2;\n b = b2;\n b1 = b3;\n }\n }\n }\n\n function drawLoresLine(y) {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x = 0; x < 40; x++) {\n var b = apple.mem[base + x] & 0xff;\n // if the char. changed, draw it\n if (b != textbuf[y * 40 + x]) {\n drawLoresChar(x, y, b);\n textbuf[y * 40 + x] = b;\n }\n }\n }\n\n function drawTextLine(y, flash) {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x = 0; x < 40; x++) {\n var b = apple.mem[base + x] & 0xff;\n var invert;\n // invert flash characters 1/2 of the time\n if (b >= 0x80) {\n invert = false;\n } else if (b >= 0x40) {\n invert = flash;\n if (flash)\n b -= 0x40;\n else\n b += 0x40;\n } else\n invert = true;\n // if the char. changed, draw it\n if (b != textbuf[y * 40 + x]) {\n drawTextChar(x, y, b & 0x7f, invert);\n textbuf[y * 40 + x] = b;\n }\n }\n }\n\n this.updateScreen = function (totalrepaint) {\n var y;\n var flash = (new Date().getTime() % (flashInterval << 1)) > flashInterval;\n\n // if graphics mode changed, repaint whole screen\n if (apple.grswitch != oldgrmode) {\n oldgrmode = apple.grswitch;\n totalrepaint = true;\n }\n if (totalrepaint) {\n // clear textbuf if in text mode\n if ((apple.grswitch & GR_TXMODE) != 0 || (apple.grswitch & GR_MIXMODE) != 0) {\n for (y = 0; y < 24; y++)\n for (var x = 0; x < 40; x++)\n textbuf[y * 40 + x] = -1;\n }\n for (var i = 0; i < apple.dirty.length; i++)\n apple.dirty[i] = true;\n }\n\n // first, draw top part of window\n if ((apple.grswitch & GR_TXMODE) != 0) {\n for (y = 0; y < 20; y++)\n drawTextLine(y, flash);\n } else {\n if ((apple.grswitch & GR_HIRES) != 0)\n drawHiresLines(0, 160);\n else\n for (y = 0; y < 20; y++)\n drawLoresLine(y);\n }\n\n // now do mixed part of window\n if ((apple.grswitch & GR_TXMODE) != 0 || (apple.grswitch & GR_MIXMODE) != 0) {\n for (y = 20; y < 24; y++)\n drawTextLine(y, flash);\n } else {\n if ((apple.grswitch & GR_HIRES) != 0)\n drawHiresLines(160, 192);\n else\n for (y = 20; y < 24; y++)\n drawLoresLine(y);\n }\n for (var i = 0; i < apple.dirty.length; i++)\n apple.dirty[i] = false;\n }\n\n this.invalidate = function () {\n oldgrmode = -1;\n }\n}\n\n/*exported apple2_charset */\n\nconst apple2_charset = [\n 0x00, 0x1c, 0x22, 0x2a, 0x2e, 0x2c, 0x20, 0x1e,\n 0x00, 0x08, 0x14, 0x22, 0x22, 0x3e, 0x22, 0x22,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x22, 0x22, 0x3c,\n 0x00, 0x1c, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3c,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x3e,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1e, 0x20, 0x20, 0x20, 0x26, 0x22, 0x1e,\n 0x00, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x22,\n 0x00, 0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22,\n 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3e,\n 0x00, 0x22, 0x36, 0x2a, 0x2a, 0x22, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x32, 0x2a, 0x26, 0x22, 0x22,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x2a, 0x24, 0x1a,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x28, 0x24, 0x22,\n 0x00, 0x1c, 0x22, 0x20, 0x1c, 0x02, 0x22, 0x1c,\n 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x14, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e,\n 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,\n 0x00, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e,\n 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08,\n 0x00, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x14, 0x14, 0x3e, 0x14, 0x3e, 0x14, 0x14,\n 0x00, 0x08, 0x1e, 0x28, 0x1c, 0x0a, 0x3c, 0x08,\n 0x00, 0x30, 0x32, 0x04, 0x08, 0x10, 0x26, 0x06,\n 0x00, 0x10, 0x28, 0x28, 0x10, 0x2a, 0x24, 0x1a,\n 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08,\n 0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08,\n 0x00, 0x08, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x08,\n 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,\n 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,\n 0x00, 0x1c, 0x22, 0x26, 0x2a, 0x32, 0x22, 0x1c,\n 0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x1c, 0x22, 0x02, 0x0c, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x02, 0x04, 0x0c, 0x02, 0x22, 0x1c,\n 0x00, 0x04, 0x0c, 0x14, 0x24, 0x3e, 0x04, 0x04,\n 0x00, 0x3e, 0x20, 0x3c, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x0e, 0x10, 0x20, 0x3c, 0x22, 0x22, 0x1c,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10,\n 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c,\n 0x00, 0x1c, 0x22, 0x22, 0x1e, 0x02, 0x04, 0x38,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04,\n 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00,\n 0x00, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10,\n 0x00, 0x1c, 0x22, 0x04, 0x08, 0x08, 0x00, 0x08,\n 0x80, 0x9c, 0xa2, 0xaa, 0xae, 0xac, 0xa0, 0x9e,\n 0x80, 0x88, 0x94, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa2, 0xa2, 0xbc,\n 0x80, 0x9c, 0xa2, 0xa0, 0xa0, 0xa0, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbe,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9e, 0xa0, 0xa0, 0xa0, 0xa6, 0xa2, 0x9e,\n 0x80, 0xa2, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2, 0xa2,\n 0x80, 0x9c, 0x88, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x82, 0x82, 0x82, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa4, 0xa8, 0xb0, 0xa8, 0xa4, 0xa2,\n 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xbe,\n 0x80, 0xa2, 0xb6, 0xaa, 0xaa, 0xa2, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0xb2, 0xaa, 0xa6, 0xa2, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xaa, 0xa4, 0x9a,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa8, 0xa4, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa0, 0x9c, 0x82, 0xa2, 0x9c,\n 0x80, 0xbe, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x94, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xaa, 0xaa, 0xb6, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x94, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xbe,\n 0x80, 0x80, 0xa0, 0x90, 0x88, 0x84, 0x82, 0x80,\n 0x80, 0xbe, 0x86, 0x86, 0x86, 0x86, 0x86, 0xbe,\n 0x80, 0x80, 0x80, 0x88, 0x94, 0xa2, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xbe,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88,\n 0x80, 0x94, 0x94, 0x94, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x94, 0x94, 0xbe, 0x94, 0xbe, 0x94, 0x94,\n 0x80, 0x88, 0x9e, 0xa8, 0x9c, 0x8a, 0xbc, 0x88,\n 0x80, 0xb0, 0xb2, 0x84, 0x88, 0x90, 0xa6, 0x86,\n 0x80, 0x90, 0xa8, 0xa8, 0x90, 0xaa, 0xa4, 0x9a,\n 0x80, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x90, 0xa0, 0xa0, 0xa0, 0x90, 0x88,\n 0x80, 0x88, 0x84, 0x82, 0x82, 0x82, 0x84, 0x88,\n 0x80, 0x88, 0xaa, 0x9c, 0x88, 0x9c, 0xaa, 0x88,\n 0x80, 0x80, 0x88, 0x88, 0xbe, 0x88, 0x88, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x80, 0x80, 0x80, 0xbe, 0x80, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x88,\n 0x80, 0x80, 0x82, 0x84, 0x88, 0x90, 0xa0, 0x80,\n 0x80, 0x9c, 0xa2, 0xa6, 0xaa, 0xb2, 0xa2, 0x9c,\n 0x80, 0x88, 0x98, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x9c, 0xa2, 0x82, 0x8c, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0x82, 0x84, 0x8c, 0x82, 0xa2, 0x9c,\n 0x80, 0x84, 0x8c, 0x94, 0xa4, 0xbe, 0x84, 0x84,\n 0x80, 0xbe, 0xa0, 0xbc, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0x8e, 0x90, 0xa0, 0xbc, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0x90, 0x90,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9c, 0xa2, 0xa2, 0x9c,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9e, 0x82, 0x84, 0xb8,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x84, 0x88, 0x90, 0xa0, 0x90, 0x88, 0x84,\n 0x80, 0x80, 0x80, 0xbe, 0x80, 0xbe, 0x80, 0x80,\n 0x80, 0x90, 0x88, 0x84, 0x82, 0x84, 0x88, 0x90,\n 0x80, 0x9c, 0xa2, 0x84, 0x88, 0x88, 0x80, 0x88,\n 0x00, 0x1c, 0x22, 0x2a, 0x2e, 0x2c, 0x20, 0x1e,\n 0x00, 0x08, 0x14, 0x22, 0x22, 0x3e, 0x22, 0x22,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x22, 0x22, 0x3c,\n 0x00, 0x1c, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3c,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x3e,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1e, 0x20, 0x20, 0x20, 0x26, 0x22, 0x1e,\n 0x00, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x22,\n 0x00, 0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22,\n 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3e,\n 0x00, 0x22, 0x36, 0x2a, 0x2a, 0x22, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x32, 0x2a, 0x26, 0x22, 0x22,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x2a, 0x24, 0x1a,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x28, 0x24, 0x22,\n 0x00, 0x1c, 0x22, 0x20, 0x1c, 0x02, 0x22, 0x1c,\n 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x14, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e,\n 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,\n 0x00, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e,\n 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08,\n 0x00, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x14, 0x14, 0x3e, 0x14, 0x3e, 0x14, 0x14,\n 0x00, 0x08, 0x1e, 0x28, 0x1c, 0x0a, 0x3c, 0x08,\n 0x00, 0x30, 0x32, 0x04, 0x08, 0x10, 0x26, 0x06,\n 0x00, 0x10, 0x28, 0x28, 0x10, 0x2a, 0x24, 0x1a,\n 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08,\n 0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08,\n 0x00, 0x08, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x08,\n 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,\n 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,\n 0x00, 0x1c, 0x22, 0x26, 0x2a, 0x32, 0x22, 0x1c,\n 0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x1c, 0x22, 0x02, 0x0c, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x02, 0x04, 0x0c, 0x02, 0x22, 0x1c,\n 0x00, 0x04, 0x0c, 0x14, 0x24, 0x3e, 0x04, 0x04,\n 0x00, 0x3e, 0x20, 0x3c, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x0e, 0x10, 0x20, 0x3c, 0x22, 0x22, 0x1c,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10,\n 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c,\n 0x00, 0x1c, 0x22, 0x22, 0x1e, 0x02, 0x04, 0x38,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04,\n 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00,\n 0x00, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10,\n 0x00, 0x1c, 0x22, 0x04, 0x08, 0x08, 0x00, 0x08,\n 0x80, 0x9c, 0xa2, 0xaa, 0xae, 0xac, 0xa0, 0x9e,\n 0x80, 0x88, 0x94, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa2, 0xa2, 0xbc,\n 0x80, 0x9c, 0xa2, 0xa0, 0xa0, 0xa0, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbe,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9e, 0xa0, 0xa0, 0xa0, 0xa6, 0xa2, 0x9e,\n 0x80, 0xa2, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2, 0xa2,\n 0x80, 0x9c, 0x88, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x82, 0x82, 0x82, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa4, 0xa8, 0xb0, 0xa8, 0xa4, 0xa2,\n 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xbe,\n 0x80, 0xa2, 0xb6, 0xaa, 0xaa, 0xa2, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0xb2, 0xaa, 0xa6, 0xa2, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xaa, 0xa4, 0x9a,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa8, 0xa4, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa0, 0x9c, 0x82, 0xa2, 0x9c,\n 0x80, 0xbe, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x94, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xaa, 0xaa, 0xb6, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x94, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xbe,\n 0x80, 0x80, 0xa0, 0x90, 0x88, 0x84, 0x82, 0x80,\n 0x80, 0xbe, 0x86, 0x86, 0x86, 0x86, 0x86, 0xbe,\n 0x80, 0x80, 0x80, 0x88, 0x94, 0xa2, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xbe,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88,\n 0x80, 0x94, 0x94, 0x94, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x94, 0x94, 0xbe, 0x94, 0xbe, 0x94, 0x94,\n 0x80, 0x88, 0x9e, 0xa8, 0x9c, 0x8a, 0xbc, 0x88,\n 0x80, 0xb0, 0xb2, 0x84, 0x88, 0x90, 0xa6, 0x86,\n 0x80, 0x90, 0xa8, 0xa8, 0x90, 0xaa, 0xa4, 0x9a,\n 0x80, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x90, 0xa0, 0xa0, 0xa0, 0x90, 0x88,\n 0x80, 0x88, 0x84, 0x82, 0x82, 0x82, 0x84, 0x88,\n 0x80, 0x88, 0xaa, 0x9c, 0x88, 0x9c, 0xaa, 0x88,\n 0x80, 0x80, 0x88, 0x88, 0xbe, 0x88, 0x88, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x80, 0x80, 0x80, 0xbe, 0x80, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x88,\n 0x80, 0x80, 0x82, 0x84, 0x88, 0x90, 0xa0, 0x80,\n 0x80, 0x9c, 0xa2, 0xa6, 0xaa, 0xb2, 0xa2, 0x9c,\n 0x80, 0x88, 0x98, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x9c, 0xa2, 0x82, 0x8c, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0x82, 0x84, 0x8c, 0x82, 0xa2, 0x9c,\n 0x80, 0x84, 0x8c, 0x94, 0xa4, 0xbe, 0x84, 0x84,\n 0x80, 0xbe, 0xa0, 0xbc, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0x8e, 0x90, 0xa0, 0xbc, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0x90, 0x90,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9c, 0xa2, 0xa2, 0x9c,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9e, 0x82, 0x84, 0xb8,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x84, 0x88, 0x90, 0xa0, 0x90, 0x88, 0x84,\n 0x80, 0x80, 0x80, 0xbe, 0x80, 0xbe, 0x80, 0x80,\n 0x80, 0x90, 0x88, 0x84, 0x82, 0x84, 0x88, 0x90,\n 0x80, 0x9c, 0xa2, 0x84, 0x88, 0x88, 0x80, 0x88\n];\n\n// public domain ROM (http://a2go.applearchives.com/roms/)\nconst APPLEIIGO_LZG = `TFpHAAAwAAAABYxwdy2NARUZHjRBUFBMRUlJR08gUk9NMS4wADQfNB80HzQfNB80HzQfNB80HDQGIADgGR97GR+uNB80Hxk/azQfNB8ZP2UZH4s0HzQfNB80HzQfNB80HzQfNB80HzQfNB80HTQPoCA0HCAgoBkOKAEQEAwFEw8GFCAODxQgARYBCQwBAgwFGRAoxs/SoM3P0sWgyc4eA83B1MnPzqDQzMXB08Wgw8zJw8ugHgigGQgo1MjFoMHQHhnJycfPoMzPNIHCxczP1x4cNAoZHvhMA+AgWPyiJ70A352ABMoQ9x4DMN+dAAUewx5OGQUDYB4DBh7DkB4ZBx4DTEDgNEEZP7s0HzQfNB80HzQfNB80HzQfNB80HzQfNB80HzQfNB80HzQfNB80HzQfNB80HjQYyc6w7snJkOrJzPDm0OjqNAtISikDCQSFKWgpGJACaX+FKAoKBSiFKGAZHnQApSUgwftlIBkdSzQVpSJIICT8pSiFKqUphSukIYhoaQHFI7ANHk6xKJEqiBD5MOGgACCe/LCGpCSpoJEoyMQhkPkZHsc0G6QksShIKT8JQJEoaGw4GRMbIAz9IKX7NKHJm/DzGRyNNAYgjv2lMyDt/aIBivDzyiA1/cmV0AKxKMngkAIp350AAsmN0LIgnPypjdBbpD2mPB4nIED5oACprUzt/RlfdjQfNB80HzQfNB80HzQfNB80HzQfNB80HjQFqQCFHKXmhRugAIQapRyRGiB+9MjQ9uYbpRspH9DuYIXihuCE4UgpwIUmSkoFJoUmaIUnCgoKJic0QmYmpScpHwXmhSeKwADwBaAjaQTI6Qew+4Tlqr259IUwmEql5IUcsBUcACM0BArJwBAGpRxJf4UcGf7aNB80HzQfNB80HzQfNBw0CkoIIEf4KKkPkAJp4IUusSZFMCUuUSaRJmAgAPjELLARyCAO+JD2aQFIHghoxS2Q9WCgL9ACoCeELaAnqQCFMCAo+IgQ9mAVBQR+JxUGBH4mCgoZgjRgpTAYaQMpD4UwCjQBBTCFMBln35AESjQBKQ8Za/CoSpAJarAQyaLwDCmHSqq9YvkgefjQBKCAqQCqvab5hS4pA4UvmCmPqpigA+CK8AtKkAhKSgkgiND6yIjQ8hmfOzQfNB80FNgghP4gL/sgk/4gif6tWMCtWsCtXcCtX8Ct/88sEMDYIDr/IGD7qQCFAKnGhQFsGR5vNB0VAxNs3dvHzxkKDa1wwKAA6uq9ZMAQBMjQ+IhgqQCFSK1WwK1UwK1RwKkA8AutUMCtU8AgNvipFIUiHhYgqSiFIakYhSOpF4UlTCL8IFj8oAm5CPuZDgSI0PdgrfMDSaWN9ANgyY3QGKwAwBATwJPQDywQwB5E+8CD8AMeBEz9+xUdB/gVEAf4yYfQEqlAIKj8oMCpDDTBrTDAiND1YKQkkSjmJKUkxSGwZmDJoLDvqBDsyY3wWsmKNGGI0MnGJBDopSGFJMYkpSLFJbALxiUVHAf4AEggJPwgnvygAGhpAMUjkPCwyqUihSWgAIQk8OSpAIUk5h4+HhC2xiUVHQf4FQYH+DhI6QHQ/Gg0gfZg5kLQAuZDpTzFPqU95T/mPB4GPRl99BUcB/jmTtAC5k8sAMAQ9ZEorQDALBDAYBUKB/j+YKUySKn/hTK9AAIg7f1oHoHJiPAdyZjwCuD4kAMgOv/o0BOp3B4VFQoH+P4VHgf4NBsASBmiWCDl/WgpDwmwybqQAmkGbDYAyaCQAiUyhDVIIHj7aKQ1GTEvQBkKBRkLGLE8kUIgtPyQ9xm+YTQBoD/QAqD/hDIZYlI+ojigG9AIHoI2oPClPikP8AYJwKAA8AKp/ZQAlQFg6upMFR8eQzQHqYdM7f2lSEilRaZGpEcZbhYZ34Q0GzQB9QP7A2L6Yvo=`;\n\n///\n/// Disk II\n///\n\nconst NUM_DRIVES = 2;\nconst NUM_TRACKS = 35;\nconst TRACK_SIZE = 0x1880;\nconst SECTOR_SIZE = 383;\n\nconst DISKII_PROM = [\n 0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C\n , 0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10\n , 0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD\n , 0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0\n , 0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56,\n /*0x20,0xA8,0xFC,*/0xa9, 0x00, 0xea, 0x88\n , 0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C\n , 0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3\n , 0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0\n , 0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD\n , 0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40\n , 0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59\n , 0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10\n , 0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB\n , 0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00\n , 0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5\n , 0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00\n];\n\nclass DiskIIState {\n data: Uint8Array[];\n track: number = 0;\n read_mode: boolean = true;\n write_protect: boolean = false;\n motor: boolean = false;\n track_index: number = 0;\n}\n\nclass DiskII extends DiskIIState implements SlotDevice, SavesState {\n emu: AppleII;\n track_data: Uint8Array;\n\n constructor(emu: AppleII, image: Uint8Array) {\n super();\n this.emu = emu;\n this.data = new Array(NUM_TRACKS);\n for (var i = 0; i < NUM_TRACKS; i++) {\n var ofs = i * 16 * 256;\n this.data[i] = nibblizeTrack(254, i, image.slice(ofs, ofs + 16 * 256));\n }\n }\n\n saveState(): DiskIIState {\n var s = {\n data: new Array(NUM_TRACKS),\n track: this.track,\n read_mode: this.read_mode,\n write_protect: this.write_protect,\n motor: this.motor,\n track_index: this.track_index\n };\n for (var i = 0; i < NUM_TRACKS; i++)\n s.data[i] = this.data[i].slice(0);\n return s;\n }\n\n loadState(s: DiskIIState) {\n for (var i = 0; i < NUM_TRACKS; i++)\n this.data[i].set(s.data[i]);\n this.track = s.track;\n this.read_mode = s.read_mode;\n this.write_protect = s.write_protect;\n this.motor = s.motor;\n this.track_index = s.track_index;\n if ((this.track & 1) == 0)\n this.track_data = this.data[this.track >> 1];\n else\n this.track_data = null;\n }\n\n toLongString() {\n return \"Track: \" + (this.track / 2) +\n \"\\nOffset: \" + (this.track_index) +\n \"\\nMode: \" + (this.read_mode ? \"READ\" : \"WRITE\") +\n \"\\nMotor: \" + this.motor +\n \"\\nData: \" + (this.track_data ? hex(this.track_data[this.track_index]) : '-') +\n \"\\n\";\n }\n\n read_latch(): number {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data) {\n return (this.track_data[this.track_index] & 0xff);\n } else\n return this.emu.floatbus() | 0x80;\n }\n\n write_latch(value: number) {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data != null)\n this.track_data[this.track_index] = value;\n }\n\n readROM(address) { return DISKII_PROM[address]; }\n readConst(address) { return DISKII_PROM[address]; }\n read(address) { return this.doIO(address, 0); }\n write(address, value) { this.doIO(address, value); }\n\n doIO(address, value): number {\n switch (address & 0x0f) {\n /*\n * Turn motor phases 0 to 3 on. Turning on the previous phase + 1\n * increments the track position, turning on the previous phase - 1\n * decrements the track position. In this scheme phase 0 and 3 are\n * considered to be adjacent. The previous phase number can be\n * computed as the track number % 4.\n */\n case 0x1:\n case 0x3:\n case 0x5:\n case 0x7:\n var phase, lastphase, new_track;\n new_track = this.track;\n phase = (address >> 1) & 3;\n\n // if new phase is even and current phase is odd\n if (phase == ((new_track - 1) & 3)) {\n if (new_track > 0)\n new_track--;\n } else\n if (phase == ((new_track + 1) & 3)) {\n if (new_track < NUM_TRACKS * 2 - 1)\n new_track++;\n }\n if ((new_track & 1) == 0) {\n this.track_data = this.data[new_track >> 1];\n console.log('track', new_track / 2);\n } else\n this.track_data = null;\n this.track = new_track;\n break;\n /*\n * Turn drive motor off.\n */\n case 0x8:\n this.motor = false;\n break;\n /*\n * Turn drive motor on.\n */\n case 0x9:\n this.motor = true;\n break;\n /*\n * Select drive 1.\n */\n case 0xa:\n //drive = 0;\n break;\n /*\n * Select drive 2.\n */\n case 0xb:\n //drive = 1;\n break;\n /*\n * Select write mode.\n */\n case 0xf:\n this.read_mode = false;\n /*\n * Read a disk byte if read mode is active.\n */\n case 0xC:\n if (this.read_mode)\n return this.read_latch();\n break;\n /*\n * Select read mode and read the write protect status.\n */\n case 0xE:\n this.read_mode = true;\n /*\n * Write a disk byte if write mode is active and the disk is not\n * write protected.\n */\n case 0xD:\n if (value >= 0 && !this.read_mode && !this.write_protect)\n this.write_latch(value);\n /*\n * Read the write protect status only.\n */\n return this.write_protect ? 0x80 : 0x00;\n }\n return this.emu.floatbus();\n }\n\n}\n\n/* --------------- TRACK CONVERSION ROUTINES ---------------------- */\n\n/*\n * Normal byte (lower six bits only) -> disk byte translation table.\n */\nconst byte_translation = [\n 0x96, 0x97, 0x9a, 0x9b, 0x9d, 0x9e, 0x9f, 0xa6,\n 0xa7, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb2, 0xb3,\n 0xb4, 0xb5, 0xb6, 0xb7, 0xb9, 0xba, 0xbb, 0xbc,\n 0xbd, 0xbe, 0xbf, 0xcb, 0xcd, 0xce, 0xcf, 0xd3,\n 0xd6, 0xd7, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,\n 0xdf, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xeb, 0xec,\n 0xed, 0xee, 0xef, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,\n 0xf7, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n];\n\n/*\n * Sector skewing table.\n */\n\nconst skewing_table = [\n 0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15\n];\n\n/*\n * Encode a 256-byte sector as SECTOR_SIZE disk bytes as follows:\n *\n * 14 sync bytes\n * 3 address header bytes\n * 8 address block bytes\n * 3 address trailer bytes\n * 6 sync bytes\n * 3 data header bytes\n * 343 data block bytes\n * 3 data trailer bytes\n */\nfunction nibblizeSector(vol, trk, sector, inn, in_ofs, out, i) {\n var loop, checksum, prev_value, value;\n var sector_buffer = new Uint8Array(258);\n value = 0;\n\n /*\n * Step 1: write 6 sync bytes (0xff's). Normally these would be\n * written as 10-bit bytes with two extra zero bits, but for the\n * purpose of emulation normal 8-bit bytes will do, since the\n * emulated drive will always be in sync.\n */\n for (loop = 0; loop < 14; loop++)\n out[i++] = 0xff;\n\n /*\n * Step 2: write the 3-byte address header (0xd5 0xaa 0x96).\n */\n out[i++] = 0xd5;\n out[i++] = 0xaa;\n out[i++] = 0x96;\n\n /*\n * Step 3: write the address block. Use 4-and-4 encoding to convert\n * the volume, track and sector and checksum into 2 disk bytes each.\n * The checksum is a simple exclusive OR of the first three values.\n */\n out[i++] = ((vol >> 1) | 0xaa);\n out[i++] = (vol | 0xaa);\n checksum = vol;\n out[i++] = ((trk >> 1) | 0xaa);\n out[i++] = (trk | 0xaa);\n checksum ^= trk;\n out[i++] = ((sector >> 1) | 0xaa);\n out[i++] = (sector | 0xaa);\n checksum ^= sector;\n out[i++] = ((checksum >> 1) | 0xaa);\n out[i++] = (checksum | 0xaa);\n\n /*\n * Step 4: write the 3-byte address trailer (0xde 0xaa 0xeb).\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n /*\n * Step 5: write another 6 sync bytes.\n */\n for (loop = 0; loop < 6; loop++)\n out[i++] = (0xff);\n\n /*\n * Step 6: write the 3-byte data header.\n */\n out[i++] = (0xd5);\n out[i++] = (0xaa);\n out[i++] = (0xad);\n\n /*\n * Step 7: read the next 256-byte sector from the old disk image file,\n * and add two zero bytes to bring the number of bytes up to a multiple\n * of 3.\n */\n for (loop = 0; loop < 256; loop++)\n sector_buffer[loop] = inn[loop + in_ofs] & 0xff;\n sector_buffer[256] = 0;\n sector_buffer[257] = 0;\n\n /*\n * Step 8: write the first 86 disk bytes of the data block, which\n * encodes the bottom two bits of each sector byte into six-bit\n * values as follows:\n *\n * disk byte n, bit 0 = sector byte n, bit 1\n * disk byte n, bit 1 = sector byte n, bit 0\n * disk byte n, bit 2 = sector byte n + 86, bit 1\n * disk byte n, bit 3 = sector byte n + 86, bit 0\n * disk byte n, bit 4 = sector byte n + 172, bit 1\n * disk byte n, bit 5 = sector byte n + 172, bit 0\n *\n * The scheme allows each pair of bits to be shifted to the right out\n * of the disk byte, then shifted to the left into the sector byte.\n *\n * Before the 6-bit value is translated to a disk byte, it is exclusive\n * ORed with the previous 6-bit value, hence the values written are\n * really a running checksum.\n */\n prev_value = 0;\n for (loop = 0; loop < 86; loop++) {\n value = (sector_buffer[loop] & 0x01) << 1;\n value |= (sector_buffer[loop] & 0x02) >> 1;\n value |= (sector_buffer[loop + 86] & 0x01) << 3;\n value |= (sector_buffer[loop + 86] & 0x02) << 1;\n value |= (sector_buffer[loop + 172] & 0x01) << 5;\n value |= (sector_buffer[loop + 172] & 0x02) << 3;\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n }\n\n /*\n * Step 9: write the last 256 disk bytes of the data block, which\n * encodes the top six bits of each sector byte. Again, each value\n * is exclusive ORed with the previous value to create a running\n * checksum (the first value is exclusive ORed with the last value of\n * the previous step).\n */\n\n for (loop = 0; loop < 256; loop++) {\n value = (sector_buffer[loop] >> 2);\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n }\n\n /*\n * Step 10: write the last value as the checksum.\n */\n out[i++] = (byte_translation[value]);\n\n /*\n * Step 11: write the 3-byte data trailer.\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n}\n\nfunction nibblizeTrack(vol, trk, inn) {\n var out = new Uint8Array(TRACK_SIZE);\n var out_pos = 0;\n for (var sector = 0; sector < 16; sector++) {\n nibblizeSector(vol, trk, sector,\n inn, skewing_table[sector] << 8,\n out, out_pos);\n out_pos += SECTOR_SIZE;\n }\n while (out_pos < TRACK_SIZE)\n out[out_pos++] = (0xff);\n return out;\n}\n", "\nimport { Platform, Preset, getOpcodeMetadata_6502, getToolForFilename_6502 } from \"../common/baseplatform\";\nimport { getToolForFilename_apple2 } from \"../common/toolselect\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { AppleII } from \"../machine/apple2\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { CodeAnalyzer_apple2 } from \"../common/analysis\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst APPLE2_PRESETS: Preset[] = [\n { id: 'sieve.c', name: 'Sieve', category: \"C\" },\n { id: 'keyboardtest.c', name: 'Keyboard Test' },\n { id: 'mandel.c', name: 'Mandelbrot' },\n { id: 'tgidemo.c', name: 'TGI Graphics Demo' },\n { id: 'icepiano.c', name: 'Ice Piano (Hires Demo)' },\n { id: 'Eliza.c', name: 'Eliza' },\n { id: 'siegegame.c', name: 'Siege Game' },\n { id: 'cosmic.c', name: 'Cosmic Impalas' },\n { id: 'farmhouse.c', name: \"Farmhouse Adventure\" },\n { id: 'yum.c', name: \"Yum Dice Game\" },\n { id: 'lz4test.c', name: \"LZ4 Decompressor\" },\n { id: 'hgrtest.a', name: \"HGR Test\", category: \"Assembly Language\" },\n { id: 'conway.a', name: \"Conway's Game of Life\" },\n { id: 'lz4fh.a', name: \"LZ4FH Decompressor\" },\n { id: 'deltamod.dasm', name: \"Delta Modulation Audio\" },\n { id: 'paddles.dasm', name: \"Paddles/Joystick\" },\n // {id:'zap.dasm', name:\"ZAP!\"},\n // {id:'tb_6502.s', name:'Tom Bombem (assembler game)'},\n { id: 'dos33bin.a', name: \"DOS 3.3 Binary\" },\n { id: 'applesinglebin.a', name: \"AppleSingle Binary\" },\n];\n\n/// MAME support\n\nclass Apple2MAMEPlatform extends BaseMAME6502Platform implements Platform {\n\n start() {\n this.startModule(this.mainElement, {\n jsfile: 'mame8bitpc.js',\n biosfile: ['apple2e.zip'],\n //cfgfile:'nes.cfg',\n driver: 'apple2e',\n width: 280 * 2,\n height: 192 * 2,\n //romfn:'/emulator/cart.nes',\n //romsize:romSize,\n //romdata:new lzgmini().decode(lzgRom).slice(0, romSize),\n preInit: function (_self) {\n },\n });\n }\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtensions() { return [\".c\", \".cpp\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n getToolForFilename = getToolForFilename_apple2;\n\n getPresets() { return APPLE2_PRESETS; }\n\n loadROM(title, data) {\n this.loadROMFile(data);\n // TODO\n }\n}\n\n///\n\nclass NewApple2Platform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new AppleII(); }\n getPresets() { return APPLE2_PRESETS; }\n getDefaultExtensions() { return [...super.getDefaultExtensions(), \".lnk\"]; }\n readAddress(a) { return this.machine.readConst(a); }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function () {\n return {\n main: [\n { name: 'Zero Page RAM', start: 0x0, size: 0x100, type: 'ram' },\n { name: 'Line Input RAM', start: 0x200, size: 0x100, type: 'ram' },\n { name: 'RAM', start: 0x300, size: 0xc0, type: 'ram' },\n { name: 'DOS Vectors', start: 0x3c0, size: 0x40, type: 'ram' },\n { name: 'Text/Lores Page 1', start: 0x400, size: 0x400, type: 'ram' },\n { name: 'RAM', start: 0x800, size: 0x1800, type: 'ram' },\n { name: 'Hires Page 1', start: 0x2000, size: 0x2000, type: 'ram' },\n { name: 'Hires Page 2', start: 0x4000, size: 0x2000, type: 'ram' },\n { name: 'RAM', start: 0x6000, size: 0x6000, type: 'ram' },\n { name: 'I/O', start: 0xc000, size: 0x1000, type: 'io' },\n { name: 'ROM', start: 0xd000, size: 0x3000, type: 'rom' },\n ]\n }\n };\n getROMExtension(rom: Uint8Array) {\n if (rom && rom.length == 35 * 16 * 256) return \".dsk\"; // DSK image\n return \".bin\";\n };\n getToolForFilename = getToolForFilename_apple2;\n /*\n newCodeAnalyzer() {\n return new CodeAnalyzer_apple2(this);\n }\n getOriginPC() {\n return 0x803; // TODO?\n }\n */\n}\n\nPLATFORMS['apple2.mame'] = Apple2MAMEPlatform;\nPLATFORMS['apple2'] = NewApple2Platform;\n"], - "mappings": "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,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,GAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,GAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAExD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,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GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,GAAM,EAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,GAAM,EAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,I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", + "sourcesContent": ["import { MOS6502, MOS6502State } from \"../common/cpu/MOS6502\";\nimport { Bus, BasicScanlineMachine, SavesState, AcceptsBIOS, AcceptsPaddleInput } from \"../common/devices\";\nimport { KeyFlags } from \"../common/emu\"; // TODO\nimport { hex, lzgmini, stringToByteArray, RGBA, printFlags, arrayCompare } from \"../common/util\";\n\ninterface AppleIIStateBase {\n ram: Uint8Array;\n soundstate: number;\n auxRAMselected, writeinhibit: boolean;\n auxRAMbank: number;\n}\n\ninterface AppleIIControlsState {\n inputs: Uint8Array; // unused?\n kbdlatch: number;\n}\n\ninterface AppleIIState extends AppleIIStateBase, AppleIIControlsState {\n c: MOS6502State;\n grswitch: number;\n slots: SlotDevice[];\n paddleValues: number[];\n paddleButtons: boolean[];\n}\n\ninterface SlotDevice extends Bus {\n readROM(address: number): number;\n readConst(address: number): number;\n}\n\nexport class AppleII extends BasicScanlineMachine implements AcceptsBIOS, AcceptsPaddleInput {\n\n // approx: http://www.cs.columbia.edu/~sedwards/apple2fpga/\n cpuFrequency = 1022727;\n sampleRate = this.cpuFrequency;\n cpuCyclesPerLine = 65;\n cpuCyclesPerFrame = this.cpuCyclesPerLine * 262;\n canvasWidth = 280;\n numVisibleScanlines = 192;\n numTotalScanlines = 262;\n defaultROMSize = 0x13000; // we'll never need one that big, but...\n cpuCyclesPaddleUnit = 11; // ~11 cycles per paddle unit\n cpuCyclesPaddleMax = 255 * this.cpuCyclesPaddleUnit;\n\n // these are set later\n LOAD_BASE = 0;\n HDR_SIZE = 0;\n\n ram = new Uint8Array(0x13000); // 64K + 16K LC RAM - 4K hardware + 12K ROM\n bios: Uint8Array;\n cpu = new MOS6502();\n grdirty = new Array(0xc000 >> 7);\n grparams = { dirty: this.grdirty, grswitch: GR_TXMODE, mem: this.ram };\n ap2disp;\n kbdlatch = 0;\n soundstate = 0;\n // language card switches\n auxRAMselected = false;\n auxRAMbank = 1;\n writeinhibit = true;\n // value to add when reading & writing each of these banks\n // bank 1 is E000-FFFF, bank 2 is D000-DFFF\n bank2rdoffset = 0;\n bank2wroffset = 0;\n // Paddle/joystick, PDL0-PDL3 values (0-255).\n paddleValues = [0, 0, 0, 0];\n paddleButtons = [false, false, false];\n paddleLastTriggered = 0;\n // disk II\n slots: SlotDevice[] = new Array(8);\n // fake disk drive that loads program into RAM\n fakeDrive: SlotDevice = {\n readROM: (a) => {\n var pc = this.cpu.getPC();\n if (pc >= 0xC600 && pc < 0xC700) {\n // We're reading code to EXECUTE.\n // Load the built program directly into memory, and \"read\"\n // a JMP directly to it.\n //console.log(`fakeDrive (EXEC): ${a.toString(16)}`);\n switch (a) {\n // JMP VM_BASE\n case 0:\n // SHOULD load program into RAM here, but have to do it\n // below instead.\n return 0;\n case 1: return this.LOAD_BASE & 0xff;\n case 2: return (this.LOAD_BASE >> 8) & 0xff;\n default: return 0;\n }\n }\n else {\n // We're reading code, but not executing it.\n // This is probably the Monitor routine to identify whether\n // this slot is a Disk ][ drive, so... give it what it wants.\n //console.log(`fakeDrive (NOEX): ${a.toString(16)}`);\n switch (a) {\n case 0:\n // Actually, if we get here, we probably ARE being\n // executed. For some reason, the instruction at $C600\n // gets read for execution, BEFORE the PC gets set to\n // the correct location. So we handle loading the program\n // into RAM and returning the JMP here, instead of above\n // where it would otherwise belong.\n if (this.rom) {\n this.loadRAMWithProgram();\n }\n return 0x4c; // JMP\n case 1: return 0x20;\n case 3: return 0x00;\n case 5: return 0x03;\n case 7: return 0x3c;\n default: return 0;\n }\n }\n },\n readConst: (a) => {\n return 0;\n },\n read: (a) => { return this.floatbus(); },\n write: (a, v) => { }\n };\n\n constructor() {\n super();\n this.loadBIOS(new lzgmini().decode(stringToByteArray(atob(APPLEIIGO_LZG))));\n this.connectCPUMemoryBus(this);\n // This line is inappropriate for real ROMs, but was there for\n // the APPLE][GO ROM, so keeping it only in the constructor, for\n // that special case (in case it really is important for this\n // address to be an RTS).\n this.bios[0xD39A - (0x10000 - this.bios.length)] = 0x60; // $d39a = RTS\n }\n saveState(): AppleIIState {\n // TODO: automagic\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(),\n kbdlatch: this.kbdlatch,\n soundstate: this.soundstate,\n grswitch: this.grparams.grswitch,\n auxRAMselected: this.auxRAMselected,\n auxRAMbank: this.auxRAMbank,\n writeinhibit: this.writeinhibit,\n slots: this.slots.map((slot) => { return slot && slot['saveState'] && slot['saveState']() }),\n paddleValues: this.paddleValues.slice(),\n paddleButtons: this.paddleButtons.slice(),\n inputs: this.ram.slice(0, 0) // unused\n };\n }\n loadState(s: AppleIIState) {\n this.cpu.loadState(s.c);\n this.ram.set(s.ram);\n this.kbdlatch = s.kbdlatch;\n this.soundstate = s.soundstate;\n this.grparams.grswitch = s.grswitch;\n this.auxRAMselected = s.auxRAMselected;\n this.auxRAMbank = s.auxRAMbank;\n this.writeinhibit = s.writeinhibit;\n this.setupLanguageCardConstants();\n for (var i = 0; i < this.slots.length; i++)\n if (this.slots[i] && this.slots[i]['loadState'])\n this.slots[i]['loadState'](s.slots[i]);\n this.paddleValues = s.paddleValues.slice();\n this.paddleButtons = s.paddleButtons.slice();\n this.ap2disp.invalidate(); // repaint entire screen\n }\n saveControlsState(): AppleIIControlsState {\n return { inputs: null, kbdlatch: this.kbdlatch };\n }\n loadControlsState(s: AppleIIControlsState) {\n this.kbdlatch = s.kbdlatch;\n }\n loadBIOS(data, title?) {\n if (data.length != 0x3000) {\n console.log(`apple2 loadBIOS !!!WARNING!!!: BIOS wants length 0x3000, but BIOS '${title}' has length 0x${data.length.toString(16)}`);\n console.log(\"will load BIOS to end of memory anyway...\");\n }\n this.bios = Uint8Array.from(data);\n }\n loadROM(data, title?, origin?: number) {\n // is it a 16-sector 35-track disk image?\n if (data.length == 16 * 35 * 256) {\n var diskii = new DiskII(this, data);\n this.slots[6] = diskii;\n this.reset();\n } else { // it's a binary, use a fake drive\n // set this.rom variable\n super.loadROM(data);\n // AppleSingle header? https://github.com/cc65/cc65/blob/master/libsrc/apple2/exehdr.s\n if (arrayCompare(this.rom.slice(0, 4), [0x00, 0x05, 0x16, 0x00])) {\n this.LOAD_BASE = this.rom[0x39] | (this.rom[0x38] << 8); // big endian\n this.HDR_SIZE = 58;\n } else {\n // 4-byte DOS header? (TODO: hacky detection)\n const hdrOrigin = this.rom[0] | (this.rom[1] << 8);\n const size = this.rom[2] | (this.rom[3] << 8);\n let isPlausible = hdrOrigin < 0xc000\n && hdrOrigin + size < 0x13000;\n if (size == data.length - 4 && isPlausible) {\n this.LOAD_BASE = hdrOrigin;\n this.HDR_SIZE = 4;\n } else {\n // Load @ specified origin, fallback to $803\n this.LOAD_BASE = origin ?? 0x803;\n this.HDR_SIZE = 0;\n }\n }\n this.slots[6] = this.fakeDrive;\n }\n }\n loadRAMWithProgram() {\n console.log(`Loading program into Apple ][ RAM at \\$${this.LOAD_BASE.toString(16)} (${this.HDR_SIZE} bytes skipped for header)`);\n // truncate if needed to fit into RAM\n const exedata = this.rom.slice(this.HDR_SIZE, this.HDR_SIZE + this.ram.length - this.LOAD_BASE);\n this.ram.set(exedata, this.LOAD_BASE);\n // fake DOS detect for CC65 (TODO?)\n if (this.HDR_SIZE == 58) {\n this.ram[0xbf00] = 0x4c;\n this.ram[0xbf6f] = 0x01;\n }\n }\n reset() {\n this.auxRAMselected = false;\n this.auxRAMbank = 1;\n this.writeinhibit = true;\n this.ram.fill(0, 0x300, 0x400); // Clear soft-reset vector\n // (force hard reset)\n super.reset();\n this.skipboot();\n }\n skipboot() {\n // execute until $c600 boot\n for (var i = 0; i < 2000000; i++) {\n this.cpu.advanceClock();\n if ((this.cpu.getPC() >> 8) == 0xc6) break;\n }\n // get out of $c600 boot\n for (var i = 0; i < 2000000; i++) {\n this.cpu.advanceClock();\n if ((this.cpu.getPC() >> 8) < 0xc6) break;\n }\n }\n readConst(address: number): number {\n if (address < 0xc000) {\n return this.ram[address];\n } else if (address >= 0xd000) {\n if (!this.auxRAMselected)\n return this.bios[address - (0x10000 - this.bios.length)];\n else if (address >= 0xe000)\n return this.ram[address];\n else\n return this.ram[address + this.bank2rdoffset];\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readConst(address & 0xff)) | 0;\n } else {\n return 0;\n }\n }\n read(address: number): number {\n address &= 0xffff;\n if (address < 0xc000 || address >= 0xd000) {\n return this.readConst(address);\n } else if (address < 0xc100) {\n this.probe.logIORead(address, 0); // TODO: value\n var slot = (address >> 4) & 0x0f;\n switch (slot) {\n case 0: // $C00x\n return this.kbdlatch;\n case 1: // $C01x\n this.kbdlatch &= 0x7f;\n break;\n case 3: // $C03x\n this.soundstate = this.soundstate ^ 1;\n break;\n case 5: // $C05x\n if ((address & 0x0f) < 8) {\n // graphics\n if ((address & 1) != 0)\n this.grparams.grswitch |= 1 << ((address >> 1) & 0x07);\n else\n this.grparams.grswitch &= ~(1 << ((address >> 1) & 0x07));\n }\n break;\n case 6: // $C06x\n // tapein, joystick, buttons\n switch (address & 7) {\n case 1: // $C061 / $C069 - GAME SW0\n case 2: // $C062 / $C06A - GAME SW1\n case 3: // $C063 / $C06B - GAME SW2\n // buttons\n var btn = (address & 7) - 1;\n if (this.paddleButtons[btn])\n return this.floatbus() | 0x80;\n else\n return this.floatbus() & 0x7f;\n case 4: // $C064 / $C06C - GAME PDL0\n case 5: // $C065 / $C06D - GAME PDL1\n case 6: // $C066 / $C06E - GAME PDL2\n case 7: // $C067 / $C06F - GAME PDL3\n var pdl = (address & 0x0f) - 4;\n var elapsed = this.frameCycles - this.paddleLastTriggered;\n // Bit 7 remains high until paddle value reached.\n if (elapsed < this.paddleValues[pdl] * this.cpuCyclesPaddleUnit)\n return this.floatbus() | 0x80;\n else\n return this.floatbus() & 0x7f;\n default:\n return this.floatbus();\n }\n case 7: // $C07x\n // Strobing PTRIG ($C070) triggers paddles.\n if (address == 0xc070) {\n this.paddleLastTriggered = this.frameCycles;\n return this.floatbus() | 0x80;\n }\n case 8: // $C08x\n return this.doLanguageCardIO(address);\n case 9: // $C09x\n case 10: // $C0Ax\n case 11: // $C0Bx\n case 12: // $C0Cx\n case 13: // $C0Dx\n case 14: // $C0Ex\n case 15: // $C0Fx\n return (this.slots[slot - 8] && this.slots[slot - 8].read(address & 0xf)) | 0;\n }\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readROM(address & 0xff)) | 0;\n }\n return this.floatbus();\n }\n write(address: number, val: number): void {\n address &= 0xffff;\n val &= 0xff;\n if (address < 0xc000) {\n this.ram[address] = val;\n this.grdirty[address >> 7] = 1;\n } else if (address < 0xc090) {\n this.read(address); // strobe address, discard result\n } else if (address < 0xc100) {\n var slot = (address >> 4) & 0x0f;\n this.slots[slot - 8] && this.slots[slot - 8].write(address & 0xf, val);\n this.probe.logIOWrite(address, val);\n } else if (address >= 0xd000 && !this.writeinhibit) {\n if (address >= 0xe000)\n this.ram[address] = val;\n else\n this.ram[address + this.bank2wroffset] = val;\n }\n }\n // http://www.deater.net/weave/vmwprod/megademo/vapor_lock.html\n // https://retrocomputing.stackexchange.com/questions/14012/what-is-dram-refresh-and-why-is-the-weird-apple-ii-video-memory-layout-affected\n // http://www.apple-iigs.info/doc/fichiers/TheappleIIcircuitdescription1.pdf\n // http://rich12345.tripod.com/aiivideo/softalk.html\n // https://github.com/MiSTer-devel/Apple-II_MiSTer/blob/master/rtl/timing_generator.vhd\n floatbus(): number {\n var fcyc = this.frameCycles;\n var yline = Math.floor(fcyc / 65);\n var xcyc = Math.floor(fcyc % 65);\n var addr = this.ap2disp.getAddressForScanline(yline);\n return this.readConst(addr + xcyc);\n }\n\n connectVideo(pixels: Uint32Array) {\n super.connectVideo(pixels);\n this.ap2disp = this.pixels && new Apple2Display(this.pixels, this.grparams);\n }\n startScanline() {\n }\n drawScanline() {\n // TODO: draw scanline via ap2disp\n }\n advanceFrame(trap): number {\n var clocks = super.advanceFrame(trap);\n this.ap2disp && this.ap2disp.updateScreen();\n return clocks;\n }\n postFrame() {\n this.paddleLastTriggered -= this.frameCycles;\n // Prevent extreme negative values if paddles aren't read.\n if (this.paddleLastTriggered < -this.cpuCyclesPaddleMax) {\n this.paddleLastTriggered = -this.cpuCyclesPaddleMax;\n }\n }\n advanceCPU() {\n this.audio.feedSample(this.soundstate, 1);\n return super.advanceCPU();\n }\n\n setKeyInput(key: number, code: number, flags: number): void {\n console.log(`setKeyInput: ${key} ${code} ${flags}`);\n if (flags & KeyFlags.KeyDown) {\n code = 0;\n switch (key) {\n case 16: case 17: case 18: case 91:\n return; // ignore shift/ctrl/alt - don't set any key\n case 8:\n code = 8; // left\n if (flags & KeyFlags.Shift) {\n // (possibly) soft reset\n this.cpu.reset();\n return;\n }\n break;\n case 13: code = 13; break; // return\n case 27: code = 27; break; // escape\n case 37: code = 8; break; // left\n case 39: code = 21; break; // right\n case 38: code = 11; break; // up\n case 40: code = 10; break; // down\n case 48: code = (flags & KeyFlags.Shift) ? 0x29 : 0x30; break; // ) or 0\n case 49: code = (flags & KeyFlags.Shift) ? 0x21 : 0x31; break; // ! or 1\n case 50: code = (flags & KeyFlags.Shift) ? 0x40 : 0x32; break; // @ or 2\n case 51: code = (flags & KeyFlags.Shift) ? 0x23 : 0x33; break; // # or 3\n case 52: code = (flags & KeyFlags.Shift) ? 0x24 : 0x34; break; // $ or 4\n case 53: code = (flags & KeyFlags.Shift) ? 0x25 : 0x35; break; // % or 5\n case 54: code = (flags & KeyFlags.Shift) ? 0x5e : 0x36; break; // ^ or 6\n case 55: code = (flags & KeyFlags.Shift) ? 0x26 : 0x37; break; // & or 7\n case 56: code = (flags & KeyFlags.Shift) ? 0x2a : 0x38; break; // * or 8\n case 57: code = (flags & KeyFlags.Shift) ? 0x28 : 0x39; break; // ( or 9\n case 61: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _ or -\n case 173: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // + or =\n case 59: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break; // : or ;\n case 186: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break; // : or ;\n case 187: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // + or =\n case 188: code = (flags & KeyFlags.Shift) ? 0x3c : 0x2c; break;\n case 189: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _ or -\n case 190: code = (flags & KeyFlags.Shift) ? 0x3e : 0x2e; break;\n case 191: code = (flags & KeyFlags.Shift) ? 0x3f : 0x2f; break;\n case 222: code = (flags & KeyFlags.Shift) ? 0x22 : 0x27; break;\n default:\n code = key;\n // convert to uppercase for Apple ][\n if (code >= 0x61 && code <= 0x7a) code -= 32;\n // convert to control codes if Ctrl pressed\n if (code >= 65 && code < 65 + 26) {\n if (flags & KeyFlags.Ctrl) code -= 64; // ctrl\n }\n }\n if (code) {\n this.kbdlatch = (code | 0x80) & 0xff;\n }\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n if (controller >= 0 && controller < this.paddleValues.length) {\n this.paddleValues[controller] = value & 0xff;\n }\n }\n\n setPaddleButton(index: number, pressed: boolean): void {\n if (index >= 0 && index < this.paddleButtons.length) {\n this.paddleButtons[index] = pressed;\n }\n }\n\n doLanguageCardIO(address: number) {\n // TODO: require two writes in a row for some things\n switch (address & 0x0f) {\n // Select aux RAM bank 2, write protected.\n case 0x0:\n case 0x4:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 2.\n case 0x1:\n case 0x5:\n this.auxRAMselected = false;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select ROM, write protect aux RAM (either bank).\n case 0x2:\n case 0x6:\n case 0xA:\n case 0xE:\n this.auxRAMselected = false;\n this.writeinhibit = true;\n break;\n // Select aux RAM bank 2, write enabled.\n case 0x3:\n case 0x7:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write protected.\n case 0x8:\n case 0xC:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 1.\n case 0x9:\n case 0xD:\n this.auxRAMselected = false;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write enabled.\n case 0xB:\n case 0xF:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n }\n this.setupLanguageCardConstants();\n return this.floatbus();\n }\n\n setupLanguageCardConstants() {\n // reset language card constants\n if (this.auxRAMbank == 2)\n this.bank2rdoffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2rdoffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n if (this.auxRAMbank == 2)\n this.bank2wroffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2wroffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n }\n\n getDebugCategories() {\n return ['CPU', 'Stack', 'I/O', 'Disk'];\n }\n getDebugInfo(category: string, state: AppleIIState) {\n switch (category) {\n case 'I/O': return \"AUX RAM Bank: \" + state.auxRAMbank +\n \"\\nAUX RAM Select: \" + state.auxRAMselected +\n \"\\nAUX RAM Write: \" + !state.writeinhibit +\n \"\\n\\nGR Switches: \" + printFlags(state.grswitch, [\"Graphics\", \"Mixed\", \"Page2\", \"Hires\"], false) +\n \"\\n\";\n case 'Disk': return (this.slots[6] && this.slots[6]['toLongString'] && this.slots[6]['toLongString']()) || \"\\n\";\n }\n }\n}\n\nconst GR_TXMODE = 1;\nconst GR_MIXMODE = 2;\nconst GR_PAGE1 = 4;\nconst GR_HIRES = 8;\n\ntype AppleGRParams = { dirty: boolean[], grswitch: number, mem: Uint8Array };\n\nvar Apple2Display = function (pixels: Uint32Array, apple: AppleGRParams) {\n var XSIZE = 280;\n var YSIZE = 192;\n var PIXELON = 0xffffffff;\n var PIXELOFF = 0xff000000;\n\n var oldgrmode = -1;\n var textbuf = new Array(40 * 24);\n\n const flashInterval = 250;\n\n // https://mrob.com/pub/xapple2/colors.html\n const loresColor = [\n RGBA(0, 0, 0),\n RGBA(227, 30, 96),\n RGBA(96, 78, 189),\n RGBA(255, 68, 253),\n RGBA(0, 163, 96),\n RGBA(156, 156, 156),\n RGBA(20, 207, 253),\n RGBA(208, 195, 255),\n RGBA(96, 114, 3),\n RGBA(255, 106, 60),\n RGBA(156, 156, 156),\n RGBA(255, 160, 208),\n RGBA(20, 245, 60),\n RGBA(208, 221, 141),\n RGBA(114, 255, 208),\n RGBA(255, 255, 255)\n ];\n\n const text_lut = [\n 0x000, 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380,\n 0x028, 0x0a8, 0x128, 0x1a8, 0x228, 0x2a8, 0x328, 0x3a8,\n 0x050, 0x0d0, 0x150, 0x1d0, 0x250, 0x2d0, 0x350, 0x3d0\n ];\n\n const hires_lut = [\n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400, 0x1800, 0x1c00,\n 0x0080, 0x0480, 0x0880, 0x0c80, 0x1080, 0x1480, 0x1880, 0x1c80,\n 0x0100, 0x0500, 0x0900, 0x0d00, 0x1100, 0x1500, 0x1900, 0x1d00,\n 0x0180, 0x0580, 0x0980, 0x0d80, 0x1180, 0x1580, 0x1980, 0x1d80,\n 0x0200, 0x0600, 0x0a00, 0x0e00, 0x1200, 0x1600, 0x1a00, 0x1e00,\n 0x0280, 0x0680, 0x0a80, 0x0e80, 0x1280, 0x1680, 0x1a80, 0x1e80,\n 0x0300, 0x0700, 0x0b00, 0x0f00, 0x1300, 0x1700, 0x1b00, 0x1f00,\n 0x0380, 0x0780, 0x0b80, 0x0f80, 0x1380, 0x1780, 0x1b80, 0x1f80,\n 0x0028, 0x0428, 0x0828, 0x0c28, 0x1028, 0x1428, 0x1828, 0x1c28,\n 0x00a8, 0x04a8, 0x08a8, 0x0ca8, 0x10a8, 0x14a8, 0x18a8, 0x1ca8,\n 0x0128, 0x0528, 0x0928, 0x0d28, 0x1128, 0x1528, 0x1928, 0x1d28,\n 0x01a8, 0x05a8, 0x09a8, 0x0da8, 0x11a8, 0x15a8, 0x19a8, 0x1da8,\n 0x0228, 0x0628, 0x0a28, 0x0e28, 0x1228, 0x1628, 0x1a28, 0x1e28,\n 0x02a8, 0x06a8, 0x0aa8, 0x0ea8, 0x12a8, 0x16a8, 0x1aa8, 0x1ea8,\n 0x0328, 0x0728, 0x0b28, 0x0f28, 0x1328, 0x1728, 0x1b28, 0x1f28,\n 0x03a8, 0x07a8, 0x0ba8, 0x0fa8, 0x13a8, 0x17a8, 0x1ba8, 0x1fa8,\n 0x0050, 0x0450, 0x0850, 0x0c50, 0x1050, 0x1450, 0x1850, 0x1c50,\n 0x00d0, 0x04d0, 0x08d0, 0x0cd0, 0x10d0, 0x14d0, 0x18d0, 0x1cd0,\n 0x0150, 0x0550, 0x0950, 0x0d50, 0x1150, 0x1550, 0x1950, 0x1d50,\n 0x01d0, 0x05d0, 0x09d0, 0x0dd0, 0x11d0, 0x15d0, 0x19d0, 0x1dd0,\n 0x0250, 0x0650, 0x0a50, 0x0e50, 0x1250, 0x1650, 0x1a50, 0x1e50,\n 0x02d0, 0x06d0, 0x0ad0, 0x0ed0, 0x12d0, 0x16d0, 0x1ad0, 0x1ed0,\n 0x0350, 0x0750, 0x0b50, 0x0f50, 0x1350, 0x1750, 0x1b50, 0x1f50,\n 0x03d0, 0x07d0, 0x0bd0, 0x0fd0, 0x13d0, 0x17d0, 0x1bd0, 0x1fd0,\n // just for floating bus, y >= 192\n 0x0078, 0x0478, 0x0878, 0x0c78, 0x1078, 0x1478, 0x1878, 0x1c78,\n 0x00f8, 0x04f8, 0x08f8, 0x0cf8, 0x10f8, 0x14f8, 0x18f8, 0x1cf8,\n 0x0178, 0x0578, 0x0978, 0x0d78, 0x1178, 0x1578, 0x1978, 0x1d78,\n 0x01f8, 0x05f8, 0x09f8, 0x0df8, 0x11f8, 0x15f8, 0x19f8, 0x1df8,\n 0x0278, 0x0678, 0x0a78, 0x0e78, 0x1278, 0x1678, 0x1a78, 0x1e78,\n 0x02f8, 0x06f8, 0x0af8, 0x0ef8, 0x12f8, 0x16f8, 0x1af8, 0x1ef8,\n 0x0378, 0x0778, 0x0b78, 0x0f78, 0x1378, 0x1778, 0x1b78, 0x1f78,\n 0x03f8, 0x07f8, 0x0bf8, 0x0ff8, 0x13f8, 0x17f8, 0x1bf8, 0x1ff8,\n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400,\n ];\n\n var colors_lut;\n\n /**\n * This function makes the color lookup table for hires mode.\n * We make a table of 1024 * 2 * 7 entries.\n * Why? Because we assume each color byte has 10 bits\n * (8 real bits + 1 on each side) and we need different colors\n * for odd and even addresses (2) and each byte displays 7 pixels.\n */\n {\n colors_lut = new Array(256 * 4 * 2 * 7);\n var i, j;\n var c1, c2, c3 = 15;\n var base = 0;\n\n // go thru odd and even\n for (j = 0; j < 2; j++) {\n // go thru 1024 values\n for (var b1 = 0; b1 < 1024; b1++) {\n // see if the hi bit is set\n if ((b1 & 0x80) == 0) {\n c1 = 3; c2 = 12; // purple & green\n } else {\n c1 = 6; c2 = 9; // blue & orange\n }\n // make a value consisting of:\n // the 8th bit, then bits 0-7, then the 9th bit\n var b = ((b1 & 0x100) >> 8) | ((b1 & 0x7f) << 1) |\n ((b1 & 0x200) >> 1);\n // go through each pixel\n for (i = 0; i < 7; i++) {\n var c;\n // is this pixel lit?\n if (((2 << i) & b) != 0) {\n // are there pixels lit on both sides of this one?\n if (((7 << i) & b) == (7 << i))\n // yes, make it white\n c = 15;\n else\n // no, choose color based on odd/even byte\n // and odd/even pixel column\n c = ((((j ^ i) & 1) == 0) ? c1 : c2);\n } else {\n // are there pixels lit in the previous & next\n // column but none in this?\n if (((5 << i) & b) == (5 << i))\n // color this pixel\n c = ((((j ^ i) & 1) != 0) ? c1 : c2);\n else\n c = 0;\n }\n colors_lut[base] = loresColor[c];\n base++;\n }\n }\n }\n }\n\n function drawLoresChar(x, y, b) {\n var i, base, adr, c;\n base = (y << 3) * XSIZE + x * 7; //(x<<2) + (x<<1) + x\n c = loresColor[b & 0x0f];\n for (i = 0; i < 4; i++) {\n pixels[base] =\n pixels[base + 1] =\n pixels[base + 2] =\n pixels[base + 3] =\n pixels[base + 4] =\n pixels[base + 5] =\n pixels[base + 6] = c;\n base += XSIZE;\n }\n c = loresColor[b >> 4];\n for (i = 0; i < 4; i++) {\n pixels[base] =\n pixels[base + 1] =\n pixels[base + 2] =\n pixels[base + 3] =\n pixels[base + 4] =\n pixels[base + 5] =\n pixels[base + 6] = c;\n base += XSIZE;\n }\n }\n\n function drawTextChar(x, y, b, invert) {\n var base = (y << 3) * XSIZE + x * 7; // (x<<2) + (x<<1) + x\n var on, off;\n if (invert) {\n on = PIXELOFF;\n off = PIXELON;\n } else {\n on = PIXELON;\n off = PIXELOFF;\n }\n\n for (var yy = 0; yy < 8; yy++) {\n var chr = apple2_charset[(b << 3) + yy];\n pixels[base] = ((chr & 64) > 0) ? on : off;\n pixels[base + 1] = ((chr & 32) > 0) ? on : off;\n pixels[base + 2] = ((chr & 16) > 0) ? on : off;\n pixels[base + 3] = ((chr & 8) > 0) ? on : off;\n pixels[base + 4] = ((chr & 4) > 0) ? on : off;\n pixels[base + 5] = ((chr & 2) > 0) ? on : off;\n pixels[base + 6] = ((chr & 1) > 0) ? on : off;\n base += XSIZE;\n }\n }\n\n this.getAddressForScanline = function (y: number): number {\n var base = hires_lut[y];\n if ((apple.grswitch & GR_HIRES) && (y < 160 || !(apple.grswitch & GR_MIXMODE)))\n base = base | ((apple.grswitch & GR_PAGE1) ? 0x4000 : 0x2000);\n else\n base = (base & 0x3ff) | ((apple.grswitch & GR_PAGE1) ? 0x800 : 0x400);\n return base;\n }\n\n function drawHiresLines(y, maxy) {\n var yb = y * XSIZE;\n for (; y < maxy; y++) {\n var base = hires_lut[y] + (((apple.grswitch & GR_PAGE1) != 0) ? 0x4000 : 0x2000);\n if (!apple.dirty[base >> 7]) {\n yb += XSIZE;\n continue;\n }\n var c1, c2;\n var b = 0;\n var b1 = apple.mem[base] & 0xff;\n for (var x1 = 0; x1 < 20; x1++) {\n var b2 = apple.mem[base + 1] & 0xff;\n var b3 = apple.mem[base + 2] & 0xff;\n var d1 = (((b & 0x40) << 2) | b1 | b2 << 9) & 0x3ff;\n for (var i = 0; i < 7; i++)\n pixels[yb + i] = colors_lut[d1 * 7 + i];\n var d2 = (((b1 & 0x40) << 2) | b2 | b3 << 9) & 0x3ff;\n for (var i = 0; i < 7; i++)\n pixels[yb + 7 + i] = colors_lut[d2 * 7 + 7168 + i];\n yb += 14;\n base += 2;\n b = b2;\n b1 = b3;\n }\n }\n }\n\n function drawLoresLine(y) {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x = 0; x < 40; x++) {\n var b = apple.mem[base + x] & 0xff;\n // if the char. changed, draw it\n if (b != textbuf[y * 40 + x]) {\n drawLoresChar(x, y, b);\n textbuf[y * 40 + x] = b;\n }\n }\n }\n\n function drawTextLine(y, flash) {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x = 0; x < 40; x++) {\n var b = apple.mem[base + x] & 0xff;\n var invert;\n // invert flash characters 1/2 of the time\n if (b >= 0x80) {\n invert = false;\n } else if (b >= 0x40) {\n invert = flash;\n if (flash)\n b -= 0x40;\n else\n b += 0x40;\n } else\n invert = true;\n // if the char. changed, draw it\n if (b != textbuf[y * 40 + x]) {\n drawTextChar(x, y, b & 0x7f, invert);\n textbuf[y * 40 + x] = b;\n }\n }\n }\n\n this.updateScreen = function (totalrepaint) {\n var y;\n var flash = (new Date().getTime() % (flashInterval << 1)) > flashInterval;\n\n // if graphics mode changed, repaint whole screen\n if (apple.grswitch != oldgrmode) {\n oldgrmode = apple.grswitch;\n totalrepaint = true;\n }\n if (totalrepaint) {\n // clear textbuf if in text mode\n if ((apple.grswitch & GR_TXMODE) != 0 || (apple.grswitch & GR_MIXMODE) != 0) {\n for (y = 0; y < 24; y++)\n for (var x = 0; x < 40; x++)\n textbuf[y * 40 + x] = -1;\n }\n for (var i = 0; i < apple.dirty.length; i++)\n apple.dirty[i] = true;\n }\n\n // first, draw top part of window\n if ((apple.grswitch & GR_TXMODE) != 0) {\n for (y = 0; y < 20; y++)\n drawTextLine(y, flash);\n } else {\n if ((apple.grswitch & GR_HIRES) != 0)\n drawHiresLines(0, 160);\n else\n for (y = 0; y < 20; y++)\n drawLoresLine(y);\n }\n\n // now do mixed part of window\n if ((apple.grswitch & GR_TXMODE) != 0 || (apple.grswitch & GR_MIXMODE) != 0) {\n for (y = 20; y < 24; y++)\n drawTextLine(y, flash);\n } else {\n if ((apple.grswitch & GR_HIRES) != 0)\n drawHiresLines(160, 192);\n else\n for (y = 20; y < 24; y++)\n drawLoresLine(y);\n }\n for (var i = 0; i < apple.dirty.length; i++)\n apple.dirty[i] = false;\n }\n\n this.invalidate = function () {\n oldgrmode = -1;\n }\n}\n\n/*exported apple2_charset */\n\nconst apple2_charset = [\n 0x00, 0x1c, 0x22, 0x2a, 0x2e, 0x2c, 0x20, 0x1e,\n 0x00, 0x08, 0x14, 0x22, 0x22, 0x3e, 0x22, 0x22,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x22, 0x22, 0x3c,\n 0x00, 0x1c, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3c,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x3e,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1e, 0x20, 0x20, 0x20, 0x26, 0x22, 0x1e,\n 0x00, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x22,\n 0x00, 0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22,\n 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3e,\n 0x00, 0x22, 0x36, 0x2a, 0x2a, 0x22, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x32, 0x2a, 0x26, 0x22, 0x22,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x2a, 0x24, 0x1a,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x28, 0x24, 0x22,\n 0x00, 0x1c, 0x22, 0x20, 0x1c, 0x02, 0x22, 0x1c,\n 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x14, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e,\n 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,\n 0x00, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e,\n 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08,\n 0x00, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x14, 0x14, 0x3e, 0x14, 0x3e, 0x14, 0x14,\n 0x00, 0x08, 0x1e, 0x28, 0x1c, 0x0a, 0x3c, 0x08,\n 0x00, 0x30, 0x32, 0x04, 0x08, 0x10, 0x26, 0x06,\n 0x00, 0x10, 0x28, 0x28, 0x10, 0x2a, 0x24, 0x1a,\n 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08,\n 0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08,\n 0x00, 0x08, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x08,\n 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,\n 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,\n 0x00, 0x1c, 0x22, 0x26, 0x2a, 0x32, 0x22, 0x1c,\n 0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x1c, 0x22, 0x02, 0x0c, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x02, 0x04, 0x0c, 0x02, 0x22, 0x1c,\n 0x00, 0x04, 0x0c, 0x14, 0x24, 0x3e, 0x04, 0x04,\n 0x00, 0x3e, 0x20, 0x3c, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x0e, 0x10, 0x20, 0x3c, 0x22, 0x22, 0x1c,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10,\n 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c,\n 0x00, 0x1c, 0x22, 0x22, 0x1e, 0x02, 0x04, 0x38,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04,\n 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00,\n 0x00, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10,\n 0x00, 0x1c, 0x22, 0x04, 0x08, 0x08, 0x00, 0x08,\n 0x80, 0x9c, 0xa2, 0xaa, 0xae, 0xac, 0xa0, 0x9e,\n 0x80, 0x88, 0x94, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa2, 0xa2, 0xbc,\n 0x80, 0x9c, 0xa2, 0xa0, 0xa0, 0xa0, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbe,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9e, 0xa0, 0xa0, 0xa0, 0xa6, 0xa2, 0x9e,\n 0x80, 0xa2, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2, 0xa2,\n 0x80, 0x9c, 0x88, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x82, 0x82, 0x82, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa4, 0xa8, 0xb0, 0xa8, 0xa4, 0xa2,\n 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xbe,\n 0x80, 0xa2, 0xb6, 0xaa, 0xaa, 0xa2, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0xb2, 0xaa, 0xa6, 0xa2, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xaa, 0xa4, 0x9a,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa8, 0xa4, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa0, 0x9c, 0x82, 0xa2, 0x9c,\n 0x80, 0xbe, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x94, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xaa, 0xaa, 0xb6, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x94, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xbe,\n 0x80, 0x80, 0xa0, 0x90, 0x88, 0x84, 0x82, 0x80,\n 0x80, 0xbe, 0x86, 0x86, 0x86, 0x86, 0x86, 0xbe,\n 0x80, 0x80, 0x80, 0x88, 0x94, 0xa2, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xbe,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88,\n 0x80, 0x94, 0x94, 0x94, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x94, 0x94, 0xbe, 0x94, 0xbe, 0x94, 0x94,\n 0x80, 0x88, 0x9e, 0xa8, 0x9c, 0x8a, 0xbc, 0x88,\n 0x80, 0xb0, 0xb2, 0x84, 0x88, 0x90, 0xa6, 0x86,\n 0x80, 0x90, 0xa8, 0xa8, 0x90, 0xaa, 0xa4, 0x9a,\n 0x80, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x90, 0xa0, 0xa0, 0xa0, 0x90, 0x88,\n 0x80, 0x88, 0x84, 0x82, 0x82, 0x82, 0x84, 0x88,\n 0x80, 0x88, 0xaa, 0x9c, 0x88, 0x9c, 0xaa, 0x88,\n 0x80, 0x80, 0x88, 0x88, 0xbe, 0x88, 0x88, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x80, 0x80, 0x80, 0xbe, 0x80, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x88,\n 0x80, 0x80, 0x82, 0x84, 0x88, 0x90, 0xa0, 0x80,\n 0x80, 0x9c, 0xa2, 0xa6, 0xaa, 0xb2, 0xa2, 0x9c,\n 0x80, 0x88, 0x98, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x9c, 0xa2, 0x82, 0x8c, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0x82, 0x84, 0x8c, 0x82, 0xa2, 0x9c,\n 0x80, 0x84, 0x8c, 0x94, 0xa4, 0xbe, 0x84, 0x84,\n 0x80, 0xbe, 0xa0, 0xbc, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0x8e, 0x90, 0xa0, 0xbc, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0x90, 0x90,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9c, 0xa2, 0xa2, 0x9c,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9e, 0x82, 0x84, 0xb8,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x84, 0x88, 0x90, 0xa0, 0x90, 0x88, 0x84,\n 0x80, 0x80, 0x80, 0xbe, 0x80, 0xbe, 0x80, 0x80,\n 0x80, 0x90, 0x88, 0x84, 0x82, 0x84, 0x88, 0x90,\n 0x80, 0x9c, 0xa2, 0x84, 0x88, 0x88, 0x80, 0x88,\n 0x00, 0x1c, 0x22, 0x2a, 0x2e, 0x2c, 0x20, 0x1e,\n 0x00, 0x08, 0x14, 0x22, 0x22, 0x3e, 0x22, 0x22,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x22, 0x22, 0x3c,\n 0x00, 0x1c, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3c,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x3e,\n 0x00, 0x3e, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1e, 0x20, 0x20, 0x20, 0x26, 0x22, 0x1e,\n 0x00, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x22,\n 0x00, 0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22,\n 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3e,\n 0x00, 0x22, 0x36, 0x2a, 0x2a, 0x22, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x32, 0x2a, 0x26, 0x22, 0x22,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x20, 0x20, 0x20,\n 0x00, 0x1c, 0x22, 0x22, 0x22, 0x2a, 0x24, 0x1a,\n 0x00, 0x3c, 0x22, 0x22, 0x3c, 0x28, 0x24, 0x22,\n 0x00, 0x1c, 0x22, 0x20, 0x1c, 0x02, 0x22, 0x1c,\n 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c,\n 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x14, 0x08,\n 0x00, 0x22, 0x22, 0x22, 0x2a, 0x2a, 0x36, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22,\n 0x00, 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e,\n 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,\n 0x00, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e,\n 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08,\n 0x00, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x14, 0x14, 0x3e, 0x14, 0x3e, 0x14, 0x14,\n 0x00, 0x08, 0x1e, 0x28, 0x1c, 0x0a, 0x3c, 0x08,\n 0x00, 0x30, 0x32, 0x04, 0x08, 0x10, 0x26, 0x06,\n 0x00, 0x10, 0x28, 0x28, 0x10, 0x2a, 0x24, 0x1a,\n 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08,\n 0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08,\n 0x00, 0x08, 0x2a, 0x1c, 0x08, 0x1c, 0x2a, 0x08,\n 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,\n 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,\n 0x00, 0x1c, 0x22, 0x26, 0x2a, 0x32, 0x22, 0x1c,\n 0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1c,\n 0x00, 0x1c, 0x22, 0x02, 0x0c, 0x10, 0x20, 0x3e,\n 0x00, 0x3e, 0x02, 0x04, 0x0c, 0x02, 0x22, 0x1c,\n 0x00, 0x04, 0x0c, 0x14, 0x24, 0x3e, 0x04, 0x04,\n 0x00, 0x3e, 0x20, 0x3c, 0x02, 0x02, 0x22, 0x1c,\n 0x00, 0x0e, 0x10, 0x20, 0x3c, 0x22, 0x22, 0x1c,\n 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10,\n 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c,\n 0x00, 0x1c, 0x22, 0x22, 0x1e, 0x02, 0x04, 0x38,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x08, 0x10,\n 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04,\n 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00,\n 0x00, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10,\n 0x00, 0x1c, 0x22, 0x04, 0x08, 0x08, 0x00, 0x08,\n 0x80, 0x9c, 0xa2, 0xaa, 0xae, 0xac, 0xa0, 0x9e,\n 0x80, 0x88, 0x94, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa2, 0xa2, 0xbc,\n 0x80, 0x9c, 0xa2, 0xa0, 0xa0, 0xa0, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbe,\n 0x80, 0xbe, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9e, 0xa0, 0xa0, 0xa0, 0xa6, 0xa2, 0x9e,\n 0x80, 0xa2, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2, 0xa2,\n 0x80, 0x9c, 0x88, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x82, 0x82, 0x82, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa4, 0xa8, 0xb0, 0xa8, 0xa4, 0xa2,\n 0x80, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xbe,\n 0x80, 0xa2, 0xb6, 0xaa, 0xaa, 0xa2, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0xb2, 0xaa, 0xa6, 0xa2, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa0, 0xa0, 0xa0,\n 0x80, 0x9c, 0xa2, 0xa2, 0xa2, 0xaa, 0xa4, 0x9a,\n 0x80, 0xbc, 0xa2, 0xa2, 0xbc, 0xa8, 0xa4, 0xa2,\n 0x80, 0x9c, 0xa2, 0xa0, 0x9c, 0x82, 0xa2, 0x9c,\n 0x80, 0xbe, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x9c,\n 0x80, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x94, 0x88,\n 0x80, 0xa2, 0xa2, 0xa2, 0xaa, 0xaa, 0xb6, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x94, 0xa2, 0xa2,\n 0x80, 0xa2, 0xa2, 0x94, 0x88, 0x88, 0x88, 0x88,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xbe,\n 0x80, 0x80, 0xa0, 0x90, 0x88, 0x84, 0x82, 0x80,\n 0x80, 0xbe, 0x86, 0x86, 0x86, 0x86, 0x86, 0xbe,\n 0x80, 0x80, 0x80, 0x88, 0x94, 0xa2, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xbe,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88,\n 0x80, 0x94, 0x94, 0x94, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x94, 0x94, 0xbe, 0x94, 0xbe, 0x94, 0x94,\n 0x80, 0x88, 0x9e, 0xa8, 0x9c, 0x8a, 0xbc, 0x88,\n 0x80, 0xb0, 0xb2, 0x84, 0x88, 0x90, 0xa6, 0x86,\n 0x80, 0x90, 0xa8, 0xa8, 0x90, 0xaa, 0xa4, 0x9a,\n 0x80, 0x88, 0x88, 0x88, 0x80, 0x80, 0x80, 0x80,\n 0x80, 0x88, 0x90, 0xa0, 0xa0, 0xa0, 0x90, 0x88,\n 0x80, 0x88, 0x84, 0x82, 0x82, 0x82, 0x84, 0x88,\n 0x80, 0x88, 0xaa, 0x9c, 0x88, 0x9c, 0xaa, 0x88,\n 0x80, 0x80, 0x88, 0x88, 0xbe, 0x88, 0x88, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x80, 0x80, 0x80, 0xbe, 0x80, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x88,\n 0x80, 0x80, 0x82, 0x84, 0x88, 0x90, 0xa0, 0x80,\n 0x80, 0x9c, 0xa2, 0xa6, 0xaa, 0xb2, 0xa2, 0x9c,\n 0x80, 0x88, 0x98, 0x88, 0x88, 0x88, 0x88, 0x9c,\n 0x80, 0x9c, 0xa2, 0x82, 0x8c, 0x90, 0xa0, 0xbe,\n 0x80, 0xbe, 0x82, 0x84, 0x8c, 0x82, 0xa2, 0x9c,\n 0x80, 0x84, 0x8c, 0x94, 0xa4, 0xbe, 0x84, 0x84,\n 0x80, 0xbe, 0xa0, 0xbc, 0x82, 0x82, 0xa2, 0x9c,\n 0x80, 0x8e, 0x90, 0xa0, 0xbc, 0xa2, 0xa2, 0x9c,\n 0x80, 0xbe, 0x82, 0x84, 0x88, 0x90, 0x90, 0x90,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9c, 0xa2, 0xa2, 0x9c,\n 0x80, 0x9c, 0xa2, 0xa2, 0x9e, 0x82, 0x84, 0xb8,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x80, 0x80,\n 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0x88, 0x90,\n 0x80, 0x84, 0x88, 0x90, 0xa0, 0x90, 0x88, 0x84,\n 0x80, 0x80, 0x80, 0xbe, 0x80, 0xbe, 0x80, 0x80,\n 0x80, 0x90, 0x88, 0x84, 0x82, 0x84, 0x88, 0x90,\n 0x80, 0x9c, 0xa2, 0x84, 0x88, 0x88, 0x80, 0x88\n];\n\n// public domain ROM (http://a2go.applearchives.com/roms/)\nconst APPLEIIGO_LZG = `TFpHAAAwAAAABYxwdy2NARUZHjRBUFBMRUlJR08gUk9NMS4wADQfNB80HzQfNB80HzQfNB80HDQGIADgGR97GR+uNB80Hxk/azQfNB8ZP2UZH4s0HzQfNB80HzQfNB80HzQfNB80HzQfNB80HTQPoCA0HCAgoBkOKAEQEAwFEw8GFCAODxQgARYBCQwBAgwFGRAoxs/SoM3P0sWgyc4eA83B1MnPzqDQzMXB08Wgw8zJw8ugHgigGQgo1MjFoMHQHhnJycfPoMzPNIHCxczP1x4cNAoZHvhMA+AgWPyiJ70A352ABMoQ9x4DMN+dAAUewx5OGQUDYB4DBh7DkB4ZBx4DTEDgNEEZP7s0HzQfNB80HzQfNB80HzQfNB80HzQfNB80HzQfNB80HzQfNB80HzQfNB80HjQYyc6w7snJkOrJzPDm0OjqNAtISikDCQSFKWgpGJACaX+FKAoKBSiFKGAZHnQApSUgwftlIBkdSzQVpSJIICT8pSiFKqUphSukIYhoaQHFI7ANHk6xKJEqiBD5MOGgACCe/LCGpCSpoJEoyMQhkPkZHsc0G6QksShIKT8JQJEoaGw4GRMbIAz9IKX7NKHJm/DzGRyNNAYgjv2lMyDt/aIBivDzyiA1/cmV0AKxKMngkAIp350AAsmN0LIgnPypjdBbpD2mPB4nIED5oACprUzt/RlfdjQfNB80HzQfNB80HzQfNB80HzQfNB80HjQFqQCFHKXmhRugAIQapRyRGiB+9MjQ9uYbpRspH9DuYIXihuCE4UgpwIUmSkoFJoUmaIUnCgoKJic0QmYmpScpHwXmhSeKwADwBaAjaQTI6Qew+4Tlqr259IUwmEql5IUcsBUcACM0BArJwBAGpRxJf4UcGf7aNB80HzQfNB80HzQfNBw0CkoIIEf4KKkPkAJp4IUusSZFMCUuUSaRJmAgAPjELLARyCAO+JD2aQFIHghoxS2Q9WCgL9ACoCeELaAnqQCFMCAo+IgQ9mAVBQR+JxUGBH4mCgoZgjRgpTAYaQMpD4UwCjQBBTCFMBln35AESjQBKQ8Za/CoSpAJarAQyaLwDCmHSqq9YvkgefjQBKCAqQCqvab5hS4pA4UvmCmPqpigA+CK8AtKkAhKSgkgiND6yIjQ8hmfOzQfNB80FNgghP4gL/sgk/4gif6tWMCtWsCtXcCtX8Ct/88sEMDYIDr/IGD7qQCFAKnGhQFsGR5vNB0VAxNs3dvHzxkKDa1wwKAA6uq9ZMAQBMjQ+IhgqQCFSK1WwK1UwK1RwKkA8AutUMCtU8AgNvipFIUiHhYgqSiFIakYhSOpF4UlTCL8IFj8oAm5CPuZDgSI0PdgrfMDSaWN9ANgyY3QGKwAwBATwJPQDywQwB5E+8CD8AMeBEz9+xUdB/gVEAf4yYfQEqlAIKj8oMCpDDTBrTDAiND1YKQkkSjmJKUkxSGwZmDJoLDvqBDsyY3wWsmKNGGI0MnGJBDopSGFJMYkpSLFJbALxiUVHAf4AEggJPwgnvygAGhpAMUjkPCwyqUihSWgAIQk8OSpAIUk5h4+HhC2xiUVHQf4FQYH+DhI6QHQ/Gg0gfZg5kLQAuZDpTzFPqU95T/mPB4GPRl99BUcB/jmTtAC5k8sAMAQ9ZEorQDALBDAYBUKB/j+YKUySKn/hTK9AAIg7f1oHoHJiPAdyZjwCuD4kAMgOv/o0BOp3B4VFQoH+P4VHgf4NBsASBmiWCDl/WgpDwmwybqQAmkGbDYAyaCQAiUyhDVIIHj7aKQ1GTEvQBkKBRkLGLE8kUIgtPyQ9xm+YTQBoD/QAqD/hDIZYlI+ojigG9AIHoI2oPClPikP8AYJwKAA8AKp/ZQAlQFg6upMFR8eQzQHqYdM7f2lSEilRaZGpEcZbhYZ34Q0GzQB9QP7A2L6Yvo=`;\n\n///\n/// Disk II\n///\n\nconst NUM_DRIVES = 2;\nconst NUM_TRACKS = 35;\nconst TRACK_SIZE = 0x1880;\nconst SECTOR_SIZE = 383;\n\nconst DISKII_PROM = [\n 0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C\n , 0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10\n , 0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD\n , 0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0\n , 0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56,\n /*0x20,0xA8,0xFC,*/0xa9, 0x00, 0xea, 0x88\n , 0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C\n , 0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3\n , 0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0\n , 0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD\n , 0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40\n , 0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59\n , 0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10\n , 0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB\n , 0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00\n , 0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5\n , 0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00\n];\n\nclass DiskIIState {\n data: Uint8Array[];\n track: number = 0;\n read_mode: boolean = true;\n write_protect: boolean = false;\n motor: boolean = false;\n track_index: number = 0;\n}\n\nclass DiskII extends DiskIIState implements SlotDevice, SavesState {\n emu: AppleII;\n track_data: Uint8Array;\n\n constructor(emu: AppleII, image: Uint8Array) {\n super();\n this.emu = emu;\n this.data = new Array(NUM_TRACKS);\n for (var i = 0; i < NUM_TRACKS; i++) {\n var ofs = i * 16 * 256;\n this.data[i] = nibblizeTrack(254, i, image.slice(ofs, ofs + 16 * 256));\n }\n }\n\n saveState(): DiskIIState {\n var s = {\n data: new Array(NUM_TRACKS),\n track: this.track,\n read_mode: this.read_mode,\n write_protect: this.write_protect,\n motor: this.motor,\n track_index: this.track_index\n };\n for (var i = 0; i < NUM_TRACKS; i++)\n s.data[i] = this.data[i].slice(0);\n return s;\n }\n\n loadState(s: DiskIIState) {\n for (var i = 0; i < NUM_TRACKS; i++)\n this.data[i].set(s.data[i]);\n this.track = s.track;\n this.read_mode = s.read_mode;\n this.write_protect = s.write_protect;\n this.motor = s.motor;\n this.track_index = s.track_index;\n if ((this.track & 1) == 0)\n this.track_data = this.data[this.track >> 1];\n else\n this.track_data = null;\n }\n\n toLongString() {\n return \"Track: \" + (this.track / 2) +\n \"\\nOffset: \" + (this.track_index) +\n \"\\nMode: \" + (this.read_mode ? \"READ\" : \"WRITE\") +\n \"\\nMotor: \" + this.motor +\n \"\\nData: \" + (this.track_data ? hex(this.track_data[this.track_index]) : '-') +\n \"\\n\";\n }\n\n read_latch(): number {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data) {\n return (this.track_data[this.track_index] & 0xff);\n } else\n return this.emu.floatbus() | 0x80;\n }\n\n write_latch(value: number) {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data != null)\n this.track_data[this.track_index] = value;\n }\n\n readROM(address) { return DISKII_PROM[address]; }\n readConst(address) { return DISKII_PROM[address]; }\n read(address) { return this.doIO(address, 0); }\n write(address, value) { this.doIO(address, value); }\n\n doIO(address, value): number {\n switch (address & 0x0f) {\n /*\n * Turn motor phases 0 to 3 on. Turning on the previous phase + 1\n * increments the track position, turning on the previous phase - 1\n * decrements the track position. In this scheme phase 0 and 3 are\n * considered to be adjacent. The previous phase number can be\n * computed as the track number % 4.\n */\n case 0x1:\n case 0x3:\n case 0x5:\n case 0x7:\n var phase, lastphase, new_track;\n new_track = this.track;\n phase = (address >> 1) & 3;\n\n // if new phase is even and current phase is odd\n if (phase == ((new_track - 1) & 3)) {\n if (new_track > 0)\n new_track--;\n } else\n if (phase == ((new_track + 1) & 3)) {\n if (new_track < NUM_TRACKS * 2 - 1)\n new_track++;\n }\n if ((new_track & 1) == 0) {\n this.track_data = this.data[new_track >> 1];\n console.log('track', new_track / 2);\n } else\n this.track_data = null;\n this.track = new_track;\n break;\n /*\n * Turn drive motor off.\n */\n case 0x8:\n this.motor = false;\n break;\n /*\n * Turn drive motor on.\n */\n case 0x9:\n this.motor = true;\n break;\n /*\n * Select drive 1.\n */\n case 0xa:\n //drive = 0;\n break;\n /*\n * Select drive 2.\n */\n case 0xb:\n //drive = 1;\n break;\n /*\n * Select write mode.\n */\n case 0xf:\n this.read_mode = false;\n /*\n * Read a disk byte if read mode is active.\n */\n case 0xC:\n if (this.read_mode)\n return this.read_latch();\n break;\n /*\n * Select read mode and read the write protect status.\n */\n case 0xE:\n this.read_mode = true;\n /*\n * Write a disk byte if write mode is active and the disk is not\n * write protected.\n */\n case 0xD:\n if (value >= 0 && !this.read_mode && !this.write_protect)\n this.write_latch(value);\n /*\n * Read the write protect status only.\n */\n return this.write_protect ? 0x80 : 0x00;\n }\n return this.emu.floatbus();\n }\n\n}\n\n/* --------------- TRACK CONVERSION ROUTINES ---------------------- */\n\n/*\n * Normal byte (lower six bits only) -> disk byte translation table.\n */\nconst byte_translation = [\n 0x96, 0x97, 0x9a, 0x9b, 0x9d, 0x9e, 0x9f, 0xa6,\n 0xa7, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb2, 0xb3,\n 0xb4, 0xb5, 0xb6, 0xb7, 0xb9, 0xba, 0xbb, 0xbc,\n 0xbd, 0xbe, 0xbf, 0xcb, 0xcd, 0xce, 0xcf, 0xd3,\n 0xd6, 0xd7, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,\n 0xdf, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xeb, 0xec,\n 0xed, 0xee, 0xef, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,\n 0xf7, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n];\n\n/*\n * Sector skewing table.\n */\n\nconst skewing_table = [\n 0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15\n];\n\n/*\n * Encode a 256-byte sector as SECTOR_SIZE disk bytes as follows:\n *\n * 14 sync bytes\n * 3 address header bytes\n * 8 address block bytes\n * 3 address trailer bytes\n * 6 sync bytes\n * 3 data header bytes\n * 343 data block bytes\n * 3 data trailer bytes\n */\nfunction nibblizeSector(vol, trk, sector, inn, in_ofs, out, i) {\n var loop, checksum, prev_value, value;\n var sector_buffer = new Uint8Array(258);\n value = 0;\n\n /*\n * Step 1: write 6 sync bytes (0xff's). Normally these would be\n * written as 10-bit bytes with two extra zero bits, but for the\n * purpose of emulation normal 8-bit bytes will do, since the\n * emulated drive will always be in sync.\n */\n for (loop = 0; loop < 14; loop++)\n out[i++] = 0xff;\n\n /*\n * Step 2: write the 3-byte address header (0xd5 0xaa 0x96).\n */\n out[i++] = 0xd5;\n out[i++] = 0xaa;\n out[i++] = 0x96;\n\n /*\n * Step 3: write the address block. Use 4-and-4 encoding to convert\n * the volume, track and sector and checksum into 2 disk bytes each.\n * The checksum is a simple exclusive OR of the first three values.\n */\n out[i++] = ((vol >> 1) | 0xaa);\n out[i++] = (vol | 0xaa);\n checksum = vol;\n out[i++] = ((trk >> 1) | 0xaa);\n out[i++] = (trk | 0xaa);\n checksum ^= trk;\n out[i++] = ((sector >> 1) | 0xaa);\n out[i++] = (sector | 0xaa);\n checksum ^= sector;\n out[i++] = ((checksum >> 1) | 0xaa);\n out[i++] = (checksum | 0xaa);\n\n /*\n * Step 4: write the 3-byte address trailer (0xde 0xaa 0xeb).\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n /*\n * Step 5: write another 6 sync bytes.\n */\n for (loop = 0; loop < 6; loop++)\n out[i++] = (0xff);\n\n /*\n * Step 6: write the 3-byte data header.\n */\n out[i++] = (0xd5);\n out[i++] = (0xaa);\n out[i++] = (0xad);\n\n /*\n * Step 7: read the next 256-byte sector from the old disk image file,\n * and add two zero bytes to bring the number of bytes up to a multiple\n * of 3.\n */\n for (loop = 0; loop < 256; loop++)\n sector_buffer[loop] = inn[loop + in_ofs] & 0xff;\n sector_buffer[256] = 0;\n sector_buffer[257] = 0;\n\n /*\n * Step 8: write the first 86 disk bytes of the data block, which\n * encodes the bottom two bits of each sector byte into six-bit\n * values as follows:\n *\n * disk byte n, bit 0 = sector byte n, bit 1\n * disk byte n, bit 1 = sector byte n, bit 0\n * disk byte n, bit 2 = sector byte n + 86, bit 1\n * disk byte n, bit 3 = sector byte n + 86, bit 0\n * disk byte n, bit 4 = sector byte n + 172, bit 1\n * disk byte n, bit 5 = sector byte n + 172, bit 0\n *\n * The scheme allows each pair of bits to be shifted to the right out\n * of the disk byte, then shifted to the left into the sector byte.\n *\n * Before the 6-bit value is translated to a disk byte, it is exclusive\n * ORed with the previous 6-bit value, hence the values written are\n * really a running checksum.\n */\n prev_value = 0;\n for (loop = 0; loop < 86; loop++) {\n value = (sector_buffer[loop] & 0x01) << 1;\n value |= (sector_buffer[loop] & 0x02) >> 1;\n value |= (sector_buffer[loop + 86] & 0x01) << 3;\n value |= (sector_buffer[loop + 86] & 0x02) << 1;\n value |= (sector_buffer[loop + 172] & 0x01) << 5;\n value |= (sector_buffer[loop + 172] & 0x02) << 3;\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n }\n\n /*\n * Step 9: write the last 256 disk bytes of the data block, which\n * encodes the top six bits of each sector byte. Again, each value\n * is exclusive ORed with the previous value to create a running\n * checksum (the first value is exclusive ORed with the last value of\n * the previous step).\n */\n\n for (loop = 0; loop < 256; loop++) {\n value = (sector_buffer[loop] >> 2);\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n }\n\n /*\n * Step 10: write the last value as the checksum.\n */\n out[i++] = (byte_translation[value]);\n\n /*\n * Step 11: write the 3-byte data trailer.\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n}\n\nfunction nibblizeTrack(vol, trk, inn) {\n var out = new Uint8Array(TRACK_SIZE);\n var out_pos = 0;\n for (var sector = 0; sector < 16; sector++) {\n nibblizeSector(vol, trk, sector,\n inn, skewing_table[sector] << 8,\n out, out_pos);\n out_pos += SECTOR_SIZE;\n }\n while (out_pos < TRACK_SIZE)\n out[out_pos++] = (0xff);\n return out;\n}\n", "\nimport { Platform, Preset, getOpcodeMetadata_6502, getToolForFilename_6502 } from \"../common/baseplatform\";\nimport { getToolForFilename_apple2 } from \"../common/toolselect\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { AppleII } from \"../machine/apple2\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { CodeAnalyzer_apple2 } from \"../common/analysis\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst APPLE2_PRESETS: Preset[] = [\n { id: 'sieve.c', name: 'Sieve', category: \"C\" },\n { id: 'keyboardtest.c', name: 'Keyboard Test' },\n { id: 'mandel.c', name: 'Mandelbrot' },\n { id: 'tgidemo.c', name: 'TGI Graphics Demo' },\n { id: 'icepiano.c', name: 'Ice Piano (Hires Demo)' },\n { id: 'Eliza.c', name: 'Eliza' },\n { id: 'siegegame.c', name: 'Siege Game' },\n { id: 'cosmic.c', name: 'Cosmic Impalas' },\n { id: 'farmhouse.c', name: \"Farmhouse Adventure\" },\n { id: 'yum.c', name: \"Yum Dice Game\" },\n { id: 'lz4test.c', name: \"LZ4 Decompressor\" },\n { id: 'hgrtest.a', name: \"HGR Test\", category: \"Assembly Language\" },\n { id: 'conway.a', name: \"Conway's Game of Life\" },\n { id: 'lz4fh.a', name: \"LZ4FH Decompressor\" },\n { id: 'deltamod.dasm', name: \"Delta Modulation Audio\" },\n { id: 'paddles.dasm', name: \"Paddles/Joystick\" },\n // {id:'zap.dasm', name:\"ZAP!\"},\n // {id:'tb_6502.s', name:'Tom Bombem (assembler game)'},\n { id: 'dos33bin.a', name: \"DOS 3.3 Binary\" },\n { id: 'applesinglebin.a', name: \"AppleSingle Binary\" },\n { id: 'hello-sdcc.c', name: 'Hello World (SDCC)', category: \"C (SDCC)\" },\n { id: 'cosmic-sdcc.c', name: 'Cosmic Impalas (SDCC)' },\n];\n\n/// MAME support\n\nclass Apple2MAMEPlatform extends BaseMAME6502Platform implements Platform {\n\n start() {\n this.startModule(this.mainElement, {\n jsfile: 'mame8bitpc.js',\n biosfile: ['apple2e.zip'],\n //cfgfile:'nes.cfg',\n driver: 'apple2e',\n width: 280 * 2,\n height: 192 * 2,\n //romfn:'/emulator/cart.nes',\n //romsize:romSize,\n //romdata:new lzgmini().decode(lzgRom).slice(0, romSize),\n preInit: function (_self) {\n },\n });\n }\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtensions() { return [\".c\", \".sdcc\", \".cpp\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n getToolForFilename = getToolForFilename_apple2;\n\n getPresets() { return APPLE2_PRESETS; }\n\n loadROM(title, data) {\n this.loadROMFile(data);\n // TODO\n }\n}\n\n///\n\nclass NewApple2Platform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new AppleII(); }\n getPresets() { return APPLE2_PRESETS; }\n getDefaultExtensions() { return [...super.getDefaultExtensions(), \".lnk\"]; }\n readAddress(a) { return this.machine.readConst(a); }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function () {\n return {\n main: [\n { name: 'Zero Page RAM', start: 0x0, size: 0x100, type: 'ram' },\n { name: 'Line Input RAM', start: 0x200, size: 0x100, type: 'ram' },\n { name: 'RAM', start: 0x300, size: 0xc0, type: 'ram' },\n { name: 'DOS Vectors', start: 0x3c0, size: 0x40, type: 'ram' },\n { name: 'Text/Lores Page 1', start: 0x400, size: 0x400, type: 'ram' },\n { name: 'RAM', start: 0x800, size: 0x1800, type: 'ram' },\n { name: 'Hires Page 1', start: 0x2000, size: 0x2000, type: 'ram' },\n { name: 'Hires Page 2', start: 0x4000, size: 0x2000, type: 'ram' },\n { name: 'RAM', start: 0x6000, size: 0x6000, type: 'ram' },\n { name: 'I/O', start: 0xc000, size: 0x1000, type: 'io' },\n { name: 'ROM', start: 0xd000, size: 0x3000, type: 'rom' },\n ]\n }\n };\n getROMExtension(rom: Uint8Array) {\n if (rom && rom.length == 35 * 16 * 256) return \".dsk\"; // DSK image\n return \".bin\";\n };\n getToolForFilename = getToolForFilename_apple2;\n /*\n newCodeAnalyzer() {\n return new CodeAnalyzer_apple2(this);\n }\n getOriginPC() {\n return 0x803; // TODO?\n }\n */\n}\n\nPLATFORMS['apple2.mame'] = Apple2MAMEPlatform;\nPLATFORMS['apple2'] = NewApple2Platform;\n"], + "mappings": "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,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,GAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,GAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAExD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,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M,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,GAAM,EAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,GAAM,EAAM,GAAM,GAC1C,EAAM,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAC1C,EAAM,GAAM,GAAM,GAAM,GAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,GAAM,EAAM,GAAM,EAAM,EAC1C,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAC1C,EAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC1C,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM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", "names": ["AppleII", "BasicScanlineMachine", "MOS6502", "GR_TXMODE", "a", "pc", "v", "lzgmini", "stringToByteArray", "APPLEIIGO_LZG", "slot", "s", "i", "data", "title", "origin", "diskii", "DiskII", "arrayCompare", "hdrOrigin", "size", "isPlausible", "exedata", "address", "btn", "pdl", "elapsed", "val", "fcyc", "yline", "xcyc", "addr", "pixels", "Apple2Display", "trap", "clocks", "key", "code", "flags", "controller", "value", "index", "pressed", "category", "state", "printFlags", "GR_MIXMODE", "GR_PAGE1", "GR_HIRES", "apple", "XSIZE", "YSIZE", "PIXELON", "PIXELOFF", "oldgrmode", "textbuf", "flashInterval", "loresColor", "RGBA", "text_lut", "hires_lut", "colors_lut", "j", "c1", "c2", "c3", "base", "b1", "b", "c", "drawLoresChar", "x", "y", "adr", "drawTextChar", "invert", "on", "off", "yy", "chr", "apple2_charset", "drawHiresLines", "maxy", "yb", "x1", "b2", "b3", "d1", "d2", "drawLoresLine", "drawTextLine", "flash", "totalrepaint", "NUM_TRACKS", "TRACK_SIZE", "SECTOR_SIZE", "DISKII_PROM", "DiskIIState", "DiskII", "emu", "image", "i", "ofs", "nibblizeTrack", "s", "hex", "value", "address", "phase", "lastphase", "new_track", "byte_translation", "skewing_table", "nibblizeSector", "vol", "trk", "sector", "inn", "in_ofs", "out", "loop", "checksum", "prev_value", "sector_buffer", "out_pos", "APPLE2_PRESETS", "Apple2MAMEPlatform", "BaseMAME6502Platform", "getOpcodeMetadata_6502", "getToolForFilename_apple2", "_self", "title", "data", "NewApple2Platform", "Base6502MachinePlatform", "AppleII", "a", "rom", "PLATFORMS"] } diff --git a/gen/arm32-BPVZ6WEV.js b/gen/arm32-6HDX2P75.js similarity index 99% rename from gen/arm32-BPVZ6WEV.js rename to gen/arm32-6HDX2P75.js index 8ccb222c..e37a0824 100644 --- a/gen/arm32-BPVZ6WEV.js +++ b/gen/arm32-6HDX2P75.js @@ -1,4 +1,4 @@ -import{F as gr,r as Rr}from"./chunk-QYEDG265.js";import{d as mr}from"./chunk-UACHXWHT.js";import{F as or,L as Fr,U as N,Z as T,_ as hr,a as Q,aa as fr,da as er,g as E}from"./chunk-V6TNHL6H.js";import{a as pr,b as nr}from"./chunk-N7W4C4V2.js";var Cr=4026531840,lr=223,Tr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=Cr|lr|Tr,a.spsr=a.spsr&~R|F&R):(R&Cr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&lr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:if(a===0){p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:if(a===0){p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,dr=(r&3840)>>4,Pr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=Pr|dr;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")",void 0,!0)}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var H=1,i=0;i<16;H<<=1,++i)l&H&&(L&&i==f&&!O&&(l&=~H,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var H=1,i=0;i<16;H<<=1,++i)l&H&&(L&&i==f&&!O&&(l&=~H,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var br=r&16777216;br?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,W=(r&61440)>>12,Or=(r&3840)>>8,m=r&255,yr=r>>28&15,a=this.conds[yr];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,W<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|W)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,W<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|W)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=W<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|W)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,Sr=P?(d?16:0)|M:M<<1|(d?1:0),wr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,Sr,wr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var kr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,Mr=0,X=67108864,z=256,Er=1e6,xr=4e6,Ar=3991793133,q=class extends Rr{constructor(){super();this.cpuFrequency=xr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(xr/(256*60));this.defaultROMSize=I-Mr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=Mr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:Ar&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,kr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){this.ioregs[i]=s,i===72&&this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` +import{F as gr,r as Rr}from"./chunk-RWTUUV4L.js";import{d as mr}from"./chunk-UXRCACYH.js";import{F as or,L as Fr,U as N,Z as T,_ as hr,a as Q,aa as fr,da as er,g as E}from"./chunk-V6TNHL6H.js";import{a as pr,b as nr}from"./chunk-N7W4C4V2.js";var Cr=4026531840,lr=223,Tr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=Cr|lr|Tr,a.spsr=a.spsr&~R|F&R):(R&Cr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&lr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:if(a===0){p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:if(a===0){p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,dr=(r&3840)>>4,Pr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=Pr|dr;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")",void 0,!0)}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var H=1,i=0;i<16;H<<=1,++i)l&H&&(L&&i==f&&!O&&(l&=~H,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var H=1,i=0;i<16;H<<=1,++i)l&H&&(L&&i==f&&!O&&(l&=~H,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var br=r&16777216;br?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,W=(r&61440)>>12,Or=(r&3840)>>8,m=r&255,yr=r>>28&15,a=this.conds[yr];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,W<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|W)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,W<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|W)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=W<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|W)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,Sr=P?(d?16:0)|M:M<<1|(d?1:0),wr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,Sr,wr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var kr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,Mr=0,X=67108864,z=256,Er=1e6,xr=4e6,Ar=3991793133,q=class extends Rr{constructor(){super();this.cpuFrequency=xr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(xr/(256*60));this.defaultROMSize=I-Mr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=Mr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:Ar&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,kr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){this.ioregs[i]=s,i===72&&this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` `,e+=4,!(e>=D+I));c++);return u;case"CPU":var u="",p=s.c;let F={2:"Thumb",4:"ARM"},R={15:"PC",14:"LR",13:"SP",12:"IP",11:"FP",9:"SB"};for(var c=0;c<8;c++){let v=c+8;u+=Q("r"+c,5)+" "+E(p.gprs[c],8)+" ",u+=Q("r"+v,5)+" "+E(p.gprs[v],8)+Q(R[v]||"",3)+` `}return u+="Flags ",u+=p.cpsrN?" N":" -",u+=p.cpsrV?" V":" -",u+=p.cpsrF?" F":" -",u+=p.cpsrZ?" Z":" -",u+=p.cpsrC?" C":" -",u+=p.cpsrI?" I":" -",u+=` `,u+="MODE "+F[p.instructionWidth]+" "+Dr[p.mode]+` @@ -6,4 +6,4 @@ import{F as gr,r as Rr}from"./chunk-QYEDG265.js";import{d as mr}from"./chunk-UAC `,u+="cycl "+p.cycles+` `,u;case"FPU":for(var u="",p=s.c,c=0;c<16;c++)u+=Q("s"+c,5)+" "+E(p.ifprs[c],8)+" "+p.sfprs[c].toPrecision(6),c&1&&(u+=Q("d"+(c>>1),5)+" "+p.dfprs[c>>1].toPrecision(12)),u+=` `;return u}}saveState(){var i=super.saveState();return i.serial={sin:this.serialIn.slice(0),sout:this.serialOut.slice(0)},i}loadState(i){super.loadState(i),this.serialIn=i.serial.sin,this.serialOut=i.serial.sout}},Dr={16:"USER",17:"FIQ",18:"IRQ",19:"SUPERVISOR",23:"ABORT",27:"UNDEFINED",31:"SYSTEM"};var Ir=[{id:"vidfill.c",name:"Video Memory Fill"}],tr=class extends gr{constructor(){super(...arguments);this.getToolForFilename=mr}getPresets(){return Ir}getDefaultExtensions(){return[".c",".armips",".vasm"]}},sr=class extends tr{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:1048576,type:"ram"},{name:"I/O",start:67108864,size:256,type:"io"}]}}}async start(){super.start(),console.log("Loading Capstone"),await or("./lib/capstone-arm.min.js"),this.capstone_arm=new cs.Capstone(cs.ARCH_ARM,cs.MODE_ARM),this.capstone_thumb=new cs.Capstone(cs.ARCH_ARM,cs.MODE_THUMB)}newMachine(){return new q}readAddress(i){return this.machine.read(i)}getPlatformName(){return"ARM7"}getDebugTree(){return nr(pr({},this.machine.cpu.getDebugTree()),{dwarf:this.debugSymbols.debuginfo})}disassemble(i,s){for(var e=this.machine.cpu.isThumb(),a=e?this.capstone_thumb:this.capstone_arm,c=[],u=0;u<4;u++)c[u]=s(i+u);var p=a.disasm(c,i,4),F=p&&p[0];return F?{nbytes:F.size,line:F.mnemonic+" "+F.op_str,isaddr:F.address>0,iscall:F.mnemonic=="bl"||F.mnemonic=="blx"}:{nbytes:4,line:"???",isaddr:!1}}};Fr.arm32=sr;export{tr as BaseARMMachinePlatform}; -//# sourceMappingURL=arm32-BPVZ6WEV.js.map +//# sourceMappingURL=arm32-6HDX2P75.js.map diff --git a/gen/arm32-BPVZ6WEV.js.map b/gen/arm32-6HDX2P75.js.map similarity index 100% rename from gen/arm32-BPVZ6WEV.js.map rename to gen/arm32-6HDX2P75.js.map diff --git a/gen/astrocade-TDMFEDW6.js b/gen/astrocade-S4VJAMLF.js similarity index 99% rename from gen/astrocade-TDMFEDW6.js rename to gen/astrocade-S4VJAMLF.js index ef7d3c70..f2220dc0 100644 --- a/gen/astrocade-TDMFEDW6.js +++ b/gen/astrocade-S4VJAMLF.js @@ -1,4 +1,4 @@ -import{H as D0,c as l0,d as m0,e as u0,k as h0,r as E0}from"./chunk-QYEDG265.js";import"./chunk-UACHXWHT.js";import{L as k,Z as A,_ as C0,aa as X0,ca as x0,da as N,g,l as c0,m as B0,t as g0}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var I0=X0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),P0=2,R0=function(d){var f,t,i,o,U,X,W,i0,J;let G=d?320:160,K=d?204:102,s0=G>>2,b0=d?16383:4095,H0=256,v0=4293848814,y0=4278190080,p0=d?3:1,w0=.7;var n0=0,j=new Uint8Array(32),c=0,D=0,m=!1,Y=0,b=0,p=0,V=0,w=0,Q=K,T=new Uint32Array(8),H=new Uint8Array(8),Z=0,v=new Uint8Array(d?262:131),u=new Uint8Array(4),h=0,S=0,l=0,L=0,B=new Uint8Array(8),M=0;function Q0(){return f.scanline=(b&63)?0:4;i0[s--]=T[E+(x&3)],x>>=2}}function a0(e){for(var x=e*G/4,s=0;s>=4);for(var n=0;n<4;n++){var E=x&1?D>>2&3:D&3;s|=E<>=1}x=s,m=!m}if(c&4){if(h&4){var a=2*(~h&3);x=(u[3]>>a&3)<<6|(u[2]>>a&3)<<4|(u[1]>>a&3)<<2|(u[0]>>a&3)<<0}else u[h&3]=x;h++}else{var a=(c&3)<<1,s=x>>a|Y;Y=x<<8-a&255,x=s}if(c&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),c&48){var F=i[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),c&16&&(x|=F),c&32&&(x^=F),S=S&240|r|r<<4}y(e,x)}function _(e,x){H[e&7]=x&255,T[e&7]=F0[x&255],O()}function M0(){var e=b>>6}function O(){Z=K}function V0(){let e=B[0]|B[1]<<8,x=B[2]&63,s=B[3],n=M&255|B[4]<<8,E=B[5],a=B[6]+1,F,r=0,C=0,N0=l;r=0,(x&2)===0&&(r=1);function f0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function o0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let q;for(F=E;F>=0;){let $,e0;$=(x&1)===0?e:n,F===0&&(x&8)!==0?e0=0:e0=o.read(e),(x&1)===0?f0():o0(),$=(x&1)!==0?e:n,y($,e0),(x&1)===0?o0():f0(),C+=4,F--}q=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=q:n-=q^256,a--}l=N0+C}this.drawScanline=e=>{e==V&&p&8&&(t.retryInterrupts=!(p&4),this.probe&&this.probe.logInterrupt(w),t.interrupt(w)),e0?(v[e]=0,a0(e),Z--):v[e]&&(v[e]=0,a0(e))},this.init=(e,x,s,n,E)=>{f=e,n0=e.cpuCyclesPerLine*w0,t=x,i=s,j=n,J=E,d?o={read:N([[16384,32767,16383,function(F){return z(),i[F]}],[53248,57343,4095,function(F){return i[F+16384]}],[0,16383,16383,function(F){return X?X[F]:0}],[32768,49151,16383,function(F){return X?X[F+16384]:0}]]),write:N([[16384,32767,16383,y],[0,16383,16383,d0],[53248,57343,4095,function(F,r){i[F+16384]=r}]])}:(W=x0(new c0().decode(B0(atob(G0))),8192),o={read:N([[0,8191,8191,function(F){return W[F]}],[8192,16383,8191,function(F){return X?X[F]:0}],[16384,20479,4095,function(F){return z(),i[F]}]]),write:N([[16384,20479,4095,y],[0,16383,4095,d0]])}),U={read:function(F){F&=31;var r;return F===8?(r=S,S=0):r=j[F],r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){B[F&7]=r,F==114&&(M=0),F==116&&(M=M+B[3]&255),F==126&&V0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:_(F,r);break;case 9:b=r,M0(),O();break;case 10:Q=d?r:r>>1,O();break;case 11:var C=t.saveState();_((C.BC>>8)-1,o.read(C.HL));break;case 12:c=r,Y=0,h=0,m=!1;break;case 13:w=r;break;case 14:p=r;break;case 15:V=d?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:J.setACRegister(F,r);break;case 24:var C=t.saveState();J.setACRegister((C.BC>>8)-1,o.read(C.HL));break;case 25:D=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(o),e.connectCPUIOBus(U),this.membus=o,this.iobus=U;for(var a=0;a<8;a++)_(a,a)},this.resetWaitStates=function(){var e=l;return l=0,e},this.peek=function(e){var x=l,s=o.read(e);return l=x,s},this.loadState=e=>{t.loadState(e.c),i.set(e.ram),T.set(e.palette),H.set(e.palinds),c=e.magicop,D=e.xpand,m=e.xplower,Y=e.shift2,b=e.horcb,p=e.inmod,V=e.inlin,w=e.infbk,Q=e.verbl,h=e.rotcount,u.set(e.rotdata),S=e.intst,L=e.slotphase|0,j.set(e.inputs),B.set(e.patboard),M=e.patdest,O()},this.saveState=()=>({c:t.saveState(),ram:i.slice(0),inputs:j.slice(0),palette:T.slice(0),palinds:H.slice(0),magicop:c,xpand:D,xplower:m,shift2:Y,horcb:b,inmod:p,inlin:V,infbk:w,verbl:Q,rotcount:h,rotdata:u.slice(0),intst:S,slotphase:L,patboard:B.slice(0),patdest:M}),this.reset=()=>{c=D=p=V=w=Y=b=0,Q=K,m=!1},this.toLongString=e=>{var x="";x+=` +import{H as D0,c as l0,d as m0,e as u0,k as h0,r as E0}from"./chunk-RWTUUV4L.js";import"./chunk-UXRCACYH.js";import{L as k,Z as A,_ as C0,aa as X0,ca as x0,da as N,g,l as c0,m as B0,t as g0}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var I0=X0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),P0=2,R0=function(d){var f,t,i,o,U,X,W,i0,J;let G=d?320:160,K=d?204:102,s0=G>>2,b0=d?16383:4095,H0=256,v0=4293848814,y0=4278190080,p0=d?3:1,w0=.7;var n0=0,j=new Uint8Array(32),c=0,D=0,m=!1,Y=0,b=0,p=0,V=0,w=0,Q=K,T=new Uint32Array(8),H=new Uint8Array(8),Z=0,v=new Uint8Array(d?262:131),u=new Uint8Array(4),h=0,S=0,l=0,L=0,B=new Uint8Array(8),M=0;function Q0(){return f.scanline=(b&63)?0:4;i0[s--]=T[E+(x&3)],x>>=2}}function a0(e){for(var x=e*G/4,s=0;s>=4);for(var n=0;n<4;n++){var E=x&1?D>>2&3:D&3;s|=E<>=1}x=s,m=!m}if(c&4){if(h&4){var a=2*(~h&3);x=(u[3]>>a&3)<<6|(u[2]>>a&3)<<4|(u[1]>>a&3)<<2|(u[0]>>a&3)<<0}else u[h&3]=x;h++}else{var a=(c&3)<<1,s=x>>a|Y;Y=x<<8-a&255,x=s}if(c&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),c&48){var F=i[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),c&16&&(x|=F),c&32&&(x^=F),S=S&240|r|r<<4}y(e,x)}function _(e,x){H[e&7]=x&255,T[e&7]=F0[x&255],O()}function M0(){var e=b>>6}function O(){Z=K}function V0(){let e=B[0]|B[1]<<8,x=B[2]&63,s=B[3],n=M&255|B[4]<<8,E=B[5],a=B[6]+1,F,r=0,C=0,N0=l;r=0,(x&2)===0&&(r=1);function f0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function o0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let q;for(F=E;F>=0;){let $,e0;$=(x&1)===0?e:n,F===0&&(x&8)!==0?e0=0:e0=o.read(e),(x&1)===0?f0():o0(),$=(x&1)!==0?e:n,y($,e0),(x&1)===0?o0():f0(),C+=4,F--}q=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=q:n-=q^256,a--}l=N0+C}this.drawScanline=e=>{e==V&&p&8&&(t.retryInterrupts=!(p&4),this.probe&&this.probe.logInterrupt(w),t.interrupt(w)),e0?(v[e]=0,a0(e),Z--):v[e]&&(v[e]=0,a0(e))},this.init=(e,x,s,n,E)=>{f=e,n0=e.cpuCyclesPerLine*w0,t=x,i=s,j=n,J=E,d?o={read:N([[16384,32767,16383,function(F){return z(),i[F]}],[53248,57343,4095,function(F){return i[F+16384]}],[0,16383,16383,function(F){return X?X[F]:0}],[32768,49151,16383,function(F){return X?X[F+16384]:0}]]),write:N([[16384,32767,16383,y],[0,16383,16383,d0],[53248,57343,4095,function(F,r){i[F+16384]=r}]])}:(W=x0(new c0().decode(B0(atob(G0))),8192),o={read:N([[0,8191,8191,function(F){return W[F]}],[8192,16383,8191,function(F){return X?X[F]:0}],[16384,20479,4095,function(F){return z(),i[F]}]]),write:N([[16384,20479,4095,y],[0,16383,4095,d0]])}),U={read:function(F){F&=31;var r;return F===8?(r=S,S=0):r=j[F],r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){B[F&7]=r,F==114&&(M=0),F==116&&(M=M+B[3]&255),F==126&&V0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:_(F,r);break;case 9:b=r,M0(),O();break;case 10:Q=d?r:r>>1,O();break;case 11:var C=t.saveState();_((C.BC>>8)-1,o.read(C.HL));break;case 12:c=r,Y=0,h=0,m=!1;break;case 13:w=r;break;case 14:p=r;break;case 15:V=d?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:J.setACRegister(F,r);break;case 24:var C=t.saveState();J.setACRegister((C.BC>>8)-1,o.read(C.HL));break;case 25:D=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(o),e.connectCPUIOBus(U),this.membus=o,this.iobus=U;for(var a=0;a<8;a++)_(a,a)},this.resetWaitStates=function(){var e=l;return l=0,e},this.peek=function(e){var x=l,s=o.read(e);return l=x,s},this.loadState=e=>{t.loadState(e.c),i.set(e.ram),T.set(e.palette),H.set(e.palinds),c=e.magicop,D=e.xpand,m=e.xplower,Y=e.shift2,b=e.horcb,p=e.inmod,V=e.inlin,w=e.infbk,Q=e.verbl,h=e.rotcount,u.set(e.rotdata),S=e.intst,L=e.slotphase|0,j.set(e.inputs),B.set(e.patboard),M=e.patdest,O()},this.saveState=()=>({c:t.saveState(),ram:i.slice(0),inputs:j.slice(0),palette:T.slice(0),palinds:H.slice(0),magicop:c,xpand:D,xplower:m,shift2:Y,horcb:b,inmod:p,inlin:V,infbk:w,verbl:Q,rotcount:h,rotdata:u.slice(0),intst:S,slotphase:L,patboard:B.slice(0),patdest:M}),this.reset=()=>{c=D=p=V=w=Y=b=0,Q=K,m=!1},this.toLongString=e=>{var x="";x+=` INLIN: `+e.inlin,x+=` VERBL: `+e.verbl,x+=` MAGICOP: $`+g(e.magicop),x+=` @@ -11,4 +11,4 @@ XPLOWER: `+e.xplower,x+=` INTST: $`+g(e.intst),x+=` Palette: `;for(var s=0;s<8;s++)x+=g(H[s]);return x+=` `,x},this.connectVideo=function(e){i0=e},this.loadROM=function(e){X=e},this.loadBIOS=function(e){W=e},this.getVisiblePixelWords=function(){return Q*G}},P=class extends E0{constructor(t){super();this.cpuFrequency=1789e3;this.arcade=t,this.cpu=new l0,this.psg=new t0(new m0),this.numTotalScanlines=t?262:131;var i=P0*(t?1:2);this.sampleRate=60*this.numTotalScanlines*i,this.audioadapter=new h0(this.psg.psg,i,this.sampleRate),this.handler=C0(this.inputs,I0),this.defaultROMSize=t?45056:8192,this.ram=new Uint8Array(t?20480:4096),this.numVisibleScanlines=t?204:102,this.canvasWidth=t?320:160,this.cpuCyclesPerLine=this.cpuFrequency/(60*this.numVisibleScanlines*1.286)|0,this.m=new R0(t),this.m.init(this,this.cpu,this.ram,this.inputs,this.psg),t&&(this.inputs[16]=255,this.inputs[17]=255,this.inputs[18]=0,this.inputs[19]=8)}read(t){return this.m.peek(t)}write(t,i){this.m.membus.write(t,i)}connectVideo(t){super.connectVideo(t),this.frontbuffer=t,this.backbuffer=new Uint32Array(t.length),this.m.connectVideo(this.backbuffer)}preFrame(){this.m.resetWaitStates()}postFrame(){var t=this.m.getVisiblePixelWords();this.frontbuffer.set(this.backbuffer.slice(0,t),0),this.frontbuffer.fill(0,t)}setPaddleInput(t,i){switch(t){case 0:this.inputs[28]=i&255;break;case 1:this.inputs[29]=i&255;break}}startScanline(){this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){var t=this.scanline;this.m.drawScanline(t)}advanceCPU(){var t=super.advanceCPU(),i=this.m.resetWaitStates();return i&&(t+=i,this.probe.logClocks(i)),t}loadROM(t){super.loadROM(t),this.m.loadROM(this.rom),this.reset()}loadBIOS(t){this.m.loadBIOS(x0(t,8192)),this.reset()}reset(){super.reset(),this.m.reset()}loadState(t){this.m.loadState(t)}saveState(){return this.m.saveState()}getDebugCategories(){return["CPU","Stack","Astro"]}getDebugInfo(t,i){if(t==="Astro")return this.m.toLongString(i)}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}getVideoParams(){return this.arcade?{width:320,height:204,rotate:180}:{width:160,height:102}}},t0=class extends u0{setACRegister(f,t){switch(f&=7,t&=255,f){case 0:this.psg.setClock(1789e3*16/(t+1)),this.psg.writeRegisterAY(7,248);break;case 1:case 2:case 3:var i=(f-1)*2,o=t*2+1;this.psg.writeRegisterAY(i,o&255),this.psg.writeRegisterAY(i+1,o>>8&255);break;case 5:this.psg.writeRegisterAY(10,t&15);break;case 6:this.psg.writeRegisterAY(8,t&15),this.psg.writeRegisterAY(9,t>>4&15);break}}},F0=[0,2368548,4737096,7171437,9539985,11974326,14342874,16777215,2425019,4784352,7213567,9582079,12016383,14384895,16753663,16762879,4784304,7143637,9568761,11937279,14306047,16740095,16749311,16758783,6946975,9306307,11731175,14096639,16465151,16736767,16745983,16755199,8847495,11206827,13631696,15994612,16724735,16733951,16743423,16752639,10420330,12779662,15138995,16713687,16723195,16732415,16741631,16751103,11534409,13959277,16318610,16713142,16722394,16731647,16741119,16750335,12255269,14680137,16711790,16713362,16722615,16732123,16741375,16750847,12517376,14876708,16711752,16714605,16724113,16733366,16742874,16752127,12255232,14680064,16711715,16716871,16726380,16735632,16745141,16754393,11534336,13959168,16318464,16720164,16729416,16738924,16748177,16757685,10420224,12779520,15141888,16723971,16733479,16742731,16752240,16761492,8847360,11206656,13639168,16007680,16738058,16747310,16756563,16766071,6946816,9309440,11743488,14112256,16480768,16752151,16761659,16770911,4784128,7151872,9585920,11954688,14323200,16757509,16766761,16776270,2429184,4797696,7232e3,9600512,12034816,14403328,16771870,16777027,9472,2377984,4746496,7180800,9549312,11983616,14352155,16777023,14080,23296,2326528,4695040,7129344,9497856,11927326,14286659,18176,27648,36864,2405376,4774144,7142661,9568041,11927374,21760,30976,40192,246272,2614784,4980503,7405371,9764703,24320,33536,43008,52224,716810,3079982,5504851,7864183,25856,35328,44544,53763,63271,1572683,3932016,6291348,26624,35840,45312,54564,63816,393068,2752401,5177269,26112,35584,44835,54343,63596,65424,2031541,4456409,24832,34084,43592,52845,62353,65462,1834970,4194302,22565,31817,41326,50578,60087,65499,2031615,4456447,19273,28781,38034,47542,56794,393215,2752511,5177343,15466,24718,34227,43479,52987,1569535,3932159,6291455,10887,20395,29648,38900,703743,3072255,5505023,7864319,6047,15299,24807,230655,2599167,4967935,7401983,9764863,688,10197,19449,2388223,4756735,7125503,9559551,11927551,187,5088,2308095,4676607,7110911,9479423,11913727,14282239];for(I=0;I<256;I++)Y0=F0[I],F0[I]=g0(Y0)|4278190080;var Y0,I;var G0="TFpHAAAgAAAAFHUyA4UHAUpdY2XzIQAgfv5Vyg0AwwAgMc5PzR4JIQUgfiNmb+kAZRrl9cXV3eX95SEAADnlzc4H4f3h3eHRwfHhyUztacnd5d1jEd053X4Gyw8mAN1+BN2OBSdvyxTd4ckBCwjts8kAQ15cJVJTOy83ODkqNDU2LTEyMysmMC49XRtuZR9lH2UeZQjD4ALD4QIgCAgBB2IToAQGAQU+FT9lAfv1xdXl/eUB1U8KPAIB1mWj12Wj2GWi/SHrT/00AP1+ANY8ICL9NgAAIexPNP0h40/9ywD+/SHtXQgWBCHuTzQ61E+3KBL9IepPYw23KAX9NQAYA82VCf3hXUIt7U1dRikOXUIktyhG3csERig5EdVPaSYAGX63KC4+1YFfPk/OAFch1U8GAAl+3YYFErcgF0H1HgHxBBgCyyMQ/P0h+l0CVrP9dwBjNz4MGLTd4cllASEP/+XNhwLxycnB4eXFEQYAGUY+//UzxTNjjV0GcvXdTgTdRgUhDAAJ4+HlXiNWGm8+ApUwCcXFzc4H8cEY6xNL4eVxI3Ld+V0CTl0DQgoAGU4jZmnDqhxdEj1pYGNZXiNW4eVzI3JdBEvWCChdB0ntXQRCXWgkXgTdVmNzGU1E610FM3sCA3oCYx5dB1j1XQge3XX+3XT/3W7+3Wb/TiNG3csGbigi1f3h/SP9IwpvAzMzxf11AF0FCP0j4eVuwcUDYwpjIE4oC/0hBAD9GQoDXSMkBlZjSQVdCQleY0kGXQkJZmNJB10JCXZjSQldCQl+KB79IQpjSV0GdP0hC2MH4eVeXQJxcwBdBKJxI3BdA/DRwcXVxf3h/VYH1TPFzaYD8TPJAaYEeO1H7V77PsjTDz6m0w0+CNMOzeICw+MCGAJjaGlgEQUAGX7TCmMBB2NBCWMBCWNBDl0siXIAXSdNXSOIYx8EXSNI1f3hYwQGY4RpYAEJAAlu/eXBJgDV5cXNqxwhBgA5XQKUIetPTjrrT5Eo+l0olV0k0AcACV5TFXJ7tygHxc0UBV0ivV0olV0kk2tiAQQACU4jRl0ic24K/WYL5f3h610FbNX95cXN1l0HYV0nzztdFjRdJN1jR34H3Xf9HgDdVv3dNf16tyglXSRIVt00/iAD3TT/CmfFe/Uz5TPVM81WAPEzwVx9AgMY0V0jZF0HX/0h70/9RgD9XgH9VgIOAPE+BcsgyxPLEj0g9/1+AKn9dwD9fgGo/XcB/X4Cq/13Av1+A6r9dwP1/U4C/UYDEQAA8cs4yxldGyP9TgD9RgH9XgL9VgNdAlghyxBdBFr1XRovXSVXCQAJTUQKtyAGYyQCGBtfFgAhAADF5dUq8U/lKu9P5c0lHfFlAcF9XWoMY/RdQ3QJ/V4A/VYBXQVAbyYAGV1Cf3QBfl0bKAFpYMVdQgPBbiYAKV0FKgNlAV1xeF0loF0jiAbdd/9rYgEKXSOp3W7/yz0mYwMhCQAZ3cv/RigJeQdlAeYPGAN55g93M11PIGNhTURdAkJeByF4ABYAGV0Dnl1F4GMVfjLUT12EPH79Ic5P/XcAI379dwFpYCNl4SHQXQcJIepPNgDJIdRlol1JSX4E3Xf+3X4F3Xf/3X7+xgxv3X7/zgBn5U4jRuFZUBNzI3IK3Xf9T8s53cv9figbKvtdok9eBgBdIqr9Kv1P/Qn9bgD9ZgEYFQYAaWApCRFeCBlNRCMjXmlgfiNmb2MuRigR5Xv1M91O/t1G/11kvOFdBgWqHF1DcgEDADYDADcDgEYDgIADAIIDgHgEEIsEAO0CCJAH4MgHAKgEVMgEgNcEXqsPXoEDoC8cxvAbxj0Z3oEDZUEmgQOWgQOegQOGZaG8F06bF47mF2MHRmVDqGMoawcAaAsGPw6AyQ6AgQMAY6KYYyUfBRCBAw6BA4AmB4hloeoGwLoGwEMFYzQAfQWWY6JlVOQFQGOBwF0DQ44h8v85+SHOTwYZr3cjdyMQ+SEAAOXNiwTxPsDTCj4p0wldgptKBAD7aAvxIQ4AOfnJKs5PTl0jqTQAIAP9NAFpyV0jpl0FBipjAyECAP05/X4Ad8ljBk5lYSsi0E9pye1L0E8Kxv8Cb11IZ81SCd11/33WgNJRCt1+/zLqTyHUT07LQSgIxWMTwX3TF8tJXQcEFMtRKA4qzk9+0xO3KAU600/TFctZKAxdCoTLYSgNY5oStyAEee4QT8tpXQ0ZcV0FGRFjmUBPy3ldDxkIOtJP5g9HGAIGAMthKAdjRvAYAj4AsNMWw2QL3X7/1ogwH10Csn7/BgDGkE94zv9BDgAmAH2xb3ywZ81SAF0GHiAnT3nWCNJkC10DuVkGAD4Xk18+AJhXYySzb3yyZ2MQAMEMGNpjJubwT9aQKB15/qAoJf6wKDD+wChC/tAoYv7gKHHW8MpXC8NkC2M+/SHUT/11XQVaxmFHxTPNZAkzXQYU0mNUY4LTY0IYZs2LCX23KAxdIqsjRu1Dzk8YUyHOT37GAncjfs4Ad81+CRhCXQJ1D09jT4FjzhgvYwvW4SAo0xU+ANMWYzV+MupPXSYdEv00ARgNYxFjlV1jj11q9SHr/zn53TbwAN0272Vh8l2C2jnddfnddPrdbvndZvrbEHfdfvnGAd139d1++s4A3Xf23W713Wb22xFjkQLdd/ddBRH43W733Wb42xJjkQPdd/NdBRH03W7z3Wb02xN33TbxAGMV3Ybxb2OUZ37dd/vdfvHG5N13/D4Azk/dd/3dbvzdZv3dfvuWKDpjE4fGFd138F0THH7drvvLZygD3TRjGF0MTe/dNPFjLNYEOJAR5E9dBMMBBADtsGPD2xR3XQW+FWMBXQOuFmMBXQOeF3ddg6X8XYOl/d1+/F2Dsf3dd/8OXQK0gV9dA11XGke3KC1dxO0jZQF+I2aBb3xdAnWgErcoFEEEGm+3KAoEZQF9yz8SGPHdcPIMedYEOL3dfvK3KB5KAwKTfgDdlvIoEmMK/XcAZaFdAq828BMYKWNcICNdBRy3KBn9ywB+KAZjFBEYBGWhEl0ipWMVNgBdBcYcXQbGHV0Gxh5dBsYfdw5dBR4GAAlGEd9KAwK6XniTKAl5xhxdIlFw710DkNtdIjpdAuH63Xf/Yx9dBNJdIyv9Id5dBIAzZaHdd+8GB93L734oHnjGCWM59Q5KBALqIRD8XQUhXeJPGGNcJgUY1UoFAv5dHDVj4V0LNd1+8NYSOAUh7E82/91+/MYJT91+/c4AR2MQAmNIB10HCO8CSgsAUyH5XULPXeS+CgAJSgoClF4jVjMzXcbM3Xf70dUab911/X3WwDBG3X795j9dI/P73Zb8IC7h5SNjJ2PwcyNyY1fAKAr+QCgG1oAoCRgWxc03A/EYD8XNRmXBCBMTEzMz1RiwXQuCSggAQ+vFXeKfBxLFzT8O8UoMAz1+BA8PXQRxTgXLOcs53V4GFgBrYikpGSkpKREAQBndXvwWSgcDW34E5gNfIacPYwpG3X78kSAEPgEYAa/dd/23XUJFBV0HFn4vX3ijR10F73gvV3uiX3jdpgezY8p33X79tyAw3V7+3Vb/E91G/AR4kTAH3X4HEhMY9BpPXQNBxqdvPg/OAGdGeaBPeC9jNLESXQPW/z8PA10nZF3CjV0F3wVdImT43XT53W743Wb5fl2CFXH+3XD/3XH83XD93XH63XD73XH13XD2XQca9N138t028wBdRLsRBwAZTgYA4eUJ3X73BgCVeJziGBDugPJVEF0Erl0ir05dZPcRBF0C+W763Wb7SgMCyHiDV3n1M2Mv9TPVM8UzzesO8fHdNPcYlV1ME9ddAqddYtrsXWPa7d1u7N1m7REFABlOI0ZdI3Jjym4mAHuVX3qcV91+7MZKBAC27V2Cxl1FQGMXxeXVzZAc8fHBCd115d105gEAAN1eCF0osgndTgddIsdZXSO08N108d1+B+YDy99P3X4J5jCx3XfkY0HAY4cPR3m3ygQTIQVdonj03XT13X70xgBf3X71zsDdc9rdd9tjHgdjN/XdNtkB8TwYBN3L2SY9IPljYAFdQ631XQKX/WMf5oDdd+djEN13+mMOXaNbYwT4Y4RjKPxdor1dgsr3edbAXUc2791w7t1+5d136t1+5t1369022EoFBR3dftiW0kQTPgjTDD4M0xndftpdAmno3X7bXQJp6d1u6t1m607dNOogA900691u2t1m23HdbujdZulx3X7ntyhF3W703Wb1ft1312N1A10i6mP1891O2t1G2wMDXaXKAt1u8t1m83dj/d1+12MCXQJAY4J+77fKohJdDERdYvvbXWP72sYGX2OEV11EDF2ijRICY1AFXQkcBF0HHF1Cd2PbXQV7A91e2t1W2xMT3W723Wb3Y1JdE37u0xkOAHndltkwT91+5NMMHgB7Y0UjXQSRXWOObvDdZvFwZcQjcCNdJPUcGNfdbtkmACk+KJVfPgBdQlHwg13E1Irdd/EMGKvdNNjDjxF40xndTuXdRuYeXSV4VnuSMCoKVwNdA2ZdBE1yZcQjciM2ACN9xiVjP3xdIkjxHBjLXUS3I25dRShH9V2jWyUQ/F1jAEoFCWEgZQFloVBQY4ZI/EhIZWEgeIBwCPAgAEgQIECQAGCQYKCokGhgYGMhYyNAZQIgQGNxIEAAqHD4cKhjf/hdAkBlAWBjDQAA8F0FVwBgYAAIYz6AAHCIiKiIiHAgYGNwcHCICDBAgPhlwXAIiHAQMFCQ+BAQ+ICAY0ZwiIDwYyL4iBBjo2MDZUFlYXhjFAAAYGUhZQFlwSBAXQJRQCAQAAD4ZSEAYwJdAmNwCAgwIABjMLiokIBjcPiIiIjwZURwiICAgIhwYwNjTPiAgPCAgPhlxIBjFLBdA2RjqXBdA9hwCGUBY02QoMCgkGN1ZQH4iNioY7nIqKiYY+ZloV0CV2O+iKiokGhjRpCQYzFdA8r4XQNFIGOhXQNaiIhQY4ao2GODUGPKZQH4XSMl+HBdI11wAF0C1ggAcBBlAnAgcKhdJKVA+EBlwiAgqHAgACAQ+BBjBmO+Yw0A+GVhZQNAQABAAKCgYwJg8PBgAEDg4EAAkF0iyMCw4NBjPV0kxCAAQF0iv0DgQGMiZaFdJLsAAOBj/ABjFUAA4KCgoODAQEBjPCDggGWBYCBjC+AgY0Ug4GWBoGMMY1egY0JjEeBjMkBjd2AgACBdAqXgZSEAQCBAAGM0AEDwkBDQ8GBjJQDAYyYAYICA4ADAoKDAAODAYwJlgYBjDGMRoGNb4EBAYxsgY0fAwKAAgGNl4OBjUaCgZYNjB6DggGWC8GWBYxvggGBjDEBAXQL3Y77AgACgYysAoEBjKqBjEgDgIF0CTUBAYABAQCAgAGAgXQKPXSIkZQLwgF0E/2M0XQLTYwKA4EoHCbNd459KEwIP3V4G3VYHGkcTeLcgE2MRxgRKBwCPCALDWxd41iAwJCEGAk1E1d1mCt1uCeXdVggeINXFzVoQ8fHx0WMfhd13CBi9eNZkMCNdBxx+CPUzxTNjMOVdDSCVeNaAOJBKBgJzfiNmb+X94V0NL/1dDS3DuhZKEQCPxf3h/V4GaWAjZQFWY0VmBUoFCa3dbgbdZgflxc2SFiEHSgwKFkoHCrxKBAwM1cXNYBfxSgsAyWWhOetdCFp+CRJrYiM2AGOiXeyESgMAM10iT/tdI0/83W773Wb8XeLRfl3ComPGBWOG+l0FBgZjhvhdBQYHY4b35j9dw8v35kDdd/+3KAshDQLddf3ddP4YCSEGXQUDXSOl9N1+/koDBMNjHgQegBgCHgDdc/NjcoBdwo1dBE1KAwuwRt1e9hYAe8b/3Xf9es5lof7dbv3dZv7dy/5+KAJrYsssyx0JXQVSXvZLHXm3KGhj2n7LQygJSgQJZk8YEGWBY88rY+V5tyAKSgMD/AQOEBgESgMFaysZBgAJTnndhvNH1d1m+N1u+uXdfvldIr9dxEtdKMT5hd13+RiSXSM9MDEyMzQ1Njc4OSorLC0uLyBdR6Mh510iT0oLChPoSgYLrOljQU4Ea2JdIuxKBQvSCXnmA7Xdd+dKBg3fXSIKcvRYSgoCewAZ3XXu3XTv3X7nXSJc+3lKBAKp8N1++7coBz4n3ZbwGAPdfvDdd+1jWwhjk+5dYyfvXWInNusA3X7r3Zbp0usbYxnTDN1+7V0igDb2YxDwt8r5Gt1+80oDBkNKAwChNuwA3W7oJgAp3X7sXSJyNv9jH/6V3X7/nOInGu6A8l8bSgQE4X7dd+rdNPcgA900+F0DhFzdfvXdlv7dd/Hdfvbdnv9dIs5+/N2G8V1CSH793Y7yXUND+d1m+t1+6nfdfvFdItpjE/JdItxjDGMk+V0GJPpdCyQYUl0CVIb+Y5b23Y5dCijxXQYo8t1u8d1m8mNo3TT5XQKQXRtM3TTsZUHDChpKAwBK6DBt3XH53Tb6AN1e891W9BNKBAW9Rl0D0iFdA9L5b10D0Ppn3X78hWME/YxnXSSncBgfY1mGY9mO+md93Yb8b3zdjv1dBhkMGJzdfvdKAweP+F1iAk7sXQZlXQJXLl0EV10mMV0Dw10lMV0E1fJdB9U2ABgsXQRkXSYDXQPNXRXfNgBjEsYoXUME/UoEApo068PbGV2LAkoGEKIKSgYQ50oDD+gJGm8TSgMPsgddBwRKAxC2xc09XQ03O0oXBeVKAxBTCUoDBnX9Yzvdfv2V/XcASgMQWF0PDkoHBeLFzfAbXQNZ8cHR1cX1r2+wBhAgBAYIeSnLERcwARkQ98npSgwNON1OCN1GCWlgC3y1KAfdfgYSExjy3W4E3WYFSg4F413IPGPxXWKX/t1dYpT/XQo9E10EhX5KBg9JEhMY5uHlXQvuAWWBfgsHOEDdywgm3csJFt3LCmVhCxZdAl6WCF0CXp4JXQJYngpdAlieCzASYxY+Yx4eYyZlYQgeGAQESBi6XRYoOCRdBRJ3BF0FFXddA6hjGHcGY9vddwddDkxBDXi3IKxdBfVd4xRKCAJvZR9lH2UfZR9lG2UB";var K0=[{id:"01-helloworlds.asm",name:"Hello World (ASM)"},{id:"02-telephone.asm",name:"Telephone (ASM)"},{id:"03-horcbpal.asm",name:"Paddle Demo (ASM)"},{id:"hello.c",name:"Hello Graphics"},{id:"lines.c",name:"Lines"},{id:"sprites.c",name:"Sprites"},{id:"vsync.c",name:"Sprites w/ VSYNC"},{id:"fastsprites.c",name:"Fast Sprites"},{id:"music.c",name:"Music"},{id:"rotate.c",name:"Rotate Op"},{id:"rainbow.c",name:"Rainbow"},{id:"cosmic.c",name:"Cosmic Impalas Game"},{id:"racing.c",name:"Pseudo 3-D Racing Game"}],j0=[{id:"bios.c",name:"BIOS"}],T0=[{id:"hello.c",name:"Hello Graphics"}],R=class extends D0{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Screen RAM",start:16384,size:4096,type:"ram"},{name:"BIOS Variables",start:20430,size:50,type:"ram"}]}}}newMachine(){return new P(!1)}getPresets(){return K0}readAddress(t){return this.machine.read(t)}showHelp(){return"https://8bitworkshop.com/docs/platforms/astrocade/"}},A0=class extends R{getPresets(){return j0}loadROM(f,t){this.machine.loadBIOS(t)}},r0=class extends R{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:16384,type:"rom"},{name:"Magic RAM",start:0,size:16384,type:"ram"},{name:"Screen RAM",start:16384,size:16384,type:"ram"},{name:"ROM",start:32768,size:16384,type:"rom"}]}}}newMachine(){return new P(!0)}getPresets(){return T0}};k.astrocade=R;k["astrocade-bios"]=A0;k["astrocade-arcade"]=r0; -//# sourceMappingURL=astrocade-TDMFEDW6.js.map +//# sourceMappingURL=astrocade-S4VJAMLF.js.map diff --git a/gen/astrocade-TDMFEDW6.js.map b/gen/astrocade-S4VJAMLF.js.map similarity index 100% rename from gen/astrocade-TDMFEDW6.js.map rename to gen/astrocade-S4VJAMLF.js.map diff --git a/gen/atari7800-5OD4EMMG.js b/gen/atari7800-V3WYZERI.js similarity index 98% rename from gen/atari7800-5OD4EMMG.js rename to gen/atari7800-V3WYZERI.js index 9f9cbefb..cfe5150e 100644 --- a/gen/atari7800-5OD4EMMG.js +++ b/gen/atari7800-V3WYZERI.js @@ -1,7 +1,7 @@ -import{a as j}from"./chunk-6P6VNFPR.js";import{G as $,h as z,k as Y,m as K,q as V}from"./chunk-QYEDG265.js";import{f as H}from"./chunk-UACHXWHT.js";import{L as O,Y as R,Z as o,_ as E,aa as N,ca as W,da as _,g as S}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var b=0,F=2,v=8,Z=N([[o.A,v+0,128],[o.B,v+1,128],[o.GP_A,v+0,128],[o.GP_B,v+1,128],[o.SELECT,F,-2],[o.START,F,-1],[o.UP,b,-16],[o.DOWN,b,-32],[o.LEFT,b,-64],[o.RIGHT,b,-128],[o.P2_A,v+2,128],[o.P2_B,v+3,128],[o.P2_UP,b,-1],[o.P2_DOWN,b,-2],[o.P2_LEFT,b,-4],[o.P2_RIGHT,b,-8]]);var M=263,G=242,C=451,tt=28,et=16,rt=24,q=2,X=M*60*q,I=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(r){return this.regs[r]|0}write(r,t){this.regs[r]=t}saveState(){return{regs:this.regs.slice(0)}}loadState(r){for(let t=0;t<32;t++)this.write(t,r.regs[t])}static stateToLongString(r){let t="";return t+=R(r.regs,0,32),t}},L=class{constructor(){this.cycles=0;this.regs=new Uint8Array(32);this.offset=-1;this.dll=0;this.dlstart=0;this.dli=!1;this.h16=!1;this.h8=!1;this.writemode=0;this.indirect=!1;this.pixels=new Uint8Array(320);this.WSYNC=0}reset(){this.regs.fill(0)}read(r){return this.regs[r]|0}write(r,t){this.regs[r]=t,r==4&&this.WSYNC++}saveState(){return{regs:this.regs.slice(0),offset:this.offset,dll:this.dll,dlstart:this.dlstart,dli:this.dli,h16:this.h16,h8:this.h8,indirect:this.indirect,writemode:this.writemode}}loadState(r){for(let t=0;t<32;t++)this.write(t,r.regs[t]|0);this.offset=r.offset|0,this.dll=r.dll|0,this.dlstart=r.dlstart|0,this.dli=!!r.dli,this.h16=!!r.h16,this.h8=!!r.h8,this.indirect=!!r.indirect,this.writemode=r.writemode|0}isDMAEnabled(){return(this.regs[28]&96)==64}getDLLStart(){return(this.regs[12]<<8)+this.regs[16]}getCharBaseAddress(){return(this.regs[20]<<8)+this.offset}setVBLANK(r){r?(this.regs[8]|=128,this.offset=-1,this.dll=this.getDLLStart(),this.dli=this.bus&&(this.bus.read(this.dll)&128)!=0):this.regs[8]&=-129}readDLLEntry(r){if(this.dll>=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let u=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(u+(c+0&511)),m=r.read(u+(c+1&511));if(m==0||u>=16384)break;let l=r.read(u+(c+2&511)),p=r.read(u+(c+3&511)),g=!1;if((m&31)==0){var e=p>>5,n=32-(p&31),i=r.read(u+(c+4&511));g=(m&32)!=0,c+=5,this.cycles+=10,this.writemode=m&128}else{var i=p,e=m>>5,n=32-(m&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let d=this.regs[28],k=(d&3)+(this.writemode?4:0),A=(d&4)!=0,w=g&&(d&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+1&511}break}}}while(this.cycles=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let u=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(u+(c+0&511)),m=r.read(u+(c+1&511));if(m==0||u>=16384)break;let l=r.read(u+(c+2&511)),p=r.read(u+(c+3&511)),g=!1;if((m&31)==0){var e=p>>5,n=32-(p&31),i=r.read(u+(c+4&511));g=(m&32)!=0,c+=5,this.cycles+=10,this.writemode=m&128}else{var i=p,e=m>>5,n=32-(m&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let d=this.regs[28],k=(d&3)+(this.writemode?4:0),A=(d&4)!=0,w=g&&(d&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+1&511}break}}}while(this.cycles(this.xtracyc++,this.readInput(t))],[0,31,31,t=>(this.xtracyc++,this.tia.read(t))],[32,63,31,t=>this.maria.read(t)],[64,255,255,t=>this.ram[t+2048]],[256,319,255,t=>this.read(t)],[320,511,511,t=>this.ram[t+2048]],[640,767,127,t=>(this.xtracyc++,this.readPIA(t))],[6144,10239,65535,t=>this.ram[t-6144]],[10240,16383,2047,t=>this.read(t|8192)],[16384,65535,65535,t=>this.rom?this.rom[t-16384]:0],[0,65535,65535,t=>this.probe&&this.probe.logIllegal(t)]]),this.write=_([[21,26,31,(t,e)=>{this.xtracyc++,this.pokey1.setTIARegister(t,e)}],[0,31,31,(t,e)=>{this.xtracyc++,this.tia.write(t,e)}],[32,63,31,(t,e)=>{this.maria.write(t,e)}],[64,255,255,(t,e)=>{this.ram[t+2048]=e}],[256,319,255,(t,e)=>{this.write(t,e)}],[320,511,511,(t,e)=>{this.ram[t+2048]=e}],[640,767,127,(t,e)=>{this.xtracyc++,this.writePIA(t,e)}],[6144,10239,65535,(t,e)=>{this.ram[t-6144]=e}],[10240,16383,2047,(t,e)=>{this.write(t|8192,e)}],[49151,49151,65535,(t,e)=>{}],[0,65535,65535,(t,e)=>{this.probe&&this.probe.logIllegal(t)}]]),this.connectCPUMemoryBus(this),this.dmaBus=this.probeDMABus(this),this.handler=E(this.inputs,Z),this.pokey1=new z,this.audioadapter=new Y(this.pokey1,q,X)}readConst(t){let e=this.probe;this.probe=null;let n=this.read(t);return this.probe=e,n}readInput(t){switch(t){case 12:return~this.inputs[8]&128;case 13:return~this.inputs[9]&128;default:return this.inputs[t]|0}}readPIA(t){switch(t){case 0:case 2:return this.inputs[t];case 1:case 3:return this.regs6532[t];case 4:return this.getPIATimerValue();default:return 0}}writePIA(t,e){switch(t){case 0:case 1:case 2:case 3:this.regs6532[t]=e;return;case 20:this.setPIATimer(e,0);return;case 21:this.setPIATimer(e,3);return;case 22:this.setPIATimer(e,6);return;case 23:this.setPIATimer(e,10);return;case 24:this.setPIATimer(e,6);return}}setPIATimer(t,e){this.piatimer=t+1<0?t>>this.timerinterval:t&255}advanceCPU(){var t=super.advanceCPU();return this.tickPIATimer(t),this.xtracyc&&(t+=this.xtracyc,this.tickClocks(this.xtracyc),this.xtracyc=0),t}tickClocks(t){this.probe.logClocks(t),this.tickPIATimer(t)}tickPIATimer(t){this.piatimer=Math.max(-256,this.piatimer-t)}advanceFrame(t){var e=this.pixels,n=0,i,s=0,u=0,c=0;this.lastFrameCycles=-1,this.probe.logNewFrame();for(var x=0;x>2),s+=p,e){let d=(this.maria.regs[28]&128)!=0?15:255;for(var l=0;l<320;l++)e[n++]=J[this.maria.pixels[l]&d]}}for((m||x==M-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());s>2),s=C;break}if(t&&t()){t=null,x=999,this.lastFrameCycles=s;break}s+=this.advanceCPU()<<2,c++}this.audio&&this.audioadapter.generate(this.audio),s-=C,u+=s,this.probe.logNewScanline()}return c}getRasterX(){return(this.lastFrameCycles+C)%C}getRasterY(){return this.scanline}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}loadROM(t){t.length==49280&&(t=t.slice(128)),this.rom=W(t,this.defaultROMSize,!0)}reset(){super.reset(),this.tia.reset(),this.maria.reset(),this.inputs.fill(0),this.inputs[b]=255,this.inputs[F]=11,this.setPIATimer(0,0)}readAddress(t){return this.read(t)|0}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.tia.loadState(t.tia),this.maria.loadState(t.maria),this.regs6532.set(t.regs6532),this.piatimer=t.pia.timer,this.timerinterval=t.pia.interval,this.loadControlsState(t)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),tia:this.tia.saveState(),maria:this.maria.saveState(),regs6532:this.regs6532.slice(0),inputs:this.inputs.slice(0),pia:{timer:this.piatimer,interval:this.timerinterval}}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}getDebugCategories(){return["CPU","Stack","TIA","MARIA"]}getDebugInfo(t,e){switch(t){case"TIA":return I.stateToLongString(e.tia);case"MARIA":return L.stateToLongString(e.maria)+` Scanline: `+this.scanline}}getDebugDisplayLists(){let t={},e=this.maria.getDLLStart(),n=0;for(;n<240;){let i=this.readConst(e),s=i&15,u=(i&64)!=0,c=(i&32)!=0,x=(this.readConst(e+1)<<8)+this.readConst(e+2);e=e+3&65535;let m=(this.readConst(e)&128)!=0,l="DL $"+S(x,4)+" "+n+"-"+(n+s);u&&(l+=" H16"),c&&(l+=" H8"),m&&(l+=" DLI"),t[l]={$$:this._readDebugDisplayList(x)},n+=s+1}return t}_readDebugDisplayList(t){return()=>this.readDebugDisplayList(t)}readDebugDisplayList(t){let e=[],n=t&65280,i=t&255;do{let x=this.maria.regs[28],m=this.readConst(n+(i+0&511)),l=this.readConst(n+(i+1&511));if(l==0)break;let p=this.readConst(n+(i+2&511)),g=this.readConst(n+(i+3&511)),y=!1,d="",k,A=(x&3)+(l&128?4:0);if((l&31)==0){var s=g>>5,u=32-(g&31),c=this.readConst(n+(i+4&511));y=(l&32)!=0,k=l&128,i+=5}else{var c=g,s=l>>5,u=32-(l&31);i+=4}d+="X="+c+" W="+u+" P="+s,k&&(d+=" WM=1"),y&&(d+=" CHR=$"+S(this.maria.regs[20]+this.maria.offset&255)+"xx");let w=m+((p+(y?0:this.maria.offset)&255)<<8);d=" $"+S(w,4)+" "+d,d=["160A","?","320D","320A","160B","?","320B","320C"][A]+" "+d,e.push(d)}while(i<512);return e}},J=new Uint32Array(256);for(D=0;D<256;D++)J[D]=j(D);var D;var it=[{id:"sprites.dasm",name:"Sprites (ASM)",category:"Assembly"},{id:"wsync.c",name:"WSYNC",category:"CC65"},{id:"sprites.c",name:"Double Buffering"},{id:"scroll.c",name:"Scrolling"},{id:"test_conio.c78",name:"Conio Test",category:"cc7800"},{id:"example_small_sprites.c78",name:"Small Sprites"},{id:"example_vertical_scrolling.c78",name:"Vertical Scrolling"}],U=class extends ${constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"TIA",start:0,size:32,type:"io"},{name:"MARIA",start:32,size:32,type:"io"},{name:"RAM (6166 Block 0)",start:64,size:192,type:"ram"},{name:"RAM (6166 Block 1)",start:320,size:192,type:"ram"},{name:"PIA",start:640,size:24,type:"io"},{name:"RAM",start:6144,size:4096,type:"ram"},{name:"Cartridge ROM",start:16384,size:49146,type:"rom"},{name:"CPU Vectors",start:65530,size:6,type:"rom"}]}};this.getToolForFilename=H}newMachine(){return new T}getPresets(){return it}getDefaultExtensions(){return[...super.getDefaultExtensions(),".cc7800"]}readAddress(t){return this.machine.readConst(t)}getROMExtension(){return".a78"}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayLists(),t}};O.atari7800=U; -//# sourceMappingURL=atari7800-5OD4EMMG.js.map +//# sourceMappingURL=atari7800-V3WYZERI.js.map diff --git a/gen/atari7800-5OD4EMMG.js.map b/gen/atari7800-V3WYZERI.js.map similarity index 100% rename from gen/atari7800-5OD4EMMG.js.map rename to gen/atari7800-V3WYZERI.js.map diff --git a/gen/atari8-Z33KTU3I.js b/gen/atari8-MAPQMH2S.js similarity index 99% rename from gen/atari8-Z33KTU3I.js rename to gen/atari8-MAPQMH2S.js index 7347949d..3f1addd0 100644 --- a/gen/atari8-Z33KTU3I.js +++ b/gen/atari8-MAPQMH2S.js @@ -1,7 +1,7 @@ -import{a as ft}from"./chunk-TANFDIIN.js";import{b as dt,c as xt,d as Q}from"./chunk-6P6VNFPR.js";import{G as ct,g as at,k as nt,m as ht,r as ot,z as lt}from"./chunk-QYEDG265.js";import{g as H}from"./chunk-UACHXWHT.js";import{L as T,Y as D,Z as i,_ as it,a as Y,aa as rt,da as k,g as _,r as I}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var Mt=[0,25,17,9],vt=[0,89,97,105],y=0,Ct=1,B=2,z=3,Lt=4,Kt=5,Pt=7,Vt=9,L=10,wt=11,Nt=12,Ut=13,ut=14,Ft=15,K=15;var Yt=13,Ht=106,Qt=105,X=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],Bt=[0,0,2,2,2,2,4,4,8,8,4,4,4,2,2,2],zt=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],mt=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],M=class{constructor(e,t){this.regs=new Uint8Array(16);this.left=-1;this.right=-1;this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[ut]=0,this.regs[K]=127,this.regs[Nt]=0,this.regs[Ut]=255,this.setReg(y,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return I(0,{},this)}loadState(e){I(0,this,e),this.setReg(y,e.regs[y])}static stateToLongString(e){let t="";return t+="H: "+Y(e.h,3)+" V: "+Y(e.v,3)+` +import{a as ft}from"./chunk-ENVHSJV6.js";import{b as dt,c as xt,d as Q}from"./chunk-6P6VNFPR.js";import{G as ct,g as at,k as nt,m as ht,r as ot,z as lt}from"./chunk-RWTUUV4L.js";import{g as H}from"./chunk-UXRCACYH.js";import{L as T,Y as D,Z as i,_ as it,a as Y,aa as rt,da as k,g as _,r as I}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var Mt=[0,25,17,9],vt=[0,89,97,105],y=0,Ct=1,B=2,z=3,Lt=4,Kt=5,Pt=7,Vt=9,L=10,wt=11,Nt=12,Ut=13,ut=14,Ft=15,K=15;var Yt=13,Ht=106,Qt=105,X=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],Bt=[0,0,2,2,2,2,4,4,8,8,4,4,4,2,2,2],zt=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],mt=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],M=class{constructor(e,t){this.regs=new Uint8Array(16);this.left=-1;this.right=-1;this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[ut]=0,this.regs[K]=127,this.regs[Nt]=0,this.regs[Ut]=255,this.setReg(y,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return I(0,{},this)}loadState(e){I(0,this,e),this.setReg(y,e.regs[y])}static stateToLongString(e){let t="";return t+="H: "+Y(e.h,3)+" V: "+Y(e.v,3)+` `,t+="DLIOp: "+_(e.dliop,2)+" Lines: "+e.yofs+"/"+e.linesleft,t+=" DMA "+(e.dma_enabled?"ON ":"off"),e.dma_enabled&&(t+=" idx "+e.dmaidx+" clk "+_(e.dmaclock)),t+=` `,t+="Addr: "+_(e.scanaddr,4)+` `,t+=D(e.regs,0,16).replace("$00","Regs"),t}setReg(e,t){switch(e){case L:this.regs[L]=255;return;case Ft:this.regs[K]=31;return}this.regs[e]=t}readReg(e){switch(e){case K:return this.regs[e];case wt:return this.v>>1;default:return 255}}processDLIEntry(){if(this.mode==0)this.linesleft=(this.dliop>>4&7)+1,this.dmaclock=0;else{this.linesleft=X[this.mode],this.period=Bt[this.mode],this.jmp?(this.regs[B]=this.dlarg_lo,this.regs[z]=this.dlarg_hi,this.mode=this.period=0,this.dliop&64&&(this.linesleft=1,this.dma_enabled=!1),this.dmaclock=0):this.lms&&(this.scanaddr=this.dlarg_lo+(this.dlarg_hi<<8)),this.startaddr=this.scanaddr;let e=this.regs[y]&3,t=this.dliop&16?(this.regs[Lt]&15)>>1:0;this.dliop&16&&e<3&&e++,this.left=Mt[e]+t,this.right=vt[e]+t;let s=this.regs[Kt]&15;this.dliop&32^this.in_vscroll&&(this.in_vscroll?this.linesleft=s+1:(this.linesleft-=s,this.yofs+=s),this.linesleft&=15,this.in_vscroll^=32)}}nextLine(){this.linesleft>0&&(this.linesleft--,this.yofs++,this.isfirstline=!1,this.mode>=8&&this.linesleft&&(this.scanaddr=this.startaddr))}triggerNMI(e){this.regs[K]=e|31,this.regs[ut]&e&&this.nmi()}getDlistAddr(){return this.regs[B]+(this.regs[z]<<8)}nextInsn(){let e=this.getDlistAddr(),t=this.read(e);return e=e+1&1023|e&-1024,this.regs[B]=e&255,this.regs[z]=e>>8,t}nextScreen(){let e=this.read(this.scanaddr);return this.incScanAddr(),e}incScanAddr(){this.scanaddr=this.scanaddr+1&4095|this.scanaddr&-4096}dlDMAEnabled(){return this.regs[y]&32}isVisibleScanline(){return this.v>=8&&this.v<248}isPlayfieldDMAEnabled(){return this.dma_enabled&&!this.linesleft}isPlayerDMAEnabled(){return this.regs[y]&8}isMissileDMAEnabled(){return this.regs[y]&12}isWSYNC(){return this.regs[L]!=0}clockPulse(){let e=this.isWSYNC();if(!this.isVisibleScanline())this.doVBlank();else{switch(this.h){case 0:this.isMissileDMAEnabled()&&(this.doPlayerMissileDMA(3),e=!0);break;case 1:if(this.isPlayfieldDMAEnabled()){let t=this.nextInsn();this.jmp=(t&-65)==1,this.lms=(t&64)!=0&&(t&15)!=0,this.mode=t&15,this.dliop=t,this.yofs=0,this.isfirstline=!0,e=!0}break;case 2:case 3:case 4:case 5:this.isPlayerDMAEnabled()&&(this.doPlayerMissileDMA(this.h+2),e=!0);break;case 6:case 7:this.isPlayfieldDMAEnabled()&&this.isfirstline&&(this.jmp||this.lms)&&(this.h==6&&(this.dlarg_lo=this.nextInsn()),this.h==7&&(this.dlarg_hi=this.nextInsn()),e=!0);break;case 8:this.isfirstline&&this.processDLIEntry(),this.dliop&128&&this.linesleft==1&&this.triggerNMI(128);break;case 9:break;case 111:this.dma_enabled&&this.nextLine(),++this.v;break}if(this.output=0,this.mode>=2&&this.period){let t=this.h<=Qt;this.dmaclock=this.dmaclock<<1&511,this.dmaclock&1<=8&&this.incScanAddr(),e=t),this.output=this.h>=this.left+3&&this.h<=this.right+2?4:0}}return(this.hHt)&&(this.output=2),this.incHorizCounter(),!e&&this.dramrefresh&&(this.read(0),this.dramrefresh=!1,e=!0),e}incHorizCounter(){switch(this.h){case 25:case 29:case 33:case 37:case 41:case 45:case 49:case 53:case 57:this.dramrefresh=!0;break;case 102:this.regs[L]=0;break;case 113:this.h=0;return}++this.h}doVBlank(){this.linesleft=this.mode=this.period=0,this.h==111&&this.v++,this.v==248&&this.h==0&&this.triggerNMI(64),this.v==262&&this.h==112&&(this.v=0),this.v==7&&this.h==113&&(this.dma_enabled=this.dlDMAEnabled()!=0),this.output=2,this.dmaclock=0}doPlayerMissileDMA(e){let t=this.regs[y]&16,s=this.regs[Pt]<<8;t?(s&=63488,s|=e<<8,s|=this.v&255):(s&=64512,s|=e<<7,s|=this.v>>1),this.read(s)}readBitmapData(){let e=this.mode;if(e<8){let t=this.ch,s=this.yofs>>zt[this.mode],r=s&7,a=this.regs[Vt];(e&14)==6?(t&=63,a&=254):(t&=127,a&=252);let o=(t<<3)+(a<<8);if((e&14)==2){let h=this.regs[Ct],c=e==3&&(t&96)==96;h&4?this.pfbyte=this.read(o+(r^7)):this.pfbyte=this.read(o+r),c&&s<2&&(this.pfbyte=0),!c&&s>7&&(this.pfbyte=0),this.ch&128&&(h&1&&(this.pfbyte=0),h&2&&(this.pfbyte^=255))}else this.pfbyte=this.read(o+r)}else this.pfbyte=this.nextScreen()}shiftout(){if(this.output==4)switch(this.mode){case 2:case 3:case 15:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?8:6}case 6:case 7:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?(this.ch>>6)+4:0}case 9:case 11:case 12:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?4:0}case 4:case 5:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,this.ch&128?[0,4,5,7][e]:[0,4,5,6][e]}case 8:case 10:case 13:case 14:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,[0,4,5,6][e]}}return this.output}};var f=0;var Xt=2;var gt=4;var _t=6;var p=8,qt=9,Gt=10,Wt=11,jt=13,q=14,S=15;var Zt=8,$t=9,Jt=10,te=13,O=14,P=15;var pt=128,bt=64,ee=32,yt=16,Et=8;var se=1,St=28,ie=114;var At=511,It=131071,m=0,g=1,b=2,u=3,E=114,re=15;var ae=8;var G,V;function ne(){G=new Uint8Array(511),V=new Uint8Array(16385);let n=511;for(let e=0;e<511;e++)n=(((n>>5^n)&1)<<8)+(n>>1),G[e]=n;n=131071;for(let e=0;e<16385;e++)n=(((n>>5^n)&255)<<9)+(n>>8),V[e]=n>>1}var v=class{constructor(e,t){this.irq=e;this.antic_xpos=t;this.regs=new Uint8Array(16);this.readregs=new Uint8Array(16);this.divnirq=new Uint32Array(4);this.divnmax=new Uint32Array(4);this.pot_inputs=new Uint8Array(8);this.basemult=0;this.pot_scanline=0;this.random_scanline_counter=0;this.kbcode=0;this.DELAYED_SERIN_IRQ=0;this.DELAYED_SEROUT_IRQ=0;this.DELAYED_XMTDONE_IRQ=0;this.init()}saveState(){return I(0,{},this)}loadState(e){I(0,this,e)}init(){this.readregs.fill(255),this.readregs[P]=239,this.basemult=St,this.pot_inputs.fill(128),ne()}read(e){let t=this.readregs[e];switch(e&=15,e){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:return t=this.pot_inputs[e],t>3;s&=7,t=(V[r]>>s)+(V[r+1]<<8-s)}}break}return t&255}write(e,t){switch(e&=15,this.regs[e]=t,e){case p:t&se?this.basemult=ie:this.basemult=St,this.update_counter(1<=3?(this.readregs[O]|=8,this.DELAYED_XMTDONE_IRQ=2*this.DELAYED_SEROUT_IRQ-2):(this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0));break;case qt:this.divnirq[m]=this.divnmax[m],this.divnirq[g]=this.divnmax[g],this.divnirq[b]=this.divnmax[b],this.divnirq[u]=this.divnmax[u];break;case S:t&4&&(this.pot_scanline=228),(t&3)==0&&(this.DELAYED_SERIN_IRQ=0,this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0);break}this.snd_update(e)}update_counter(e){e&1<0&&--this.DELAYED_SERIN_IRQ==0&&(this.readregs[te]=this.SIO_GetByte(),this.generateIRQ(32)),this.DELAYED_SEROUT_IRQ>0&&--this.DELAYED_SEROUT_IRQ==0&&this.generateIRQ(16),this.DELAYED_XMTDONE_IRQ>0&&--this.DELAYED_XMTDONE_IRQ==0&&this.generateIRQ(8),this.advanceIRQTimer(m,1),this.advanceIRQTimer(g,2),this.advanceIRQTimer(u,4))}advanceIRQTimer(e,t){(this.divnirq[e]-=E)<0&&(this.divnirq[e]+=this.divnmax[e],this.generateIRQ(t))}generateIRQ(e){this.regs[q]&e&&(this.irq(),this.readregs[O]&=~e)}static stateToLongString(e){let t="";return t+=`Write Registers: `,t+=D(e.regs,0,16),t+=`Read Registers: `,t+=D(e.readregs,0,16),t}CASSETTE_IOLineStatus(){return 0}siocheck(){return((this.regs[f+b]==40||this.regs[f+b]==16||this.regs[f+b]==8||this.regs[f+b]==10)&&this.regs[f+u]==0||(this.regs[S]&120)==40)&&(this.regs[p]&40)==40}SIO_PutByte(e){console.log("SIO put byte",e)}SIO_GetByte(){return 0}};var w=class{constructor(e){if(this.data=e,e.length>=16&&(e[0]|e[1]<<8)==662){let s=(e[2]|e[3]<<8)*16,r=e[4]|e[5]<<8;this.sectorsize=r==256?256:128,this.sectorsize==256?this.numsectors=3+Math.floor((s-16-384)/256):this.numsectors=Math.floor((s-16)/128)}else this.sectorsize=128,this.numsectors=Math.floor(e.length/128)}sectorOffset(e){return this.sectorsize==256?e<3?16+e*128:400+(e-3)*256:16+e*128}readSector(e,t){let s=e-1;if(s<0||s>=this.numsectors)return null;let r=this.sectorOffset(s);return this.data.subarray(r,Math.min(r+t,this.data.length))}writeSector(e,t,s){let r=e-1;if(r<0||r>=this.numsectors)return!1;let a=this.sectorOffset(r);return this.data.set(t.subarray(0,Math.min(s,this.data.length-a)),a),!0}};var W=160,he=240,oe=241,Ot=242,le=[173,0,3,201,49,144,12,201,64,176,8,141,240,213,173,241,213,168,96,76,80,233],ce=[i.VK_L,i.VK_J,i.VK_SEMICOLON,i.VK_F4,i.VK_F5,i.VK_K,i.VK_BACK_SLASH,i.VK_TILDE,i.VK_O,null,i.VK_P,i.VK_U,i.VK_ENTER,i.VK_I,i.VK_MINUS2,i.VK_EQUALS2,i.VK_V,i.VK_F7,i.VK_C,i.VK_F6,i.VK_F4,i.VK_B,i.VK_X,i.VK_Z,i.VK_4,null,i.VK_3,i.VK_6,i.VK_ESCAPE,i.VK_5,i.VK_2,i.VK_1,i.VK_COMMA,i.VK_SPACE,i.VK_PERIOD,i.VK_N,null,i.VK_M,i.VK_SLASH,null,i.VK_R,null,i.VK_E,i.VK_Y,i.VK_TAB,i.VK_T,i.VK_W,i.VK_Q,i.VK_9,null,i.VK_0,i.VK_7,i.VK_BACK_SPACE,i.VK_8,null,null,i.VK_F,i.VK_H,i.VK_D,null,i.VK_CAPS_LOCK,i.VK_G,i.VK_S,i.VK_A],fe=rt([[i.UP,0,1],[i.DOWN,0,2],[i.LEFT,0,4],[i.RIGHT,0,8],[{c:16,n:"Shift",plyr:0,button:0},2,1],[i.VK_F1,3,1],[i.VK_F2,3,2],[i.VK_F3,3,4]]),C=class extends ot{constructor(){super();this.cpuFrequency=1789773;this.numTotalScanlines=262;this.cpuCyclesPerLine=114;this.canvasWidth=336;this.numVisibleScanlines=224;this.aspectRatio=this.canvasWidth/this.numVisibleScanlines*.857;this.firstVisibleScanline=16;this.firstVisibleClock=76;this.defaultROMSize=32768;this.overscan=!0;this.audioOversample=2;this.sampleRate=this.numTotalScanlines*60*this.audioOversample;this.run_address=-1;this.inputs=new Uint8Array(4);this.linergb=new Uint32Array(this.canvasWidth);this.lastdmabyte=0;this.keycode=0;this.cart_80=!1;this.cart_a0=!1;this.xexdata=null;this.xexofs=0;this.xexstubofs=0;this.xexrunaddr=-1;this.disk=null;this.keyboard_active=!0;this.d500=new Uint8Array(256);this.cpu=new ht,this.ram=new Uint8Array(65536),this.bios=new Uint8Array(10240),this.bus=this.newBus(),this.connectCPUMemoryBus(this.bus),this.antic=new M(this.readDMA.bind(this),this.antic_nmi.bind(this)),this.gtia=new Q,this.irq_pokey=new v(this.pokey_irq.bind(this),()=>this.antic.h),this.audio_pokey=at(1),this.audioadapter=new nt(this.audio_pokey.pokey1,this.audioOversample,this.sampleRate),this.handler=it(this.inputs,fe,this.getKeyboardFunction(),!0)}newBus(){return{read:k([[0,32767,65535,t=>this.ram[t]],[32768,40959,65535,t=>this.cart_80?this.rom[t-32768]:this.ram[t]],[40960,49151,65535,t=>this.cart_a0?this.rom[t-32768]:this.ram[t]],[53248,53503,31,t=>this.gtia.readReg(t)],[53760,54015,15,t=>this.readPokey(t)],[54016,54271,15,t=>this.readPIA(t)],[54272,54527,15,t=>this.antic.readReg(t)],[54528,54783,255,t=>this.d500[t]],[55296,65535,65535,t=>this.bios[t-55296]]]),write:k([[0,49146,65535,(t,s)=>{this.ram[t]=s}],[49147,49151,65535,(t,s)=>{this.ram[t]=s,this.initCartA()}],[53248,53503,31,(t,s)=>{this.gtia.setReg(t,s)}],[53760,54015,15,(t,s)=>{this.writePokey(t,s)}],[54272,54527,15,(t,s)=>{this.antic.setReg(t,s)}],[54528,54783,255,(t,s)=>{this.writeMapper(t,s)}]])}}loadBIOS(t){this.bios.set(t),this.installSIOStub()}installSIOStub(){this.bios[3161]=76,this.bios[3162]=54528+W&255,this.bios[3163]=54528+W>>8,this.d500.set(le,W)}reset(){super.reset(),this.antic.reset(),this.gtia.reset(),this.keycode=0}read(t){return this.bus.read(t)}readDMA(t){let s=this.bus.read(t);return this.probe.logDMARead(t,s),this.lastdmabyte=s,s}readConst(t){return t<53248||t>=54528?this.bus.read(t):255}write(t,s){this.bus.write(t,s)}readPokey(t){switch(t&15){case 9:return this.keycode&255;case 15:return~this.keycode>>6&4|~this.keycode>>3&8|18;default:return this.irq_pokey.read(t)}}readPIA(t){if(t==0||t==1)return~this.inputs[t]}writePokey(t,s){this.audio_pokey.pokey1.setRegister(t,s),this.irq_pokey.write(t,s)}startScanline(){this.gtia.sync();for(let t=0;t<4;t++)this.gtia.readregs[dt+t]=~this.inputs[2]>>t&1;this.gtia.readregs[xt]=~this.inputs[3]&7,this.audio&&this.audioadapter.generate(this.audio),this.irq_pokey.advanceScanline()}drawScanline(){let t=this.antic.v-this.firstVisibleScanline;t>=0&&t{this.gtia.clockPulse1(),this.linergb[t++]=this.gtia.rgb},r=()=>{this.gtia.clockPulse2(),this.linergb[t++]=this.gtia.rgb};this.gtia.clockPulse4(),this.antic.dliop&16&&this.antic.regs[4]&1?(t+=2,this.gtia.setBias(-1)):this.gtia.setBias(0);let a=mt[this.antic.mode],o=this.antic.h&1;return(a<8||o)&&(this.gtia.an=this.antic.shiftout()),s(),a==1&&(this.gtia.an=this.antic.shiftout()),r(),a<=2&&(this.gtia.an=this.antic.shiftout()),s(),a==1&&(this.gtia.an=this.antic.shiftout()),r(),1}loadState(t){this.loadControlsState(t),this.cpu.loadState(t.c),this.ram.set(t.ram),this.antic.loadState(t.antic),this.gtia.loadState(t.gtia),this.irq_pokey.loadState(t.pokey),this.lastdmabyte=t.lastdmabyte,this.cart_80=t.cart_80,this.cart_a0=t.cart_a0}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),antic:this.antic.saveState(),gtia:this.gtia.saveState(),pokey:this.irq_pokey.saveState(),inputs:this.inputs.slice(0),lastdmabyte:this.lastdmabyte,keycode:this.keycode,cart_80:this.cart_80,cart_a0:this.cart_a0}}loadControlsState(t){this.inputs.set(t.inputs),this.keycode=t.keycode}saveControlsState(){return{inputs:this.inputs.slice(0),keycode:this.keycode}}getRasterY(){return this.antic.v}getRasterX(){return this.antic.h}getRasterCanvasPosition(){return{x:this.antic.h*4-this.firstVisibleClock,y:this.antic.v-this.firstVisibleScanline}}getDebugCategories(){return["CPU","Stack","ANTIC","GTIA","POKEY"]}getDebugInfo(t,s){switch(t){case"ANTIC":return M.stateToLongString(s.antic);case"GTIA":return Q.stateToLongString(s.gtia);case"POKEY":return v.stateToLongString(s.pokey)}}getKeyboardFunction(){return(t,s,r,a)=>{if(!this.keyboard_active)return!1;if(a&65){var o=ce;if(s==i.VK_F9.c)return this.irq_pokey.generateIRQ(128),!0;for(var h=0;ht.length)throw new Error("Bad .XEX file format");if(o==736&&h==737&&(this.xexrunaddr=this.ram[736]+this.ram[737]*256,console.log("XEX run",_(this.xexrunaddr))),o==738&&h==739){var a=this.ram[738]+this.ram[739]*256;console.log("XEX init",_(a));let c=this.xexstubofs;s.set([32,a&255,a>>8,141,Ot,213],c),this.xexstubofs=c+6,this.xexofs=r,this.run_address=54528,this.ram[10]=0,this.ram[11]=213;return}}if(this.xexofs=r,this.xexrunaddr>=0){let o=this.xexstubofs;s.set([169,160,141,255,213,76,this.xexrunaddr&255,this.xexrunaddr>>8],o),this.xexstubofs=o+8,this.run_address=54528,this.ram[10]=0,this.ram[11]=213}}initCartA(){this.cpu.getPC()==61823&&this.xexdata&&this.loadXEX(this.xexdata)}setPaddleInput(t,s){this.irq_pokey.pot_inputs[t]=255-s}getDebugDisplayList(){let t=this.antic.getDlistAddr(),s=()=>{let h=this.read(t);return t=t+1&1023|t&-1024,h},r=new Set,a=[],o=0;for(let h=0;h<256&&o<240;h++){let c=t;r.add(t);let l=s(),d=l&15,x="",A=!1,R;if(d==0)R=(l>>4&7)+1,x+=" blank="+R;else{R=X[d],x+=" mode="+_(d),x+=" lines="+R,A=(l&-65)==1;let tt=(l&64)!=0&&(l&15)!=0;if(l&16&&(x+=" HSCROL"),l&32&&(x+=" VSCROL"),l&128&&(x+=" DLI"),A&&l&64?x+=" JVB":A?x+=" JMP":tt&&(x+=" LMS"),A||tt){let et=s(),st=s();x+=" $"+_(st)+_(et),A&&(t=et+st*256)}}if(a.push("$"+_(c)+" y="+o+" "+x),A&&r.has(t))break;o+=R}return a}},N=class extends C{newBus(){return{read:k([[0,16383,65535,e=>this.ram[e]],[16384,49151,65535,e=>this.rom?this.rom[e-16384]:0],[49152,53247,31,e=>this.gtia.readReg(e)],[54272,54527,15,e=>this.antic.readReg(e)],[59392,61439,15,e=>this.readPokey(e)],[63488,65535,2047,e=>this.bios[e]]]),write:k([[0,16383,65535,(e,t)=>{this.ram[e]=t}],[49152,53247,31,(e,t)=>{this.gtia.setReg(e,t)}],[54272,54527,15,(e,t)=>{this.antic.setReg(e,t)}],[59392,61439,15,(e,t)=>{this.writePokey(e,t)}]])}}};var J=[{id:"hello.dasm",name:"Hello World",category:"Assembly"},{id:"hellopm.dasm",name:"Hello Sprites"},{id:"helloconio.c",name:"Text Mode",category:"C"},{id:"siegegame.c",name:"Siege Game"},{id:"hellodlist.c",name:"Display List"}],Rt=J.concat([{id:"tgidemo.c",name:"TGI Demo"},{id:"icepiano.c",name:"Ice Piano (TGI Demo)"},{id:"libdemo.c",name:"Library Demo"},{id:"scrolldemo.c",name:"Scrolling"},{id:"hello.cpp",name:"Hello Oscar64",category:"Oscar64"},{id:"libdemo.cpp",name:"Library Demo Oscar64"},{id:"sieve.bas",name:"Benchmark",category:"FastBasic"},{id:"pmtest.bas",name:"Sprites Test"},{id:"dli.bas",name:"DLI Test"},{id:"joyas.bas",name:"Match-3 Game"}]),Tt={main:[{name:"RAM",start:0,size:49152,type:"ram"},{name:"Left Cartridge ROM",start:40960,size:8192,type:"rom"},{name:"GTIA",start:53248,size:32,type:"io"},{name:"POKEY",start:53760,size:16,type:"io"},{name:"PIA",start:54016,size:4,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"Cartridge Control Line",start:54784,size:256,type:"io"},{name:"ROM",start:55296,size:2048,type:"rom"},{name:"Character Set",start:57344,size:1024,type:"rom"},{name:"ROM",start:58368,size:7168,type:"rom"}]},Dt={main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"Cartridge ROM",start:16384,size:32768,type:"rom"},{name:"GTIA",start:49152,size:32,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"POKEY",start:59392,size:16,type:"io"},{name:"ATARI Character Set",start:63488,size:1024,type:"rom"},{name:"ROM",start:64512,size:1024,type:"rom"}]},U=class extends ct{constructor(){super(...arguments);this.getToolForFilename=H;this.showHelp=kt;this.getROMExtension=de;this.biosPath="res/altirra/kernel.rom"}newMachine(){return new C}getPresets(){return Rt}getDefaultExtensions(){return[...super.getDefaultExtensions(),".bas"]}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return Tt}async start(){let t=await this.loadKernel();await super.start(),this.machine.loadBIOS(t)}async loadKernel(){var t=await fetch(this.biosPath);if(t.status==200||t.size){var s=await t.arrayBuffer();return new Uint8Array(s)}else throw new Error("could not load BIOS file")}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayList(),t}},j=class extends U{constructor(){super(...arguments);this.biosPath="res/altirra/superkernel.rom"}getPresets(){return J}newMachine(){return new N}getMemoryMap(){return Dt}},F=class extends ft{constructor(){super(...arguments);this.getToolForFilename=H;this.getOpcodeMetadata=lt;this.showHelp=kt}getPresets(){return J}getDefaultExtensions(){return[".c",".bas",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}},Z=class extends F{constructor(){super(...arguments);this.getMemoryMap=function(){return Tt}}getPresets(){return Rt.filter(t=>!t.id.endsWith(".cpp"))}loadROM(t,s){this.started?(this.loadROMFile(s),this.loadRegion(":cartleft:cart:rom",s)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a800xl.zip",cfgfile:"a800xl.cfg",driver:"a800xl",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(s),romsize:8192,preInit:function(r){}})}start(){}},$=class extends F{loadROM(e,t){this.started?(this.loadROMFile(t),this.loadRegion(":cartleft:cart:rom",t)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a5200/5200.rom",cfgfile:"a5200.cfg",driver:"a5200",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(t),romsize:32768,preInit:function(s){}})}start(){}getMemoryMap(){return Dt}};function de(n){return n==null?".bin":n[0]==150&&n[1]==2?".atr":n[0]==255&&n[1]==255?".xex":".rom"}function kt(){return"https://8bitworkshop.com/docs/platforms/atari8/"}T["atari8-800.xlmame"]=Z;T["atari8-5200.mame"]=$;T["atari8-800"]=U;T["atari8-5200"]=j; -//# sourceMappingURL=atari8-Z33KTU3I.js.map +//# sourceMappingURL=atari8-MAPQMH2S.js.map diff --git a/gen/atari8-Z33KTU3I.js.map b/gen/atari8-MAPQMH2S.js.map similarity index 100% rename from gen/atari8-Z33KTU3I.js.map rename to gen/atari8-MAPQMH2S.js.map diff --git a/gen/basic-IHKFPLSJ.js b/gen/basic-6QVJSRQT.js similarity index 99% rename from gen/basic-IHKFPLSJ.js rename to gen/basic-6QVJSRQT.js index 17d46c2f..53b70bb8 100644 --- a/gen/basic-IHKFPLSJ.js +++ b/gen/basic-6QVJSRQT.js @@ -1,4 +1,4 @@ -import{b as y}from"./chunk-3FIVEUG2.js";import{n as E}from"./chunk-UACHXWHT.js";import{C as c,L as f,U as d,W as v,X as S,a as g}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";function O(u){return u.value!=null}function k(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function I(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},T=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=T),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` +import{b as y}from"./chunk-3FIVEUG2.js";import{n as E}from"./chunk-UXRCACYH.js";import{C as c,L as f,U as d,W as v,X as S,a as g}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";function O(u){return u.value!=null}function k(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function I(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},T=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=T),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` `)this.column=0,e=t;else if(t==" "){var n=this.opts.printZoneLength,s=Math.floor(this.column/n),a=(s+1)*this.opts.printZoneLength;a+n>this.margin?(this.column=0,e=` `):e=this.TAB(a)}else e=`${t}`;return e}float2str(t,r){var e=t.toString().toUpperCase();if(r>0){for(var i=r;e.length>r;)e=t.toPrecision(i--);e.startsWith("0.")?e=e.substr(1):e.startsWith("-0.")&&(e="-"+e.substr(2))}return e}printExpr(t){var r=this.valueToString(t,this.opts.numericPadding);this.column+=r.length,this.print(r)}print(t){console.log(t)}async input(t,r){return{line:"",vals:[]}}resume(){}expr2js(t,r){if(r||(r={}),O(t))return JSON.stringify(t.value);if(k(t)){if(!t.args&&r.locals&&r.locals.indexOf(t.name)>=0)return t.name;{r.isconst&&this.runtimeError("I expected a constant value here.");var e="",i=JSON.stringify(t.name);let h=t.args?t.args.map(o=>this.expr2js(o,r)).join(", "):[];return t.name.startsWith("FN")?e+=`this.getDef(${i})(${h})`:this.builtins[t.name]?(this.checkFuncArgs(t,this.builtins[t.name]),e+=`this.builtins.${t.name}(${h})`):t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?e+=`this.getStringSlice(this.vars.${t.name}, ${h})`:e+=`this.arrayGet(${i}, ${h})`:e+=`this.vars.${t.name}`,r.novalid?e:`this.checkValue(${e}, ${i})`}}else if(N(t)){var n=this.expr2js(t.left,r),s=this.expr2js(t.right,r);return`this.${t.op}(${n}, ${s})`}else if(I(t)){var a=this.expr2js(t.expr,r);return`this.${t.op}(${a})`}}assign2js(t,r){r||(r={});var e="";return(t.name.startsWith("FN")||this.builtins[t.name])&&this.runtimeError("I can't call a function here."),t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?this.runtimeError("I can't set array slices via this command yet."):e+=this.array2js(t,r):e=`this.globals.${t.name}`,e}array2js(t,r){var e=JSON.stringify(t.name),i=t.args||[];return this.expr2js(t,{novalid:!0})+`;this.getArray(${e}, ${i.length})`+i.map(n=>"[this.ROUND("+this.expr2js(n,r)+")]").join("")}checkFuncArgs(t,r){var e=t.args?t.args.length:0;t.name=="RND"&&e==0||t.name=="MID$"&&e==2||t.name=="INSTR"&&e==2||r.length!=e&&this.runtimeError(`I expected ${r.length} arguments for the ${t.name} function, but I got ${e}.`)}startForLoop(t,r,e,i,n){var s=this.curpc-1,a=this.pc2label.get(s);i||(i=1),this.vars[t]=r,this.trace&&console.log(`FOR ${t} = ${r} TO ${e} STEP ${i}`);var h=()=>i>=0?this.vars[t]>e:this.vars[t]o==t)),this.forLoopStack.push(t),this.forLoops[t]={$next:o=>{o&&t!=o&&this.runtimeError(`I executed NEXT "${o}", but the last FOR was for "${t}".`),this.vars[t]+=i;var b=h();b?(this.forLoopStack.pop(),delete this.forLoops[t]):this.curpc=(a!=null&&this.label2pc[a]||s)+1,this.trace&&console.log(`NEXT ${t}: ${this.vars[t]} TO ${e} STEP ${i} DONE=${b}`)}}}nextForLoop(t){var r=this.forLoops[t||this.opts.optionalNextVar&&this.forLoopStack[this.forLoopStack.length-1]];r||this.runtimeError("I couldn't find a matching FOR for this NEXT."),r.$next(t)}whileLoop(t){t?this.whileLoops.push(this.curpc-1):this.skipToAfterWend()}nextWhileLoop(){var t=this.whileLoops.pop();t==null?this.runtimeError("I couldn't find a matching WHILE for this WEND."):this.curpc=t}assign(t,r,e){return e&&t.endsWith("$")?this.checkValue(this.convert(t,r),t):t.endsWith("$")?this.convertToString(r,t):this.convertToNumber(r,t)}convert(t,r){return t.endsWith("$")?r==null?"":r.toString():typeof r=="number"?r:parseFloat(r+"")}convertToString(t,r){if(typeof t!="string")this.runtimeError(`I can't convert ${t} to a string.`);else return t}convertToNumber(t,r){if(typeof t!="number")this.runtimeError(`I can't convert ${t} to a number.`);else return this.checkNum(t)}dimArray(t,...r){if(r=r.map(Math.round),this.arrays[t]!=null){if(this.opts.staticArrays)return;this.runtimeError(`I already dimensioned this array (${t}) earlier.`)}var e=this.getTotalArrayLength(r);e>this.opts.maxArrayElements&&this.runtimeError("I can't create an array with this many elements.");var i=t.endsWith("$"),n=i?Array:Float64Array;if(r.length==1)this.arrays[t]=new n(r[0]+1);else if(r.length==2){this.arrays[t]=new Array(r[0]+1);for(var s=0;s=i.length&&this.runtimeError(`I tried to lookup ${t}(${r}) but it exceeded the dimensions of the array.`),i=i[r[n]]}return c(i)&&this.runtimeError(`I tried to lookup ${t}(${r}) but used too few dimensions.`),i}modifyStringSlice(t,r,e,i){return t=t||"",this.checkString(t),this.checkString(r),i||(i=e),e=this.ROUND(e),i=this.ROUND(i),e<1&&this.dialectError("accept a string slice index less than 1"),ir.length)&&this.runtimeError(`I needed a number between 1 and ${r.length}, but I got ${t}.`),t<1||t>r.length?0:t}onGotoLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gotoLabel(r[t-1])}onGosubLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gosubLabel(r[t-1])}nextDatum(){return this.dataptr>=this.datums.length&&this.runtimeError("I tried to READ, but ran out of data."),this.datums[this.dataptr++].value}do__PRINT(t){var r="";for(var e of t.args){var i=this.expr2js(e),n=i.name;r+=`this.printExpr(this.checkValue(${i}, ${JSON.stringify(n)}));`}return r}preInput(){this.running=!1,this.curpc--}postInput(t){t&&this.curpc++,this.running=!0,this.resume()}do__INPUT(t){var r=t.prompt!=null?this.expr2js(t.prompt):'""',e=t.elapsed!=null?this.assign2js(t.elapsed):"let ___",i="";return t.args.forEach((n,s)=>{var a=this.assign2js(n);i+=` var value = this.convert(${JSON.stringify(n.name)}, response.vals[${s}]); @@ -34,4 +34,4 @@ import{b as y}from"./chunk-3FIVEUG2.js";import{n as E}from"./chunk-UACHXWHT.js"; `),this.tty.addtext("*** END OF PROGRAM ***",1),this.tty.showPrintHead(!1)}loadROM(t,r){var e=this.runtime.exited;this.program=r;var i=this.runtime.load(r);this.tty.uppercaseOnly=!0,(!this.hotReload||e||!i)&&this.reset()}getROMExtension(){return".json"}reset(){this.tty.clear(),this.runtime.reset(),this.clock=0,this.transcript=[]}pause(){this.timer.stop()}resume(){this.isBlocked()||(this.animcount=0,this.timer.start())}isBlocked(){return this.tty.waitingfor!=null||this.runtime.exited}isRunning(){return this.timer.isRunning()}getDefaultExtensions(){return[".bas"]}getPresets(){return L}getPC(){return this.runtime.curpc}getSP(){return 4096-this.runtime.returnStack.length}isStable(){return!0}getCPUState(){return{PC:this.getPC(),SP:this.getSP()}}saveState(){return{c:this.getCPUState(),rt:this.runtime.saveState()}}loadState(t){this.runtime.loadState(t)}getDebugTree(){return{CurrentLine:this.runtime.getCurrentLabel(),Variables:this.runtime.vars,Arrays:this.runtime.arrays,Functions:this.runtime.defs,ForLoops:this.runtime.forLoops,WhileLoops:this.runtime.whileLoops,ReturnStack:this.runtime.returnStack,NextDatum:this.runtime.datums[this.runtime.dataptr],Clock:this.clock,Options:this.runtime.opts,Internals:this.runtime}}inspect(t){let r=this.runtime.vars[t];if(r!=null)return`${t} = ${r}`}showHelp(){return"https://8bitworkshop.com/docs/platforms/basic/"}getDebugCategories(){return["Variables"]}getDebugInfo(t,r){if(t==="Variables")return this.varsToLongString()}varsToLongString(){var t="",r=Object.keys(this.runtime.vars);r.sort();for(var e of r){var i=this.runtime.vars[e],n=JSON.stringify(i);n.length>24&&(n=`${n.substr(0,24)}...(${n.length})`),t+=g(e,3)+" = "+n+` `}return t}setupDebug(t){this.onBreakpointHit=t}clearDebug(){this.onBreakpointHit=null,this.debugTrap=null}checkDebugTrap(){return this.debugTrap&&this.debugTrap()?(this.pause(),this.break(),!0):!1}break(){this.onBreakpointHit&&this.onBreakpointHit(this.saveState())}step(){var t=this.clock;this.debugTrap=()=>this.clock>t,this.resume()}stepOver(){var t=this.runtime.getStatement();if(t&&(t.command=="GOSUB"||t.command=="ONGOSUB")){var r=this.getPC()+1;this.runEval(()=>this.getPC()==r)}else this.step()}hasCustomStepOver(){return!0}runUntilReturn(){var t=this.getSP();this.runEval(()=>this.getSP()>t)}runEval(t){this.debugTrap=()=>t(this.getCPUState()),this.resume()}restartAtPC(t){return t=Math.round(t),t>=0&&t>4)*1024,p=i.vic[17]&32,C=(i.cia2[0]&1)==1&&(i.vic[24]&12)==4,A=i.state[244],I=this.getRasterY();return s+="Mode:",i.vic[17]&32?s+=" BITMAP":s+=" CHAR",i.vic[22]&16&&(s+=" MULTICOLOR"),i.vic[17]&64&&(s+=" EXTENDED"),s+=` -`,s+=`Raster: (${x(A,3)}, ${x(I,3)}) `,s+=`Scroll: (${i.vic[22]&7}, ${i.vic[17]&7})`,s+=` -`,s+=`VIC Bank: $${a(r,4)} Scrn: $${a(l,4)} `,p?s+=`Bitmap: $${a(o&57344,4)}`:C?s+=`Char: ROM $${a(o,4)}`:s+=`Char: $${a(o,4)}`,s+=` -`,s+=f(t,53248,64),s}case"SID":{let t=i.sid,s="";return s+=f(t,54272,32),s}}}setPaddleInput(e,i){e==0&&(this.lightpen_x=i),e==1&&(this.lightpen_y=i);let t=22,s=36,r=228,o=220,l=d(0,255,(this.lightpen_x-t)/(r-t)*160+24),p=d(0,255,(this.lightpen_y-s)/(o-s)*200+50);this.exports.machine_set_mouse(this.sys,l,p)}};var R=[{id:"helloc.c",name:"Hello World",category:"C"},{id:"screen_ram.c",name:"Screen RAM"},{id:"siegegame.c",name:"Siege Game"},{id:"joymove.c",name:"Sprite Movement"},{id:"sprite_collision.c",name:"Sprite Collision"},{id:"scroll1.c",name:"Scrolling (Single Buffer)"},{id:"test_setirq.c",name:"Raster Interrupts"},{id:"test_display_list.c",name:"Raster IRQ Library"},{id:"scrolling_text.c",name:"Big Scrolling Text"},{id:"side_scroller.c",name:"Side-Scrolling Game"},{id:"scroll2.c",name:"Scrolling (Double Buffer)"},{id:"scroll3.c",name:"Scrolling (Multidirectional)"},{id:"scroll4.c",name:"Scrolling (Color RAM Buffering)"},{id:"scroll5.c",name:"Scrolling (Camera Following)"},{id:"fullscrollgame.c",name:"Full-Scrolling Game"},{id:"test_multiplex.c",name:"Sprite Retriggering"},{id:"test_multispritelib.c",name:"Sprite Multiplexing Library"},{id:"mcbitmap.c",name:"Multicolor Bitmap Mode"},{id:"testlz4.c",name:"LZ4 Bitmap Compression"},{id:"musicplayer.c",name:"Music Player"},{id:"siddemo.c",name:"SID Player Demo"},{id:"digisound.c",name:"Digi Sound Player"},{id:"climber.c",name:"Climber Game"},{id:"test_border_sprites.c",name:"Sprites in the Borders"},{id:"sprite_stretch.c",name:"Sprite Stretching"},{id:"linecrunch.c",name:"Linecrunch"},{id:"fld.c",name:"Flexible Line Distance"},{id:"plasma.c",name:"Plasma Demo"},{id:"23matches.c",name:"23 Matches"},{id:"tgidemo.c",name:"TGI Graphics Demo"},{id:"upandaway.c",name:"Up, Up and Away"},{id:"hello.dasm",name:"Hello World (DASM)",category:"Assembly"},{id:"hello.acme",name:"Hello World (ACME)"},{id:"hello.wiz",name:"Hello Wiz (Wiz)"},{id:"hello.cpp",name:"Hello Oscar64",category:"C++ (Oscar64)"},{id:"particles.cpp",name:"Fireworks"},{id:"lander.cpp",name:"Lunar Lander"}],v={main:[{name:"6510 Registers",start:0,size:2,type:"io"},{name:"BIOS Reserved",start:512,size:167},{name:"Default Screen RAM",start:1024,size:1024,type:"ram"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:40960,size:8192,type:"rom"},{name:"Upper RAM",start:49152,size:4096,type:"ram"},{name:"Character ROM",start:53248,size:4096,type:"rom"},{name:"VIC-II I/O",start:53248,size:1024,type:"io"},{name:"SID",start:54272,size:1024,type:"io"},{name:"Color RAM",start:55296,size:1024,type:"io"},{name:"CIA 1",start:56320,size:256,type:"io"},{name:"CIA 2",start:56576,size:256,type:"io"},{name:"I/O 1",start:56832,size:256,type:"io"},{name:"I/O 2",start:57088,size:256,type:"io"},{name:"KERNAL ROM",start:57344,size:8192,type:"rom"}]},h=class extends y{newMachine(){return new m("c64")}getPresets(){return R}readAddress(c){return this.machine.readConst(c)}getMemoryMap(){return v}showHelp(){return"https://8bitworkshop.com/docs/platforms/c64/"}getROMExtension(c){return c&&c[0]==1&&c[1]==8?".prg":".bin"}},u=class extends M{constructor(){super(...arguments);this.getToolForFilename=b;this.getOpcodeMetadata=_}getPresets(){return R}getDefaultExtensions(){return[".c",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}loadROM(e,i){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:"c64.zip",cfgfile:"c64.cfg",driver:"c64",width:418,height:235,romfn:"/emulator/image.crt",romdata:new Uint8Array(i),romsize:65536,extraargs:["-autoboot_delay","5","-autoboot_command",`load "$",8,1 -`],preInit:function(s){}});else{this.loadROMFile(i),this.loadRegion(":quickload",i);var t=this.luacall('image:load("/emulator/image.prg")');console.log("load rom",t)}}start(){}getMemoryMap(){return v}};n.c64=h;n["c64.wasm"]=h;n["c64.mame"]=u; -//# sourceMappingURL=c64-7RF3PPMK.js.map diff --git a/gen/c64-EUV3UE4H.js b/gen/c64-EUV3UE4H.js new file mode 100644 index 00000000..bf5798e9 --- /dev/null +++ b/gen/c64-EUV3UE4H.js @@ -0,0 +1,14 @@ +import{a as C}from"./chunk-ENVHSJV6.js";import{G as y,s as b,z as _}from"./chunk-RWTUUV4L.js";import{a as S}from"./chunk-UXRCACYH.js";import{L as n,Y as u,a as x,g as a,v as d}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var m=class extends b{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=63;this.joymask0=0;this.joymask1=0;this.lightpen_x=0;this.lightpen_y=0}loadBIOS(e){super.loadBIOS(e)}reset(){super.reset();for(var e=0;e<128;e++)this.exports.machine_key_up(this.sys,e);if(this.romptr&&this.romlen){if(this.exports.machine_load_rom(this.sys,this.romptr,this.romlen),this.prgstart=this.romarr[0]+(this.romarr[1]<<8),this.prgstart==2049)if(this.romarr[6]==158){for(var s=0,t=0;t<5;t++){var e=this.romarr[7+t];if(e==155||e==0)break;s=s*10+(e&15)}this.prgstart=s,console.log("SYS",s,a(s))}else this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("RUN",this.prgstart,a(this.prgstart));if(this.prgstart<32768){this.exports.machine_exec(this.sys,25e4);for(var i="\rSYS "+this.prgstart,t=0;t>4)*1024,p=s.vic[17]&32,v=(s.cia2[0]&1)==1&&(s.vic[24]&12)==4,A=s.state[244],D=this.getRasterY();return i+="Mode:",s.vic[17]&32?i+=" BITMAP":i+=" CHAR",s.vic[22]&16&&(i+=" MULTICOLOR"),s.vic[17]&64&&(i+=" EXTENDED"),i+=` +`,i+=`Raster: (${x(A,3)}, ${x(D,3)}) `,i+=`Scroll: (${s.vic[22]&7}, ${s.vic[17]&7})`,i+=` +`,i+=`VIC Bank: $${a(r,4)} Scrn: $${a(l,4)} `,p?i+=`Bitmap: $${a(o&57344,4)}`:v?i+=`Char: ROM $${a(o,4)}`:i+=`Char: $${a(o,4)}`,i+=` +`,i+=u(t,53248,64),i}case"SID":{let t=s.sid,i="";return i+=u(t,54272,32),i}}}setPaddleInput(e,s){e==0&&(this.lightpen_x=s),e==1&&(this.lightpen_y=s);let t=22,i=36,r=228,o=220,l=d(0,255,(this.lightpen_x-t)/(r-t)*160+24),p=d(0,255,(this.lightpen_y-i)/(o-i)*200+50);this.exports.machine_set_mouse(this.sys,l,p)}};var M=[{id:"helloc.c",name:"Hello World",category:"C"},{id:"screen_ram.c",name:"Screen RAM"},{id:"siegegame.c",name:"Siege Game"},{id:"joymove.c",name:"Sprite Movement"},{id:"sprite_collision.c",name:"Sprite Collision"},{id:"scroll1.c",name:"Scrolling (Single Buffer)"},{id:"test_setirq.c",name:"Raster Interrupts"},{id:"test_display_list.c",name:"Raster IRQ Library"},{id:"scrolling_text.c",name:"Big Scrolling Text"},{id:"side_scroller.c",name:"Side-Scrolling Game"},{id:"scroll2.c",name:"Scrolling (Double Buffer)"},{id:"scroll3.c",name:"Scrolling (Multidirectional)"},{id:"scroll4.c",name:"Scrolling (Color RAM Buffering)"},{id:"scroll5.c",name:"Scrolling (Camera Following)"},{id:"fullscrollgame.c",name:"Full-Scrolling Game"},{id:"test_multiplex.c",name:"Sprite Retriggering"},{id:"test_multispritelib.c",name:"Sprite Multiplexing Library"},{id:"mcbitmap.c",name:"Multicolor Bitmap Mode"},{id:"testlz4.c",name:"LZ4 Bitmap Compression"},{id:"musicplayer.c",name:"Music Player"},{id:"siddemo.c",name:"SID Player Demo"},{id:"digisound.c",name:"Digi Sound Player"},{id:"climber.c",name:"Climber Game"},{id:"test_border_sprites.c",name:"Sprites in the Borders"},{id:"sprite_stretch.c",name:"Sprite Stretching"},{id:"linecrunch.c",name:"Linecrunch"},{id:"fld.c",name:"Flexible Line Distance"},{id:"plasma.c",name:"Plasma Demo"},{id:"23matches.c",name:"23 Matches"},{id:"tgidemo.c",name:"TGI Graphics Demo"},{id:"upandaway.c",name:"Up, Up and Away"},{id:"hello.dasm",name:"Hello World (DASM)",category:"Assembly"},{id:"hello.acme",name:"Hello World (ACME)"},{id:"hello.wiz",name:"Hello Wiz (Wiz)"},{id:"hello.cpp",name:"Hello Oscar64",category:"C++ (Oscar64)"},{id:"particles.cpp",name:"Fireworks"},{id:"lander.cpp",name:"Lunar Lander"},{id:"hello-sdcc.c",name:"Hello World (SDCC)",category:"C (SDCC)"},{id:"sprite_collision-sdcc.c",name:"Sprite Collision (SDCC)"},{id:"fullscrollgame-sdcc.c",name:"Full-Scrolling Game (SDCC)"}],R={main:[{name:"6510 Registers",start:0,size:2,type:"io"},{name:"BIOS Reserved",start:512,size:167},{name:"Default Screen RAM",start:1024,size:1024,type:"ram"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:40960,size:8192,type:"rom"},{name:"Upper RAM",start:49152,size:4096,type:"ram"},{name:"Character ROM",start:53248,size:4096,type:"rom"},{name:"VIC-II I/O",start:53248,size:1024,type:"io"},{name:"SID",start:54272,size:1024,type:"io"},{name:"Color RAM",start:55296,size:1024,type:"io"},{name:"CIA 1",start:56320,size:256,type:"io"},{name:"CIA 2",start:56576,size:256,type:"io"},{name:"I/O 1",start:56832,size:256,type:"io"},{name:"I/O 2",start:57088,size:256,type:"io"},{name:"KERNAL ROM",start:57344,size:8192,type:"rom"}]},h=class extends y{newMachine(){return new m("c64")}getPresets(){return M}readAddress(c){return this.machine.readConst(c)}getMemoryMap(){return R}showHelp(){return"https://8bitworkshop.com/docs/platforms/c64/"}getROMExtension(c){return c&&c[0]==1&&c[1]==8?".prg":".bin"}},f=class extends C{constructor(){super(...arguments);this.getToolForFilename=S;this.getOpcodeMetadata=_}getPresets(){return M}getDefaultExtensions(){return[".c",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}loadROM(e,s){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:"c64.zip",cfgfile:"c64.cfg",driver:"c64",width:418,height:235,romfn:"/emulator/image.crt",romdata:new Uint8Array(s),romsize:65536,extraargs:["-autoboot_delay","5","-autoboot_command",`load "$",8,1 +`],preInit:function(i){}});else{this.loadROMFile(s),this.loadRegion(":quickload",s);var t=this.luacall('image:load("/emulator/image.prg")');console.log("load rom",t)}}start(){}getMemoryMap(){return R}};n.c64=h;n["c64.wasm"]=h;n["c64.mame"]=f; +//# sourceMappingURL=c64-EUV3UE4H.js.map diff --git a/gen/c64-7RF3PPMK.js.map b/gen/c64-EUV3UE4H.js.map similarity index 71% rename from gen/c64-7RF3PPMK.js.map rename to gen/c64-EUV3UE4H.js.map index 73a905fb..1474c001 100644 --- a/gen/c64-7RF3PPMK.js.map +++ b/gen/c64-EUV3UE4H.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/machine/c64.ts", "../src/platform/c64.ts"], - "sourcesContent": ["\nimport { AcceptsPaddleInput, Probeable } from \"../common/devices\";\nimport { dumpRAM, KeyFlags } from \"../common/emu\";\nimport { clamp, hex, lpad } from \"../common/util\";\n\n// https://www.c64-wiki.com/wiki/C64\n// http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt\n// http://www.zimmers.net/cbmpics/cbm/c64/c64prg.txt\n// http://sta.c64.org/cbm64mem.html\n// http://hitmen.c02.at/temp/palstuff/\n\n//// WASM Machine\n\nimport { Machine } from \"../common/baseplatform\";\nimport { TrapCondition } from \"../common/devices\";\nimport { BaseWASMMachine } from \"../common/wasmplatform\";\n\nexport class C64_WASMMachine extends BaseWASMMachine \n implements Machine, Probeable, AcceptsPaddleInput {\n\n numTotalScanlines = 312;\n cpuCyclesPerLine = 63;\n\n prgstart : number;\n joymask0 = 0;\n joymask1 = 0;\n lightpen_x = 0;\n lightpen_y = 0;\n\n loadBIOS(srcArray: Uint8Array) {\n super.loadBIOS(srcArray);\n }\n reset() {\n super.reset();\n // clear keyboard\n for (var ch=0; ch<128; ch++) {\n this.exports.machine_key_up(this.sys, ch);\n }\n // load rom\n if (this.romptr && this.romlen) {\n this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);\n this.prgstart = this.romarr[0] + (this.romarr[1]<<8); // get load address\n // look for BASIC program start\n if (this.prgstart == 0x801) {\n // decode SYS address from decimal?\n if (this.romarr[6] == 0x9e) {\n var addr = 0;\n for (var i=0; i<5; i++) {\n var ch = this.romarr[7+i];\n if (ch == 0x9b || ch == 0) break;\n addr = addr * 10 + (ch & 0xf);\n }\n this.prgstart = addr;\n console.log(\"SYS\", addr, hex(addr));\n } else {\n this.prgstart = this.romarr[2] + (this.romarr[3]<<8) + 2; // point to after BASIC program\n console.log(\"RUN\", this.prgstart, hex(this.prgstart));\n }\n }\n // is program loaded into RAM?\n if (this.prgstart < 0x8000) {\n // advance BIOS a few frames\n this.exports.machine_exec(this.sys, 250000);\n // type in command (SYS 2061)\n var cmd = \"\\rSYS \"+this.prgstart;\n for (var i=0; i ,\n case 191: key = flags & KeyFlags.Shift ? 0x3f : 0x2f; break; // ? /\n case 222: key = flags & KeyFlags.Shift ? 0x22 : 0x27; break; // \" '\n case 219: key = flags & KeyFlags.Shift ? 0x7b : 0x5b; break; // [\n case 221: key = flags & KeyFlags.Shift ? 0x7d : 0x5d; break; // ]\n case 48: if (flags & KeyFlags.Shift) key = 0x29; break; // )\n case 49: if (flags & KeyFlags.Shift) key = 0x21; break; // !\n case 50: if (flags & KeyFlags.Shift) key = 0x40; break; // @\n case 51: if (flags & KeyFlags.Shift) key = 0x23; break; // #\n case 52: if (flags & KeyFlags.Shift) key = 0x24; break; // $\n case 53: if (flags & KeyFlags.Shift) key = 0x25; break; // %\n case 54: if (flags & KeyFlags.Shift) key = 0x5e; break; // ^\n case 55: if (flags & KeyFlags.Shift) key = 0x26; break; // &\n case 56: if (flags & KeyFlags.Shift) key = 0x2a; break; // *\n case 57: if (flags & KeyFlags.Shift) key = 0x28; break; // (\n case 59: if (flags & KeyFlags.Shift) key = 0x3a; break; // ;\n case 61: if (flags & KeyFlags.Shift) key = 0x2b; break; // +\n case 173: key = flags & KeyFlags.Shift ? 0x5f : 0x2d; break; // _ -\n }\n if (flags & KeyFlags.KeyDown) {\n this.exports.machine_key_down(this.sys, key);\n this.joymask0 |= mask;\n this.joymask1 |= mask2;\n } else if (flags & KeyFlags.KeyUp) {\n this.exports.machine_key_up(this.sys, key);\n this.joymask0 &= ~mask;\n this.joymask1 &= ~mask2;\n }\n this.exports.c64_joystick(this.sys, this.joymask0, this.joymask1);\n }\n getRasterX() {\n return this.statearr[0xf4];\n }\n getRasterY() {\n return this.exports.machine_get_raster_line(this.sys);\n }\n getRasterCanvasPosition() {\n return {\n x: this.getRasterX() * 392/63,\n y: this.getRasterY() - 14,\n }\n }\n getDebugStateOffset(index: number) {\n var p = this.exports.machine_get_debug_pointer(this.sys, index);\n return p - this.sys;\n }\n getDebugCategories() {\n return ['CPU','ZPRAM','Stack','PLA','CIA','VIC','SID'];\n }\n getDebugInfo(category:string, state:any) {\n switch (category) {\n case 'PLA': {\n let s = \"\";\n let iomapped = state.pla[0];\n let port = state.pla[3];\n s += `$0000 - $9FFF RAM\\n`;\n s += `$A000 - $BFFF ${(port&3)==3 ? 'BASIC ROM' : 'RAM'}\\n`;\n s += `$C000 - $CFFF RAM\\n`;\n s += `$D000 - $DFFF ${iomapped ? 'I/O' : (port&3)!=0 ? 'CHAR ROM' : 'RAM'}\\n`;\n s += `$E000 - $FFFF ${(port&2)==2 ? 'KERNAL ROM' : 'RAM'}\\n`;\n return s;\n }\n case 'CIA': {\n let s = \"\";\n for (let i=0; i<2; i++) {\n let m = i ? state.cia2 : state.cia1;\n s += `CIA ${i+1}\\n`;\n s += ` A: Data ${hex(m[0])} DDR ${hex(m[1])} Input ${hex(m[2])}`;\n s += ` Timer ${hex(m[10]+m[11]*256, 4)}\\n`;\n s += ` B: Data ${hex(m[4])} DDR ${hex(m[5])} Input ${hex(m[6])}`;\n s += ` Timer ${hex(m[10+10]+m[11+10]*256, 4)}\\n`;\n //s += ` IMR ${hex(m[48])} ICR ${hex(m[50])}\\n`\n }\n return s;\n }\n case 'VIC': {\n let m = state.vic;\n let s = '';\n let vicbank = ((state.cia2[0] & 3) ^ 3) * 0x4000;\n let charmem = vicbank + (state.vic[0x18] & 14) * 0x400;\n let screen = vicbank + (state.vic[0x18] >> 4) * 0x400;\n let isbitmap = state.vic[0x11] & 0x20;\n let ischar = (state.cia2[0]&1)==1 && (state.vic[0x18]&12)==4;\n let rasterX = state.state[0xf4];\n let rasterY = this.getRasterY();\n s += 'Mode:';\n if (state.vic[0x11] & 0x20) s += ' BITMAP'; else s += ' CHAR';\n if (state.vic[0x16] & 0x10) s += ' MULTICOLOR';\n if (state.vic[0x11] & 0x40) s += ' EXTENDED';\n s += \"\\n\";\n s += `Raster: (${lpad(rasterX,3)}, ${lpad(rasterY,3)}) `;\n s += `Scroll: (${state.vic[0x16] & 7}, ${state.vic[0x11] & 7})`;\n s += \"\\n\";\n s += `VIC Bank: $${hex(vicbank,4)} Scrn: $${hex(screen,4)} `;\n if (isbitmap) s += `Bitmap: $${hex(charmem&0xe000,4)}`\n else if (ischar) s += `Char: ROM $${hex(charmem,4)}`;\n else s += `Char: $${hex(charmem,4)}`;\n s += \"\\n\";\n s += dumpRAM(m, 0xd000, 64);\n return s;\n }\n case 'SID': {\n let m = state.sid;\n let s = ''\n s += dumpRAM(m, 0xd400, 32);\n return s;\n }\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n if (controller == 0) this.lightpen_x = value;\n if (controller == 1) this.lightpen_y = value;\n const x1 = 22;\n const y1 = 36;\n const x2 = 228;\n const y2 = 220;\n let x = clamp(0, 255, (this.lightpen_x - x1) / (x2 - x1) * 160 + 24);\n let y = clamp(0, 255, (this.lightpen_y - y1) / (y2 - y1) * 200 + 50);\n this.exports.machine_set_mouse(this.sys, x, y);\n }\n\n}\n", "\nimport { C64_WASMMachine } from \"../machine/c64\";\nimport { Platform, Base6502MachinePlatform, getToolForFilename_6502, getOpcodeMetadata_6502, Preset } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst C64_PRESETS : Preset[] = [\n {id:'helloc.c', name:'Hello World', category:'C'},\n {id:'screen_ram.c', name:'Screen RAM'},\n {id:'siegegame.c', name:'Siege Game'},\n {id:'joymove.c', name:'Sprite Movement'},\n {id:'sprite_collision.c', name:'Sprite Collision'},\n {id:'scroll1.c', name:'Scrolling (Single Buffer)'},\n {id:'test_setirq.c', name:'Raster Interrupts'},\n {id:'test_display_list.c', name:'Raster IRQ Library'},\n {id:'scrolling_text.c', name:'Big Scrolling Text'},\n {id:'side_scroller.c', name:'Side-Scrolling Game'},\n {id:'scroll2.c', name:'Scrolling (Double Buffer)'},\n {id:'scroll3.c', name:'Scrolling (Multidirectional)'},\n {id:'scroll4.c', name:'Scrolling (Color RAM Buffering)'},\n {id:'scroll5.c', name:'Scrolling (Camera Following)'},\n// {id:'scrollingmap1.c', name:'Scrolling Tile Map'},\n {id:'fullscrollgame.c', name:'Full-Scrolling Game'},\n {id:'test_multiplex.c', name:'Sprite Retriggering'},\n {id:'test_multispritelib.c', name:'Sprite Multiplexing Library'},\n {id:'mcbitmap.c', name:'Multicolor Bitmap Mode'},\n {id:'testlz4.c', name:'LZ4 Bitmap Compression'},\n //{id:'mandel.c', name:'Mandelbrot Fractal'},\n {id:'musicplayer.c', name:'Music Player'},\n //{id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},\n {id:'siddemo.c', name:'SID Player Demo'},\n {id:'digisound.c', name:'Digi Sound Player'},\n {id:'climber.c', name:'Climber Game'},\n {id:'test_border_sprites.c', name:'Sprites in the Borders'},\n {id:'sprite_stretch.c', name:'Sprite Stretching'},\n {id:'linecrunch.c', name:'Linecrunch'},\n {id:'fld.c', name:'Flexible Line Distance'},\n {id:'plasma.c', name:'Plasma Demo'},\n {id:'23matches.c', name:'23 Matches'},\n {id:'tgidemo.c', name:'TGI Graphics Demo'},\n {id:'upandaway.c', name:'Up, Up and Away'},\n {id:'hello.dasm', name:'Hello World (DASM)', category:'Assembly'},\n {id:'hello.acme', name:'Hello World (ACME)'},\n {id:'hello.wiz', name:'Hello Wiz (Wiz)'},\n // {id:'kitchensink.dasm', name:'Kitchensink (DASM)'},\n {id:'hello.cpp', name:'Hello Oscar64', category:'C++ (Oscar64)'},\n {id:'particles.cpp', name:'Fireworks'},\n {id:'lander.cpp', name:'Lunar Lander'},\n];\n\nconst C64_MEMORY_MAP = { main:[\n {name:'6510 Registers',start:0x0, size:0x2,type:'io'},\n {name:'BIOS Reserved', start:0x200, size:0xa7},\n {name:'Default Screen RAM', start:0x400, size:1024,type:'ram'},\n //{name:'RAM', start:0x2, size:0x7ffe,type:'ram'},\n {name:'Cartridge ROM',start:0x8000,size:0x2000,type:'rom'},\n {name:'BASIC ROM', start:0xa000,size:0x2000,type:'rom'},\n {name:'Upper RAM', start:0xc000,size:0x1000,type:'ram'},\n {name:'Character ROM',start:0xd000,size:0x1000,type:'rom'},\n {name:'VIC-II I/O', start:0xd000,size:0x0400,type:'io'},\n {name:'SID', start:0xd400,size:0x0400,type:'io'},\n {name:'Color RAM', start:0xd800,size:0x0400,type:'io'},\n {name:'CIA 1', start:0xdc00,size:0x0100,type:'io'},\n {name:'CIA 2', start:0xdd00,size:0x0100,type:'io'},\n {name:'I/O 1', start:0xde00,size:0x0100,type:'io'},\n {name:'I/O 2', start:0xdf00,size:0x0100,type:'io'},\n {name:'KERNAL ROM', start:0xe000,size:0x2000,type:'rom'},\n] }\n\n// WASM C64 platform\nclass C64WASMPlatform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new C64_WASMMachine('c64'); }\n\n getPresets() { return C64_PRESETS; }\n readAddress(a) { return this.machine.readConst(a); }\n getMemoryMap() { return C64_MEMORY_MAP; }\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/c64/\" }\n getROMExtension(rom:Uint8Array) {\n /*\n if (rom && rom[0] == 0x00 && rom[1] == 0x80 && rom[2+4] == 0xc3 && rom[2+5] == 0xc2) return \".crt\";\n */\n if (rom && rom[0] == 0x01 && rom[1] == 0x08) return \".prg\";\n else return \".bin\";\n }\n}\n\n// C64 MAME platform\nabstract class C64MAMEPlatform extends BaseMAME6502Platform {\n getPresets() { return C64_PRESETS; }\n getToolForFilename = getToolForFilename_6502;\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n loadROM(title, data) {\n if (!this.started) {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitpc.js',\n biosfile:'c64.zip',\n cfgfile:'c64.cfg',\n driver:'c64',\n width:418,\n height:235,\n romfn:'/emulator/image.crt',\n romdata:new Uint8Array(data),\n romsize:0x10000,\n extraargs: ['-autoboot_delay','5','-autoboot_command','load \"$\",8,1\\n'],\n preInit:function(_self) {\n },\n });\n } else {\n this.loadROMFile(data);\n this.loadRegion(\":quickload\", data);\n var result = this.luacall(`image:load(\"/emulator/image.prg\")`)\n console.log('load rom', result);\n //this.loadRegion(\":exp:standard\", data);\n }\n }\n start() {\n }\n getMemoryMap() { return C64_MEMORY_MAP; }\n}\n\n\nPLATFORMS['c64'] = C64WASMPlatform;\nPLATFORMS['c64.wasm'] = C64WASMPlatform;\nPLATFORMS['c64.mame'] = C64MAMEPlatform;\n"], - "mappings": "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", + "sourcesContent": ["\nimport { AcceptsPaddleInput, Probeable } from \"../common/devices\";\nimport { dumpRAM, KeyFlags } from \"../common/emu\";\nimport { clamp, hex, lpad } from \"../common/util\";\n\n// https://www.c64-wiki.com/wiki/C64\n// http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt\n// http://www.zimmers.net/cbmpics/cbm/c64/c64prg.txt\n// http://sta.c64.org/cbm64mem.html\n// http://hitmen.c02.at/temp/palstuff/\n\n//// WASM Machine\n\nimport { Machine } from \"../common/baseplatform\";\nimport { TrapCondition } from \"../common/devices\";\nimport { BaseWASMMachine } from \"../common/wasmplatform\";\n\nexport class C64_WASMMachine extends BaseWASMMachine \n implements Machine, Probeable, AcceptsPaddleInput {\n\n numTotalScanlines = 312;\n cpuCyclesPerLine = 63;\n\n prgstart : number;\n joymask0 = 0;\n joymask1 = 0;\n lightpen_x = 0;\n lightpen_y = 0;\n\n loadBIOS(srcArray: Uint8Array) {\n super.loadBIOS(srcArray);\n }\n reset() {\n super.reset();\n // clear keyboard\n for (var ch=0; ch<128; ch++) {\n this.exports.machine_key_up(this.sys, ch);\n }\n // load rom\n if (this.romptr && this.romlen) {\n this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);\n this.prgstart = this.romarr[0] + (this.romarr[1]<<8); // get load address\n // look for BASIC program start\n if (this.prgstart == 0x801) {\n // decode SYS address from decimal?\n if (this.romarr[6] == 0x9e) {\n var addr = 0;\n for (var i=0; i<5; i++) {\n var ch = this.romarr[7+i];\n if (ch == 0x9b || ch == 0) break;\n addr = addr * 10 + (ch & 0xf);\n }\n this.prgstart = addr;\n console.log(\"SYS\", addr, hex(addr));\n } else {\n this.prgstart = this.romarr[2] + (this.romarr[3]<<8) + 2; // point to after BASIC program\n console.log(\"RUN\", this.prgstart, hex(this.prgstart));\n }\n }\n // is program loaded into RAM?\n if (this.prgstart < 0x8000) {\n // advance BIOS a few frames\n this.exports.machine_exec(this.sys, 250000);\n // type in command (SYS 2061)\n var cmd = \"\\rSYS \"+this.prgstart;\n for (var i=0; i ,\n case 191: key = flags & KeyFlags.Shift ? 0x3f : 0x2f; break; // ? /\n case 222: key = flags & KeyFlags.Shift ? 0x22 : 0x27; break; // \" '\n case 219: key = flags & KeyFlags.Shift ? 0x7b : 0x5b; break; // [\n case 221: key = flags & KeyFlags.Shift ? 0x7d : 0x5d; break; // ]\n case 48: if (flags & KeyFlags.Shift) key = 0x29; break; // )\n case 49: if (flags & KeyFlags.Shift) key = 0x21; break; // !\n case 50: if (flags & KeyFlags.Shift) key = 0x40; break; // @\n case 51: if (flags & KeyFlags.Shift) key = 0x23; break; // #\n case 52: if (flags & KeyFlags.Shift) key = 0x24; break; // $\n case 53: if (flags & KeyFlags.Shift) key = 0x25; break; // %\n case 54: if (flags & KeyFlags.Shift) key = 0x5e; break; // ^\n case 55: if (flags & KeyFlags.Shift) key = 0x26; break; // &\n case 56: if (flags & KeyFlags.Shift) key = 0x2a; break; // *\n case 57: if (flags & KeyFlags.Shift) key = 0x28; break; // (\n case 59: if (flags & KeyFlags.Shift) key = 0x3a; break; // ;\n case 61: if (flags & KeyFlags.Shift) key = 0x2b; break; // +\n case 173: key = flags & KeyFlags.Shift ? 0x5f : 0x2d; break; // _ -\n }\n if (flags & KeyFlags.KeyDown) {\n this.exports.machine_key_down(this.sys, key);\n this.joymask0 |= mask;\n this.joymask1 |= mask2;\n } else if (flags & KeyFlags.KeyUp) {\n this.exports.machine_key_up(this.sys, key);\n this.joymask0 &= ~mask;\n this.joymask1 &= ~mask2;\n }\n this.exports.c64_joystick(this.sys, this.joymask0, this.joymask1);\n }\n getRasterX() {\n return this.statearr[0xf4];\n }\n getRasterY() {\n return this.exports.machine_get_raster_line(this.sys);\n }\n getRasterCanvasPosition() {\n return {\n x: this.getRasterX() * 392/63,\n y: this.getRasterY() - 14,\n }\n }\n getDebugStateOffset(index: number) {\n var p = this.exports.machine_get_debug_pointer(this.sys, index);\n return p - this.sys;\n }\n getDebugCategories() {\n return ['CPU','ZPRAM','Stack','PLA','CIA','VIC','SID'];\n }\n getDebugInfo(category:string, state:any) {\n switch (category) {\n case 'PLA': {\n let s = \"\";\n let iomapped = state.pla[0];\n let port = state.pla[3];\n s += `$0000 - $9FFF RAM\\n`;\n s += `$A000 - $BFFF ${(port&3)==3 ? 'BASIC ROM' : 'RAM'}\\n`;\n s += `$C000 - $CFFF RAM\\n`;\n s += `$D000 - $DFFF ${iomapped ? 'I/O' : (port&3)!=0 ? 'CHAR ROM' : 'RAM'}\\n`;\n s += `$E000 - $FFFF ${(port&2)==2 ? 'KERNAL ROM' : 'RAM'}\\n`;\n return s;\n }\n case 'CIA': {\n let s = \"\";\n for (let i=0; i<2; i++) {\n let m = i ? state.cia2 : state.cia1;\n s += `CIA ${i+1}\\n`;\n s += ` A: Data ${hex(m[0])} DDR ${hex(m[1])} Input ${hex(m[2])}`;\n s += ` Timer ${hex(m[10]+m[11]*256, 4)}\\n`;\n s += ` B: Data ${hex(m[4])} DDR ${hex(m[5])} Input ${hex(m[6])}`;\n s += ` Timer ${hex(m[10+10]+m[11+10]*256, 4)}\\n`;\n //s += ` IMR ${hex(m[48])} ICR ${hex(m[50])}\\n`\n }\n return s;\n }\n case 'VIC': {\n let m = state.vic;\n let s = '';\n let vicbank = ((state.cia2[0] & 3) ^ 3) * 0x4000;\n let charmem = vicbank + (state.vic[0x18] & 14) * 0x400;\n let screen = vicbank + (state.vic[0x18] >> 4) * 0x400;\n let isbitmap = state.vic[0x11] & 0x20;\n let ischar = (state.cia2[0]&1)==1 && (state.vic[0x18]&12)==4;\n let rasterX = state.state[0xf4];\n let rasterY = this.getRasterY();\n s += 'Mode:';\n if (state.vic[0x11] & 0x20) s += ' BITMAP'; else s += ' CHAR';\n if (state.vic[0x16] & 0x10) s += ' MULTICOLOR';\n if (state.vic[0x11] & 0x40) s += ' EXTENDED';\n s += \"\\n\";\n s += `Raster: (${lpad(rasterX,3)}, ${lpad(rasterY,3)}) `;\n s += `Scroll: (${state.vic[0x16] & 7}, ${state.vic[0x11] & 7})`;\n s += \"\\n\";\n s += `VIC Bank: $${hex(vicbank,4)} Scrn: $${hex(screen,4)} `;\n if (isbitmap) s += `Bitmap: $${hex(charmem&0xe000,4)}`\n else if (ischar) s += `Char: ROM $${hex(charmem,4)}`;\n else s += `Char: $${hex(charmem,4)}`;\n s += \"\\n\";\n s += dumpRAM(m, 0xd000, 64);\n return s;\n }\n case 'SID': {\n let m = state.sid;\n let s = ''\n s += dumpRAM(m, 0xd400, 32);\n return s;\n }\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n if (controller == 0) this.lightpen_x = value;\n if (controller == 1) this.lightpen_y = value;\n const x1 = 22;\n const y1 = 36;\n const x2 = 228;\n const y2 = 220;\n let x = clamp(0, 255, (this.lightpen_x - x1) / (x2 - x1) * 160 + 24);\n let y = clamp(0, 255, (this.lightpen_y - y1) / (y2 - y1) * 200 + 50);\n this.exports.machine_set_mouse(this.sys, x, y);\n }\n\n}\n", "\nimport { C64_WASMMachine } from \"../machine/c64\";\nimport { Platform, Base6502MachinePlatform, getToolForFilename_6502, getOpcodeMetadata_6502, Preset } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst C64_PRESETS : Preset[] = [\n {id:'helloc.c', name:'Hello World', category:'C'},\n {id:'screen_ram.c', name:'Screen RAM'},\n {id:'siegegame.c', name:'Siege Game'},\n {id:'joymove.c', name:'Sprite Movement'},\n {id:'sprite_collision.c', name:'Sprite Collision'},\n {id:'scroll1.c', name:'Scrolling (Single Buffer)'},\n {id:'test_setirq.c', name:'Raster Interrupts'},\n {id:'test_display_list.c', name:'Raster IRQ Library'},\n {id:'scrolling_text.c', name:'Big Scrolling Text'},\n {id:'side_scroller.c', name:'Side-Scrolling Game'},\n {id:'scroll2.c', name:'Scrolling (Double Buffer)'},\n {id:'scroll3.c', name:'Scrolling (Multidirectional)'},\n {id:'scroll4.c', name:'Scrolling (Color RAM Buffering)'},\n {id:'scroll5.c', name:'Scrolling (Camera Following)'},\n// {id:'scrollingmap1.c', name:'Scrolling Tile Map'},\n {id:'fullscrollgame.c', name:'Full-Scrolling Game'},\n {id:'test_multiplex.c', name:'Sprite Retriggering'},\n {id:'test_multispritelib.c', name:'Sprite Multiplexing Library'},\n {id:'mcbitmap.c', name:'Multicolor Bitmap Mode'},\n {id:'testlz4.c', name:'LZ4 Bitmap Compression'},\n //{id:'mandel.c', name:'Mandelbrot Fractal'},\n {id:'musicplayer.c', name:'Music Player'},\n //{id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},\n {id:'siddemo.c', name:'SID Player Demo'},\n {id:'digisound.c', name:'Digi Sound Player'},\n {id:'climber.c', name:'Climber Game'},\n {id:'test_border_sprites.c', name:'Sprites in the Borders'},\n {id:'sprite_stretch.c', name:'Sprite Stretching'},\n {id:'linecrunch.c', name:'Linecrunch'},\n {id:'fld.c', name:'Flexible Line Distance'},\n {id:'plasma.c', name:'Plasma Demo'},\n {id:'23matches.c', name:'23 Matches'},\n {id:'tgidemo.c', name:'TGI Graphics Demo'},\n {id:'upandaway.c', name:'Up, Up and Away'},\n {id:'hello.dasm', name:'Hello World (DASM)', category:'Assembly'},\n {id:'hello.acme', name:'Hello World (ACME)'},\n {id:'hello.wiz', name:'Hello Wiz (Wiz)'},\n // {id:'kitchensink.dasm', name:'Kitchensink (DASM)'},\n {id:'hello.cpp', name:'Hello Oscar64', category:'C++ (Oscar64)'},\n {id:'particles.cpp', name:'Fireworks'},\n {id:'lander.cpp', name:'Lunar Lander'},\n {id:'hello-sdcc.c', name:'Hello World (SDCC)', category:'C (SDCC)'},\n {id:'sprite_collision-sdcc.c', name:'Sprite Collision (SDCC)'},\n {id:'fullscrollgame-sdcc.c', name:'Full-Scrolling Game (SDCC)'},\n];\n\nconst C64_MEMORY_MAP = { main:[\n {name:'6510 Registers',start:0x0, size:0x2,type:'io'},\n {name:'BIOS Reserved', start:0x200, size:0xa7},\n {name:'Default Screen RAM', start:0x400, size:1024,type:'ram'},\n //{name:'RAM', start:0x2, size:0x7ffe,type:'ram'},\n {name:'Cartridge ROM',start:0x8000,size:0x2000,type:'rom'},\n {name:'BASIC ROM', start:0xa000,size:0x2000,type:'rom'},\n {name:'Upper RAM', start:0xc000,size:0x1000,type:'ram'},\n {name:'Character ROM',start:0xd000,size:0x1000,type:'rom'},\n {name:'VIC-II I/O', start:0xd000,size:0x0400,type:'io'},\n {name:'SID', start:0xd400,size:0x0400,type:'io'},\n {name:'Color RAM', start:0xd800,size:0x0400,type:'io'},\n {name:'CIA 1', start:0xdc00,size:0x0100,type:'io'},\n {name:'CIA 2', start:0xdd00,size:0x0100,type:'io'},\n {name:'I/O 1', start:0xde00,size:0x0100,type:'io'},\n {name:'I/O 2', start:0xdf00,size:0x0100,type:'io'},\n {name:'KERNAL ROM', start:0xe000,size:0x2000,type:'rom'},\n] }\n\n// WASM C64 platform\nclass C64WASMPlatform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new C64_WASMMachine('c64'); }\n\n getPresets() { return C64_PRESETS; }\n readAddress(a) { return this.machine.readConst(a); }\n getMemoryMap() { return C64_MEMORY_MAP; }\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/c64/\" }\n getROMExtension(rom:Uint8Array) {\n /*\n if (rom && rom[0] == 0x00 && rom[1] == 0x80 && rom[2+4] == 0xc3 && rom[2+5] == 0xc2) return \".crt\";\n */\n if (rom && rom[0] == 0x01 && rom[1] == 0x08) return \".prg\";\n else return \".bin\";\n }\n}\n\n// C64 MAME platform\nabstract class C64MAMEPlatform extends BaseMAME6502Platform {\n getPresets() { return C64_PRESETS; }\n getToolForFilename = getToolForFilename_6502;\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n loadROM(title, data) {\n if (!this.started) {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitpc.js',\n biosfile:'c64.zip',\n cfgfile:'c64.cfg',\n driver:'c64',\n width:418,\n height:235,\n romfn:'/emulator/image.crt',\n romdata:new Uint8Array(data),\n romsize:0x10000,\n extraargs: ['-autoboot_delay','5','-autoboot_command','load \"$\",8,1\\n'],\n preInit:function(_self) {\n },\n });\n } else {\n this.loadROMFile(data);\n this.loadRegion(\":quickload\", data);\n var result = this.luacall(`image:load(\"/emulator/image.prg\")`)\n console.log('load rom', result);\n //this.loadRegion(\":exp:standard\", data);\n }\n }\n start() {\n }\n getMemoryMap() { return C64_MEMORY_MAP; }\n}\n\n\nPLATFORMS['c64'] = C64WASMPlatform;\nPLATFORMS['c64.wasm'] = C64WASMPlatform;\nPLATFORMS['c64.mame'] = C64MAMEPlatform;\n"], + "mappings": "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", "names": ["C64_WASMMachine", "BaseWASMMachine", "srcArray", "ch", "addr", "i", "hex", "cmd", "key", "warmstart", "trap", "scanline", "clocks", "probing", "s", "pc", "cia1", "cia2", "vic", "sid", "ramofs", "pla", "state", "code", "flags", "mask", "mask2", "index", "p", "category", "iomapped", "port", "m", "vicbank", "charmem", "screen", "isbitmap", "ischar", "rasterX", "rasterY", "lpad", "dumpRAM", "controller", "value", "x1", "y1", "x2", "y2", "x", "clamp", "y", "C64_PRESETS", "C64_MEMORY_MAP", "C64WASMPlatform", "Base6502MachinePlatform", "C64_WASMMachine", "a", "rom", "C64MAMEPlatform", "BaseMAME6502Platform", "getToolForFilename_6502", "getOpcodeMetadata_6502", "title", "data", "_self", "result", "PLATFORMS"] } diff --git a/gen/channelf-RAJ3RCG5.js b/gen/channelf-ZQADDMQO.js similarity index 99% rename from gen/channelf-RAJ3RCG5.js rename to gen/channelf-ZQADDMQO.js index 4aabe4a5..a85dc965 100644 --- a/gen/channelf-RAJ3RCG5.js +++ b/gen/channelf-ZQADDMQO.js @@ -1,4 +1,4 @@ -import{a as P}from"./chunk-YYW5TDEL.js";import{F as S,q as f}from"./chunk-QYEDG265.js";import{j as p}from"./chunk-UACHXWHT.js";import{L as m,Z as c,ca as l,da as C,g as a,s as d}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var D=1,b=2,k=4,R=8,o=16,F=class{constructor(){this.PC0=0;this.PC1=0;this.DC0=0;this.DC1=0;this.A=0;this.W=0;this.IS=0;this.R=new Uint8Array(64);this.o=0;this.stable=!0;this.irqRequest=!1}connectMemoryBus(t){this.bus=t}connectIOBus(t){this.iobus=t}reset(){this.PC0=0,this.PC1=0,this.DC0=0,this.DC1=0,this.A=0,this.W=0,this.IS=0,this.R.fill(0),this.irqRequest=!1}interrupt(t){this.irqRequest=!0}getPC(){return this.PC0}getSP(){return this.PC1}isStable(){return this.stable}saveState(){return{PC:this.PC0,PC0:this.PC0,PC1:this.PC1,DC0:this.DC0,DC1:this.DC1,A:this.A,W:this.W,IS:this.IS,R:Array.from(this.R),o:this.o,irq:this.irqRequest}}loadState(t){var s;this.PC0=(s=t.PC0)!=null?s:t.PC,this.PC1=t.PC1,this.DC0=t.DC0,this.DC1=t.DC1,this.A=t.A,this.W=t.W,this.IS=t.IS;for(let e=0;e<64;e++)this.R[e]=t.R[e];this.o=t.o,this.irqRequest=t.irq}fetchPC0(){let t=this.bus.read(this.PC0);return this.PC0=this.PC0+1&65535,t}fetchDC0(){let t=this.bus.read(this.DC0);return this.DC0=this.DC0+1&65535,t}storeDC0(t){this.bus.write(this.DC0,t),this.DC0=this.DC0+1&65535}clrOZCS(){this.W&=~(R|k|b|D)}setSZ(t){(t&255)===0&&(this.W|=k),(t&128)===0&&(this.W|=D)}doAdd(t,s,e=0){let h=(t&255)+(s&255)+(e&1);return h&256&&(this.W|=b),((t^h)&(s^h)&128)!==0&&(this.W|=R),h&255}doAddDecimal(t,s){let e=(t&15)+(s&15),h=e>9?1:0;e=(t>>4)+(s>>4)+h;let r=e>9?1:0;this.clrOZCS();let i=this.doAdd(t,s);this.setSZ(i);let n=0;return r&&(n|=160),h&&(n|=10),n&&(this.clrOZCS(),i=this.doAdd(i,n),this.setSZ(i)),i}getScratchpadIndex(t){if(t<12)return t;if(t===12)return this.IS&63;if(t===13){let s=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,s}if(t===14){let s=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,s}return 0}advanceInsn(){if(this.irqRequest&&this.W&o)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~o,6;let t=this.fetchPC0();this.o=t,this.stable=!0;let s=4,e,h;switch(t){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,s=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],s=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],s=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],s=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,s=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],s=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],s=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,s=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),s=6;break;case 23:this.storeDC0(this.A),s=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:e=this.W&b?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,e),this.setSZ(this.A);break;case 26:this.W&=~o;break;case 27:this.W|=o;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),s=6;break;case 33:e=this.fetchPC0(),this.A=this.A&e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 34:e=this.fetchPC0(),this.A=this.A|e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 35:e=this.fetchPC0(),this.A=this.A^e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 36:e=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,e),this.setSZ(this.A),s=6;break;case 37:e=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,e,1),this.setSZ(this.doAdd(~this.A&255,e,1)),s=6;break;case 38:e=this.fetchPC0(),this.A=this.iobus.read(e)&255,this.clrOZCS(),this.setSZ(this.A),s=8;break;case 39:e=this.fetchPC0(),this.iobus.write(e,this.A),s=8;break;case 40:{let r=this.fetchPC0(),i=this.fetchPC0();this.PC1=this.PC0,this.PC0=r<<8|i,s=12;break}case 41:{let r=this.fetchPC0(),i=this.fetchPC0();this.PC0=r<<8|i,s=10;break}case 42:{let r=this.fetchPC0(),i=this.fetchPC0();this.DC0=r<<8|i,s=10;break}case 43:break;case 44:e=this.DC0,this.DC0=this.DC1,this.DC1=e;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:h=this.getScratchpadIndex(t&15),this.clrOZCS(),this.R[h]=this.doAdd(this.R[h],255),this.setSZ(this.R[h]),s=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:h=this.getScratchpadIndex(t&15),this.A=this.R[h];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:h=this.getScratchpadIndex(t&15),this.R[h]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(t&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|t&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=t&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let r=t&7,i=this.fetchPC0();this.W&r&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),s=6;break}case 136:e=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,e),this.setSZ(this.A),s=6;break;case 137:e=this.fetchDC0(),this.A=this.doAddDecimal(this.A,e),s=6;break;case 138:e=this.fetchDC0(),this.A=this.A&e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 139:e=this.fetchDC0(),this.A=this.A|e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 140:e=this.fetchDC0(),this.A=this.A^e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 141:e=this.fetchDC0(),this.clrOZCS();{let r=this.doAdd(~this.A&255,e,1);this.setSZ(r)}s=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,s=6;break;case 143:{let r=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(r&128?r-256:r)&65535),s=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let r=t&15,i=this.fetchPC0();(r===0||!(this.W&r))&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),s=6;break}case 160:case 161:this.A=this.iobus.read(t&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(t&15)&255,this.clrOZCS(),this.setSZ(this.A),s=8;break;case 176:case 177:this.iobus.write(t&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(t&15,this.A),s=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:h=this.getScratchpadIndex(t&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[h]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:h=this.getScratchpadIndex(t&15),this.A=this.doAddDecimal(this.A,this.R[h]),s=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:h=this.getScratchpadIndex(t&15),this.A=(this.A^this.R[h])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:h=this.getScratchpadIndex(t&15),this.A=this.A&this.R[h]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return s}};var W=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],I=1,B=2,Z=4,v=8,E=16,O=32,_=64,g=128,u=class extends f{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new F;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=C([[0,2047,2047,s=>this.bios[s]],[2048,65535,65535,s=>this.rom&&this.rom[s-2048]||0]],{gmask:65535});this.write=C([[10240,12287,2047,(s,e)=>{this.rom&&(this.rom[s-2048]=e)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:s=>this.readPort(s),write:(s,e)=>{this.writePort(s,e)}})}readPort(s){switch(s&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(s,e){switch(s&255){case 0:this.port0=e;break;case 1:this.port1=e,this.col_reg=e;break;case 4:this.port4=e;break;case 5:this.port5=e,this.soundMode=e>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=e&63,this.writePixel();break}}writePixel(){let s=this.row_reg,e=this.col_reg&127;if(s<64&&e<128){let h=this.port1>>6&3,r=s*128+e;this.vram[r]=h}}readConst(s){return s<2048?this.bios[s]:this.rom&&this.rom[s-2048]||0}loadROM(s){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(s),this.reset()}loadBIOS(s){this.bios=l(s,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(s){var e=0,h=this.cpuFrequency/60;for(this.probe.logNewFrame();e>1)*4;for(let i=0;i<128;i++){let n=this.vram[s*128+i]&3,w=W[e+n];this.pixels[s*128+i]=w}}}generateAudio(s){if(!this.audio)return;let e=Math.floor(this.sampleRate/60);for(let h=0;h0&&this.soundEnvelope>0){let i;switch(this.soundMode){case 1:i=1e3;break;case 2:i=500;break;case 3:i=120;break;default:i=0}if(i>0){let n=Math.floor(this.sampleRate/i);this.soundCounter=(this.soundCounter+1)%n,r=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(r,1)}}setKeyInput(s,e,h){let r=!!(h&1),i=!!(h&64);s===c.VK_1.c&&(r?this.inputs[0]|=1:i&&(this.inputs[0]&=-2)),s===c.VK_2.c&&(r?this.inputs[0]|=2:i&&(this.inputs[0]&=-3)),s===c.VK_3.c&&(r?this.inputs[0]|=4:i&&(this.inputs[0]&=-5)),s===c.VK_4.c&&(r?this.inputs[0]|=8:i&&(this.inputs[0]&=-9)),(s===c.VK_UP.c||s===c.VK_W.c)&&(r?this.inputs[1]|=v:i&&(this.inputs[1]&=~v)),(s===c.VK_DOWN.c||s===c.VK_S.c)&&(r?this.inputs[1]|=Z:i&&(this.inputs[1]&=~Z)),(s===c.VK_LEFT.c||s===c.VK_A.c)&&(r?this.inputs[1]|=B:i&&(this.inputs[1]&=~B)),(s===c.VK_RIGHT.c||s===c.VK_D.c)&&(r?this.inputs[1]|=I:i&&(this.inputs[1]&=~I)),s===c.VK_Q.c&&(r?this.inputs[1]|=E:i&&(this.inputs[1]&=~E)),s===c.VK_E.c&&(r?this.inputs[1]|=O:i&&(this.inputs[1]&=~O)),s===c.VK_R.c&&(r?this.inputs[1]|=g:i&&(this.inputs[1]&=~g)),s===c.VK_F.c&&(r?this.inputs[1]|=_:i&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(s){this.cpu.loadState(s.c),this.ram.set(s.ram),this.inputs.set(s.inputs),this.vram.set(s.vram),this.port0=s.port0,this.port1=s.port1,this.port4=s.port4,this.port5=s.port5,this.row_reg=s.row_reg,this.col_reg=s.col_reg,this.soundMode=s.soundMode,this.soundCounter=s.soundCounter,this.soundEnvelope=s.soundEnvelope}};var M=[];function U(x){return"PC0 = "+a(x.PC0,4)+" PC1 = "+a(x.PC1,4)+` +import{a as P}from"./chunk-YYW5TDEL.js";import{F as S,q as f}from"./chunk-RWTUUV4L.js";import{j as p}from"./chunk-UXRCACYH.js";import{L as m,Z as c,ca as l,da as C,g as a,s as d}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var D=1,b=2,k=4,R=8,o=16,F=class{constructor(){this.PC0=0;this.PC1=0;this.DC0=0;this.DC1=0;this.A=0;this.W=0;this.IS=0;this.R=new Uint8Array(64);this.o=0;this.stable=!0;this.irqRequest=!1}connectMemoryBus(t){this.bus=t}connectIOBus(t){this.iobus=t}reset(){this.PC0=0,this.PC1=0,this.DC0=0,this.DC1=0,this.A=0,this.W=0,this.IS=0,this.R.fill(0),this.irqRequest=!1}interrupt(t){this.irqRequest=!0}getPC(){return this.PC0}getSP(){return this.PC1}isStable(){return this.stable}saveState(){return{PC:this.PC0,PC0:this.PC0,PC1:this.PC1,DC0:this.DC0,DC1:this.DC1,A:this.A,W:this.W,IS:this.IS,R:Array.from(this.R),o:this.o,irq:this.irqRequest}}loadState(t){var s;this.PC0=(s=t.PC0)!=null?s:t.PC,this.PC1=t.PC1,this.DC0=t.DC0,this.DC1=t.DC1,this.A=t.A,this.W=t.W,this.IS=t.IS;for(let e=0;e<64;e++)this.R[e]=t.R[e];this.o=t.o,this.irqRequest=t.irq}fetchPC0(){let t=this.bus.read(this.PC0);return this.PC0=this.PC0+1&65535,t}fetchDC0(){let t=this.bus.read(this.DC0);return this.DC0=this.DC0+1&65535,t}storeDC0(t){this.bus.write(this.DC0,t),this.DC0=this.DC0+1&65535}clrOZCS(){this.W&=~(R|k|b|D)}setSZ(t){(t&255)===0&&(this.W|=k),(t&128)===0&&(this.W|=D)}doAdd(t,s,e=0){let h=(t&255)+(s&255)+(e&1);return h&256&&(this.W|=b),((t^h)&(s^h)&128)!==0&&(this.W|=R),h&255}doAddDecimal(t,s){let e=(t&15)+(s&15),h=e>9?1:0;e=(t>>4)+(s>>4)+h;let r=e>9?1:0;this.clrOZCS();let i=this.doAdd(t,s);this.setSZ(i);let n=0;return r&&(n|=160),h&&(n|=10),n&&(this.clrOZCS(),i=this.doAdd(i,n),this.setSZ(i)),i}getScratchpadIndex(t){if(t<12)return t;if(t===12)return this.IS&63;if(t===13){let s=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,s}if(t===14){let s=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,s}return 0}advanceInsn(){if(this.irqRequest&&this.W&o)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~o,6;let t=this.fetchPC0();this.o=t,this.stable=!0;let s=4,e,h;switch(t){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,s=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],s=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],s=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],s=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,s=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],s=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],s=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,s=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),s=6;break;case 23:this.storeDC0(this.A),s=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:e=this.W&b?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,e),this.setSZ(this.A);break;case 26:this.W&=~o;break;case 27:this.W|=o;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),s=6;break;case 33:e=this.fetchPC0(),this.A=this.A&e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 34:e=this.fetchPC0(),this.A=this.A|e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 35:e=this.fetchPC0(),this.A=this.A^e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 36:e=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,e),this.setSZ(this.A),s=6;break;case 37:e=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,e,1),this.setSZ(this.doAdd(~this.A&255,e,1)),s=6;break;case 38:e=this.fetchPC0(),this.A=this.iobus.read(e)&255,this.clrOZCS(),this.setSZ(this.A),s=8;break;case 39:e=this.fetchPC0(),this.iobus.write(e,this.A),s=8;break;case 40:{let r=this.fetchPC0(),i=this.fetchPC0();this.PC1=this.PC0,this.PC0=r<<8|i,s=12;break}case 41:{let r=this.fetchPC0(),i=this.fetchPC0();this.PC0=r<<8|i,s=10;break}case 42:{let r=this.fetchPC0(),i=this.fetchPC0();this.DC0=r<<8|i,s=10;break}case 43:break;case 44:e=this.DC0,this.DC0=this.DC1,this.DC1=e;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:h=this.getScratchpadIndex(t&15),this.clrOZCS(),this.R[h]=this.doAdd(this.R[h],255),this.setSZ(this.R[h]),s=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:h=this.getScratchpadIndex(t&15),this.A=this.R[h];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:h=this.getScratchpadIndex(t&15),this.R[h]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(t&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|t&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=t&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let r=t&7,i=this.fetchPC0();this.W&r&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),s=6;break}case 136:e=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,e),this.setSZ(this.A),s=6;break;case 137:e=this.fetchDC0(),this.A=this.doAddDecimal(this.A,e),s=6;break;case 138:e=this.fetchDC0(),this.A=this.A&e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 139:e=this.fetchDC0(),this.A=this.A|e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 140:e=this.fetchDC0(),this.A=this.A^e,this.clrOZCS(),this.setSZ(this.A),s=6;break;case 141:e=this.fetchDC0(),this.clrOZCS();{let r=this.doAdd(~this.A&255,e,1);this.setSZ(r)}s=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,s=6;break;case 143:{let r=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(r&128?r-256:r)&65535),s=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let r=t&15,i=this.fetchPC0();(r===0||!(this.W&r))&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),s=6;break}case 160:case 161:this.A=this.iobus.read(t&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(t&15)&255,this.clrOZCS(),this.setSZ(this.A),s=8;break;case 176:case 177:this.iobus.write(t&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(t&15,this.A),s=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:h=this.getScratchpadIndex(t&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[h]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:h=this.getScratchpadIndex(t&15),this.A=this.doAddDecimal(this.A,this.R[h]),s=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:h=this.getScratchpadIndex(t&15),this.A=(this.A^this.R[h])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:h=this.getScratchpadIndex(t&15),this.A=this.A&this.R[h]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return s}};var W=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],I=1,B=2,Z=4,v=8,E=16,O=32,_=64,g=128,u=class extends f{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new F;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=C([[0,2047,2047,s=>this.bios[s]],[2048,65535,65535,s=>this.rom&&this.rom[s-2048]||0]],{gmask:65535});this.write=C([[10240,12287,2047,(s,e)=>{this.rom&&(this.rom[s-2048]=e)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:s=>this.readPort(s),write:(s,e)=>{this.writePort(s,e)}})}readPort(s){switch(s&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(s,e){switch(s&255){case 0:this.port0=e;break;case 1:this.port1=e,this.col_reg=e;break;case 4:this.port4=e;break;case 5:this.port5=e,this.soundMode=e>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=e&63,this.writePixel();break}}writePixel(){let s=this.row_reg,e=this.col_reg&127;if(s<64&&e<128){let h=this.port1>>6&3,r=s*128+e;this.vram[r]=h}}readConst(s){return s<2048?this.bios[s]:this.rom&&this.rom[s-2048]||0}loadROM(s){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(s),this.reset()}loadBIOS(s){this.bios=l(s,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(s){var e=0,h=this.cpuFrequency/60;for(this.probe.logNewFrame();e>1)*4;for(let i=0;i<128;i++){let n=this.vram[s*128+i]&3,w=W[e+n];this.pixels[s*128+i]=w}}}generateAudio(s){if(!this.audio)return;let e=Math.floor(this.sampleRate/60);for(let h=0;h0&&this.soundEnvelope>0){let i;switch(this.soundMode){case 1:i=1e3;break;case 2:i=500;break;case 3:i=120;break;default:i=0}if(i>0){let n=Math.floor(this.sampleRate/i);this.soundCounter=(this.soundCounter+1)%n,r=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(r,1)}}setKeyInput(s,e,h){let r=!!(h&1),i=!!(h&64);s===c.VK_1.c&&(r?this.inputs[0]|=1:i&&(this.inputs[0]&=-2)),s===c.VK_2.c&&(r?this.inputs[0]|=2:i&&(this.inputs[0]&=-3)),s===c.VK_3.c&&(r?this.inputs[0]|=4:i&&(this.inputs[0]&=-5)),s===c.VK_4.c&&(r?this.inputs[0]|=8:i&&(this.inputs[0]&=-9)),(s===c.VK_UP.c||s===c.VK_W.c)&&(r?this.inputs[1]|=v:i&&(this.inputs[1]&=~v)),(s===c.VK_DOWN.c||s===c.VK_S.c)&&(r?this.inputs[1]|=Z:i&&(this.inputs[1]&=~Z)),(s===c.VK_LEFT.c||s===c.VK_A.c)&&(r?this.inputs[1]|=B:i&&(this.inputs[1]&=~B)),(s===c.VK_RIGHT.c||s===c.VK_D.c)&&(r?this.inputs[1]|=I:i&&(this.inputs[1]&=~I)),s===c.VK_Q.c&&(r?this.inputs[1]|=E:i&&(this.inputs[1]&=~E)),s===c.VK_E.c&&(r?this.inputs[1]|=O:i&&(this.inputs[1]&=~O)),s===c.VK_R.c&&(r?this.inputs[1]|=g:i&&(this.inputs[1]&=~g)),s===c.VK_F.c&&(r?this.inputs[1]|=_:i&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(s){this.cpu.loadState(s.c),this.ram.set(s.ram),this.inputs.set(s.inputs),this.vram.set(s.vram),this.port0=s.port0,this.port1=s.port1,this.port4=s.port4,this.port5=s.port5,this.row_reg=s.row_reg,this.col_reg=s.col_reg,this.soundMode=s.soundMode,this.soundCounter=s.soundCounter,this.soundEnvelope=s.soundEnvelope}};var M=[];function U(x){return"PC0 = "+a(x.PC0,4)+" PC1 = "+a(x.PC1,4)+` DC0 = `+a(x.DC0,4)+" DC1 = "+a(x.DC1,4)+` A = `+a(x.A,2)+" W = "+a(x.W,2)+` IS = `+a(x.IS,2)+` @@ -14,4 +14,4 @@ Port 5: `+a(e.port5||0,2)+` Row: `+a(e.row_reg||0,2)+` Col: `+a(e.col_reg||0,2)+` `;case"VRAM":return"";default:return""}}getMemoryMap(){return{main:[{name:"BIOS",start:0,size:2048,type:"rom"},{name:"Cart ROM",start:2048,size:30720,type:"rom"}]}}};m.channelf=A; -//# sourceMappingURL=channelf-RAJ3RCG5.js.map +//# sourceMappingURL=channelf-ZQADDMQO.js.map diff --git a/gen/channelf-RAJ3RCG5.js.map b/gen/channelf-ZQADDMQO.js.map similarity index 100% rename from gen/channelf-RAJ3RCG5.js.map rename to gen/channelf-ZQADDMQO.js.map diff --git a/gen/chunk-TANFDIIN.js b/gen/chunk-ENVHSJV6.js similarity index 98% rename from gen/chunk-TANFDIIN.js rename to gen/chunk-ENVHSJV6.js index 2f27f2ce..5a475ae8 100644 --- a/gen/chunk-TANFDIIN.js +++ b/gen/chunk-ENVHSJV6.js @@ -1,4 +1,4 @@ -import{A as w,a as b,b as v,y as P}from"./chunk-QYEDG265.js";import{R as S,T as p,X as C}from"./chunk-V6TNHL6H.js";var o=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new C(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,n=this.romdata=this.romdata||e.romdata||new p(e.romsize).mem,g=this.romtype=this.romtype||e.romtype,a=this.video=new S(this.mainElement,e.width,e.height);a.create(),$(a.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",a.canvas.width+"x"+a.canvas.height];r&&u.push("-"+g,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:a.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:a.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,n,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(a.canvas).click(i=>{a.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,m=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),m.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else m.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,m,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"] +import{A as w,a as b,b as v,y as P}from"./chunk-RWTUUV4L.js";import{R as S,T as p,X as C}from"./chunk-V6TNHL6H.js";var o=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new C(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,n=this.romdata=this.romdata||e.romdata||new p(e.romsize).mem,g=this.romtype=this.romtype||e.romtype,a=this.video=new S(this.mainElement,e.width,e.height);a.create(),$(a.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",a.canvas.width+"x"+a.canvas.height];r&&u.push("-"+g,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:a.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:a.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,n,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(a.canvas).click(i=>{a.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,m=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),m.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else m.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,m,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"] `,n=0;n=0&&(x=!0);return{line:l.mn+" "+b,nbytes:l.nb,isaddr:x,iscall:l.mn=="JSR"}}function pn(C){let e=C;if(!e||typeof e.mem_read!="function"||typeof e.mem_write!="function"||typeof e.io_read!="function"||typeof e.io_write!="function")throw"Z80: Core object is missing required functions.";let n=0,i=0,l=0,o=0,b=0,x=0,f=0,W=0,N=0,g=0,B=0,_=0,a0=0,_0=0,d=0,D=0,t0=0,H=0,K=0,s=0,c={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},x0={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},N0=0,T=0,p0=0,p=!1,A=!1,V0=!1,M=0;function X(){return{PC:s,SP:K,IX:d,IY:D,AF:(n<<8)+U0(),BC:(i<<8)+l,DE:(o<<8)+b,HL:(x<<8)+f,AF_:(W<<8)+Y0(),BC_:(N<<8)+g,DE_:(B<<8)+_,HL_:(a0<<8)+_0,IR:(t0<<8)+H,im:N0,iff1:T,iff2:p0,halted:p,do_delayed_di:A,do_delayed_ei:V0,cycle_counter:M}}function m0(t){s=t.PC,K=t.SP,d=t.IX,D=t.IY,n=t.AF>>8&255,F0(t.AF),i=t.BC>>8&255,l=t.BC&255,o=t.DE>>8&255,b=t.DE&255,x=t.HL>>8&255,f=t.HL&255,W=t.AF_>>8&255,R0(t.AF_),N=t.BC_>>8&255,g=t.BC_&255,B=t.DE_>>8&255,_=t.DE_&255,a0=t.HL_>>8&255,_0=t.HL_&255,t0=t.IR>>8&255,H=t.IR&255,N0=t.im,T=t.iff1,p0=t.iff2,p=t.halted,A=t.do_delayed_di,V0=t.do_delayed_ei,M=t.cycle_counter}let U=function(){K=0,s=0,n=0,H=0,F0(0),N0=0,T=0,p0=0,p=!1,A=!1,V0=!1,M=0},y=function(){if(p)return 1;var t=!1,a=!1;A?(A=!1,t=!0):V0&&(V0=!1,a=!0),H=H&128|(H&127)+1&127;var P=e.mem_read(s);u0(P),s=s+1&65535,t?(T=0,p0=0):a&&(T=1,p0=1);var L0=M;return M=0,L0},v0=function(t,a){if(t)return H=H&128|(H&127)+1&127,p=!1,p0=T,T=0,E0(s),s=102,M+=11,!0;if(T){if(H=H&128|(H&127)+1&127,p=!1,T=0,p0=0,N0===0)s=s-1&65535,u0(a),s=s+1&65535,M+=2;else if(N0===1)E0(s),s=56,M+=13;else if(N0===2){E0(s);var P=t0<<8|a;s=e.mem_read(P)|e.mem_read(P+1&65535)<<8,M+=19}return!0}},u0=function(t){var a=function(O0){return(O0&7)===0?i:(O0&7)===1?l:(O0&7)===2?o:(O0&7)===3?b:(O0&7)===4?x:(O0&7)===5?f:(O0&7)===6?e.mem_read(f|x<<8):n};if(t===118)p=!0;else if(t>=64&&t<128){var P=a(t);(t&56)>>>3?(t&56)>>>3===1?l=P:(t&56)>>>3===2?o=P:(t&56)>>>3===3?b=P:(t&56)>>>3===4?x=P:(t&56)>>>3===5?f=P:(t&56)>>>3===6?e.mem_write(f|x<<8,P):(t&56)>>>3===7&&(n=P):i=P}else if(t>=128&&t<192){var P=a(t),L0=[c0,i0,E,w,s0,e0,Z,F];L0[(t&56)>>>3](P)}else{var $0=v[t];$0()}M+=u[t]},I=function(t){return t&=255,t&128&&(t=-((255&~t)+1)),t},U0=function(){return c.S<<7|c.Z<<6|c.Y<<5|c.H<<4|c.X<<3|c.P<<2|c.N<<1|c.C},Y0=function(){return x0.S<<7|x0.Z<<6|x0.Y<<5|x0.H<<4|x0.X<<3|x0.P<<2|x0.N<<1|x0.C},F0=function(t){c.S=(t&128)>>>7,c.Z=(t&64)>>>6,c.Y=(t&32)>>>5,c.H=(t&16)>>>4,c.X=(t&8)>>>3,c.P=(t&4)>>>2,c.N=(t&2)>>>1,c.C=t&1},R0=function(t){x0.S=(t&128)>>>7,x0.Z=(t&64)>>>6,x0.Y=(t&32)>>>5,x0.H=(t&16)>>>4,x0.X=(t&8)>>>3,x0.P=(t&4)>>>2,x0.N=(t&2)>>>1,x0.C=t&1},Q=function(t){c.Y=(t&32)>>>5,c.X=(t&8)>>>3},b0=function(t){var a=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];return a[t]},E0=function(t){K=K-1&65535,e.mem_write(K,(t&65280)>>>8),K=K-1&65535,e.mem_write(K,t&255)},d0=function(){var t=e.mem_read(K)&255;return K=K+1&65535,t|=e.mem_read(K)<<8,K=K+1&65535,t},y0=function(t){t?(s=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s-1&65535):s=s+2&65535},W0=function(t){if(t){M+=5;var a=I(e.mem_read(s+1&65535));s=s+a+1&65535}else s=s+1&65535},Z0=function(t){t?(M+=7,E0(s+3&65535),s=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s-1&65535):s=s+2&65535},T0=function(t){t&&(M+=6,s=d0()-1&65535)},w0=function(t){E0(s+1&65535),s=t-1&65535},c0=function(t){var a=n+t;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)+(n&15)&16?1:0,c.P=(n&128)===(t&128)&&(n&128)!==(a&128)?1:0,c.N=0,c.C=a&256?1:0,n=a&255,Q(n)},i0=function(t){var a=n+t+c.C;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)+(n&15)+c.C&16?1:0,c.P=(n&128)===(t&128)&&(n&128)!==(a&128)?1:0,c.N=0,c.C=a&256?1:0,n=a&255,Q(n)},E=function(t){var a=n-t;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(n&15)-(t&15)&16?1:0,c.P=(n&128)!==(t&128)&&(n&128)!==(a&128)?1:0,c.N=1,c.C=a&256?1:0,n=a&255,Q(n)},w=function(t){var a=n-t-c.C;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(n&15)-(t&15)-c.C&16?1:0,c.P=(n&128)!==(t&128)&&(n&128)!==(a&128)?1:0,c.N=1,c.C=a&256?1:0,n=a&255,Q(n)},F=function(t){var a=n;E(t),n=a,Q(t)},s0=function(t){n&=t&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=1,c.P=b0(n),c.N=0,c.C=0,Q(n)},Z=function(t){n=(t|n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n),c.N=0,c.C=0,Q(n)},e0=function(t){n=(t^n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n),c.N=0,c.C=0,Q(n)},L=function(t){var a=t+1;return c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)===15?1:0,c.P=t===127?1:0,c.N=0,a&=255,Q(a),a},O=function(t){var a=t-1;return c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)===0?1:0,c.P=t===128?1:0,c.N=1,a&=255,Q(a),a},k0=function(t){var a=f|x<<8,P=a+t;c.N=0,c.C=P&65536?1:0,c.H=(a&4095)+(t&4095)&4096?1:0,f=P&255,x=(P&65280)>>>8,Q(x)},Y=function(t){t+=c.C;var a=f|x<<8,P=a+t;c.S=P&32768?1:0,c.Z=P&65535?0:1,c.H=(a&4095)+(t&4095)&4096?1:0,c.P=(a&32768)===(t&32768)&&(P&32768)!==(a&32768)?1:0,c.N=0,c.C=P&65536?1:0,f=P&255,x=P>>>8&255,Q(x)},n0=function(t){t+=c.C;var a=f|x<<8,P=a-t;c.S=P&32768?1:0,c.Z=P&65535?0:1,c.H=(a&4095)-(t&4095)&4096?1:0,c.P=(a&32768)!==(t&32768)&&(P&32768)!==(a&32768)?1:0,c.N=1,c.C=P&65536?1:0,f=P&255,x=P>>>8&255,Q(x)},S0=function(t){var a=e.io_read(t);return c.S=a&128?1:0,c.Z=a?0:1,c.H=0,c.P=b0(a)?1:0,c.N=0,Q(a),a},J=function(){n!==128&&(n=I(n),n=-n&255),c.S=n&128?1:0,c.Z=n?0:1,c.H=(-n&15)>0?1:0,c.P=n===128?1:0,c.N=1,c.C=n?1:0,Q(n)},l0=function(){var t=e.mem_read(f|x<<8);e.mem_write(b|o<<8,t);var a=(b|o<<8)+1;b=a&255,o=(a&65280)>>>8,a=(f|x<<8)+1,f=a&255,x=(a&65280)>>>8,a=(l|i<<8)-1,l=a&255,i=(a&65280)>>>8,c.H=0,c.P=l||i?1:0,c.N=0,c.Y=(n+t&2)>>>1,c.X=(n+t&8)>>>3},I0=function(){var t=c.C,a=e.mem_read(f|x<<8);F(a),c.C=t,c.Y=(n-a-c.H&2)>>>1,c.X=(n-a-c.H&8)>>>3;var P=(f|x<<8)+1;f=P&255,x=(P&65280)>>>8,P=(l|i<<8)-1,l=P&255,i=(P&65280)>>>8,c.P=P?1:0},z=function(){i=O(i),e.mem_write(f|x<<8,e.io_read(i<<8|l));var t=(f|x<<8)+1;f=t&255,x=(t&65280)>>>8,c.N=1},H0=function(){e.io_write(i<<8|l,e.mem_read(f|x<<8));var t=(f|x<<8)+1;f=t&255,x=(t&65280)>>>8,i=O(i),c.N=1},r0=function(){c.N=0,c.H=0;var t=e.mem_read(f|x<<8);e.mem_write(b|o<<8,t);var a=(b|o<<8)-1;b=a&255,o=(a&65280)>>>8,a=(f|x<<8)-1,f=a&255,x=(a&65280)>>>8,a=(l|i<<8)-1,l=a&255,i=(a&65280)>>>8,c.P=l||i?1:0,c.Y=(n+t&2)>>>1,c.X=(n+t&8)>>>3},o0=function(){var t=c.C,a=e.mem_read(f|x<<8);F(a),c.C=t,c.Y=(n-a-c.H&2)>>>1,c.X=(n-a-c.H&8)>>>3;var P=(f|x<<8)-1;f=P&255,x=(P&65280)>>>8,P=(l|i<<8)-1,l=P&255,i=(P&65280)>>>8,c.P=P?1:0},D0=function(){i=O(i),e.mem_write(f|x<<8,e.io_read(i<<8|l));var t=(f|x<<8)-1;f=t&255,x=(t&65280)>>>8,c.N=1},B0=function(){e.io_write(i<<8|l,e.mem_read(f|x<<8));var t=(f|x<<8)-1;f=t&255,x=(t&65280)>>>8,i=O(i),c.N=1},X0=function(t){return c.N=0,c.H=0,c.C=(t&128)>>>7,t=(t<<1|c.C)&255,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},f0=function(t){return c.N=0,c.H=0,c.C=t&1,t=t>>>1&127|c.C<<7,c.Z=t&255?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t&255},h0=function(t){c.N=0,c.H=0;var a=c.C;return c.C=(t&128)>>>7,t=(t<<1|a)&255,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},A0=function(t){c.N=0,c.H=0;var a=c.C;return c.C=t&1,t=t>>>1&127|a<<7,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},z0=function(t){return c.N=0,c.H=0,c.C=(t&128)>>>7,t=t<<1&255,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},V=function(t){return c.N=0,c.H=0,c.C=t&1,t=t>>>1&127|t&128,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},q0=function(t){return c.N=0,c.H=0,c.C=(t&128)>>>7,t=t<<1&255|1,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},j0=function(t){return c.N=0,c.H=0,c.C=t&1,t=t>>>1&127,c.Z=t?0:1,c.P=b0(t),c.S=0,Q(t),t},G0=function(t){c.N=0;var a=d+t;c.C=a&65536?1:0,c.H=(d&4095)+(t&4095)&4096?1:0,Q((a&65280)>>>8),d=a&65535},v=[];v[0]=function(){},v[1]=function(){s=s+1&65535,l=e.mem_read(s),s=s+1&65535,i=e.mem_read(s)},v[2]=function(){e.mem_write(l|i<<8,n)},v[3]=function(){var t=l|i<<8;t+=1,l=t&255,i=(t&65280)>>>8},v[4]=function(){i=L(i)},v[5]=function(){i=O(i)},v[6]=function(){s=s+1&65535,i=e.mem_read(s)},v[7]=function(){var t=c.S,a=c.Z,P=c.P;n=X0(n),c.S=t,c.Z=a,c.P=P},v[8]=function(){var t=n;n=W,W=t,t=U0(),F0(Y0()),R0(t)},v[9]=function(){k0(l|i<<8)},v[10]=function(){n=e.mem_read(l|i<<8)},v[11]=function(){var t=l|i<<8;t-=1,l=t&255,i=(t&65280)>>>8},v[12]=function(){l=L(l)},v[13]=function(){l=O(l)},v[14]=function(){s=s+1&65535,l=e.mem_read(s)},v[15]=function(){var t=c.S,a=c.Z,P=c.P;n=f0(n),c.S=t,c.Z=a,c.P=P},v[16]=function(){i=i-1&255,W0(i!==0)},v[17]=function(){s=s+1&65535,b=e.mem_read(s),s=s+1&65535,o=e.mem_read(s)},v[18]=function(){e.mem_write(b|o<<8,n)},v[19]=function(){var t=b|o<<8;t+=1,b=t&255,o=(t&65280)>>>8},v[20]=function(){o=L(o)},v[21]=function(){o=O(o)},v[22]=function(){s=s+1&65535,o=e.mem_read(s)},v[23]=function(){var t=c.S,a=c.Z,P=c.P;n=h0(n),c.S=t,c.Z=a,c.P=P},v[24]=function(){var t=I(e.mem_read(s+1&65535));s=s+t+1&65535},v[25]=function(){k0(b|o<<8)},v[26]=function(){n=e.mem_read(b|o<<8)},v[27]=function(){var t=b|o<<8;t-=1,b=t&255,o=(t&65280)>>>8},v[28]=function(){b=L(b)},v[29]=function(){b=O(b)},v[30]=function(){s=s+1&65535,b=e.mem_read(s)},v[31]=function(){var t=c.S,a=c.Z,P=c.P;n=A0(n),c.S=t,c.Z=a,c.P=P},v[32]=function(){W0(!c.Z)},v[33]=function(){s=s+1&65535,f=e.mem_read(s),s=s+1&65535,x=e.mem_read(s)},v[34]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,f),e.mem_write(t+1&65535,x)},v[35]=function(){var t=f|x<<8;t+=1,f=t&255,x=(t&65280)>>>8},v[36]=function(){x=L(x)},v[37]=function(){x=O(x)},v[38]=function(){s=s+1&65535,x=e.mem_read(s)},v[39]=function(){var t=n;c.N?((c.H||(n&15)>9)&&(t-=6),(c.C||n>153)&&(t-=96)):((c.H||(n&15)>9)&&(t+=6),(c.C||n>153)&&(t+=96)),c.S=t&128?1:0,c.Z=t&255?0:1,c.H=n&16^t&16?1:0,c.P=b0(t&255),c.C=c.C||n>153?1:0,n=t&255,Q(n)},v[40]=function(){W0(!!c.Z)},v[41]=function(){k0(f|x<<8)},v[42]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,f=e.mem_read(t),x=e.mem_read(t+1&65535)},v[43]=function(){var t=f|x<<8;t-=1,f=t&255,x=(t&65280)>>>8},v[44]=function(){f=L(f)},v[45]=function(){f=O(f)},v[46]=function(){s=s+1&65535,f=e.mem_read(s)},v[47]=function(){n=~n&255,c.N=1,c.H=1,Q(n)},v[48]=function(){W0(!c.C)},v[49]=function(){K=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s+2&65535},v[50]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,n)},v[51]=function(){K=K+1&65535},v[52]=function(){var t=f|x<<8;e.mem_write(t,L(e.mem_read(t)))},v[53]=function(){var t=f|x<<8;e.mem_write(t,O(e.mem_read(t)))},v[54]=function(){s=s+1&65535,e.mem_write(f|x<<8,e.mem_read(s))},v[55]=function(){c.N=0,c.H=0,c.C=1,Q(n)},v[56]=function(){W0(!!c.C)},v[57]=function(){k0(K)},v[58]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,n=e.mem_read(t)},v[59]=function(){K=K-1&65535},v[60]=function(){n=L(n)},v[61]=function(){n=O(n)},v[62]=function(){n=e.mem_read(s+1&65535),s=s+1&65535},v[63]=function(){c.N=0,c.H=c.C,c.C=c.C?0:1,Q(n)},v[192]=function(){T0(!c.Z)},v[193]=function(){var t=d0();l=t&255,i=(t&65280)>>>8},v[194]=function(){y0(!c.Z)},v[195]=function(){s=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s-1&65535},v[196]=function(){Z0(!c.Z)},v[197]=function(){E0(l|i<<8)},v[198]=function(){s=s+1&65535,c0(e.mem_read(s))},v[199]=function(){w0(0)},v[200]=function(){T0(!!c.Z)},v[201]=function(){s=d0()-1&65535},v[202]=function(){y0(!!c.Z)},v[203]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=(t&56)>>>3,P=t&7;if(t<64){var L0=[X0,f0,h0,A0,z0,V,q0,j0];P===0?i=L0[a](i):P===1?l=L0[a](l):P===2?o=L0[a](o):P===3?b=L0[a](b):P===4?x=L0[a](x):P===5?f=L0[a](f):P===6?e.mem_write(f|x<<8,L0[a](e.mem_read(f|x<<8))):P===7&&(n=L0[a](n))}else t<128?(P===0?c.Z=i&1<>>8},v[210]=function(){y0(!c.C)},v[211]=function(){s=s+1&65535,e.io_write(n<<8|e.mem_read(s),n)},v[212]=function(){Z0(!c.C)},v[213]=function(){E0(b|o<<8)},v[214]=function(){s=s+1&65535,E(e.mem_read(s))},v[215]=function(){w0(16)},v[216]=function(){T0(!!c.C)},v[217]=function(){var t=i;i=N,N=t,t=l,l=g,g=t,t=o,o=B,B=t,t=b,b=_,_=t,t=x,x=a0,a0=t,t=f,f=_0,_0=t},v[218]=function(){y0(!!c.C)},v[219]=function(){s=s+1&65535,n=e.io_read(n<<8|e.mem_read(s))},v[220]=function(){Z0(!!c.C)},v[221]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=k[t];a?(a(),M+=q[t]):(s=s-1&65535,M+=u[0])},v[222]=function(){s=s+1&65535,w(e.mem_read(s))},v[223]=function(){w0(24)},v[224]=function(){T0(!c.P)},v[225]=function(){var t=d0();f=t&255,x=(t&65280)>>>8},v[226]=function(){y0(!c.P)},v[227]=function(){var t=e.mem_read(K);e.mem_write(K,f),f=t,t=e.mem_read(K+1&65535),e.mem_write(K+1&65535,x),x=t},v[228]=function(){Z0(!c.P)},v[229]=function(){E0(f|x<<8)},v[230]=function(){s=s+1&65535,s0(e.mem_read(s))},v[231]=function(){w0(32)},v[232]=function(){T0(!!c.P)},v[233]=function(){s=f|x<<8,s=s-1&65535},v[234]=function(){y0(!!c.P)},v[235]=function(){var t=o;o=x,x=t,t=b,b=f,f=t},v[236]=function(){Z0(!!c.P)},v[237]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=R[t];a?(a(),M+=r[t]):M+=u[0]},v[238]=function(){s=s+1&65535,e0(e.mem_read(s))},v[239]=function(){w0(40)},v[240]=function(){T0(!c.S)},v[241]=function(){var t=d0();F0(t&255),n=(t&65280)>>>8},v[242]=function(){y0(!c.S)},v[243]=function(){A=!0},v[244]=function(){Z0(!c.S)},v[245]=function(){E0(U0()|n<<8)},v[246]=function(){s=s+1&65535,Z(e.mem_read(s))},v[247]=function(){w0(48)},v[248]=function(){T0(!!c.S)},v[249]=function(){K=f|x<<8},v[250]=function(){y0(!!c.S)},v[251]=function(){V0=!0},v[252]=function(){Z0(!!c.S)},v[253]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=k[t];if(a){var P=d;d=D,a(),D=d,d=P,M+=q[t]}else s=s-1&65535,M+=u[0]},v[254]=function(){s=s+1&65535,F(e.mem_read(s))},v[255]=function(){w0(56)};let R=[];R[64]=function(){i=S0(i<<8|l)},R[65]=function(){e.io_write(i<<8|l,i)},R[66]=function(){n0(l|i<<8)},R[67]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,l),e.mem_write(t+1&65535,i)},R[68]=function(){J()},R[69]=function(){s=d0()-1&65535,T=p0},R[70]=function(){N0=0},R[71]=function(){t0=n},R[72]=function(){l=S0(i<<8|l)},R[73]=function(){e.io_write(i<<8|l,l)},R[74]=function(){Y(l|i<<8)},R[75]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,l=e.mem_read(t),i=e.mem_read(t+1&65535)},R[76]=function(){J()},R[77]=function(){s=d0()-1&65535},R[78]=function(){N0=0},R[79]=function(){H=n},R[80]=function(){o=S0(i<<8|l)},R[81]=function(){e.io_write(i<<8|l,o)},R[82]=function(){n0(b|o<<8)},R[83]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,b),e.mem_write(t+1&65535,o)},R[84]=function(){J()},R[85]=function(){s=d0()-1&65535,T=p0},R[86]=function(){N0=1},R[87]=function(){n=t0,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=p0,c.N=0,Q(n)},R[88]=function(){b=S0(i<<8|l)},R[89]=function(){e.io_write(i<<8|l,b)},R[90]=function(){Y(b|o<<8)},R[91]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,b=e.mem_read(t),o=e.mem_read(t+1&65535)},R[92]=function(){J()},R[93]=function(){s=d0()-1&65535,T=p0},R[94]=function(){N0=2},R[95]=function(){n=H,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=p0,c.N=0,Q(n)},R[96]=function(){x=S0(i<<8|l)},R[97]=function(){e.io_write(i<<8|l,x)},R[98]=function(){n0(f|x<<8)},R[99]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,f),e.mem_write(t+1&65535,x)},R[100]=function(){J()},R[101]=function(){s=d0()-1&65535,T=p0},R[102]=function(){N0=0},R[103]=function(){var t=e.mem_read(f|x<<8),a=t&15,P=n&15;t=(t&240)>>>4|P<<4,n=n&240|a,e.mem_write(f|x<<8,t),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n)?1:0,c.N=0,Q(n)},R[104]=function(){f=S0(i<<8|l)},R[105]=function(){e.io_write(i<<8|l,f)},R[106]=function(){Y(f|x<<8)},R[107]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,f=e.mem_read(t),x=e.mem_read(t+1&65535)},R[108]=function(){J()},R[109]=function(){s=d0()-1&65535,T=p0},R[110]=function(){N0=0},R[111]=function(){var t=e.mem_read(f|x<<8),a=t&240,P=n&15;t=(t&15)<<4|P,n=n&240|a>>>4,e.mem_write(f|x<<8,t),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n)?1:0,c.N=0,Q(n)},R[112]=function(){S0(i<<8|l)},R[113]=function(){e.io_write(i<<8|l,0)},R[114]=function(){n0(K)},R[115]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,K&255),e.mem_write(t+1&65535,K>>>8&255)},R[116]=function(){J()},R[117]=function(){s=d0()-1&65535,T=p0},R[118]=function(){N0=1},R[120]=function(){n=S0(i<<8|l)},R[121]=function(){e.io_write(i<<8|l,n)},R[122]=function(){Y(K)},R[123]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,K=e.mem_read(t),K|=e.mem_read(t+1&65535)<<8},R[124]=function(){J()},R[125]=function(){s=d0()-1&65535,T=p0},R[126]=function(){N0=2},R[160]=function(){l0()},R[161]=function(){I0()},R[162]=function(){z()},R[163]=function(){H0()},R[168]=function(){r0()},R[169]=function(){o0()},R[170]=function(){D0()},R[171]=function(){B0()},R[176]=function(){l0(),(i||l)&&(M+=5,s=s-2&65535)},R[177]=function(){I0(),!c.Z&&(i||l)&&(M+=5,s=s-2&65535)},R[178]=function(){z(),i&&(M+=5,s=s-2&65535)},R[179]=function(){H0(),i&&(M+=5,s=s-2&65535)},R[184]=function(){r0(),(i||l)&&(M+=5,s=s-2&65535)},R[185]=function(){o0(),!c.Z&&(i||l)&&(M+=5,s=s-2&65535)},R[186]=function(){D0(),i&&(M+=5,s=s-2&65535)},R[187]=function(){B0(),i&&(M+=5,s=s-2&65535)};let k=[];k[9]=function(){G0(l|i<<8)},k[25]=function(){G0(b|o<<8)},k[33]=function(){s=s+1&65535,d=e.mem_read(s),s=s+1&65535,d|=e.mem_read(s)<<8},k[34]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,d&255),e.mem_write(t+1&65535,d>>>8&255)},k[35]=function(){d=d+1&65535},k[36]=function(){d=L(d>>>8)<<8|d&255},k[37]=function(){d=O(d>>>8)<<8|d&255},k[38]=function(){s=s+1&65535,d=e.mem_read(s)<<8|d&255},k[41]=function(){G0(d)},k[42]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,d=e.mem_read(t),d|=e.mem_read(t+1&65535)<<8},k[43]=function(){d=d-1&65535},k[44]=function(){d=L(d&255)|d&65280},k[45]=function(){d=O(d&255)|d&65280},k[46]=function(){s=s+1&65535,d=e.mem_read(s)&255|d&65280},k[52]=function(){s=s+1&65535;var t=I(e.mem_read(s)),a=e.mem_read(t+d&65535);e.mem_write(t+d&65535,L(a))},k[53]=function(){s=s+1&65535;var t=I(e.mem_read(s)),a=e.mem_read(t+d&65535);e.mem_write(t+d&65535,O(a))},k[54]=function(){s=s+1&65535;var t=I(e.mem_read(s));s=s+1&65535,e.mem_write(d+t&65535,e.mem_read(s))},k[57]=function(){G0(K)},k[68]=function(){i=d>>>8&255},k[69]=function(){i=d&255},k[70]=function(){s=s+1&65535;var t=I(e.mem_read(s));i=e.mem_read(d+t&65535)},k[76]=function(){l=d>>>8&255},k[77]=function(){l=d&255},k[78]=function(){s=s+1&65535;var t=I(e.mem_read(s));l=e.mem_read(d+t&65535)},k[84]=function(){o=d>>>8&255},k[85]=function(){o=d&255},k[86]=function(){s=s+1&65535;var t=I(e.mem_read(s));o=e.mem_read(d+t&65535)},k[92]=function(){b=d>>>8&255},k[93]=function(){b=d&255},k[94]=function(){s=s+1&65535;var t=I(e.mem_read(s));b=e.mem_read(d+t&65535)},k[96]=function(){d=d&255|i<<8},k[97]=function(){d=d&255|l<<8},k[98]=function(){d=d&255|o<<8},k[99]=function(){d=d&255|b<<8},k[100]=function(){},k[101]=function(){d=d&255|(d&255)<<8},k[102]=function(){s=s+1&65535;var t=I(e.mem_read(s));x=e.mem_read(d+t&65535)},k[103]=function(){d=d&255|n<<8},k[104]=function(){d=d&65280|i},k[105]=function(){d=d&65280|l},k[106]=function(){d=d&65280|o},k[107]=function(){d=d&65280|b},k[108]=function(){d=d&65280|d>>>8},k[109]=function(){},k[110]=function(){s=s+1&65535;var t=I(e.mem_read(s));f=e.mem_read(d+t&65535)},k[111]=function(){d=d&65280|n},k[112]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,i)},k[113]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,l)},k[114]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,o)},k[115]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,b)},k[116]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,x)},k[117]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,f)},k[119]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,n)},k[124]=function(){n=d>>>8&255},k[125]=function(){n=d&255},k[126]=function(){s=s+1&65535;var t=I(e.mem_read(s));n=e.mem_read(d+t&65535)},k[132]=function(){c0(d>>>8&255)},k[133]=function(){c0(d&255)},k[134]=function(){s=s+1&65535;var t=I(e.mem_read(s));c0(e.mem_read(d+t&65535))},k[140]=function(){i0(d>>>8&255)},k[141]=function(){i0(d&255)},k[142]=function(){s=s+1&65535;var t=I(e.mem_read(s));i0(e.mem_read(d+t&65535))},k[148]=function(){E(d>>>8&255)},k[149]=function(){E(d&255)},k[150]=function(){s=s+1&65535;var t=I(e.mem_read(s));E(e.mem_read(d+t&65535))},k[156]=function(){w(d>>>8&255)},k[157]=function(){w(d&255)},k[158]=function(){s=s+1&65535;var t=I(e.mem_read(s));w(e.mem_read(d+t&65535))},k[164]=function(){s0(d>>>8&255)},k[165]=function(){s0(d&255)},k[166]=function(){s=s+1&65535;var t=I(e.mem_read(s));s0(e.mem_read(d+t&65535))},k[172]=function(){e0(d>>>8&255)},k[173]=function(){e0(d&255)},k[174]=function(){s=s+1&65535;var t=I(e.mem_read(s));e0(e.mem_read(d+t&65535))},k[180]=function(){Z(d>>>8&255)},k[181]=function(){Z(d&255)},k[182]=function(){s=s+1&65535;var t=I(e.mem_read(s));Z(e.mem_read(d+t&65535))},k[188]=function(){F(d>>>8&255)},k[189]=function(){F(d&255)},k[190]=function(){s=s+1&65535;var t=I(e.mem_read(s));F(e.mem_read(d+t&65535))},k[203]=function(){s=s+1&65535;var t=I(e.mem_read(s));s=s+1&65535;var a=e.mem_read(s),P;if(a<64){var L0=[X0,f0,h0,A0,z0,V,q0,j0],$0=L0[(a&56)>>>3],P=$0(e.mem_read(d+t&65535));e.mem_write(d+t&65535,P)}else{var O0=(a&56)>>>3;a<128?(c.N=0,c.H=1,c.Z=e.mem_read(d+t&65535)&1<>>8&255)},k[229]=function(){E0(d)},k[233]=function(){s=d-1&65535},k[249]=function(){K=d};let u=[4,10,7,6,4,4,7,4,4,11,7,6,4,4,7,4,8,10,7,6,4,4,7,4,12,11,7,6,4,4,7,4,7,10,16,6,4,4,7,4,7,11,16,6,4,4,7,4,7,10,13,6,11,11,10,4,7,11,13,6,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,7,7,7,7,7,7,4,7,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,5,10,10,10,10,11,7,11,5,10,10,0,10,17,7,11,5,10,10,11,10,11,7,11,5,4,10,11,10,0,7,11,5,10,10,19,10,11,7,11,5,4,10,4,10,0,7,11,5,10,10,4,10,11,7,11,5,6,10,4,10,0,7,11],r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,0,12,12,15,20,8,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],S=[8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8],q=[0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,14,20,10,8,8,11,0,0,15,20,10,8,8,11,0,0,0,0,0,23,23,19,0,0,15,0,0,0,0,0,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,8,8,8,8,8,8,19,8,8,8,8,8,8,8,19,8,19,19,19,19,19,19,0,19,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,15,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0];this.saveState=X,this.loadState=m0,this.reset=U,this.advanceInsn=y,this.interrupt=v0,this.getPC=()=>s,this.getSP=()=>K,this.getHalted=()=>p}var We=class{constructor(){this.retryInterrupts=!1;this.retryData=-1}buildCPU(){this.memBus&&this.ioBus&&!this.cpu&&(this.cpu=new pn({mem_read:e=>this.memBus.read(e),mem_write:(e,n)=>this.memBus.write(e,n),io_read:e=>this.ioBus.read(e),io_write:(e,n)=>this.ioBus.write(e,n)}))}connectMemoryBus(e){this.memBus=e,this.buildCPU()}connectIOBus(e){this.ioBus=e,this.buildCPU()}advanceInsn(){return this.retryInterrupts&&this.retryData>=0&&this.cpu.interrupt(!1,this.retryData)&&(this.retryData=-1),this.cpu.advanceInsn()}reset(){this.cpu.reset()}interrupt(e){!this.cpu.interrupt(!1,e)&&this.retryInterrupts&&(this.retryData=e)}NMI(){this.cpu.interrupt(!0,0)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.getHalted()}saveState(){return this.cpu.saveState()}loadState(e){this.cpu.loadState(e)}isStable(){return!0}};var ot=class{constructor(){this.master=new MasterChannel}start(){this.looper||(this.looper=new AudioLooper(512),this.looper.setChannel(this.master),this.looper.activate())}stop(){this.looper&&(this.looper.setChannel(null),this.looper=null)}},Nt=class{constructor(e){this.psg=new PsgDeviceChannel;this.curreg=0;this.master=e,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910),e.master.addChannel(this.psg)}reset(){for(var e=15;e>=0;e--)this.selectRegister(e),this.setData(0)}selectRegister(e){this.curreg=e&15}setData(e){this.psg.writeRegisterAY(this.curreg,e&255)}readData(){return this.psg.readRegister(this.curreg)}currentRegister(){return this.curreg}},yt=class{constructor(e){this.psg=new PsgDeviceChannel;this.master=e,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489),e.master.addChannel(this.psg)}reset(){}setData(e){this.psg.writeRegisterSN(0,e&255)}};function Fn(C){for(var e=new ot,n=1;n<=C;n++){var i=new Pn;e["pokey"+n]=i,e.master.addChannel(i)}return e}function Re(C,e){for(var n=new Uint8Array(C.length*e.length),i=0,l=0;l.5?1:0;var Y0=Re(I,U),F0=Re(U,m0),R0=[Y0,U,F0,U,I,X,m0,X],Q=ze(2),b0=ze(6),E0=ze(31),d0=ze(93),y0=Re(v0,m0),W0=Re(U,Q),Z0=Re(U,b0),T0=[M,m0,y0,F0,Q,Q,E0,W0,y,U,E0,M,b0,b0,d0,Z0],w0=new Uint8Array(16),c0=new Float32Array(4),i0=new Float32Array(4),E=new Float32Array(4),w=new Uint8Array(4),F=[M,M,M,M],s0,Z,e0,L,O=!0;this.setBufferLength=function(Y){s0=new Int32Array(Y)},this.getBuffer=function(){return s0},this.setSampleRate=function(Y){Z=Y,L=A/Y};function k0(Y){var n0=w0[8],S0=n0&B?a0:_,J,l0=Y&4,I0=l0>>1,z=l0>>2;n0&f>>z?(n0&b>>z?J=w0[l0+2]*256+w0[l0+0]+7:J=(w0[l0+2]*256+w0[l0+0]+1)*S0,i0[I0+1]=L/J,i0[I0+0]=0):(n0&b>>z?J=w0[l0+0]+4:J=(w0[l0+0]+1)*S0,i0[I0+0]=L/J,J=(w0[l0+2]+1)*S0,i0[I0+1]=L/J)}this.setRegister=function(Y,n0){if(Y&=15,n0&=255,w0[Y]!=n0)switch(w0[Y]=n0,Y){case 0:case 2:case 4:case 6:case 8:O=!0;break;case 1:case 3:case 5:case 7:E[Y>>1]=n0&15,F[Y>>1]=R0[n0>>5];break}},this.getRegister=function(Y){return Y&=15,w0[Y]},this.setTIARegister=function(Y,n0){switch(Y){case 23:case 24:w0[(Y&1)*4]=n0&31,O=!0;break;case 21:case 22:F[(Y&1)*2]=T0[n0&15];break;case 25:case 26:E[(Y&1)*2]=n0&15;break}},this.generate=function(Y){O&&(k0(0),k0(4),O=!1);for(var n0=0;n00&&l0<1&&I0>0){var z=F[J],H0=c0[J]+=l0;H0>z.length&&(H0=c0[J]=H0-Math.floor(H0/z.length)*z.length);var r0=z[Math.floor(H0)];r0&&(S0+=I0)}}S0*=64,s0[n0]=S0,s0[n0+1]=S0}}},Tn=function(C){var e,n,i=[],l=0;C.onmessage=function(o){o&&o.data&&o.data.samples&&n&&(i.push(o.data.samples),l+=o.data.samples.length)},this.setBufferLength=function(o){n=new Int16Array(o),l=0},this.getBuffer=function(){return n},this.setSampleRate=function(o){e=o,C.postMessage({sampleRate:o})},this.generate=function(o){if(lN){_0&&a0[Math.min(W-N,T)]++,t0+=(W-N-t0)*s;for(var U=x[N%T],y=0;y=o.length)){if(b=0,e.stream){var X=o;o=new Float32Array(e.bufferlen),e.stream.push(X);return}if(x[f]=o,W++,W-N>=p0){N++,g++;var m0=Date.now();m0-B>1e3&&(console.warn("SampleAudio: skipped audio buffer(s), total="+g+", fill="+(W-N)+"/"+p0+", contextRate="+e.sr+", requestedBuf="+e.bufferlen+", expectedIntervalMs="+(e.bufferlen*1e3/e.sr).toFixed(2)),B=m0)}f=(f+1)%T,o=x[f];var U=Date.now();if(U-H>N0){H=U;var y=1+c*(K-t0);y>1+x0?y=1+x0:y<1-x0&&(y=1-x0),D=y,i=d*D}}},this.feedSample=function(M,X){if(l+=M*X,n+=i*X,n>=1){for(l/=n;n>=1;)this.addSingleSample(l*i),n-=1;l*=n}},this.getStats=function(){var M=0,X=0,m0=0;if(a0)for(var U=0;U0&&U>m0&&(m0=U)}return{maxBuffers:T,targetDepth:p0,sampleRate:e.sr||0,bufferLength:e.bufferlen||0,fillHistogram:a0?a0.slice():[],meanFill:M>0?X/M:0,maxFill:m0,samples:M,skippedBuffers:g,underruns:_,fillAvg:t0,trim:D}},this.setStatsEnabled=function(M){_0=!!M,a0=_0?new Array(T+1).fill(0):null}},Ke=class{constructor(e){this.sa=new wn(e)}feedSample(e,n){this.sa.feedSample(e,n)}start(){this.sa.start()}stop(){this.sa.stop()}reset(){this.sa.reset()}getStats(){return this.sa.getStats?this.sa.getStats():null}setStatsEnabled(e){this.sa.setStatsEnabled&&this.sa.setStatsEnabled(e)}get sampleRate(){return this.sa.sr||0}},Lt=class{constructor(e,n,i){this.audioGain=1/8192;this.bufferLength=n*2,this.channels=e.generate?[e]:e,this.channels.forEach(l=>{l.setBufferLength(this.bufferLength),l.setSampleRate(i)})}generate(e){var n=this.bufferLength,i=this.channels.map(o=>o.getBuffer());this.channels.forEach(o=>{o.generate(n)});for(let o=0;ol+=b[o]),e.feedSample(l*this.audioGain,1)}}};var je=class{constructor(e,n){this.idx=0;this.sl=0;this.cur_sp=-1;this.singleFrame=!0;this.m=e,this.reset(n||1048576)}start(){this.m.connectProbe(this)}stop(){this.m.connectProbe(null)}reset(e){e&&(this.buf=new Uint32Array(e)),this.sl=0,this.cur_sp=-1,this.clear()}clear(){this.idx=0}logData(e){this.log(e)}log(e){this.idx>=this.buf.length||(this.buf[this.idx++]=e)}relog(e){this.buf[this.idx-1]=e}lastOp(){return this.idx>0?this.buf[this.idx-1]&4278190080:-1}lastAddr(){return this.idx>0?this.buf[this.idx-1]&16777215:-1}addLogBuffer(e){this.idx+e.length>this.buf.length&&(e=e.slice(0,this.buf.length-this.idx)),this.buf.set(e,this.idx),this.idx+=e.length}logClocks(e){e|=0,e>0&&(this.lastOp()==0?this.relog(this.lastAddr()+e|0):this.log(e|0))}logNewScanline(){this.log(2113929216),this.sl++}logNewFrame(){this.log(2130706432),this.sl=0,this.singleFrame&&this.clear()}logExecute(e,n){this.cur_sp!==n&&(nthis.cur_sp&&this.log(184549376|n),this.cur_sp=n),this.log(e|16777216)}logInterrupt(e){this.log(e|134217728)}logValue(e,n,i){this.log(e&65535|(n&255)<<16|i)}logRead(e,n){this.logValue(e,n,301989888)}logWrite(e,n){this.logValue(e,n,318767104)}logIORead(e,n){this.logValue(e,n,335544320)}logIOWrite(e,n){this.logValue(e,n,352321536)}logVRAMRead(e,n){this.logValue(e,n,369098752)}logVRAMWrite(e,n){this.logValue(e,n,385875968)}logIllegal(e){this.log(e|150994944)}logWait(e){this.log(e|520093696)}logDMARead(e,n){this.logValue(e,n,402653184)}logDMAWrite(e,n){this.logValue(e,n,419430400)}countEvents(e){for(var n=0,i=0;ithis.rom.length)throw new Error(`ROM too big: ${e.length} > ${this.rom.length}`);this.rom.set(e)}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0)}}loadControlsState(e){this.inputs.set(e.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}advanceCPU(){var e=this.cpu,n=1;return this.probing&&this.cpu.isStable()&&this.probe.logExecute(this.cpu.getPC(),this.cpu.getSP()),e.advanceClock?e.advanceClock():e.advanceInsn&&(n=e.advanceInsn(1)),this.probing&&this.probe.logClocks(n),n}probeMemoryBus(e){return{read:n=>{let i=e.read(n);return this.probe.logRead(n,i),i},write:(n,i)=>{this.probe.logWrite(n,i),e.write(n,i)},read32:n=>{let i=e.read32(n);return this.probe.logRead(n,i),i},write32:(n,i)=>{this.probe.logWrite(n,i),e.write32(n,i)}}}connectCPUMemoryBus(e){this.cpuMemoryBus=e,this.rewireCPUBuses()}probeIOBus(e){return{read:n=>{let i=e.read(n);return this.probe.logIORead(n,i),i},write:(n,i)=>{this.probe.logIOWrite(n,i),e.write(n,i)}}}probeDMABus(e){return{read:n=>{let i=e.read(n);return this.probe.logDMARead(n,i),i},write:(n,i)=>{this.probe.logDMAWrite(n,i),e.write(n,i)}}}connectCPUIOBus(e){this.cpuIOBus=e,this.rewireCPUBuses()}},ut=class extends xt{constructor(){super(...arguments);this.overscan=!1;this.rotate=0}getAudioParams(){return{sampleRate:this.sampleRate,stereo:!1}}connectAudio(n){this.audio=n}getVideoParams(){return{width:this.canvasWidth,height:this.numVisibleScanlines,aspect:this.aspectRatio,overscan:this.overscan,rotate:this.rotate}}connectVideo(n){this.pixels=n}},Ot=class extends ut{advanceFrame(e){this.preFrame();var n=0,i=0;this.probe.logNewFrame(),this.frameCycles=0;for(var l=0;l=64&&n<=127&&(x=Zt[n-64]),n>=160&&n<=191&&(x=Zt[n-160+64]),b++;break;case 221:case 253:var g=e==221?"ix":"iy";n==203?(x=Mt[l],f[2]=l,f[3]=i,b++):x=Et[n],x=x.replace(/[(]hl[)]/,"("+g+"+x)"),x=x.replace(/\bhl\b/,g),b++;break;default:x=Et[e];break}if((!x||!x.length)&&(x="??"),N=/^(call|rst)/.test(x),/\bxx\b/.test(x))x=x.replace(/\bxx\b/,"$"+$(f[b]+(f[b+1]<<8),4)),b+=2,W=!0;else if(/\bx\b/.test(x)){if(x.startsWith("j")){var B=n<128?C+2+n:C+2-(256-n);B&=65535,x=x.replace(/\bx\b/,"$"+$(B,4)),W=!0}else x=x.replace(/\bx\b/,"$"+$(f[b],2));b+=1}return{line:x.toUpperCase(),nbytes:b,isaddr:W,iscall:N}}function $e(){var C,e,n,i,l,o,b,x,f,W,N=1,g=2,B=4,_=8,a0=16,_0=32,d=64,D=128,t0=65534,H=65532,K=65530,s=65528,c=65526,x0=65524,N0=65522,T=0,p0,p,A,V0=[6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7,2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6,2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6],M=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7],X=[4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],m0=function(u,r,S){f|=((u^r^S^S>>1)&128)>>6},U=function(u,r,S){f|=((u^r^S^S>>1)&32768)>>14},y=function(){return(e<<8)+n},v0=function(u){e=u>>8&255,n=u&255},u0=function(u){p(--b,u&255)},I=function(u){p(--b,u&255),p(--b,u>>8&255)},U0=function(u){p(--o,u&255)},Y0=function(u){p(--o,u&255),p(--o,u>>8&255)},F0=function(){return A(b++)},R0=function(){return A(b++)*256+A(b++)},Q=function(){return A(o++)},b0=function(){return A(o++)*256+A(o++)},E0=function(u){var r=0;u&128&&(I(x),r+=2),u&64&&(I(o),r+=2),u&32&&(I(l),r+=2),u&16&&(I(i),r+=2),u&8&&(u0(W),r++),u&4&&(u0(n),r++),u&2&&(u0(e),r++),u&1&&(u0(f),r++),T+=r},d0=function(u){var r=0;u&128&&(Y0(x),r+=2),u&64&&(Y0(b),r+=2),u&32&&(Y0(l),r+=2),u&16&&(Y0(i),r+=2),u&8&&(U0(W),r++),u&4&&(U0(n),r++),u&2&&(U0(e),r++),u&1&&(U0(f),r++),T+=r},y0=function(u){var r=0;u&1&&(f=F0(),r++),u&2&&(e=F0(),r++),u&4&&(n=F0(),r++),u&8&&(W=F0(),r++),u&16&&(i=R0(),r+=2),u&32&&(l=R0(),r+=2),u&64&&(o=R0(),r+=2),u&128&&(x=R0(),r+=2),T+=r},W0=function(u){var r=0;u&1&&(f=Q(),r++),u&2&&(e=Q(),r++),u&4&&(n=Q(),r++),u&8&&(W=Q(),r++),u&16&&(i=b0(),r+=2),u&32&&(l=b0(),r+=2),u&64&&(b=b0(),r+=2),u&128&&(x=b0(),r+=2),T+=r},Z0=function(u){switch(u&15){case 0:return y();case 1:return i;case 2:return l;case 3:return o;case 4:return b;case 5:return x;case 8:return e;case 9:return n;case 10:return f;case 11:return W;default:return null}},T0=function(u,r){switch(u&15){case 0:v0(r);return;case 1:i=r;return;case 2:l=r;return;case 3:o=r;return;case 4:b=r;return;case 5:x=r;return;case 8:e=r;return;case 9:n=r;return;case 10:f=r;return;case 11:W=r;return;default:return}},w0=function(u,r){var S=u&136;(S==128||S==8)&&(S=0),r?(S=Z0(u>>4),T0(u>>4,Z0(u)),T0(u,S)):T0(u,Z0(u>>4))},c0=function(u){return u>127?u-256:u},i0=function(u){return u>32767?u-65536:u},E=function(){var u=A(x++);return x&=65535,u},w=function(){var u=A(x++);x&=65535;var r=A(x++);return x&=65535,u*256+r},F=function(u){var r=A(u++);u&=65535;var S=A(u++);return u&=65535,r*256+S},s0=function(u,r){p(u++,r>>8&255),u&=65535,p(u,r&255)},Z=function(){var u=E(),r;switch(u&96){case 0:r=i;break;case 32:r=l;break;case 64:r=o;break;case 96:r=b;break}var S=null,q=null,t;if(u&128){switch(u&15){case 0:q=r,S=r+1,T+=2;break;case 1:q=r,S=r+2,T+=3;break;case 2:S=r-1,q=S,T+=2;break;case 3:S=r-2,q=S,T+=3;break;case 4:q=r;break;case 5:q=r+c0(n),T+=1;break;case 6:q=r+c0(e),T+=1;break;case 7:q=0;break;case 8:q=r+c0(E()),T+=1;break;case 9:q=r+i0(w()),T+=4;break;case 10:q=0;break;case 11:T+=4,q=r+y();break;case 12:t=c0(E()),q=x+t,T+=1;break;case 13:t=i0(w()),q=x+t,T+=5;break;case 14:q=0;break;case 15:T+=5,q=w();break}q&=65535,u&16&&(q=A(q)*256+A(q+1&65535),T+=3)}else{var a=u&31;a>15&&(a-=32),q=r+a,T+=1}if(S!==null)switch(u&96){case 0:i=S;break;case 32:l=S;break;case 64:o=S;break;case 96:b=S;break}return q&65535},e0=function(u){f&=~(B|_),u===0&&(f|=B),u&32768&&(f|=_)},L=function(u){return u++,u&=255,f&=~(B|g|_),f|=X[u],(u===0||u==128)&&(f|=g),u},O=function(u){return u--,u&=255,f&=~(B|g|_),f|=X[u],(u===127||u==255)&&(f|=g),u},k0=function(u,r){var S=u-r;return f&=~(N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),S&255},Y=function(u,r){var S=u-r;return f&=~(N|B|g|_),(S&65535)===0&&(f|=B),S&32768&&(f|=_),S&65536&&(f|=N),U(u,r,S),S&65535},n0=function(u,r){var S=u+r;return f&=~(_0|N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),(S^u^r)&16&&(f|=_0),S&255},S0=function(u,r){var S=u+r;return f&=~(N|B|g|_),(S&65535)===0&&(f|=B),S&32768&&(f|=_),S&65536&&(f|=N),U(u,r,S),S&65535},J=function(u,r){var S=u+r+(f&N);return f&=~(_0|N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),(S^u^r)&16&&(f|=_0),S&255},l0=function(u,r){var S=u-r-(f&N);return f&=~(N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),S&255},I0=function(u,r){var S=u-r;f&=~(N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S)},z=function(u,r){var S=u-r;f&=~(N|B|g|_),(S&65535)===0&&(f|=B),S&32768&&(f|=_),S&65536&&(f|=N),U(u,r,S)},H0=function(u){return f&=~(N|B|g|_),u==128&&(f|=g),u=(~u&255)+1,u===0&&(f|=B),u&128&&(f|=_|N),u},r0=function(u){return f&=~(B|N|_),u&1&&(f|=N),u>>=1,u===0&&(f|=B),u&255},o0=function(u){return f&=~(B|N|_),u&1&&(f|=N),u=u&128|u>>1,f|=X[u],u},D0=function(u){var r=u;return f&=~(B|N|_|g),u&128&&(f|=N),u<<=1,f|=X[u],(u^r)&128&&(f|=g),u},B0=function(u){var r=u,S=f&N;return f&=~(B|N|_|g),u&128&&(f|=N),u=u<<1|S,f|=X[u],(u^r)&128&&(f|=g),u},X0=function(u){var r=f&N;return f&=~(B|N|_),u&1&&(f|=N),u=u>>1|r<<7,f|=X[u],u},f0=function(u,r){return f&=~(B|_|g),u^=r,f|=X[u],u},h0=function(u,r){return f&=~(B|_|g),u|=r,f|=X[u],u},A0=function(u,r){return f&=~(B|_|g),u&=r,f|=X[u],u},z0=function(u){return f&=~(B|_|g),u^=255,f|=X[u],f|=N,u},V=function(){return W*256+E()},q0=function(){var u=T,r=null,S=null,q=x,t=E();switch(T+=V0[t],t){case 0:r=V(),p(r,H0(A(r)));break;case 3:r=V(),p(r,z0(A(r)));break;case 4:r=V(),p(r,r0(A(r)));break;case 6:r=V(),p(r,X0(A(r)));break;case 7:r=V(),p(r,o0(A(r)));break;case 8:r=V(),p(r,D0(A(r)));break;case 9:r=V(),p(r,B0(A(r)));break;case 10:r=V(),p(r,O(A(r)));break;case 12:r=V(),p(r,L(A(r)));break;case 13:r=V(),S=A(r),f&=~(B|_|g),f|=X[S];break;case 14:r=V(),x=r;break;case 15:r=V(),p(r,0),f&=~(N|_|g),f|=B;break;case 18:break;case 19:break;case 22:r=i0(w()),x+=r;break;case 23:r=i0(w()),I(x),x+=r;break;case 25:var a=0,P=e&240,L0=e&15;(L0>9||f&32)&&(a|=6),P>128&&L0>9&&(a|=96),(P>144||f&1)&&(a|=96),r=a+e,f&=~(N|_|B|g),r&256&&(f|=N),e=r&255,f|=X[e];break;case 26:f|=E();break;case 28:f&=E();break;case 29:e=n&128?255:0,e0(y()),f&=~g;break;case 30:S=E(),w0(S,!0);break;case 31:S=E(),w0(S,!1);break;case 32:r=c0(E()),x+=r;break;case 33:r=c0(E());break;case 34:r=c0(E()),f&(N|B)||(x+=r);break;case 35:r=c0(E()),f&(N|B)&&(x+=r);break;case 36:r=c0(E()),f&N||(x+=r);break;case 37:r=c0(E()),f&N&&(x+=r);break;case 38:r=c0(E()),f&B||(x+=r);break;case 39:r=c0(E()),f&B&&(x+=r);break;case 40:r=c0(E()),f&g||(x+=r);break;case 41:r=c0(E()),f&g&&(x+=r);break;case 42:r=c0(E()),f&_||(x+=r);break;case 43:r=c0(E()),f&_&&(x+=r);break;case 44:r=c0(E()),f&_^(f&g)<<2||(x+=r);break;case 45:r=c0(E()),f&_^(f&g)<<2&&(x+=r);break;case 46:r=c0(E()),f&_^(f&g)<<2||f&B||(x+=r);break;case 47:r=c0(E()),(f&_^(f&g)<<2||f&B)&&(x+=r);break;case 48:i=Z(),i===0?f|=B:f&=~B;break;case 49:l=Z(),l===0?f|=B:f&=~B;break;case 50:b=Z();break;case 51:o=Z();break;case 52:E0(E());break;case 53:y0(E());break;case 54:d0(E());break;case 55:W0(E());break;case 57:x=R0();break;case 58:i+=n;break;case 59:f=F0(),f&D&&(T+=9,e=F0(),n=F0(),W=F0(),i=R0(),l=R0(),o=R0()),x=R0();break;case 60:f&=E();break;case 61:r=e*n,r===0?f|=B:f&=~B,r&128?f|=N:f&=~N,v0(r);break;case 63:f|=D,I(x),I(o),I(l),I(i),u0(W),u0(n),u0(e),u0(f),f|=a0|d,x=F(K);break;case 64:e=H0(e);break;case 67:e=z0(e);break;case 68:e=r0(e);break;case 70:e=X0(e);break;case 71:e=o0(e);break;case 72:e=D0(e);break;case 73:e=B0(e);break;case 74:e=O(e);break;case 76:e=L(e);break;case 77:f&=~(B|_|g),f|=X[e];break;case 79:e=0,f&=~(_|g|N),f|=B;break;case 80:n=H0(n);break;case 83:n=z0(n);break;case 84:n=r0(n);break;case 86:n=X0(n);break;case 87:n=o0(n);break;case 88:n=D0(n);break;case 89:n=B0(n);break;case 90:n=O(n);break;case 92:n=L(n);break;case 93:f&=~(B|_|g),f|=X[n];break;case 95:n=0,f&=~(_|g|N),f|=B;break;case 96:r=Z(),p(r,H0(A(r)));break;case 99:r=Z(),p(r,z0(A(r)));break;case 100:r=Z(),p(r,r0(A(r)));break;case 102:r=Z(),p(r,X0(A(r)));break;case 103:r=Z(),p(r,o0(A(r)));break;case 104:r=Z(),p(r,D0(A(r)));break;case 105:r=Z(),p(r,B0(A(r)));break;case 106:r=Z(),p(r,O(A(r)));break;case 108:r=Z(),p(r,L(A(r)));break;case 109:r=Z(),S=A(r),f&=~(B|_|g),f|=X[S];break;case 110:r=Z(),x=r;break;case 111:r=Z(),p(r,0),f&=~(N|_|g),f|=B;break;case 112:r=w(),p(r,H0(A(r)));break;case 115:r=w(),p(r,z0(A(r)));break;case 116:r=w(),p(r,r0(A(r)));break;case 118:r=w(),p(r,X0(A(r)));break;case 119:r=w(),p(r,o0(A(r)));break;case 120:r=w(),p(r,D0(A(r)));break;case 121:r=w(),p(r,B0(A(r)));break;case 122:r=w(),p(r,O(A(r)));break;case 124:r=w(),p(r,L(A(r)));break;case 125:r=w(),S=A(r),f&=~(B|_|g),f|=X[S];break;case 126:r=w(),x=r;break;case 127:r=w(),p(r,0),f&=~(N|_|g),f|=B;break;case 128:e=k0(e,E());break;case 129:I0(e,E());break;case 130:e=l0(e,E());break;case 131:v0(Y(y(),w()));break;case 132:e=A0(e,E());break;case 133:A0(e,E());break;case 134:e=E(),f&=~(B|_|g),f|=X[e];break;case 136:e=f0(e,E());break;case 137:e=J(e,E());break;case 138:e=h0(e,E());break;case 139:e=n0(e,E());break;case 140:z(i,w());break;case 141:r=c0(E()),I(x),x+=r;break;case 142:i=w(),e0(i),f&=~g;break;case 144:r=V(),e=k0(e,A(r));break;case 145:r=V(),I0(e,A(r));break;case 146:r=V(),e=l0(e,A(r));break;case 147:r=V(),v0(Y(y(),F(r)));break;case 148:r=V(),e=A0(e,A(r));break;case 149:r=V(),A0(e,A(r));break;case 150:r=V(),e=A(r),f&=~(B|_|g),f|=X[e];break;case 151:r=V(),p(r,e),f&=~(B|_|g),f|=X[e];break;case 152:r=V(),e=f0(e,A(r));break;case 153:r=V(),e=J(e,A(r));break;case 154:r=V(),e=h0(e,A(r));break;case 155:r=V(),e=n0(e,A(r));break;case 156:r=V(),z(i,F(r));break;case 157:r=V(),I(x),x=r;break;case 158:r=V(),i=F(r),e0(i),f&=~g;break;case 159:r=V(),s0(r,i),e0(i),f&=~g;break;case 160:r=Z(),e=k0(e,A(r));break;case 161:r=Z(),I0(e,A(r));break;case 162:r=Z(),e=l0(e,A(r));break;case 163:r=Z(),v0(Y(y(),F(r)));break;case 164:r=Z(),e=A0(e,A(r));break;case 165:r=Z(),A0(e,A(r));break;case 166:r=Z(),e=A(r),f&=~(B|_|g),f|=X[e];break;case 167:r=Z(),p(r,e),f&=~(B|_|g),f|=X[e];break;case 168:r=Z(),e=f0(e,A(r));break;case 169:r=Z(),e=J(e,A(r));break;case 170:r=Z(),e=h0(e,A(r));break;case 171:r=Z(),e=n0(e,A(r));break;case 172:r=Z(),z(i,F(r));break;case 173:r=Z(),I(x),x=r;break;case 174:r=Z(),i=F(r),e0(i),f&=~g;break;case 175:r=Z(),s0(r,i),e0(i),f&=~g;break;case 176:r=w(),e=k0(e,A(r));break;case 177:r=w(),I0(e,A(r));break;case 178:r=w(),e=l0(e,A(r));break;case 179:r=w(),v0(Y(y(),F(r)));break;case 180:r=w(),e=A0(e,A(r));break;case 181:r=w(),A0(e,A(r));break;case 182:r=w(),e=A(r),f&=~(B|_|g),f|=X[e];break;case 183:r=w(),p(r,e),f&=~(B|_|g),f|=X[e];break;case 184:r=w(),e=f0(e,A(r));break;case 185:r=w(),e=J(e,A(r));break;case 186:r=w(),e=h0(e,A(r));break;case 187:r=w(),e=n0(e,A(r));break;case 188:r=w(),z(i,F(r));break;case 189:r=w(),I(x),x=r;break;case 190:r=w(),i=F(r),e0(i),f&=~g;break;case 191:r=w(),s0(r,i),e0(i),f&=~g;break;case 192:n=k0(n,E());break;case 193:I0(n,E());break;case 194:n=l0(n,E());break;case 195:v0(S0(y(),w()));break;case 196:n=A0(n,E());break;case 197:A0(n,E());break;case 198:n=E(),f&=~(B|_|g),f|=X[n];break;case 200:n=f0(n,E());break;case 201:n=J(n,E());break;case 202:n=h0(n,E());break;case 203:n=n0(n,E());break;case 204:r=w(),v0(r),e0(r),f&=~g;break;case 206:o=w(),e0(o),f&=~g;break;case 208:r=V(),n=k0(n,A(r));break;case 209:r=V(),I0(n,A(r));break;case 210:r=V(),n=l0(n,A(r));break;case 211:r=V(),v0(S0(y(),F(r)));break;case 212:r=V(),n=A0(n,A(r));break;case 213:r=V(),A0(n,A(r));break;case 214:r=V(),n=A(r),f&=~(B|_|g),f|=X[n];break;case 215:r=V(),p(r,n),f&=~(B|_|g),f|=X[n];break;case 216:r=V(),n=f0(n,A(r));break;case 217:r=V(),n=J(n,A(r));break;case 218:r=V(),n=h0(n,A(r));break;case 219:r=V(),n=n0(n,A(r));break;case 220:r=V(),S=F(r),v0(S),e0(S),f&=~g;break;case 221:r=V(),s0(r,y()),f&=~g;break;case 222:r=V(),o=F(r),e0(o),f&=~g;break;case 223:r=V(),s0(r,o),e0(o),f&=~g;break;case 224:r=Z(),n=k0(n,A(r));break;case 225:r=Z(),I0(n,A(r));break;case 226:r=Z(),n=l0(n,A(r));break;case 227:r=Z(),v0(S0(y(),F(r)));break;case 228:r=Z(),n=A0(n,A(r));break;case 229:r=Z(),A0(n,A(r));break;case 230:r=Z(),n=A(r),f&=~(B|_|g),f|=X[n];break;case 231:r=Z(),p(r,n),f&=~(B|_|g),f|=X[n];break;case 232:r=Z(),n=f0(n,A(r));break;case 233:r=Z(),n=J(n,A(r));break;case 234:r=Z(),n=h0(n,A(r));break;case 235:r=Z(),n=n0(n,A(r));break;case 236:r=Z(),S=F(r),v0(S),e0(S),f&=~g;break;case 237:r=Z(),s0(r,y()),f&=~g;break;case 238:r=Z(),o=F(r),e0(o),f&=~g;break;case 239:r=Z(),s0(r,o),e0(o),f&=~g;break;case 240:r=w(),n=k0(n,A(r));break;case 241:r=w(),I0(n,A(r));break;case 242:r=w(),n=l0(n,A(r));break;case 243:r=w(),v0(S0(y(),F(r)));break;case 244:r=w(),n=A0(n,A(r));break;case 245:r=w(),A0(n,A(r));break;case 246:r=w(),n=A(r),f&=~(B|_|g),f|=X[n];break;case 247:r=w(),p(r,n),f&=~(B|_|g),f|=X[n];break;case 248:r=w(),n=f0(n,A(r));break;case 249:r=w(),n=J(n,A(r));break;case 250:r=w(),n=h0(n,A(r));break;case 251:r=w(),n=n0(n,A(r));break;case 252:r=w(),S=F(r),v0(S),e0(S),f&=~g;break;case 253:r=w(),s0(r,y()),f&=~g;break;case 254:r=w(),o=F(r),e0(o),f&=~g;break;case 255:r=w(),s0(r,o),e0(o),f&=~g;break;case 16:switch(t=E(),T+=M[t],t){case 33:r=i0(w());break;case 34:r=i0(w()),f&(N|B)||(x+=r);break;case 35:r=i0(w()),f&(N|B)&&(x+=r);break;case 36:r=i0(w()),f&N||(x+=r);break;case 37:r=i0(w()),f&N&&(x+=r);break;case 38:r=i0(w()),f&B||(x+=r);break;case 39:r=i0(w()),f&B&&(x+=r);break;case 40:r=i0(w()),f&g||(x+=r);break;case 41:r=i0(w()),f&g&&(x+=r);break;case 42:r=i0(w()),f&_||(x+=r);break;case 43:r=i0(w()),f&_&&(x+=r);break;case 44:r=i0(w()),f&_^(f&g)<<2||(x+=r);break;case 45:r=i0(w()),f&_^(f&g)<<2&&(x+=r);break;case 46:r=i0(w()),f&_^(f&g)<<2||f&B||(x+=r);break;case 47:r=i0(w()),(f&_^(f&g)<<2||f&B)&&(x+=r);break;case 63:f|=D,I(x),I(o),I(l),I(i),u0(W),u0(n),u0(e),u0(f),f|=a0|d,x=F(x0);break;case 131:z(y(),w());break;case 140:z(l,w());break;case 142:l=w(),e0(l),f&=~g;break;case 147:r=V(),z(y(),F(r));break;case 156:r=V(),z(l,F(r));break;case 158:r=V(),l=F(r),e0(l),f&=~g;break;case 159:r=V(),s0(r,l),e0(l),f&=~g;break;case 163:r=Z(),z(y(),F(r));break;case 172:r=Z(),z(l,F(r));break;case 174:r=Z(),l=F(r),e0(l),f&=~g;break;case 175:r=Z(),s0(r,l),e0(l),f&=~g;break;case 179:r=w(),z(y(),F(r));break;case 188:r=w(),z(l,F(r));break;case 190:r=w(),l=F(r),e0(l),f&=~g;break;case 191:r=w(),s0(r,l),e0(l),f&=~g;break;case 206:b=w(),e0(b),f&=~g;break;case 222:r=V(),b=F(r),e0(b),f&=~g;break;case 223:r=V(),s0(r,b),e0(b),f&=~g;break;case 238:r=Z(),b=F(r),e0(b),f&=~g;break;case 239:r=Z(),s0(r,b),e0(b),f&=~g;break;case 254:r=w(),b=F(r),e0(b),f&=~g;break;case 255:r=w(),s0(r,b),e0(b),f&=~g;break}break;case 17:switch(t=E(),T+=M[t],t){case 63:f|=D,I(x),I(o),I(l),I(i),u0(W),u0(n),u0(e),u0(f),f|=a0|d,x=F(N0);break;case 131:z(o,w());break;case 140:z(b,w());break;case 147:r=V(),z(o,F(r));break;case 156:r=V(),z(b,F(r));break;case 163:r=Z(),z(o,F(r));break;case 172:r=Z(),z(b,F(r));break;case 179:r=w(),z(o,F(r));break;case 188:r=w(),z(b,F(r));break}break}return e&=255,n&=255,f&=255,W&=255,i&=65535,l&=65535,o&=65535,b&=65535,x&=65535,T-u},j0=function(){x=F(t0),W=0,f|=d|a0,T=0,e=n=W=i=l=o=b=0},G0=[[2,1,"NEG"],[1,0,"???"],[1,0,"???"],[2,1,"COM"],[2,1,"LSR"],[1,0,"???"],[2,1,"ROR"],[2,1,"ASR"],[2,1,"LSL"],[2,1,"ROL"],[2,1,"DEC"],[1,0,"???"],[2,1,"INC"],[2,1,"TST"],[2,1,"JMP"],[2,1,"CLR"],[1,0,"Prefix"],[1,0,"Prefix"],[1,2,"NOP"],[1,2,"SYNC"],[1,0,"???"],[1,0,"???"],[3,3,"LBRA"],[3,3,"LBSR"],[1,0,"???"],[1,2,"DAA"],[2,4,"ORCC"],[1,0,"???"],[2,4,"ANDCC"],[1,2,"SEX"],[2,20,"EXG"],[2,20,"TFR"],[2,5,"BRA"],[2,5,"BRN"],[2,5,"BHI"],[2,5,"BLS"],[2,5,"BCC"],[2,5,"BCS"],[2,5,"BNE"],[2,5,"BEQ"],[2,5,"BVC"],[2,5,"BVS"],[2,5,"BPL"],[2,5,"BMI"],[2,5,"BGE"],[2,5,"BLT"],[2,5,"BGT"],[2,5,"BLE"],[2,6,"LEAX"],[2,6,"LEAY"],[2,6,"LEAS"],[2,6,"LEAU"],[2,10,"PSHS"],[2,10,"PULS"],[2,11,"PSHU"],[2,11,"PULU"],[1,0,"???"],[1,2,"RTS"],[1,2,"ABX"],[1,2,"RTI"],[2,2,"CWAI"],[1,2,"MUL"],[1,2,"RESET"],[1,2,"SWI1"],[1,2,"NEGA"],[1,0,"???"],[1,0,"???"],[1,2,"COMA"],[1,2,"LSRA"],[1,0,"???"],[1,2,"RORA"],[1,2,"ASRA"],[1,2,"ASLA"],[1,2,"ROLA"],[1,2,"DECA"],[1,0,"???"],[1,2,"INCA"],[1,2,"TSTA"],[1,0,"???"],[1,2,"CLRA"],[1,2,"NEGB"],[1,0,"???"],[1,0,"???"],[1,2,"COMB"],[1,2,"LSRB"],[1,0,"???"],[1,2,"RORB"],[1,2,"ASRB"],[1,2,"ASLB"],[1,2,"ROLB"],[1,2,"DECB"],[1,0,"???"],[1,2,"INCB"],[1,2,"TSTB"],[1,0,"???"],[1,2,"CLRB"],[2,6,"NEG"],[1,0,"???"],[1,0,"???"],[2,6,"COM"],[2,6,"LSR"],[1,0,"???"],[2,6,"ROR"],[2,6,"ASR"],[2,6,"LSL"],[2,6,"ROL"],[2,6,"DEC"],[1,0,"???"],[2,6,"INC"],[2,6,"TST"],[2,6,"JMP"],[2,6,"CLR"],[3,7,"NEG"],[1,0,"???"],[1,0,"???"],[3,7,"COM"],[3,7,"LSR"],[1,0,"???"],[3,7,"ROR"],[3,7,"ASR"],[3,7,"LSL"],[3,7,"ROL"],[3,7,"DEC"],[1,0,"???"],[3,7,"INC"],[3,7,"TST"],[3,7,"JMP"],[3,7,"CLR"],[2,4,"SUBA"],[2,4,"CMPA"],[2,4,"SBCA"],[3,8,"SUBD"],[2,4,"ANDA"],[2,4,"BITA"],[2,4,"LDA"],[1,0,"???"],[2,4,"EORA"],[2,4,"ADCA"],[2,4,"ORA"],[2,4,"ADDA"],[3,8,"CMPX"],[2,5,"BSR"],[3,8,"LDX"],[1,0,"???"],[2,1,"SUBA"],[2,1,"CMPA"],[2,1,"SBCA"],[2,1,"SUBd"],[2,1,"ANDA"],[2,1,"BITA"],[2,1,"LDA"],[2,1,"STA"],[2,1,"EORA"],[2,1,"ADCA"],[2,1,"ORA"],[2,1,"ADDA"],[2,1,"CMPX"],[2,1,"JSR"],[2,1,"LDX"],[2,1,"STX"],[2,6,"SUBA"],[2,6,"CMPA"],[2,6,"SBCA"],[2,6,"SUBD"],[2,6,"ANDA"],[2,6,"BITA"],[2,6,"LDA"],[2,6,"STA"],[2,6,"EORA"],[2,6,"ADCA"],[2,6,"ORA"],[2,6,"ADDA"],[2,6,"CMPX"],[2,6,"JSR"],[2,6,"LDX"],[2,6,"STX"],[3,7,"SUBA"],[3,7,"CMPA"],[3,7,"SBCA"],[3,7,"SUBD"],[3,7,"ANDA"],[3,7,"BITA"],[3,7,"LDA"],[3,7,"STA"],[3,7,"EORA"],[3,7,"ADCA"],[3,7,"ORA"],[3,7,"ADDA"],[3,7,"CMPX"],[3,7,"JSR"],[3,7,"LDX"],[3,7,"STX"],[2,4,"SUBB"],[2,4,"CMPB"],[2,4,"SBCB"],[3,8,"ADDD"],[2,4,"ANDB"],[2,4,"BITB"],[2,4,"LDB"],[1,0,"???"],[2,4,"EORB"],[2,4,"ADCB"],[2,4,"ORB"],[2,4,"ADDB"],[3,8,"LDD"],[1,0,"???"],[3,8,"LDU"],[1,0,"???"],[2,1,"SUBB"],[2,1,"CMPB"],[2,1,"SBCB"],[2,1,"ADDD"],[2,1,"ANDB"],[2,1,"BITB"],[2,1,"LDB"],[2,1,"STB"],[2,1,"EORB"],[2,1,"ADCB"],[2,1,"ORB "],[2,1,"ADDB"],[2,1,"LDD "],[2,1,"STD "],[2,1,"LDU "],[2,1,"STU "],[2,6,"SUBB"],[2,6,"CMPB"],[2,6,"SBCB"],[2,6,"ADDD"],[2,6,"ANDB"],[2,6,"BITB"],[2,6,"LDB"],[2,6,"STB"],[2,6,"EORB"],[2,6,"ADCB"],[2,6,"ORB"],[2,6,"ADDB"],[2,6,"LDD"],[2,6,"STD"],[2,6,"LDU"],[2,6,"STU"],[3,7,"SUBB"],[3,7,"CMPB"],[3,7,"SBCB"],[3,7,"ADDD"],[3,7,"ANDB"],[3,7,"BITB"],[3,7,"LDB"],[3,7,"STB"],[3,7,"EORB"],[3,7,"ADCB"],[3,7,"ORB"],[3,7,"ADDB"],[3,7,"LDD"],[3,7,"STD"],[3,7,"LDU"],[3,7,"STU"]],v={63:[2,2,"SWI3"],131:[4,8,"CMPU"],140:[4,8,"CMPS"],147:[3,1,"CMPU"],156:[3,1,"CMPS"],163:[3,6,"CMPU"],172:[3,6,"CMPS"],179:[4,7,"CMPU"],188:[4,7,"CMPS"]},R={33:[5,3,"LBRN"],34:[5,3,"LBHI"],35:[5,3,"LBLS"],36:[5,3,"LBCC"],37:[5,3,"LBCS"],38:[5,3,"LBNE"],39:[5,3,"LBEQ"],40:[5,3,"LBVC"],41:[5,3,"LBVS"],42:[5,3,"LBPL"],43:[5,3,"LBMI"],44:[5,3,"LBGE"],45:[5,3,"LBLT"],46:[5,3,"LBGT"],47:[5,3,"LBLE"],63:[2,2,"SWI2"],131:[4,8,"CMPD"],140:[4,8,"CMPY"],142:[4,8,"LDY"],147:[3,1,"CMPD"],156:[3,1,"CMPY"],158:[3,1,"LDY"],159:[3,1,"STY"],163:[3,6,"CMPD"],172:[3,6,"CMPY"],174:[3,6,"LDY"],175:[3,6,"STY"],179:[4,7,"CMPD"],188:[4,7,"CMPY"],190:[4,7,"LDY"],191:[4,7,"STY"],206:[4,8,"LDS"],222:[3,1,"LDS"],223:[3,1,"STS"],238:[3,6,"LDS"],239:[3,6,"STS"],254:[4,7,"LDS"],255:[4,7,"STS"]},k=function(u,r,S,q,t,a){var P=function(ue,qe){for(var Pe=ue.toString(16);Pe.length>5];if(!(xe&128)){var Se=xe&31;Se>15&&(Se=Se-32),G+=Se+","+M0;break}var Qe=xe&16,Oe=xe&15,ge=S>127?S-256:S,pe=S*256+q>32767?S*256+q-65536:S*256+q;if(Qe)switch(Oe){case 0:G+="???";break;case 1:G+="[,"+M0+"++]";break;case 2:G+="???";break;case 3:G+="[,--"+M0+"]";break;case 4:G+="[,"+M0+"]";break;case 5:G+="[B,"+M0+"]";break;case 6:G+="[A,"+M0+"]";break;case 7:G+="???";break;case 8:G+="["+ge+","+M0+"]",K0++;break;case 9:G+="["+pe+","+M0+"]",K0+=2;break;case 10:G+="???";break;case 11:G+="[D,"+M0+"]";break;case 12:G+="["+ge+",PC]",K0++;break;case 13:G+="["+pe+",PC]",K0+=2;break;case 14:G+="???";break;case 15:G+="[$"+$0(S*256+q)+"]",K0+=2;break}else switch(Oe){case 0:G+=","+M0+"+";break;case 1:G+=","+M0+"++";break;case 2:G+=",-"+M0;break;case 3:G+=",--"+M0;break;case 4:G+=","+M0;break;case 5:G+="B,"+M0;break;case 6:G+="A,"+M0;break;case 7:G+="???";break;case 8:G+=ge+","+M0,K0++;break;case 9:G+=pe+","+M0,K0+=2;break;case 10:G+="???";break;case 11:G+="D,"+M0;break;case 12:G+=ge+",PC",K0++;break;case 13:G+=pe+",PC",K0+=2;break;case 14:G+="???";break;case 15:G+="$"+$0(S*256+q),K0+=2;break}break;case 7:G+=" $"+$0(r*256+S);break;case 8:G+=" #$"+$0(r*256+S);break;case 10:for(O0=["PC","U","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(O0[7-Q0]),r>>=1;G+=" "+ne.join(",");break;case 11:for(O0=["PC","S","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(O0[7-Q0]),r>>=1;G+=" "+ne.join(",");break;case 20:O0=["D","X","Y","U","S","PC","?","?","A","B","CC","DP","?","?","?","?"],G+=" "+O0[r>>4]+","+O0[r&15];break}return{line:G,nbytes:K0}};return{steps:function(u){for(;u>0;)u-=q0()},runFrame:function(u){for(;T>S;q===0?u+=r[S].toLowerCase():u+=r[S]}return u},disasm:k,isStable:function(){return!0}}}var mt=function(){var C=this;this.powerOn=function(){this.reset()},this.powerOff=function(){},this.clockPulse=function(){n&&(a0++,d[a0]())},this.connectBus=function(m){e=m},this.setRDY=function(m){n=m},this.isRDY=function(){return n},this.reset=function(){g=1,a0=-1,d=[U],i=e.read(T)|e.read(T+1)<<8,this.setRDY(!0)};var e,n=!1,i=0,l=0,o=0,b=0,x=0,f=0,W=0,N=0,g=0,B=0,_=0,a0=-1,_0=-1,d,D=0,t0=0,H=0,K=!1,s=0,c=0,x0=0;let N0=65530,T=65532,p0=65534,p=0,A=1,V0=7,M=6,X=1,m0=0;this.debug=!1,this.trace=!1;var U=function(){_0=e.read(i),d=a[_0],a0=0,i++},y=U,v0=function(){e.read(i)},u0=function(){c=e.read(i),i++},I=function(){t0=e.read(i),i++},U0=function(){t0|=e.read(i)<<8,i++},Y0=function(){t0=e.read(H)},F0=function(){t0|=e.read(H)<<8},R0=function(){H=e.read(i),i++},Q=function(){H|=e.read(i)<<8,i++},b0=function(){H=e.read(s)},E0=function(){H|=e.read(s)<<8},d0=function(){var m=(H&255)+b;K=m>255,H=H&65280|m&255},y0=function(){var m=(H&255)+x;K=m>255,H=H&65280|m&255},W0=function(){var m=(H&255)+1;K=m>255,H=H&65280|m&255},Z0=function(){K&&(H=H+256&65535)},T0=function(){s=e.read(i),i++},w0=function(){s|=e.read(i)<<8,i++},c0=function(){var m=(s&255)+1;s=s&65280|m&255},i0=function(){D=e.read(i),i++},E=function(){D=e.read(t0)},w=function(){D=e.read(H)},F=function(){e.write(t0,D)},s0=function(){e.write(H,D)},Z=function(){var m=i&255,h=m+c&255;c>127?x0=h>m?-256:0:x0=h>>7,W=m>>>6&1,N=m>>>3&1,g=m>>>2&1,B=m>>>1&1,_=m&1},z=function(m){C.debug&&C.breakpoint("Illegal Opcode: "+m)},H0=function(){z("KIL/HLT/JAM");let m=i-1&65535;throw new Ye(`CPU executed halt instruction ($${$(_0,2)}) at $${$(m,4)}`)},r0=function(m){return[U,v0,function(){m(),y()}]},o0=function(m){return[U,i0,function(){m(),y()}]},D0=function(m){return[U,I,E,function(){m(),y()}]},B0=function(m){return[U,I,U0,E,function(){m(),y()}]},X0=function(m){return[U,R0,w,function(){d0(),Y0()},function(){W0(),F0()},E,function(){m(),y()}]},f0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,Q,function(){h(),w(),Z0()},function(){K?w():(j(),y())},function(){j(),y()}]}},h0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,w,function(){h(),w()},function(){j(),y()}]}},A0=function(m){return[U,T0,b0,function(){c0(),E0()},function(){y0(),w(),Z0()},function(){K?w():(m(),y())},function(){m(),y()}]},z0=function(m){return[U,I,function(){m(),F()},y]},V=function(m){return[U,I,U0,function(){m(),F()},y]},q0=function(m){return[U,R0,w,function(){d0(),Y0()},function(){W0(),F0()},function(){m(),F()},y]},j0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,Q,function(){h(),w(),Z0()},function(){j(),s0()},y]}},G0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,w,function(){h(),j(),s0()},y]}},v=function(m){return[U,T0,b0,function(){c0(),E0()},function(){y0(),w(),Z0()},function(){m(),s0()},y]},R=function(m){return[U,I,E,F,function(){m(),F()},y]},k=function(m){return[U,I,U0,E,F,function(){m(),F()},y]},u=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,w,function(){h(),w()},s0,function(){j(),s0()},y]}},r=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,Q,function(){h(),w(),Z0()},w,s0,function(){j(),s0()},y]}},S=function(m){return[U,R0,w,function(){d0(),Y0()},function(){W0(),F0()},E,F,function(){m(),F()},y]},q=function(m){return[U,T0,b0,function(){c0(),E0()},function(){y0(),w(),Z0()},w,s0,function(){m(),s0()},y]},t=new Array(256),a=new Array(256);t[0]="BRK",a[0]=ln(),t[1]="ORA",a[1]=ce(X0),t[2]="uKIL",a[2]=J0(),t[3]="uSLO",a[3]=Ae(S),t[4]="uNOP",a[4]=P0(D0),t[5]="ORA",a[5]=ce(D0),t[6]="ASL",a[6]=Ze(R),t[7]="uSLO",a[7]=Ae(R),t[8]="PHP",a[8]=cn(),t[9]="ORA",a[9]=ce(o0),t[10]="ASL",a[10]=P(),t[11]="uANC",a[11]=gt(o0),t[12]="uNOP",a[12]=P0(B0),t[13]="ORA",a[13]=ce(B0),t[14]="ASL",a[14]=Ze(k),t[15]="uSLO",a[15]=Ae(k),t[16]="BPL",a[16]=oe(V0,0),t[17]="ORA",a[17]=ce(A0),t[18]="uKIL",a[18]=J0(),t[19]="uSLO",a[19]=Ae(q),t[20]="uNOP",a[20]=P0(h0(p)),t[21]="ORA",a[21]=ce(h0(p)),t[22]="ASL",a[22]=Ze(u(p)),t[23]="uSLO",a[23]=Ae(u(p)),t[24]="CLC",a[24]=L0(),t[25]="ORA",a[25]=ce(f0(A)),t[26]="uNOP",a[26]=P0(r0),t[27]="uSLO",a[27]=Ae(r(A)),t[28]="uNOP",a[28]=P0(f0(p)),t[29]="ORA",a[29]=ce(f0(p)),t[30]="ASL",a[30]=Ze(r(p)),t[31]="uSLO",a[31]=Ae(r(p)),t[32]="JSR",a[32]=un(),t[33]="AND",a[33]=ae(X0),t[34]="uKIL",a[34]=J0(),t[35]="uRLA",a[35]=de(S),t[36]="BIT",a[36]=St(D0),t[37]="AND",a[37]=ae(D0),t[38]="ROL",a[38]=Ue(R),t[39]="uRLA",a[39]=de(R),t[40]="PLP",a[40]=xn(),t[41]="AND",a[41]=ae(o0),t[42]="ROL",a[42]=M0(),t[43]="uANC",a[43]=gt(o0),t[44]="BIT",a[44]=St(B0),t[45]="AND",a[45]=ae(B0),t[46]="ROL",a[46]=Ue(k),t[47]="uRLA",a[47]=de(k),t[48]="BMI",a[48]=oe(V0,1),t[49]="AND",a[49]=ae(A0),t[50]="uKIL",a[50]=J0(),t[51]="uRLA",a[51]=de(q),t[52]="uNOP",a[52]=P0(h0(p)),t[53]="AND",a[53]=ae(h0(p)),t[54]="ROL",a[54]=Ue(u(p)),t[55]="uRLA",a[55]=de(u(p)),t[56]="SEC",a[56]=Qe(),t[57]="AND",a[57]=ae(f0(A)),t[58]="uNOP",a[58]=P0(r0),t[59]="uRLA",a[59]=de(r(A)),t[60]="uNOP",a[60]=P0(f0(p)),t[61]="AND",a[61]=ae(f0(p)),t[62]="ROL",a[62]=Ue(r(p)),t[63]="uRLA",a[63]=de(r(p)),t[64]="RTI",a[64]=dn(),t[65]="EOR",a[65]=fe(X0),t[66]="uKIL",a[66]=J0(),t[67]="uSRE",a[67]=Ce(S),t[68]="uNOP",a[68]=P0(D0),t[69]="EOR",a[69]=fe(D0),t[70]="LSR",a[70]=Te(R),t[71]="uSRE",a[71]=Ce(R),t[72]="PHA",a[72]=sn(),t[73]="EOR",a[73]=fe(o0),t[74]="LSR",a[74]=G(),t[75]="uASR",a[75]=qt(o0),t[76]="JMP",a[76]=An(),t[77]="EOR",a[77]=fe(B0),t[78]="LSR",a[78]=Te(k),t[79]="uSRE",a[79]=Ce(k),t[80]="BVC",a[80]=oe(M,0),t[81]="EOR",a[81]=fe(A0),t[82]="uKIL",a[82]=J0(),t[83]="uSRE",a[83]=Ce(q),t[84]="uNOP",a[84]=P0(h0(p)),t[85]="EOR",a[85]=fe(h0(p)),t[86]="LSR",a[86]=Te(u(p)),t[87]="uSRE",a[87]=Ce(u(p)),t[88]="CLI",a[88]=O0(),t[89]="EOR",a[89]=fe(f0(A)),t[90]="uNOP",a[90]=P0(r0),t[91]="uSRE",a[91]=Ce(r(A)),t[92]="uNOP",a[92]=P0(f0(p)),t[93]="EOR",a[93]=fe(f0(p)),t[94]="LSR",a[94]=Te(r(p)),t[95]="uSRE",a[95]=Ce(r(p)),t[96]="RTS",a[96]=hn(),t[97]="ADC",a[97]=re(X0),t[98]="uKIL",a[98]=J0(),t[99]="uRRA",a[99]=he(S),t[100]="uNOP",a[100]=P0(D0),t[101]="ADC",a[101]=re(D0),t[102]="ROR",a[102]=Xe(R),t[103]="uRRA",a[103]=he(R),t[104]="PLA",a[104]=on(),t[105]="ADC",a[105]=re(o0),t[106]="ROR",a[106]=Se(),t[107]="uARR",a[107]=Qt(o0),t[108]="JMP",a[108]=Cn(),t[109]="ADC",a[109]=re(B0),t[110]="ROR",a[110]=Xe(k),t[111]="uRRA",a[111]=he(k),t[112]="BVS",a[112]=oe(M,1),t[113]="ADC",a[113]=re(A0),t[114]="uKIL",a[114]=J0(),t[115]="uRRA",a[115]=he(q),t[116]="uNOP",a[116]=P0(h0(p)),t[117]="ADC",a[117]=re(h0(p)),t[118]="ROR",a[118]=Xe(u(p)),t[119]="uRRA",a[119]=he(u(p)),t[120]="SEI",a[120]=ge(),t[121]="ADC",a[121]=re(f0(A)),t[122]="uNOP",a[122]=P0(r0),t[123]="uRRA",a[123]=he(r(A)),t[124]="uNOP",a[124]=P0(f0(p)),t[125]="ADC",a[125]=re(f0(p)),t[126]="ROR",a[126]=Xe(r(p)),t[127]="uRRA",a[127]=he(r(p)),t[128]="uNOP",a[128]=P0(o0),t[129]="STA",a[129]=le(q0),t[130]="uNOP",a[130]=P0(o0),t[131]="uSAX",a[131]=Ee(q0),t[132]="STY",a[132]=rt(z0),t[133]="STA",a[133]=le(z0),t[134]="STX",a[134]=nt(z0),t[135]="uSAX",a[135]=Ee(z0),t[136]="DEY",a[136]=ee(),t[137]="uNOP",a[137]=P0(o0),t[138]="TXA",a[138]=Pe(),t[139]="uANE",a[139]=Gt(o0),t[140]="STY",a[140]=rt(V),t[141]="STA",a[141]=le(V),t[142]="STX",a[142]=nt(V),t[143]="uSAX",a[143]=Ee(V),t[144]="BCC",a[144]=oe(m0,0),t[145]="STA",a[145]=le(v),t[146]="uKIL",a[146]=J0(),t[147]="uSHA",a[147]=pt(v),t[148]="STY",a[148]=rt(G0(p)),t[149]="STA",a[149]=le(G0(p)),t[150]="STX",a[150]=nt(G0(A)),t[151]="uSAX",a[151]=Ee(G0(A)),t[152]="TYA",a[152]=Jt(),t[153]="STA",a[153]=le(j0(A)),t[154]="TXS",a[154]=$t(),t[155]="uSHS",a[155]=rn(j0(A)),t[156]="uSHY",a[156]=fn(j0(p)),t[157]="STA",a[157]=le(j0(p)),t[158]="uSHX",a[158]=an(j0(A)),t[159]="uSHA",a[159]=pt(j0(A)),t[160]="LDY",a[160]=De(o0),t[161]="LDA",a[161]=se(X0),t[162]="LDX",a[162]=ke(o0),t[163]="uLAX",a[163]=_e(X0),t[164]="LDY",a[164]=De(D0),t[165]="LDA",a[165]=se(D0),t[166]="LDX",a[166]=ke(D0),t[167]="uLAX",a[167]=_e(D0),t[168]="TAY",a[168]=ue(),t[169]="LDA",a[169]=se(o0),t[170]="TAX",a[170]=pe(),t[171]="uLXA",a[171]=tn(o0),t[172]="LDY",a[172]=De(B0),t[173]="LDA",a[173]=se(B0),t[174]="LDX",a[174]=ke(B0),t[175]="uLAX",a[175]=_e(B0),t[176]="BCS",a[176]=oe(m0,1),t[177]="LDA",a[177]=se(A0),t[178]="uKIL",a[178]=J0(),t[179]="uLAX",a[179]=_e(A0),t[180]="LDY",a[180]=De(h0(p)),t[181]="LDA",a[181]=se(h0(p)),t[182]="LDX",a[182]=ke(h0(A)),t[183]="uLAX",a[183]=_e(h0(A)),t[184]="CLV",a[184]=ne(),t[185]="LDA",a[185]=se(f0(A)),t[186]="TSX",a[186]=qe(),t[187]="uLAS",a[187]=en(f0(A)),t[188]="LDY",a[188]=De(f0(p)),t[189]="LDA",a[189]=se(f0(p)),t[190]="LDX",a[190]=ke(f0(A)),t[191]="uLAX",a[191]=_e(f0(A)),t[192]="CPY",a[192]=tt(o0),t[193]="CMP",a[193]=ie(X0),t[194]="uNOP",a[194]=P0(o0),t[195]="uDCP",a[195]=me(S),t[196]="CPY",a[196]=tt(D0),t[197]="CMP",a[197]=ie(D0),t[198]="DEC",a[198]=Me(R),t[199]="uDCP",a[199]=me(R),t[200]="INY",a[200]=Ge(),t[201]="CMP",a[201]=ie(o0),t[202]="DEX",a[202]=Q0(),t[203]="uSBX",a[203]=nn(o0),t[204]="CPY",a[204]=tt(B0),t[205]="CMP",a[205]=ie(B0),t[206]="DEC",a[206]=Me(k),t[207]="uDCP",a[207]=me(k),t[208]="BNE",a[208]=oe(X,0),t[209]="CMP",a[209]=ie(A0),t[210]="uKIL",a[210]=J0(),t[211]="uDCP",a[211]=me(q),t[212]="uNOP",a[212]=P0(h0(p)),t[213]="CMP",a[213]=ie(h0(p)),t[214]="DEC",a[214]=Me(u(p)),t[215]="uDCP",a[215]=me(u(p)),t[216]="CLD",a[216]=$0(),t[217]="CMP",a[217]=ie(f0(A)),t[218]="uNOP",a[218]=P0(r0),t[219]="uDCP",a[219]=me(r(A)),t[220]="uNOP",a[220]=P0(f0(p)),t[221]="CMP",a[221]=ie(f0(p)),t[222]="DEC",a[222]=Me(r(p)),t[223]="uDCP",a[223]=me(r(p)),t[224]="CPX",a[224]=et(o0),t[225]="SBC",a[225]=te(X0),t[226]="uNOP",a[226]=P0(o0),t[227]="uISB",a[227]=be(S),t[228]="CPX",a[228]=et(D0),t[229]="SBC",a[229]=te(D0),t[230]="INC",a[230]=Fe(R),t[231]="uISB",a[231]=be(R),t[232]="INX",a[232]=K0(),t[233]="SBC",a[233]=te(o0),t[234]="NOP",a[234]=xe(),t[235]="SBC",a[235]=te(o0),t[236]="CPX",a[236]=et(B0),t[237]="SBC",a[237]=te(B0),t[238]="INC",a[238]=Fe(k),t[239]="uISB",a[239]=be(k),t[240]="BEQ",a[240]=oe(X,1),t[241]="SBC",a[241]=te(A0),t[242]="uKIL",a[242]=J0(),t[243]="uISB",a[243]=be(q),t[244]="uNOP",a[244]=P0(h0(p)),t[245]="SBC",a[245]=te(h0(p)),t[246]="INC",a[246]=Fe(u(p)),t[247]="uISB",a[247]=be(u(p)),t[248]="SED",a[248]=Oe(),t[249]="SBC",a[249]=te(f0(A)),t[250]="uNOP",a[250]=P0(r0),t[251]="uISB",a[251]=be(r(A)),t[252]="uNOP",a[252]=P0(f0(p)),t[253]="SBC",a[253]=te(f0(p)),t[254]="INC",a[254]=Fe(r(p)),t[255]="uISB",a[255]=be(r(p));function P(){return r0(function(){Y(o>127),o=o<<1&255,L(o),O(o)})}function L0(){return r0(function(){_=0})}function $0(){return r0(function(){N=0})}function O0(){return r0(function(){g=0})}function ne(){return r0(function(){W=0})}function Q0(){return r0(function(){b=b-1&255,L(b),O(b)})}function ee(){return r0(function(){x=x-1&255,L(x),O(x)})}function K0(){return r0(function(){b=b+1&255,L(b),O(b)})}function Ge(){return r0(function(){x=x+1&255,L(x),O(x)})}function G(){return r0(function(){_=o&1,o>>>=1,L(o),f=0})}function xe(){return r0(function(){})}function M0(){return r0(function(){var m=o>127;o=(o<<1|_)&255,Y(m),L(o),O(o)})}function Se(){return r0(function(){var m=o&1;o=o>>>1|_<<7,Y(m),L(o),O(o)})}function Qe(){return r0(function(){_=1})}function Oe(){return r0(function(){N=1})}function ge(){return r0(function(){g=1})}function pe(){return r0(function(){b=o,L(b),O(b)})}function ue(){return r0(function(){x=o,L(x),O(x)})}function qe(){return r0(function(){b=l,L(b),O(b)})}function Pe(){return r0(function(){o=b,L(o),O(o)})}function $t(){return r0(function(){l=b})}function Jt(){return r0(function(){o=x,L(o),O(o)})}function J0(){return[U,function(){H0()},function(){a0--}]}function P0(m){return m(function(){z("NOP/DOP")})}function re(m){return m(function(){if(N){var h=D,j=(o&15)+(h&15)+_;j>9&&(j+=6);var g0=(o>>4)+(h>>4)+(j>15?1:0)<<4;L(o+h+_&255),O(g0),k0((o^g0)&~(o^h)&128),g0>159&&(g0+=96),Y(g0>255),o=(g0|j&15)&255}else{var C0=o+D+_;Y(C0>255),k0((o^C0)&(D^C0)&128),o=C0&255,L(o),O(o)}})}function ae(m){return m(function(){o&=D,L(o),O(o)})}function St(m){return m(function(){var h=D;L(o&h),k0(h&64),O(h)})}function ie(m){return m(function(){var h=o-D&255;Y(o>=D),L(h),O(h)})}function et(m){return m(function(){var h=b-D&255;Y(b>=D),L(h),O(h)})}function tt(m){return m(function(){var h=x-D&255;Y(x>=D),L(h),O(h)})}function fe(m){return m(function(){o^=D,L(o),O(o)})}function se(m){return m(function(){o=D,L(o),O(o)})}function ke(m){return m(function(){b=D,L(b),O(b)})}function De(m){return m(function(){x=D,L(x),O(x)})}function ce(m){return m(function(){o|=D,L(o),O(o)})}function te(m){return m(function(){if(N){var h=D,j=(o&15)-(h&15)-(1-_),g0=(o>>4)-(h>>4)-(j<0?1:0);j<0&&(j-=6),g0<0&&(g0-=6);var C0=o-h-(1-_);Y(~C0&256),k0((o^h)&(o^C0)&128),L(C0&255),O(C0),o=(g0<<4|j&15)&255}else h=~D&255,C0=o+h+_,Y(C0>255),k0((o^C0)&(h^C0)&128),o=C0&255,L(o),O(o)})}function gt(m){return m(function(){z("ANC"),o&=D,L(o),f=_=o&128?1:0})}function Gt(m){return m(function(){z("ANE")})}function Qt(m){return m(function(){z("ARR");var h=o&D,j=_?128:0;h=h>>>1|j,o=h,L(h),O(h);var g0=o&96;g0==96?(_=1,W=0):g0==0?(_=0,W=0):g0==32?(_=0,W=1):g0==64&&(_=1,W=1)})}function qt(m){return m(function(){z("ASR");var h=o&D;_=h&1,h=h>>>1,o=h,L(h),f=0})}function en(m){return m(function(){z("LAS");var h=l&D;o=h,b=h,l=h,L(h),O(h)})}function _e(m){return m(function(){z("LAX");var h=D;o=h,b=h,L(h),O(h)})}function tn(m){return m(function(){z("LXA");var h=o&D;o=h,b=h,L(h),O(h)})}function nn(m){return m(function(){z("SBX");var h=o&b,j=D,g0=h-j&255;b=g0,Y(h>=j),L(g0),O(g0)})}function le(m){return m(function(){D=o})}function nt(m){return m(function(){D=b})}function rt(m){return m(function(){D=x})}function Ee(m){return m(function(){z("SAX"),D=o&b})}function pt(m){return m(function(){z("SHA"),D=o&b&(H>>>8)+1&255})}function rn(m){return m(function(){z("SHS");var h=o&b;l=h,D=h&(H>>>8)+1&255})}function an(m){return m(function(){z("SHX"),D=b&(H>>>8)+1&255})}function fn(m){return m(function(){z("SHY"),D=x&(H>>>8)+1&255})}function Ze(m){return m(function(){Y(D>127);var h=D<<1&255;D=h,L(h),O(h)})}function Me(m){return m(function(){var h=D-1&255;D=h,L(h),O(h)})}function Fe(m){return m(function(){var h=D+1&255;D=h,L(h),O(h)})}function Te(m){return m(function(){_=D&1,D>>>=1,L(D),f=0})}function Ue(m){return m(function(){var h=D>127,j=(D<<1|_)&255;D=j,Y(h),L(j),O(j)})}function Xe(m){return m(function(){var h=D&1,j=D>>>1|_<<7;D=j,Y(h),L(j),O(j)})}function me(m){return m(function(){z("DCP");var h=D-1&255;D=h,h=o-h,Y(h>=0),L(h),O(h)})}function be(m){return m(function(){if(z("ISB"),D=D+1&255,N){var h=D,j=(o&15)-(h&15)-(1-_),g0=(o>>4)-(h>>4)-(j<0?1:0);j<0&&(j-=6),g0<0&&(g0-=6);var C0=o-h-(1-_);Y(~C0&256),k0((o^h)&(o^C0)&128),L(C0&255),O(C0),o=(g0<<4|j&15)&255}else h=~D&255,C0=o+h+_,Y(C0>255),k0((o^C0)&(h^C0)&128),o=C0&255,L(o),O(o)})}function de(m){return m(function(){z("RLA");var h=D,j=_;Y(h&128),h=(h<<1|j)&255,D=h,o&=h,L(h),O(h)})}function he(m){return m(function(){z("RRA");var h=D,j=_?128:0;if(Y(h&1),h=h>>>1|j,D=h,N){var g0=D,C0=(o&15)+(g0&15)+_;C0>9&&(C0+=6);var we=(o>>4)+(g0>>4)+(C0>15?1:0)<<4;L(o+g0+_&255),O(we),k0((o^we)&~(o^g0)&128),we>159&&(we+=96),Y(we>255),o=(we|C0&15)&255}else{var He=o+D+_;Y(He>255),k0((o^He)&(D^He)&128),o=He&255,L(o),O(o)}})}function Ae(m){return m(function(){z("SLO");var h=D;Y(h&128),h=h<<1&255,D=h,h=o|h,o=h,L(h),O(h)})}function Ce(m){return m(function(){z("SRE");var h=D;Y(h&1),h=h>>>1,D=h,h=(o^h)&255,o=h,L(h),O(h)})}function sn(){return[U,v0,function(){J(o)},y]}function cn(){return[U,v0,function(){J(l0())},y]}function on(){return[U,v0,S0,function(){o=n0(),L(o),O(o)},y]}function xn(){return[U,v0,S0,function(){I0(n0())},y]}function un(){return[U,I,S0,function(){J(i>>>8&255)},function(){J(i&255)},U0,function(){i=t0,y()}]}function ln(){return[U,i0,function(){C.debug&&C.breakpoint("BRK "+D),J(i>>>8&255)},function(){J(i&255)},function(){J(l0())},function(){t0=e.read(p0)},function(){t0|=e.read(p0+1)<<8},function(){i=t0,g=1,y()}]}function mn(){return[U,i0,function(){C.debug&&C.breakpoint("IRQ "+D),J(i>>>8&255)},function(){J(i&255)},function(){J(l0()&-17)},function(){t0=e.read(p0)},function(){t0|=e.read(p0+1)<<8},function(){i=t0,y()}]}function bn(){return[U,i0,function(){C.debug&&C.breakpoint("NMI "+D),J(i>>>8&255)},function(){J(i&255)},function(){J(l0()&-17)},function(){t0=e.read(N0)},function(){t0|=e.read(N0+1)<<8},function(){i=t0,y()}]}function dn(){return[U,v0,S0,function(){I0(n0())},function(){t0=n0()},function(){t0|=n0()<<8},function(){i=t0,y()}]}function hn(){return[U,v0,S0,function(){t0=n0()},function(){t0|=n0()<<8},function(){i=t0,i0()},y]}function An(){return[U,I,U0,function(){i=t0,y()}]}function Cn(){return[U,T0,w0,b0,function(){c0(),E0()},function(){i=H,y()}]}function oe(m,h){var j;return m===X?j=function(){return B===h}:m===V0?j=function(){return f===h}:m===m0?j=function(){return _===h}:j=function(){return W===h},[U,u0,function(){j()?(v0(),Z()):y()},function(){x0?(v0(),e0()):y()},y]}this.saveState=function(){return{PC:i-1&65535,A:o,X:b,Y:x,SP:l,N:f,V:W,D:N,I:g,Z:B,C:_,T:a0,o:_0,R:n?1:0,d:D,AD:t0,BA:H,BC:K?1:0,IA:s,bo:c,boa:x0}},this.loadState=function(m){i=m.PC+1&65535,o=m.A,b=m.X,x=m.Y,l=m.SP,f=m.N,W=m.V,N=m.D,g=m.I,B=m.Z,_=m.C,a0=m.T,_0=m.o,n=!!m.R,D=m.d,t0=m.AD,H=m.BA,K=!!m.BC,s=m.IA,c=m.bo,x0=m.boa,d=_0<0?[U]:a[_0]},this.toString=function(){return"CPU PC: "+i.toString(16)+" op: "+_0.toString()+" T: "+a0+" data: "+D+` +import{a as it,b as ft,c as st}from"./chunk-UXRCACYH.js";import{E as wt,Q as kt,R as Dt,U as Ye,X as Rt,Y as at,ba as Bt,g as $,j as _t,s as Ve}from"./chunk-V6TNHL6H.js";var gn=[{mn:"BRK",am:"",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:"SI"},{mn:"ORA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHP",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"ORA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BPL",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ORA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"ORA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SLO",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"JSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:"S"},{mn:"AND",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BIT",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PLP",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SCZIDVN"},{mn:"AND",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"BIT",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BMI",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"AND",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"SEC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"AND",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RLA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTI",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"SCZIDVN"},{mn:"EOR",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHA",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"EOR",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ASR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"JMP",am:"AAAA",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"EOR",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BVC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"EOR",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"EOR",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SRE",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTS",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"S"},{mn:"ADC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"PLA",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SAZN"},{mn:"ADC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ARR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"JMP",am:"(AAAA)",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:""},{mn:"ADC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BVS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ADC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SEI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"ADC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RRA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"STA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"DEY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"TXA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ANE",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"BCC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"STA",am:"(aa),y",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SHA",am:"(aa),y",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa,y",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:""},{mn:"TYA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STA",am:"AAAA,y",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"TXS",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"S"},{mn:"SHS",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:"S"},{mn:"SHY",am:"AAAA,x",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA,x",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHX",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHA",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"LDY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"TAY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"TAX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LXA",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"BCS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"LDA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"LAX",am:"(aa),y",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa,y",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"CLV",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"V"},{mn:"LDA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"TSX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAS",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"SAXZN"},{mn:"LDY",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"CPY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"INY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"CMP",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBX",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"XCZN"},{mn:"CPY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"BNE",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"CMP",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"CZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"DCP",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CLD",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"CMP",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"CPX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"INX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"CPX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BEQ",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"SBC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"ISB",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SED",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"SBC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"}];function ct(C,e,n,i){var l=gn[e];if(l==null)return{line:"???",nbytes:1,isaddr:!1};var o=l.mn,b=l.am,x=!1;if(b=="branch"){var f=n<128?C+2+n:C+2-(256-n);f&=65535,b="$"+$(f,4),x=!0}else b=b.replace("aa","$"+$(n,2)),b=b.replace("AAAA","$"+$(n+(i<<8),4)),b.indexOf("#")<0&&b.indexOf("$")>=0&&(x=!0);return{line:l.mn+" "+b,nbytes:l.nb,isaddr:x,iscall:l.mn=="JSR"}}function pn(C){let e=C;if(!e||typeof e.mem_read!="function"||typeof e.mem_write!="function"||typeof e.io_read!="function"||typeof e.io_write!="function")throw"Z80: Core object is missing required functions.";let n=0,i=0,l=0,o=0,b=0,x=0,f=0,W=0,N=0,g=0,B=0,_=0,a0=0,_0=0,d=0,D=0,t0=0,H=0,K=0,s=0,c={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},x0={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},N0=0,T=0,p0=0,p=!1,A=!1,V0=!1,M=0;function X(){return{PC:s,SP:K,IX:d,IY:D,AF:(n<<8)+U0(),BC:(i<<8)+l,DE:(o<<8)+b,HL:(x<<8)+f,AF_:(W<<8)+Y0(),BC_:(N<<8)+g,DE_:(B<<8)+_,HL_:(a0<<8)+_0,IR:(t0<<8)+H,im:N0,iff1:T,iff2:p0,halted:p,do_delayed_di:A,do_delayed_ei:V0,cycle_counter:M}}function m0(t){s=t.PC,K=t.SP,d=t.IX,D=t.IY,n=t.AF>>8&255,F0(t.AF),i=t.BC>>8&255,l=t.BC&255,o=t.DE>>8&255,b=t.DE&255,x=t.HL>>8&255,f=t.HL&255,W=t.AF_>>8&255,R0(t.AF_),N=t.BC_>>8&255,g=t.BC_&255,B=t.DE_>>8&255,_=t.DE_&255,a0=t.HL_>>8&255,_0=t.HL_&255,t0=t.IR>>8&255,H=t.IR&255,N0=t.im,T=t.iff1,p0=t.iff2,p=t.halted,A=t.do_delayed_di,V0=t.do_delayed_ei,M=t.cycle_counter}let U=function(){K=0,s=0,n=0,H=0,F0(0),N0=0,T=0,p0=0,p=!1,A=!1,V0=!1,M=0},y=function(){if(p)return 1;var t=!1,a=!1;A?(A=!1,t=!0):V0&&(V0=!1,a=!0),H=H&128|(H&127)+1&127;var P=e.mem_read(s);u0(P),s=s+1&65535,t?(T=0,p0=0):a&&(T=1,p0=1);var L0=M;return M=0,L0},v0=function(t,a){if(t)return H=H&128|(H&127)+1&127,p=!1,p0=T,T=0,E0(s),s=102,M+=11,!0;if(T){if(H=H&128|(H&127)+1&127,p=!1,T=0,p0=0,N0===0)s=s-1&65535,u0(a),s=s+1&65535,M+=2;else if(N0===1)E0(s),s=56,M+=13;else if(N0===2){E0(s);var P=t0<<8|a;s=e.mem_read(P)|e.mem_read(P+1&65535)<<8,M+=19}return!0}},u0=function(t){var a=function(O0){return(O0&7)===0?i:(O0&7)===1?l:(O0&7)===2?o:(O0&7)===3?b:(O0&7)===4?x:(O0&7)===5?f:(O0&7)===6?e.mem_read(f|x<<8):n};if(t===118)p=!0;else if(t>=64&&t<128){var P=a(t);(t&56)>>>3?(t&56)>>>3===1?l=P:(t&56)>>>3===2?o=P:(t&56)>>>3===3?b=P:(t&56)>>>3===4?x=P:(t&56)>>>3===5?f=P:(t&56)>>>3===6?e.mem_write(f|x<<8,P):(t&56)>>>3===7&&(n=P):i=P}else if(t>=128&&t<192){var P=a(t),L0=[c0,i0,E,w,s0,e0,Z,F];L0[(t&56)>>>3](P)}else{var $0=v[t];$0()}M+=u[t]},I=function(t){return t&=255,t&128&&(t=-((255&~t)+1)),t},U0=function(){return c.S<<7|c.Z<<6|c.Y<<5|c.H<<4|c.X<<3|c.P<<2|c.N<<1|c.C},Y0=function(){return x0.S<<7|x0.Z<<6|x0.Y<<5|x0.H<<4|x0.X<<3|x0.P<<2|x0.N<<1|x0.C},F0=function(t){c.S=(t&128)>>>7,c.Z=(t&64)>>>6,c.Y=(t&32)>>>5,c.H=(t&16)>>>4,c.X=(t&8)>>>3,c.P=(t&4)>>>2,c.N=(t&2)>>>1,c.C=t&1},R0=function(t){x0.S=(t&128)>>>7,x0.Z=(t&64)>>>6,x0.Y=(t&32)>>>5,x0.H=(t&16)>>>4,x0.X=(t&8)>>>3,x0.P=(t&4)>>>2,x0.N=(t&2)>>>1,x0.C=t&1},Q=function(t){c.Y=(t&32)>>>5,c.X=(t&8)>>>3},b0=function(t){var a=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];return a[t]},E0=function(t){K=K-1&65535,e.mem_write(K,(t&65280)>>>8),K=K-1&65535,e.mem_write(K,t&255)},d0=function(){var t=e.mem_read(K)&255;return K=K+1&65535,t|=e.mem_read(K)<<8,K=K+1&65535,t},y0=function(t){t?(s=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s-1&65535):s=s+2&65535},W0=function(t){if(t){M+=5;var a=I(e.mem_read(s+1&65535));s=s+a+1&65535}else s=s+1&65535},Z0=function(t){t?(M+=7,E0(s+3&65535),s=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s-1&65535):s=s+2&65535},T0=function(t){t&&(M+=6,s=d0()-1&65535)},w0=function(t){E0(s+1&65535),s=t-1&65535},c0=function(t){var a=n+t;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)+(n&15)&16?1:0,c.P=(n&128)===(t&128)&&(n&128)!==(a&128)?1:0,c.N=0,c.C=a&256?1:0,n=a&255,Q(n)},i0=function(t){var a=n+t+c.C;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)+(n&15)+c.C&16?1:0,c.P=(n&128)===(t&128)&&(n&128)!==(a&128)?1:0,c.N=0,c.C=a&256?1:0,n=a&255,Q(n)},E=function(t){var a=n-t;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(n&15)-(t&15)&16?1:0,c.P=(n&128)!==(t&128)&&(n&128)!==(a&128)?1:0,c.N=1,c.C=a&256?1:0,n=a&255,Q(n)},w=function(t){var a=n-t-c.C;c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(n&15)-(t&15)-c.C&16?1:0,c.P=(n&128)!==(t&128)&&(n&128)!==(a&128)?1:0,c.N=1,c.C=a&256?1:0,n=a&255,Q(n)},F=function(t){var a=n;E(t),n=a,Q(t)},s0=function(t){n&=t&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=1,c.P=b0(n),c.N=0,c.C=0,Q(n)},Z=function(t){n=(t|n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n),c.N=0,c.C=0,Q(n)},e0=function(t){n=(t^n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n),c.N=0,c.C=0,Q(n)},L=function(t){var a=t+1;return c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)===15?1:0,c.P=t===127?1:0,c.N=0,a&=255,Q(a),a},O=function(t){var a=t-1;return c.S=a&128?1:0,c.Z=a&255?0:1,c.H=(t&15)===0?1:0,c.P=t===128?1:0,c.N=1,a&=255,Q(a),a},k0=function(t){var a=f|x<<8,P=a+t;c.N=0,c.C=P&65536?1:0,c.H=(a&4095)+(t&4095)&4096?1:0,f=P&255,x=(P&65280)>>>8,Q(x)},Y=function(t){t+=c.C;var a=f|x<<8,P=a+t;c.S=P&32768?1:0,c.Z=P&65535?0:1,c.H=(a&4095)+(t&4095)&4096?1:0,c.P=(a&32768)===(t&32768)&&(P&32768)!==(a&32768)?1:0,c.N=0,c.C=P&65536?1:0,f=P&255,x=P>>>8&255,Q(x)},n0=function(t){t+=c.C;var a=f|x<<8,P=a-t;c.S=P&32768?1:0,c.Z=P&65535?0:1,c.H=(a&4095)-(t&4095)&4096?1:0,c.P=(a&32768)!==(t&32768)&&(P&32768)!==(a&32768)?1:0,c.N=1,c.C=P&65536?1:0,f=P&255,x=P>>>8&255,Q(x)},S0=function(t){var a=e.io_read(t);return c.S=a&128?1:0,c.Z=a?0:1,c.H=0,c.P=b0(a)?1:0,c.N=0,Q(a),a},J=function(){n!==128&&(n=I(n),n=-n&255),c.S=n&128?1:0,c.Z=n?0:1,c.H=(-n&15)>0?1:0,c.P=n===128?1:0,c.N=1,c.C=n?1:0,Q(n)},l0=function(){var t=e.mem_read(f|x<<8);e.mem_write(b|o<<8,t);var a=(b|o<<8)+1;b=a&255,o=(a&65280)>>>8,a=(f|x<<8)+1,f=a&255,x=(a&65280)>>>8,a=(l|i<<8)-1,l=a&255,i=(a&65280)>>>8,c.H=0,c.P=l||i?1:0,c.N=0,c.Y=(n+t&2)>>>1,c.X=(n+t&8)>>>3},I0=function(){var t=c.C,a=e.mem_read(f|x<<8);F(a),c.C=t,c.Y=(n-a-c.H&2)>>>1,c.X=(n-a-c.H&8)>>>3;var P=(f|x<<8)+1;f=P&255,x=(P&65280)>>>8,P=(l|i<<8)-1,l=P&255,i=(P&65280)>>>8,c.P=P?1:0},z=function(){i=O(i),e.mem_write(f|x<<8,e.io_read(i<<8|l));var t=(f|x<<8)+1;f=t&255,x=(t&65280)>>>8,c.N=1},H0=function(){e.io_write(i<<8|l,e.mem_read(f|x<<8));var t=(f|x<<8)+1;f=t&255,x=(t&65280)>>>8,i=O(i),c.N=1},r0=function(){c.N=0,c.H=0;var t=e.mem_read(f|x<<8);e.mem_write(b|o<<8,t);var a=(b|o<<8)-1;b=a&255,o=(a&65280)>>>8,a=(f|x<<8)-1,f=a&255,x=(a&65280)>>>8,a=(l|i<<8)-1,l=a&255,i=(a&65280)>>>8,c.P=l||i?1:0,c.Y=(n+t&2)>>>1,c.X=(n+t&8)>>>3},o0=function(){var t=c.C,a=e.mem_read(f|x<<8);F(a),c.C=t,c.Y=(n-a-c.H&2)>>>1,c.X=(n-a-c.H&8)>>>3;var P=(f|x<<8)-1;f=P&255,x=(P&65280)>>>8,P=(l|i<<8)-1,l=P&255,i=(P&65280)>>>8,c.P=P?1:0},D0=function(){i=O(i),e.mem_write(f|x<<8,e.io_read(i<<8|l));var t=(f|x<<8)-1;f=t&255,x=(t&65280)>>>8,c.N=1},B0=function(){e.io_write(i<<8|l,e.mem_read(f|x<<8));var t=(f|x<<8)-1;f=t&255,x=(t&65280)>>>8,i=O(i),c.N=1},X0=function(t){return c.N=0,c.H=0,c.C=(t&128)>>>7,t=(t<<1|c.C)&255,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},f0=function(t){return c.N=0,c.H=0,c.C=t&1,t=t>>>1&127|c.C<<7,c.Z=t&255?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t&255},h0=function(t){c.N=0,c.H=0;var a=c.C;return c.C=(t&128)>>>7,t=(t<<1|a)&255,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},A0=function(t){c.N=0,c.H=0;var a=c.C;return c.C=t&1,t=t>>>1&127|a<<7,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},z0=function(t){return c.N=0,c.H=0,c.C=(t&128)>>>7,t=t<<1&255,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},V=function(t){return c.N=0,c.H=0,c.C=t&1,t=t>>>1&127|t&128,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},q0=function(t){return c.N=0,c.H=0,c.C=(t&128)>>>7,t=t<<1&255|1,c.Z=t?0:1,c.P=b0(t),c.S=t&128?1:0,Q(t),t},j0=function(t){return c.N=0,c.H=0,c.C=t&1,t=t>>>1&127,c.Z=t?0:1,c.P=b0(t),c.S=0,Q(t),t},G0=function(t){c.N=0;var a=d+t;c.C=a&65536?1:0,c.H=(d&4095)+(t&4095)&4096?1:0,Q((a&65280)>>>8),d=a&65535},v=[];v[0]=function(){},v[1]=function(){s=s+1&65535,l=e.mem_read(s),s=s+1&65535,i=e.mem_read(s)},v[2]=function(){e.mem_write(l|i<<8,n)},v[3]=function(){var t=l|i<<8;t+=1,l=t&255,i=(t&65280)>>>8},v[4]=function(){i=L(i)},v[5]=function(){i=O(i)},v[6]=function(){s=s+1&65535,i=e.mem_read(s)},v[7]=function(){var t=c.S,a=c.Z,P=c.P;n=X0(n),c.S=t,c.Z=a,c.P=P},v[8]=function(){var t=n;n=W,W=t,t=U0(),F0(Y0()),R0(t)},v[9]=function(){k0(l|i<<8)},v[10]=function(){n=e.mem_read(l|i<<8)},v[11]=function(){var t=l|i<<8;t-=1,l=t&255,i=(t&65280)>>>8},v[12]=function(){l=L(l)},v[13]=function(){l=O(l)},v[14]=function(){s=s+1&65535,l=e.mem_read(s)},v[15]=function(){var t=c.S,a=c.Z,P=c.P;n=f0(n),c.S=t,c.Z=a,c.P=P},v[16]=function(){i=i-1&255,W0(i!==0)},v[17]=function(){s=s+1&65535,b=e.mem_read(s),s=s+1&65535,o=e.mem_read(s)},v[18]=function(){e.mem_write(b|o<<8,n)},v[19]=function(){var t=b|o<<8;t+=1,b=t&255,o=(t&65280)>>>8},v[20]=function(){o=L(o)},v[21]=function(){o=O(o)},v[22]=function(){s=s+1&65535,o=e.mem_read(s)},v[23]=function(){var t=c.S,a=c.Z,P=c.P;n=h0(n),c.S=t,c.Z=a,c.P=P},v[24]=function(){var t=I(e.mem_read(s+1&65535));s=s+t+1&65535},v[25]=function(){k0(b|o<<8)},v[26]=function(){n=e.mem_read(b|o<<8)},v[27]=function(){var t=b|o<<8;t-=1,b=t&255,o=(t&65280)>>>8},v[28]=function(){b=L(b)},v[29]=function(){b=O(b)},v[30]=function(){s=s+1&65535,b=e.mem_read(s)},v[31]=function(){var t=c.S,a=c.Z,P=c.P;n=A0(n),c.S=t,c.Z=a,c.P=P},v[32]=function(){W0(!c.Z)},v[33]=function(){s=s+1&65535,f=e.mem_read(s),s=s+1&65535,x=e.mem_read(s)},v[34]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,f),e.mem_write(t+1&65535,x)},v[35]=function(){var t=f|x<<8;t+=1,f=t&255,x=(t&65280)>>>8},v[36]=function(){x=L(x)},v[37]=function(){x=O(x)},v[38]=function(){s=s+1&65535,x=e.mem_read(s)},v[39]=function(){var t=n;c.N?((c.H||(n&15)>9)&&(t-=6),(c.C||n>153)&&(t-=96)):((c.H||(n&15)>9)&&(t+=6),(c.C||n>153)&&(t+=96)),c.S=t&128?1:0,c.Z=t&255?0:1,c.H=n&16^t&16?1:0,c.P=b0(t&255),c.C=c.C||n>153?1:0,n=t&255,Q(n)},v[40]=function(){W0(!!c.Z)},v[41]=function(){k0(f|x<<8)},v[42]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,f=e.mem_read(t),x=e.mem_read(t+1&65535)},v[43]=function(){var t=f|x<<8;t-=1,f=t&255,x=(t&65280)>>>8},v[44]=function(){f=L(f)},v[45]=function(){f=O(f)},v[46]=function(){s=s+1&65535,f=e.mem_read(s)},v[47]=function(){n=~n&255,c.N=1,c.H=1,Q(n)},v[48]=function(){W0(!c.C)},v[49]=function(){K=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s+2&65535},v[50]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,n)},v[51]=function(){K=K+1&65535},v[52]=function(){var t=f|x<<8;e.mem_write(t,L(e.mem_read(t)))},v[53]=function(){var t=f|x<<8;e.mem_write(t,O(e.mem_read(t)))},v[54]=function(){s=s+1&65535,e.mem_write(f|x<<8,e.mem_read(s))},v[55]=function(){c.N=0,c.H=0,c.C=1,Q(n)},v[56]=function(){W0(!!c.C)},v[57]=function(){k0(K)},v[58]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,n=e.mem_read(t)},v[59]=function(){K=K-1&65535},v[60]=function(){n=L(n)},v[61]=function(){n=O(n)},v[62]=function(){n=e.mem_read(s+1&65535),s=s+1&65535},v[63]=function(){c.N=0,c.H=c.C,c.C=c.C?0:1,Q(n)},v[192]=function(){T0(!c.Z)},v[193]=function(){var t=d0();l=t&255,i=(t&65280)>>>8},v[194]=function(){y0(!c.Z)},v[195]=function(){s=e.mem_read(s+1&65535)|e.mem_read(s+2&65535)<<8,s=s-1&65535},v[196]=function(){Z0(!c.Z)},v[197]=function(){E0(l|i<<8)},v[198]=function(){s=s+1&65535,c0(e.mem_read(s))},v[199]=function(){w0(0)},v[200]=function(){T0(!!c.Z)},v[201]=function(){s=d0()-1&65535},v[202]=function(){y0(!!c.Z)},v[203]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=(t&56)>>>3,P=t&7;if(t<64){var L0=[X0,f0,h0,A0,z0,V,q0,j0];P===0?i=L0[a](i):P===1?l=L0[a](l):P===2?o=L0[a](o):P===3?b=L0[a](b):P===4?x=L0[a](x):P===5?f=L0[a](f):P===6?e.mem_write(f|x<<8,L0[a](e.mem_read(f|x<<8))):P===7&&(n=L0[a](n))}else t<128?(P===0?c.Z=i&1<>>8},v[210]=function(){y0(!c.C)},v[211]=function(){s=s+1&65535,e.io_write(n<<8|e.mem_read(s),n)},v[212]=function(){Z0(!c.C)},v[213]=function(){E0(b|o<<8)},v[214]=function(){s=s+1&65535,E(e.mem_read(s))},v[215]=function(){w0(16)},v[216]=function(){T0(!!c.C)},v[217]=function(){var t=i;i=N,N=t,t=l,l=g,g=t,t=o,o=B,B=t,t=b,b=_,_=t,t=x,x=a0,a0=t,t=f,f=_0,_0=t},v[218]=function(){y0(!!c.C)},v[219]=function(){s=s+1&65535,n=e.io_read(n<<8|e.mem_read(s))},v[220]=function(){Z0(!!c.C)},v[221]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=k[t];a?(a(),M+=q[t]):(s=s-1&65535,M+=u[0])},v[222]=function(){s=s+1&65535,w(e.mem_read(s))},v[223]=function(){w0(24)},v[224]=function(){T0(!c.P)},v[225]=function(){var t=d0();f=t&255,x=(t&65280)>>>8},v[226]=function(){y0(!c.P)},v[227]=function(){var t=e.mem_read(K);e.mem_write(K,f),f=t,t=e.mem_read(K+1&65535),e.mem_write(K+1&65535,x),x=t},v[228]=function(){Z0(!c.P)},v[229]=function(){E0(f|x<<8)},v[230]=function(){s=s+1&65535,s0(e.mem_read(s))},v[231]=function(){w0(32)},v[232]=function(){T0(!!c.P)},v[233]=function(){s=f|x<<8,s=s-1&65535},v[234]=function(){y0(!!c.P)},v[235]=function(){var t=o;o=x,x=t,t=b,b=f,f=t},v[236]=function(){Z0(!!c.P)},v[237]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=R[t];a?(a(),M+=r[t]):M+=u[0]},v[238]=function(){s=s+1&65535,e0(e.mem_read(s))},v[239]=function(){w0(40)},v[240]=function(){T0(!c.S)},v[241]=function(){var t=d0();F0(t&255),n=(t&65280)>>>8},v[242]=function(){y0(!c.S)},v[243]=function(){A=!0},v[244]=function(){Z0(!c.S)},v[245]=function(){E0(U0()|n<<8)},v[246]=function(){s=s+1&65535,Z(e.mem_read(s))},v[247]=function(){w0(48)},v[248]=function(){T0(!!c.S)},v[249]=function(){K=f|x<<8},v[250]=function(){y0(!!c.S)},v[251]=function(){V0=!0},v[252]=function(){Z0(!!c.S)},v[253]=function(){H=H&128|(H&127)+1&127,s=s+1&65535;var t=e.mem_read(s),a=k[t];if(a){var P=d;d=D,a(),D=d,d=P,M+=q[t]}else s=s-1&65535,M+=u[0]},v[254]=function(){s=s+1&65535,F(e.mem_read(s))},v[255]=function(){w0(56)};let R=[];R[64]=function(){i=S0(i<<8|l)},R[65]=function(){e.io_write(i<<8|l,i)},R[66]=function(){n0(l|i<<8)},R[67]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,l),e.mem_write(t+1&65535,i)},R[68]=function(){J()},R[69]=function(){s=d0()-1&65535,T=p0},R[70]=function(){N0=0},R[71]=function(){t0=n},R[72]=function(){l=S0(i<<8|l)},R[73]=function(){e.io_write(i<<8|l,l)},R[74]=function(){Y(l|i<<8)},R[75]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,l=e.mem_read(t),i=e.mem_read(t+1&65535)},R[76]=function(){J()},R[77]=function(){s=d0()-1&65535},R[78]=function(){N0=0},R[79]=function(){H=n},R[80]=function(){o=S0(i<<8|l)},R[81]=function(){e.io_write(i<<8|l,o)},R[82]=function(){n0(b|o<<8)},R[83]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,b),e.mem_write(t+1&65535,o)},R[84]=function(){J()},R[85]=function(){s=d0()-1&65535,T=p0},R[86]=function(){N0=1},R[87]=function(){n=t0,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=p0,c.N=0,Q(n)},R[88]=function(){b=S0(i<<8|l)},R[89]=function(){e.io_write(i<<8|l,b)},R[90]=function(){Y(b|o<<8)},R[91]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,b=e.mem_read(t),o=e.mem_read(t+1&65535)},R[92]=function(){J()},R[93]=function(){s=d0()-1&65535,T=p0},R[94]=function(){N0=2},R[95]=function(){n=H,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=p0,c.N=0,Q(n)},R[96]=function(){x=S0(i<<8|l)},R[97]=function(){e.io_write(i<<8|l,x)},R[98]=function(){n0(f|x<<8)},R[99]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,f),e.mem_write(t+1&65535,x)},R[100]=function(){J()},R[101]=function(){s=d0()-1&65535,T=p0},R[102]=function(){N0=0},R[103]=function(){var t=e.mem_read(f|x<<8),a=t&15,P=n&15;t=(t&240)>>>4|P<<4,n=n&240|a,e.mem_write(f|x<<8,t),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n)?1:0,c.N=0,Q(n)},R[104]=function(){f=S0(i<<8|l)},R[105]=function(){e.io_write(i<<8|l,f)},R[106]=function(){Y(f|x<<8)},R[107]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,f=e.mem_read(t),x=e.mem_read(t+1&65535)},R[108]=function(){J()},R[109]=function(){s=d0()-1&65535,T=p0},R[110]=function(){N0=0},R[111]=function(){var t=e.mem_read(f|x<<8),a=t&240,P=n&15;t=(t&15)<<4|P,n=n&240|a>>>4,e.mem_write(f|x<<8,t),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=b0(n)?1:0,c.N=0,Q(n)},R[112]=function(){S0(i<<8|l)},R[113]=function(){e.io_write(i<<8|l,0)},R[114]=function(){n0(K)},R[115]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,K&255),e.mem_write(t+1&65535,K>>>8&255)},R[116]=function(){J()},R[117]=function(){s=d0()-1&65535,T=p0},R[118]=function(){N0=1},R[120]=function(){n=S0(i<<8|l)},R[121]=function(){e.io_write(i<<8|l,n)},R[122]=function(){Y(K)},R[123]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,K=e.mem_read(t),K|=e.mem_read(t+1&65535)<<8},R[124]=function(){J()},R[125]=function(){s=d0()-1&65535,T=p0},R[126]=function(){N0=2},R[160]=function(){l0()},R[161]=function(){I0()},R[162]=function(){z()},R[163]=function(){H0()},R[168]=function(){r0()},R[169]=function(){o0()},R[170]=function(){D0()},R[171]=function(){B0()},R[176]=function(){l0(),(i||l)&&(M+=5,s=s-2&65535)},R[177]=function(){I0(),!c.Z&&(i||l)&&(M+=5,s=s-2&65535)},R[178]=function(){z(),i&&(M+=5,s=s-2&65535)},R[179]=function(){H0(),i&&(M+=5,s=s-2&65535)},R[184]=function(){r0(),(i||l)&&(M+=5,s=s-2&65535)},R[185]=function(){o0(),!c.Z&&(i||l)&&(M+=5,s=s-2&65535)},R[186]=function(){D0(),i&&(M+=5,s=s-2&65535)},R[187]=function(){B0(),i&&(M+=5,s=s-2&65535)};let k=[];k[9]=function(){G0(l|i<<8)},k[25]=function(){G0(b|o<<8)},k[33]=function(){s=s+1&65535,d=e.mem_read(s),s=s+1&65535,d|=e.mem_read(s)<<8},k[34]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,e.mem_write(t,d&255),e.mem_write(t+1&65535,d>>>8&255)},k[35]=function(){d=d+1&65535},k[36]=function(){d=L(d>>>8)<<8|d&255},k[37]=function(){d=O(d>>>8)<<8|d&255},k[38]=function(){s=s+1&65535,d=e.mem_read(s)<<8|d&255},k[41]=function(){G0(d)},k[42]=function(){s=s+1&65535;var t=e.mem_read(s);s=s+1&65535,t|=e.mem_read(s)<<8,d=e.mem_read(t),d|=e.mem_read(t+1&65535)<<8},k[43]=function(){d=d-1&65535},k[44]=function(){d=L(d&255)|d&65280},k[45]=function(){d=O(d&255)|d&65280},k[46]=function(){s=s+1&65535,d=e.mem_read(s)&255|d&65280},k[52]=function(){s=s+1&65535;var t=I(e.mem_read(s)),a=e.mem_read(t+d&65535);e.mem_write(t+d&65535,L(a))},k[53]=function(){s=s+1&65535;var t=I(e.mem_read(s)),a=e.mem_read(t+d&65535);e.mem_write(t+d&65535,O(a))},k[54]=function(){s=s+1&65535;var t=I(e.mem_read(s));s=s+1&65535,e.mem_write(d+t&65535,e.mem_read(s))},k[57]=function(){G0(K)},k[68]=function(){i=d>>>8&255},k[69]=function(){i=d&255},k[70]=function(){s=s+1&65535;var t=I(e.mem_read(s));i=e.mem_read(d+t&65535)},k[76]=function(){l=d>>>8&255},k[77]=function(){l=d&255},k[78]=function(){s=s+1&65535;var t=I(e.mem_read(s));l=e.mem_read(d+t&65535)},k[84]=function(){o=d>>>8&255},k[85]=function(){o=d&255},k[86]=function(){s=s+1&65535;var t=I(e.mem_read(s));o=e.mem_read(d+t&65535)},k[92]=function(){b=d>>>8&255},k[93]=function(){b=d&255},k[94]=function(){s=s+1&65535;var t=I(e.mem_read(s));b=e.mem_read(d+t&65535)},k[96]=function(){d=d&255|i<<8},k[97]=function(){d=d&255|l<<8},k[98]=function(){d=d&255|o<<8},k[99]=function(){d=d&255|b<<8},k[100]=function(){},k[101]=function(){d=d&255|(d&255)<<8},k[102]=function(){s=s+1&65535;var t=I(e.mem_read(s));x=e.mem_read(d+t&65535)},k[103]=function(){d=d&255|n<<8},k[104]=function(){d=d&65280|i},k[105]=function(){d=d&65280|l},k[106]=function(){d=d&65280|o},k[107]=function(){d=d&65280|b},k[108]=function(){d=d&65280|d>>>8},k[109]=function(){},k[110]=function(){s=s+1&65535;var t=I(e.mem_read(s));f=e.mem_read(d+t&65535)},k[111]=function(){d=d&65280|n},k[112]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,i)},k[113]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,l)},k[114]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,o)},k[115]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,b)},k[116]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,x)},k[117]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,f)},k[119]=function(){s=s+1&65535;var t=I(e.mem_read(s));e.mem_write(d+t&65535,n)},k[124]=function(){n=d>>>8&255},k[125]=function(){n=d&255},k[126]=function(){s=s+1&65535;var t=I(e.mem_read(s));n=e.mem_read(d+t&65535)},k[132]=function(){c0(d>>>8&255)},k[133]=function(){c0(d&255)},k[134]=function(){s=s+1&65535;var t=I(e.mem_read(s));c0(e.mem_read(d+t&65535))},k[140]=function(){i0(d>>>8&255)},k[141]=function(){i0(d&255)},k[142]=function(){s=s+1&65535;var t=I(e.mem_read(s));i0(e.mem_read(d+t&65535))},k[148]=function(){E(d>>>8&255)},k[149]=function(){E(d&255)},k[150]=function(){s=s+1&65535;var t=I(e.mem_read(s));E(e.mem_read(d+t&65535))},k[156]=function(){w(d>>>8&255)},k[157]=function(){w(d&255)},k[158]=function(){s=s+1&65535;var t=I(e.mem_read(s));w(e.mem_read(d+t&65535))},k[164]=function(){s0(d>>>8&255)},k[165]=function(){s0(d&255)},k[166]=function(){s=s+1&65535;var t=I(e.mem_read(s));s0(e.mem_read(d+t&65535))},k[172]=function(){e0(d>>>8&255)},k[173]=function(){e0(d&255)},k[174]=function(){s=s+1&65535;var t=I(e.mem_read(s));e0(e.mem_read(d+t&65535))},k[180]=function(){Z(d>>>8&255)},k[181]=function(){Z(d&255)},k[182]=function(){s=s+1&65535;var t=I(e.mem_read(s));Z(e.mem_read(d+t&65535))},k[188]=function(){F(d>>>8&255)},k[189]=function(){F(d&255)},k[190]=function(){s=s+1&65535;var t=I(e.mem_read(s));F(e.mem_read(d+t&65535))},k[203]=function(){s=s+1&65535;var t=I(e.mem_read(s));s=s+1&65535;var a=e.mem_read(s),P;if(a<64){var L0=[X0,f0,h0,A0,z0,V,q0,j0],$0=L0[(a&56)>>>3],P=$0(e.mem_read(d+t&65535));e.mem_write(d+t&65535,P)}else{var O0=(a&56)>>>3;a<128?(c.N=0,c.H=1,c.Z=e.mem_read(d+t&65535)&1<>>8&255)},k[229]=function(){E0(d)},k[233]=function(){s=d-1&65535},k[249]=function(){K=d};let u=[4,10,7,6,4,4,7,4,4,11,7,6,4,4,7,4,8,10,7,6,4,4,7,4,12,11,7,6,4,4,7,4,7,10,16,6,4,4,7,4,7,11,16,6,4,4,7,4,7,10,13,6,11,11,10,4,7,11,13,6,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,7,7,7,7,7,7,4,7,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,5,10,10,10,10,11,7,11,5,10,10,0,10,17,7,11,5,10,10,11,10,11,7,11,5,4,10,11,10,0,7,11,5,10,10,19,10,11,7,11,5,4,10,4,10,0,7,11,5,10,10,4,10,11,7,11,5,6,10,4,10,0,7,11],r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,0,12,12,15,20,8,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],S=[8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8],q=[0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,14,20,10,8,8,11,0,0,15,20,10,8,8,11,0,0,0,0,0,23,23,19,0,0,15,0,0,0,0,0,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,8,8,8,8,8,8,19,8,8,8,8,8,8,8,19,8,19,19,19,19,19,19,0,19,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,15,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0];this.saveState=X,this.loadState=m0,this.reset=U,this.advanceInsn=y,this.interrupt=v0,this.getPC=()=>s,this.getSP=()=>K,this.getHalted=()=>p}var We=class{constructor(){this.retryInterrupts=!1;this.retryData=-1}buildCPU(){this.memBus&&this.ioBus&&!this.cpu&&(this.cpu=new pn({mem_read:e=>this.memBus.read(e),mem_write:(e,n)=>this.memBus.write(e,n),io_read:e=>this.ioBus.read(e),io_write:(e,n)=>this.ioBus.write(e,n)}))}connectMemoryBus(e){this.memBus=e,this.buildCPU()}connectIOBus(e){this.ioBus=e,this.buildCPU()}advanceInsn(){return this.retryInterrupts&&this.retryData>=0&&this.cpu.interrupt(!1,this.retryData)&&(this.retryData=-1),this.cpu.advanceInsn()}reset(){this.cpu.reset()}interrupt(e){!this.cpu.interrupt(!1,e)&&this.retryInterrupts&&(this.retryData=e)}NMI(){this.cpu.interrupt(!0,0)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.getHalted()}saveState(){return this.cpu.saveState()}loadState(e){this.cpu.loadState(e)}isStable(){return!0}};var ot=class{constructor(){this.master=new MasterChannel}start(){this.looper||(this.looper=new AudioLooper(512),this.looper.setChannel(this.master),this.looper.activate())}stop(){this.looper&&(this.looper.setChannel(null),this.looper=null)}},Nt=class{constructor(e){this.psg=new PsgDeviceChannel;this.curreg=0;this.master=e,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910),e.master.addChannel(this.psg)}reset(){for(var e=15;e>=0;e--)this.selectRegister(e),this.setData(0)}selectRegister(e){this.curreg=e&15}setData(e){this.psg.writeRegisterAY(this.curreg,e&255)}readData(){return this.psg.readRegister(this.curreg)}currentRegister(){return this.curreg}},yt=class{constructor(e){this.psg=new PsgDeviceChannel;this.master=e,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489),e.master.addChannel(this.psg)}reset(){}setData(e){this.psg.writeRegisterSN(0,e&255)}};function Fn(C){for(var e=new ot,n=1;n<=C;n++){var i=new Pn;e["pokey"+n]=i,e.master.addChannel(i)}return e}function Re(C,e){for(var n=new Uint8Array(C.length*e.length),i=0,l=0;l.5?1:0;var Y0=Re(I,U),F0=Re(U,m0),R0=[Y0,U,F0,U,I,X,m0,X],Q=ze(2),b0=ze(6),E0=ze(31),d0=ze(93),y0=Re(v0,m0),W0=Re(U,Q),Z0=Re(U,b0),T0=[M,m0,y0,F0,Q,Q,E0,W0,y,U,E0,M,b0,b0,d0,Z0],w0=new Uint8Array(16),c0=new Float32Array(4),i0=new Float32Array(4),E=new Float32Array(4),w=new Uint8Array(4),F=[M,M,M,M],s0,Z,e0,L,O=!0;this.setBufferLength=function(Y){s0=new Int32Array(Y)},this.getBuffer=function(){return s0},this.setSampleRate=function(Y){Z=Y,L=A/Y};function k0(Y){var n0=w0[8],S0=n0&B?a0:_,J,l0=Y&4,I0=l0>>1,z=l0>>2;n0&f>>z?(n0&b>>z?J=w0[l0+2]*256+w0[l0+0]+7:J=(w0[l0+2]*256+w0[l0+0]+1)*S0,i0[I0+1]=L/J,i0[I0+0]=0):(n0&b>>z?J=w0[l0+0]+4:J=(w0[l0+0]+1)*S0,i0[I0+0]=L/J,J=(w0[l0+2]+1)*S0,i0[I0+1]=L/J)}this.setRegister=function(Y,n0){if(Y&=15,n0&=255,w0[Y]!=n0)switch(w0[Y]=n0,Y){case 0:case 2:case 4:case 6:case 8:O=!0;break;case 1:case 3:case 5:case 7:E[Y>>1]=n0&15,F[Y>>1]=R0[n0>>5];break}},this.getRegister=function(Y){return Y&=15,w0[Y]},this.setTIARegister=function(Y,n0){switch(Y){case 23:case 24:w0[(Y&1)*4]=n0&31,O=!0;break;case 21:case 22:F[(Y&1)*2]=T0[n0&15];break;case 25:case 26:E[(Y&1)*2]=n0&15;break}},this.generate=function(Y){O&&(k0(0),k0(4),O=!1);for(var n0=0;n00&&l0<1&&I0>0){var z=F[J],H0=c0[J]+=l0;H0>z.length&&(H0=c0[J]=H0-Math.floor(H0/z.length)*z.length);var r0=z[Math.floor(H0)];r0&&(S0+=I0)}}S0*=64,s0[n0]=S0,s0[n0+1]=S0}}},Tn=function(C){var e,n,i=[],l=0;C.onmessage=function(o){o&&o.data&&o.data.samples&&n&&(i.push(o.data.samples),l+=o.data.samples.length)},this.setBufferLength=function(o){n=new Int16Array(o),l=0},this.getBuffer=function(){return n},this.setSampleRate=function(o){e=o,C.postMessage({sampleRate:o})},this.generate=function(o){if(lN){_0&&a0[Math.min(W-N,T)]++,t0+=(W-N-t0)*s;for(var U=x[N%T],y=0;y=o.length)){if(b=0,e.stream){var X=o;o=new Float32Array(e.bufferlen),e.stream.push(X);return}if(x[f]=o,W++,W-N>=p0){N++,g++;var m0=Date.now();m0-B>1e3&&(console.warn("SampleAudio: skipped audio buffer(s), total="+g+", fill="+(W-N)+"/"+p0+", contextRate="+e.sr+", requestedBuf="+e.bufferlen+", expectedIntervalMs="+(e.bufferlen*1e3/e.sr).toFixed(2)),B=m0)}f=(f+1)%T,o=x[f];var U=Date.now();if(U-H>N0){H=U;var y=1+c*(K-t0);y>1+x0?y=1+x0:y<1-x0&&(y=1-x0),D=y,i=d*D}}},this.feedSample=function(M,X){if(l+=M*X,n+=i*X,n>=1){for(l/=n;n>=1;)this.addSingleSample(l*i),n-=1;l*=n}},this.getStats=function(){var M=0,X=0,m0=0;if(a0)for(var U=0;U0&&U>m0&&(m0=U)}return{maxBuffers:T,targetDepth:p0,sampleRate:e.sr||0,bufferLength:e.bufferlen||0,fillHistogram:a0?a0.slice():[],meanFill:M>0?X/M:0,maxFill:m0,samples:M,skippedBuffers:g,underruns:_,fillAvg:t0,trim:D}},this.setStatsEnabled=function(M){_0=!!M,a0=_0?new Array(T+1).fill(0):null}},Ke=class{constructor(e){this.sa=new wn(e)}feedSample(e,n){this.sa.feedSample(e,n)}start(){this.sa.start()}stop(){this.sa.stop()}reset(){this.sa.reset()}getStats(){return this.sa.getStats?this.sa.getStats():null}setStatsEnabled(e){this.sa.setStatsEnabled&&this.sa.setStatsEnabled(e)}get sampleRate(){return this.sa.sr||0}},Lt=class{constructor(e,n,i){this.audioGain=1/8192;this.bufferLength=n*2,this.channels=e.generate?[e]:e,this.channels.forEach(l=>{l.setBufferLength(this.bufferLength),l.setSampleRate(i)})}generate(e){var n=this.bufferLength,i=this.channels.map(o=>o.getBuffer());this.channels.forEach(o=>{o.generate(n)});for(let o=0;ol+=b[o]),e.feedSample(l*this.audioGain,1)}}};var je=class{constructor(e,n){this.idx=0;this.sl=0;this.cur_sp=-1;this.singleFrame=!0;this.m=e,this.reset(n||1048576)}start(){this.m.connectProbe(this)}stop(){this.m.connectProbe(null)}reset(e){e&&(this.buf=new Uint32Array(e)),this.sl=0,this.cur_sp=-1,this.clear()}clear(){this.idx=0}logData(e){this.log(e)}log(e){this.idx>=this.buf.length||(this.buf[this.idx++]=e)}relog(e){this.buf[this.idx-1]=e}lastOp(){return this.idx>0?this.buf[this.idx-1]&4278190080:-1}lastAddr(){return this.idx>0?this.buf[this.idx-1]&16777215:-1}addLogBuffer(e){this.idx+e.length>this.buf.length&&(e=e.slice(0,this.buf.length-this.idx)),this.buf.set(e,this.idx),this.idx+=e.length}logClocks(e){e|=0,e>0&&(this.lastOp()==0?this.relog(this.lastAddr()+e|0):this.log(e|0))}logNewScanline(){this.log(2113929216),this.sl++}logNewFrame(){this.log(2130706432),this.sl=0,this.singleFrame&&this.clear()}logExecute(e,n){this.cur_sp!==n&&(nthis.cur_sp&&this.log(184549376|n),this.cur_sp=n),this.log(e|16777216)}logInterrupt(e){this.log(e|134217728)}logValue(e,n,i){this.log(e&65535|(n&255)<<16|i)}logRead(e,n){this.logValue(e,n,301989888)}logWrite(e,n){this.logValue(e,n,318767104)}logIORead(e,n){this.logValue(e,n,335544320)}logIOWrite(e,n){this.logValue(e,n,352321536)}logVRAMRead(e,n){this.logValue(e,n,369098752)}logVRAMWrite(e,n){this.logValue(e,n,385875968)}logIllegal(e){this.log(e|150994944)}logWait(e){this.log(e|520093696)}logDMARead(e,n){this.logValue(e,n,402653184)}logDMAWrite(e,n){this.logValue(e,n,419430400)}countEvents(e){for(var n=0,i=0;ithis.rom.length)throw new Error(`ROM too big: ${e.length} > ${this.rom.length}`);this.rom.set(e)}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0)}}loadControlsState(e){this.inputs.set(e.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}advanceCPU(){var e=this.cpu,n=1;return this.probing&&this.cpu.isStable()&&this.probe.logExecute(this.cpu.getPC(),this.cpu.getSP()),e.advanceClock?e.advanceClock():e.advanceInsn&&(n=e.advanceInsn(1)),this.probing&&this.probe.logClocks(n),n}probeMemoryBus(e){return{read:n=>{let i=e.read(n);return this.probe.logRead(n,i),i},write:(n,i)=>{this.probe.logWrite(n,i),e.write(n,i)},read32:n=>{let i=e.read32(n);return this.probe.logRead(n,i),i},write32:(n,i)=>{this.probe.logWrite(n,i),e.write32(n,i)}}}connectCPUMemoryBus(e){this.cpuMemoryBus=e,this.rewireCPUBuses()}probeIOBus(e){return{read:n=>{let i=e.read(n);return this.probe.logIORead(n,i),i},write:(n,i)=>{this.probe.logIOWrite(n,i),e.write(n,i)}}}probeDMABus(e){return{read:n=>{let i=e.read(n);return this.probe.logDMARead(n,i),i},write:(n,i)=>{this.probe.logDMAWrite(n,i),e.write(n,i)}}}connectCPUIOBus(e){this.cpuIOBus=e,this.rewireCPUBuses()}},ut=class extends xt{constructor(){super(...arguments);this.overscan=!1;this.rotate=0}getAudioParams(){return{sampleRate:this.sampleRate,stereo:!1}}connectAudio(n){this.audio=n}getVideoParams(){return{width:this.canvasWidth,height:this.numVisibleScanlines,aspect:this.aspectRatio,overscan:this.overscan,rotate:this.rotate}}connectVideo(n){this.pixels=n}},Ot=class extends ut{advanceFrame(e){this.preFrame();var n=0,i=0;this.probe.logNewFrame(),this.frameCycles=0;for(var l=0;l=64&&n<=127&&(x=Zt[n-64]),n>=160&&n<=191&&(x=Zt[n-160+64]),b++;break;case 221:case 253:var g=e==221?"ix":"iy";n==203?(x=Mt[l],f[2]=l,f[3]=i,b++):x=Et[n],x=x.replace(/[(]hl[)]/,"("+g+"+x)"),x=x.replace(/\bhl\b/,g),b++;break;default:x=Et[e];break}if((!x||!x.length)&&(x="??"),N=/^(call|rst)/.test(x),/\bxx\b/.test(x))x=x.replace(/\bxx\b/,"$"+$(f[b]+(f[b+1]<<8),4)),b+=2,W=!0;else if(/\bx\b/.test(x)){if(x.startsWith("j")){var B=n<128?C+2+n:C+2-(256-n);B&=65535,x=x.replace(/\bx\b/,"$"+$(B,4)),W=!0}else x=x.replace(/\bx\b/,"$"+$(f[b],2));b+=1}return{line:x.toUpperCase(),nbytes:b,isaddr:W,iscall:N}}function $e(){var C,e,n,i,l,o,b,x,f,W,N=1,g=2,B=4,_=8,a0=16,_0=32,d=64,D=128,t0=65534,H=65532,K=65530,s=65528,c=65526,x0=65524,N0=65522,T=0,p0,p,A,V0=[6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7,2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6,2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6],M=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7],X=[4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],m0=function(u,r,S){f|=((u^r^S^S>>1)&128)>>6},U=function(u,r,S){f|=((u^r^S^S>>1)&32768)>>14},y=function(){return(e<<8)+n},v0=function(u){e=u>>8&255,n=u&255},u0=function(u){p(--b,u&255)},I=function(u){p(--b,u&255),p(--b,u>>8&255)},U0=function(u){p(--o,u&255)},Y0=function(u){p(--o,u&255),p(--o,u>>8&255)},F0=function(){return A(b++)},R0=function(){return A(b++)*256+A(b++)},Q=function(){return A(o++)},b0=function(){return A(o++)*256+A(o++)},E0=function(u){var r=0;u&128&&(I(x),r+=2),u&64&&(I(o),r+=2),u&32&&(I(l),r+=2),u&16&&(I(i),r+=2),u&8&&(u0(W),r++),u&4&&(u0(n),r++),u&2&&(u0(e),r++),u&1&&(u0(f),r++),T+=r},d0=function(u){var r=0;u&128&&(Y0(x),r+=2),u&64&&(Y0(b),r+=2),u&32&&(Y0(l),r+=2),u&16&&(Y0(i),r+=2),u&8&&(U0(W),r++),u&4&&(U0(n),r++),u&2&&(U0(e),r++),u&1&&(U0(f),r++),T+=r},y0=function(u){var r=0;u&1&&(f=F0(),r++),u&2&&(e=F0(),r++),u&4&&(n=F0(),r++),u&8&&(W=F0(),r++),u&16&&(i=R0(),r+=2),u&32&&(l=R0(),r+=2),u&64&&(o=R0(),r+=2),u&128&&(x=R0(),r+=2),T+=r},W0=function(u){var r=0;u&1&&(f=Q(),r++),u&2&&(e=Q(),r++),u&4&&(n=Q(),r++),u&8&&(W=Q(),r++),u&16&&(i=b0(),r+=2),u&32&&(l=b0(),r+=2),u&64&&(b=b0(),r+=2),u&128&&(x=b0(),r+=2),T+=r},Z0=function(u){switch(u&15){case 0:return y();case 1:return i;case 2:return l;case 3:return o;case 4:return b;case 5:return x;case 8:return e;case 9:return n;case 10:return f;case 11:return W;default:return null}},T0=function(u,r){switch(u&15){case 0:v0(r);return;case 1:i=r;return;case 2:l=r;return;case 3:o=r;return;case 4:b=r;return;case 5:x=r;return;case 8:e=r;return;case 9:n=r;return;case 10:f=r;return;case 11:W=r;return;default:return}},w0=function(u,r){var S=u&136;(S==128||S==8)&&(S=0),r?(S=Z0(u>>4),T0(u>>4,Z0(u)),T0(u,S)):T0(u,Z0(u>>4))},c0=function(u){return u>127?u-256:u},i0=function(u){return u>32767?u-65536:u},E=function(){var u=A(x++);return x&=65535,u},w=function(){var u=A(x++);x&=65535;var r=A(x++);return x&=65535,u*256+r},F=function(u){var r=A(u++);u&=65535;var S=A(u++);return u&=65535,r*256+S},s0=function(u,r){p(u++,r>>8&255),u&=65535,p(u,r&255)},Z=function(){var u=E(),r;switch(u&96){case 0:r=i;break;case 32:r=l;break;case 64:r=o;break;case 96:r=b;break}var S=null,q=null,t;if(u&128){switch(u&15){case 0:q=r,S=r+1,T+=2;break;case 1:q=r,S=r+2,T+=3;break;case 2:S=r-1,q=S,T+=2;break;case 3:S=r-2,q=S,T+=3;break;case 4:q=r;break;case 5:q=r+c0(n),T+=1;break;case 6:q=r+c0(e),T+=1;break;case 7:q=0;break;case 8:q=r+c0(E()),T+=1;break;case 9:q=r+i0(w()),T+=4;break;case 10:q=0;break;case 11:T+=4,q=r+y();break;case 12:t=c0(E()),q=x+t,T+=1;break;case 13:t=i0(w()),q=x+t,T+=5;break;case 14:q=0;break;case 15:T+=5,q=w();break}q&=65535,u&16&&(q=A(q)*256+A(q+1&65535),T+=3)}else{var a=u&31;a>15&&(a-=32),q=r+a,T+=1}if(S!==null)switch(u&96){case 0:i=S;break;case 32:l=S;break;case 64:o=S;break;case 96:b=S;break}return q&65535},e0=function(u){f&=~(B|_),u===0&&(f|=B),u&32768&&(f|=_)},L=function(u){return u++,u&=255,f&=~(B|g|_),f|=X[u],(u===0||u==128)&&(f|=g),u},O=function(u){return u--,u&=255,f&=~(B|g|_),f|=X[u],(u===127||u==255)&&(f|=g),u},k0=function(u,r){var S=u-r;return f&=~(N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),S&255},Y=function(u,r){var S=u-r;return f&=~(N|B|g|_),(S&65535)===0&&(f|=B),S&32768&&(f|=_),S&65536&&(f|=N),U(u,r,S),S&65535},n0=function(u,r){var S=u+r;return f&=~(_0|N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),(S^u^r)&16&&(f|=_0),S&255},S0=function(u,r){var S=u+r;return f&=~(N|B|g|_),(S&65535)===0&&(f|=B),S&32768&&(f|=_),S&65536&&(f|=N),U(u,r,S),S&65535},J=function(u,r){var S=u+r+(f&N);return f&=~(_0|N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),(S^u^r)&16&&(f|=_0),S&255},l0=function(u,r){var S=u-r-(f&N);return f&=~(N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S),S&255},I0=function(u,r){var S=u-r;f&=~(N|B|g|_),f|=X[S&255],S&256&&(f|=N),m0(u,r,S)},z=function(u,r){var S=u-r;f&=~(N|B|g|_),(S&65535)===0&&(f|=B),S&32768&&(f|=_),S&65536&&(f|=N),U(u,r,S)},H0=function(u){return f&=~(N|B|g|_),u==128&&(f|=g),u=(~u&255)+1,u===0&&(f|=B),u&128&&(f|=_|N),u},r0=function(u){return f&=~(B|N|_),u&1&&(f|=N),u>>=1,u===0&&(f|=B),u&255},o0=function(u){return f&=~(B|N|_),u&1&&(f|=N),u=u&128|u>>1,f|=X[u],u},D0=function(u){var r=u;return f&=~(B|N|_|g),u&128&&(f|=N),u<<=1,f|=X[u],(u^r)&128&&(f|=g),u},B0=function(u){var r=u,S=f&N;return f&=~(B|N|_|g),u&128&&(f|=N),u=u<<1|S,f|=X[u],(u^r)&128&&(f|=g),u},X0=function(u){var r=f&N;return f&=~(B|N|_),u&1&&(f|=N),u=u>>1|r<<7,f|=X[u],u},f0=function(u,r){return f&=~(B|_|g),u^=r,f|=X[u],u},h0=function(u,r){return f&=~(B|_|g),u|=r,f|=X[u],u},A0=function(u,r){return f&=~(B|_|g),u&=r,f|=X[u],u},z0=function(u){return f&=~(B|_|g),u^=255,f|=X[u],f|=N,u},V=function(){return W*256+E()},q0=function(){var u=T,r=null,S=null,q=x,t=E();switch(T+=V0[t],t){case 0:r=V(),p(r,H0(A(r)));break;case 3:r=V(),p(r,z0(A(r)));break;case 4:r=V(),p(r,r0(A(r)));break;case 6:r=V(),p(r,X0(A(r)));break;case 7:r=V(),p(r,o0(A(r)));break;case 8:r=V(),p(r,D0(A(r)));break;case 9:r=V(),p(r,B0(A(r)));break;case 10:r=V(),p(r,O(A(r)));break;case 12:r=V(),p(r,L(A(r)));break;case 13:r=V(),S=A(r),f&=~(B|_|g),f|=X[S];break;case 14:r=V(),x=r;break;case 15:r=V(),p(r,0),f&=~(N|_|g),f|=B;break;case 18:break;case 19:break;case 22:r=i0(w()),x+=r;break;case 23:r=i0(w()),I(x),x+=r;break;case 25:var a=0,P=e&240,L0=e&15;(L0>9||f&32)&&(a|=6),P>128&&L0>9&&(a|=96),(P>144||f&1)&&(a|=96),r=a+e,f&=~(N|_|B|g),r&256&&(f|=N),e=r&255,f|=X[e];break;case 26:f|=E();break;case 28:f&=E();break;case 29:e=n&128?255:0,e0(y()),f&=~g;break;case 30:S=E(),w0(S,!0);break;case 31:S=E(),w0(S,!1);break;case 32:r=c0(E()),x+=r;break;case 33:r=c0(E());break;case 34:r=c0(E()),f&(N|B)||(x+=r);break;case 35:r=c0(E()),f&(N|B)&&(x+=r);break;case 36:r=c0(E()),f&N||(x+=r);break;case 37:r=c0(E()),f&N&&(x+=r);break;case 38:r=c0(E()),f&B||(x+=r);break;case 39:r=c0(E()),f&B&&(x+=r);break;case 40:r=c0(E()),f&g||(x+=r);break;case 41:r=c0(E()),f&g&&(x+=r);break;case 42:r=c0(E()),f&_||(x+=r);break;case 43:r=c0(E()),f&_&&(x+=r);break;case 44:r=c0(E()),f&_^(f&g)<<2||(x+=r);break;case 45:r=c0(E()),f&_^(f&g)<<2&&(x+=r);break;case 46:r=c0(E()),f&_^(f&g)<<2||f&B||(x+=r);break;case 47:r=c0(E()),(f&_^(f&g)<<2||f&B)&&(x+=r);break;case 48:i=Z(),i===0?f|=B:f&=~B;break;case 49:l=Z(),l===0?f|=B:f&=~B;break;case 50:b=Z();break;case 51:o=Z();break;case 52:E0(E());break;case 53:y0(E());break;case 54:d0(E());break;case 55:W0(E());break;case 57:x=R0();break;case 58:i+=n;break;case 59:f=F0(),f&D&&(T+=9,e=F0(),n=F0(),W=F0(),i=R0(),l=R0(),o=R0()),x=R0();break;case 60:f&=E();break;case 61:r=e*n,r===0?f|=B:f&=~B,r&128?f|=N:f&=~N,v0(r);break;case 63:f|=D,I(x),I(o),I(l),I(i),u0(W),u0(n),u0(e),u0(f),f|=a0|d,x=F(K);break;case 64:e=H0(e);break;case 67:e=z0(e);break;case 68:e=r0(e);break;case 70:e=X0(e);break;case 71:e=o0(e);break;case 72:e=D0(e);break;case 73:e=B0(e);break;case 74:e=O(e);break;case 76:e=L(e);break;case 77:f&=~(B|_|g),f|=X[e];break;case 79:e=0,f&=~(_|g|N),f|=B;break;case 80:n=H0(n);break;case 83:n=z0(n);break;case 84:n=r0(n);break;case 86:n=X0(n);break;case 87:n=o0(n);break;case 88:n=D0(n);break;case 89:n=B0(n);break;case 90:n=O(n);break;case 92:n=L(n);break;case 93:f&=~(B|_|g),f|=X[n];break;case 95:n=0,f&=~(_|g|N),f|=B;break;case 96:r=Z(),p(r,H0(A(r)));break;case 99:r=Z(),p(r,z0(A(r)));break;case 100:r=Z(),p(r,r0(A(r)));break;case 102:r=Z(),p(r,X0(A(r)));break;case 103:r=Z(),p(r,o0(A(r)));break;case 104:r=Z(),p(r,D0(A(r)));break;case 105:r=Z(),p(r,B0(A(r)));break;case 106:r=Z(),p(r,O(A(r)));break;case 108:r=Z(),p(r,L(A(r)));break;case 109:r=Z(),S=A(r),f&=~(B|_|g),f|=X[S];break;case 110:r=Z(),x=r;break;case 111:r=Z(),p(r,0),f&=~(N|_|g),f|=B;break;case 112:r=w(),p(r,H0(A(r)));break;case 115:r=w(),p(r,z0(A(r)));break;case 116:r=w(),p(r,r0(A(r)));break;case 118:r=w(),p(r,X0(A(r)));break;case 119:r=w(),p(r,o0(A(r)));break;case 120:r=w(),p(r,D0(A(r)));break;case 121:r=w(),p(r,B0(A(r)));break;case 122:r=w(),p(r,O(A(r)));break;case 124:r=w(),p(r,L(A(r)));break;case 125:r=w(),S=A(r),f&=~(B|_|g),f|=X[S];break;case 126:r=w(),x=r;break;case 127:r=w(),p(r,0),f&=~(N|_|g),f|=B;break;case 128:e=k0(e,E());break;case 129:I0(e,E());break;case 130:e=l0(e,E());break;case 131:v0(Y(y(),w()));break;case 132:e=A0(e,E());break;case 133:A0(e,E());break;case 134:e=E(),f&=~(B|_|g),f|=X[e];break;case 136:e=f0(e,E());break;case 137:e=J(e,E());break;case 138:e=h0(e,E());break;case 139:e=n0(e,E());break;case 140:z(i,w());break;case 141:r=c0(E()),I(x),x+=r;break;case 142:i=w(),e0(i),f&=~g;break;case 144:r=V(),e=k0(e,A(r));break;case 145:r=V(),I0(e,A(r));break;case 146:r=V(),e=l0(e,A(r));break;case 147:r=V(),v0(Y(y(),F(r)));break;case 148:r=V(),e=A0(e,A(r));break;case 149:r=V(),A0(e,A(r));break;case 150:r=V(),e=A(r),f&=~(B|_|g),f|=X[e];break;case 151:r=V(),p(r,e),f&=~(B|_|g),f|=X[e];break;case 152:r=V(),e=f0(e,A(r));break;case 153:r=V(),e=J(e,A(r));break;case 154:r=V(),e=h0(e,A(r));break;case 155:r=V(),e=n0(e,A(r));break;case 156:r=V(),z(i,F(r));break;case 157:r=V(),I(x),x=r;break;case 158:r=V(),i=F(r),e0(i),f&=~g;break;case 159:r=V(),s0(r,i),e0(i),f&=~g;break;case 160:r=Z(),e=k0(e,A(r));break;case 161:r=Z(),I0(e,A(r));break;case 162:r=Z(),e=l0(e,A(r));break;case 163:r=Z(),v0(Y(y(),F(r)));break;case 164:r=Z(),e=A0(e,A(r));break;case 165:r=Z(),A0(e,A(r));break;case 166:r=Z(),e=A(r),f&=~(B|_|g),f|=X[e];break;case 167:r=Z(),p(r,e),f&=~(B|_|g),f|=X[e];break;case 168:r=Z(),e=f0(e,A(r));break;case 169:r=Z(),e=J(e,A(r));break;case 170:r=Z(),e=h0(e,A(r));break;case 171:r=Z(),e=n0(e,A(r));break;case 172:r=Z(),z(i,F(r));break;case 173:r=Z(),I(x),x=r;break;case 174:r=Z(),i=F(r),e0(i),f&=~g;break;case 175:r=Z(),s0(r,i),e0(i),f&=~g;break;case 176:r=w(),e=k0(e,A(r));break;case 177:r=w(),I0(e,A(r));break;case 178:r=w(),e=l0(e,A(r));break;case 179:r=w(),v0(Y(y(),F(r)));break;case 180:r=w(),e=A0(e,A(r));break;case 181:r=w(),A0(e,A(r));break;case 182:r=w(),e=A(r),f&=~(B|_|g),f|=X[e];break;case 183:r=w(),p(r,e),f&=~(B|_|g),f|=X[e];break;case 184:r=w(),e=f0(e,A(r));break;case 185:r=w(),e=J(e,A(r));break;case 186:r=w(),e=h0(e,A(r));break;case 187:r=w(),e=n0(e,A(r));break;case 188:r=w(),z(i,F(r));break;case 189:r=w(),I(x),x=r;break;case 190:r=w(),i=F(r),e0(i),f&=~g;break;case 191:r=w(),s0(r,i),e0(i),f&=~g;break;case 192:n=k0(n,E());break;case 193:I0(n,E());break;case 194:n=l0(n,E());break;case 195:v0(S0(y(),w()));break;case 196:n=A0(n,E());break;case 197:A0(n,E());break;case 198:n=E(),f&=~(B|_|g),f|=X[n];break;case 200:n=f0(n,E());break;case 201:n=J(n,E());break;case 202:n=h0(n,E());break;case 203:n=n0(n,E());break;case 204:r=w(),v0(r),e0(r),f&=~g;break;case 206:o=w(),e0(o),f&=~g;break;case 208:r=V(),n=k0(n,A(r));break;case 209:r=V(),I0(n,A(r));break;case 210:r=V(),n=l0(n,A(r));break;case 211:r=V(),v0(S0(y(),F(r)));break;case 212:r=V(),n=A0(n,A(r));break;case 213:r=V(),A0(n,A(r));break;case 214:r=V(),n=A(r),f&=~(B|_|g),f|=X[n];break;case 215:r=V(),p(r,n),f&=~(B|_|g),f|=X[n];break;case 216:r=V(),n=f0(n,A(r));break;case 217:r=V(),n=J(n,A(r));break;case 218:r=V(),n=h0(n,A(r));break;case 219:r=V(),n=n0(n,A(r));break;case 220:r=V(),S=F(r),v0(S),e0(S),f&=~g;break;case 221:r=V(),s0(r,y()),f&=~g;break;case 222:r=V(),o=F(r),e0(o),f&=~g;break;case 223:r=V(),s0(r,o),e0(o),f&=~g;break;case 224:r=Z(),n=k0(n,A(r));break;case 225:r=Z(),I0(n,A(r));break;case 226:r=Z(),n=l0(n,A(r));break;case 227:r=Z(),v0(S0(y(),F(r)));break;case 228:r=Z(),n=A0(n,A(r));break;case 229:r=Z(),A0(n,A(r));break;case 230:r=Z(),n=A(r),f&=~(B|_|g),f|=X[n];break;case 231:r=Z(),p(r,n),f&=~(B|_|g),f|=X[n];break;case 232:r=Z(),n=f0(n,A(r));break;case 233:r=Z(),n=J(n,A(r));break;case 234:r=Z(),n=h0(n,A(r));break;case 235:r=Z(),n=n0(n,A(r));break;case 236:r=Z(),S=F(r),v0(S),e0(S),f&=~g;break;case 237:r=Z(),s0(r,y()),f&=~g;break;case 238:r=Z(),o=F(r),e0(o),f&=~g;break;case 239:r=Z(),s0(r,o),e0(o),f&=~g;break;case 240:r=w(),n=k0(n,A(r));break;case 241:r=w(),I0(n,A(r));break;case 242:r=w(),n=l0(n,A(r));break;case 243:r=w(),v0(S0(y(),F(r)));break;case 244:r=w(),n=A0(n,A(r));break;case 245:r=w(),A0(n,A(r));break;case 246:r=w(),n=A(r),f&=~(B|_|g),f|=X[n];break;case 247:r=w(),p(r,n),f&=~(B|_|g),f|=X[n];break;case 248:r=w(),n=f0(n,A(r));break;case 249:r=w(),n=J(n,A(r));break;case 250:r=w(),n=h0(n,A(r));break;case 251:r=w(),n=n0(n,A(r));break;case 252:r=w(),S=F(r),v0(S),e0(S),f&=~g;break;case 253:r=w(),s0(r,y()),f&=~g;break;case 254:r=w(),o=F(r),e0(o),f&=~g;break;case 255:r=w(),s0(r,o),e0(o),f&=~g;break;case 16:switch(t=E(),T+=M[t],t){case 33:r=i0(w());break;case 34:r=i0(w()),f&(N|B)||(x+=r);break;case 35:r=i0(w()),f&(N|B)&&(x+=r);break;case 36:r=i0(w()),f&N||(x+=r);break;case 37:r=i0(w()),f&N&&(x+=r);break;case 38:r=i0(w()),f&B||(x+=r);break;case 39:r=i0(w()),f&B&&(x+=r);break;case 40:r=i0(w()),f&g||(x+=r);break;case 41:r=i0(w()),f&g&&(x+=r);break;case 42:r=i0(w()),f&_||(x+=r);break;case 43:r=i0(w()),f&_&&(x+=r);break;case 44:r=i0(w()),f&_^(f&g)<<2||(x+=r);break;case 45:r=i0(w()),f&_^(f&g)<<2&&(x+=r);break;case 46:r=i0(w()),f&_^(f&g)<<2||f&B||(x+=r);break;case 47:r=i0(w()),(f&_^(f&g)<<2||f&B)&&(x+=r);break;case 63:f|=D,I(x),I(o),I(l),I(i),u0(W),u0(n),u0(e),u0(f),f|=a0|d,x=F(x0);break;case 131:z(y(),w());break;case 140:z(l,w());break;case 142:l=w(),e0(l),f&=~g;break;case 147:r=V(),z(y(),F(r));break;case 156:r=V(),z(l,F(r));break;case 158:r=V(),l=F(r),e0(l),f&=~g;break;case 159:r=V(),s0(r,l),e0(l),f&=~g;break;case 163:r=Z(),z(y(),F(r));break;case 172:r=Z(),z(l,F(r));break;case 174:r=Z(),l=F(r),e0(l),f&=~g;break;case 175:r=Z(),s0(r,l),e0(l),f&=~g;break;case 179:r=w(),z(y(),F(r));break;case 188:r=w(),z(l,F(r));break;case 190:r=w(),l=F(r),e0(l),f&=~g;break;case 191:r=w(),s0(r,l),e0(l),f&=~g;break;case 206:b=w(),e0(b),f&=~g;break;case 222:r=V(),b=F(r),e0(b),f&=~g;break;case 223:r=V(),s0(r,b),e0(b),f&=~g;break;case 238:r=Z(),b=F(r),e0(b),f&=~g;break;case 239:r=Z(),s0(r,b),e0(b),f&=~g;break;case 254:r=w(),b=F(r),e0(b),f&=~g;break;case 255:r=w(),s0(r,b),e0(b),f&=~g;break}break;case 17:switch(t=E(),T+=M[t],t){case 63:f|=D,I(x),I(o),I(l),I(i),u0(W),u0(n),u0(e),u0(f),f|=a0|d,x=F(N0);break;case 131:z(o,w());break;case 140:z(b,w());break;case 147:r=V(),z(o,F(r));break;case 156:r=V(),z(b,F(r));break;case 163:r=Z(),z(o,F(r));break;case 172:r=Z(),z(b,F(r));break;case 179:r=w(),z(o,F(r));break;case 188:r=w(),z(b,F(r));break}break}return e&=255,n&=255,f&=255,W&=255,i&=65535,l&=65535,o&=65535,b&=65535,x&=65535,T-u},j0=function(){x=F(t0),W=0,f|=d|a0,T=0,e=n=W=i=l=o=b=0},G0=[[2,1,"NEG"],[1,0,"???"],[1,0,"???"],[2,1,"COM"],[2,1,"LSR"],[1,0,"???"],[2,1,"ROR"],[2,1,"ASR"],[2,1,"LSL"],[2,1,"ROL"],[2,1,"DEC"],[1,0,"???"],[2,1,"INC"],[2,1,"TST"],[2,1,"JMP"],[2,1,"CLR"],[1,0,"Prefix"],[1,0,"Prefix"],[1,2,"NOP"],[1,2,"SYNC"],[1,0,"???"],[1,0,"???"],[3,3,"LBRA"],[3,3,"LBSR"],[1,0,"???"],[1,2,"DAA"],[2,4,"ORCC"],[1,0,"???"],[2,4,"ANDCC"],[1,2,"SEX"],[2,20,"EXG"],[2,20,"TFR"],[2,5,"BRA"],[2,5,"BRN"],[2,5,"BHI"],[2,5,"BLS"],[2,5,"BCC"],[2,5,"BCS"],[2,5,"BNE"],[2,5,"BEQ"],[2,5,"BVC"],[2,5,"BVS"],[2,5,"BPL"],[2,5,"BMI"],[2,5,"BGE"],[2,5,"BLT"],[2,5,"BGT"],[2,5,"BLE"],[2,6,"LEAX"],[2,6,"LEAY"],[2,6,"LEAS"],[2,6,"LEAU"],[2,10,"PSHS"],[2,10,"PULS"],[2,11,"PSHU"],[2,11,"PULU"],[1,0,"???"],[1,2,"RTS"],[1,2,"ABX"],[1,2,"RTI"],[2,2,"CWAI"],[1,2,"MUL"],[1,2,"RESET"],[1,2,"SWI1"],[1,2,"NEGA"],[1,0,"???"],[1,0,"???"],[1,2,"COMA"],[1,2,"LSRA"],[1,0,"???"],[1,2,"RORA"],[1,2,"ASRA"],[1,2,"ASLA"],[1,2,"ROLA"],[1,2,"DECA"],[1,0,"???"],[1,2,"INCA"],[1,2,"TSTA"],[1,0,"???"],[1,2,"CLRA"],[1,2,"NEGB"],[1,0,"???"],[1,0,"???"],[1,2,"COMB"],[1,2,"LSRB"],[1,0,"???"],[1,2,"RORB"],[1,2,"ASRB"],[1,2,"ASLB"],[1,2,"ROLB"],[1,2,"DECB"],[1,0,"???"],[1,2,"INCB"],[1,2,"TSTB"],[1,0,"???"],[1,2,"CLRB"],[2,6,"NEG"],[1,0,"???"],[1,0,"???"],[2,6,"COM"],[2,6,"LSR"],[1,0,"???"],[2,6,"ROR"],[2,6,"ASR"],[2,6,"LSL"],[2,6,"ROL"],[2,6,"DEC"],[1,0,"???"],[2,6,"INC"],[2,6,"TST"],[2,6,"JMP"],[2,6,"CLR"],[3,7,"NEG"],[1,0,"???"],[1,0,"???"],[3,7,"COM"],[3,7,"LSR"],[1,0,"???"],[3,7,"ROR"],[3,7,"ASR"],[3,7,"LSL"],[3,7,"ROL"],[3,7,"DEC"],[1,0,"???"],[3,7,"INC"],[3,7,"TST"],[3,7,"JMP"],[3,7,"CLR"],[2,4,"SUBA"],[2,4,"CMPA"],[2,4,"SBCA"],[3,8,"SUBD"],[2,4,"ANDA"],[2,4,"BITA"],[2,4,"LDA"],[1,0,"???"],[2,4,"EORA"],[2,4,"ADCA"],[2,4,"ORA"],[2,4,"ADDA"],[3,8,"CMPX"],[2,5,"BSR"],[3,8,"LDX"],[1,0,"???"],[2,1,"SUBA"],[2,1,"CMPA"],[2,1,"SBCA"],[2,1,"SUBd"],[2,1,"ANDA"],[2,1,"BITA"],[2,1,"LDA"],[2,1,"STA"],[2,1,"EORA"],[2,1,"ADCA"],[2,1,"ORA"],[2,1,"ADDA"],[2,1,"CMPX"],[2,1,"JSR"],[2,1,"LDX"],[2,1,"STX"],[2,6,"SUBA"],[2,6,"CMPA"],[2,6,"SBCA"],[2,6,"SUBD"],[2,6,"ANDA"],[2,6,"BITA"],[2,6,"LDA"],[2,6,"STA"],[2,6,"EORA"],[2,6,"ADCA"],[2,6,"ORA"],[2,6,"ADDA"],[2,6,"CMPX"],[2,6,"JSR"],[2,6,"LDX"],[2,6,"STX"],[3,7,"SUBA"],[3,7,"CMPA"],[3,7,"SBCA"],[3,7,"SUBD"],[3,7,"ANDA"],[3,7,"BITA"],[3,7,"LDA"],[3,7,"STA"],[3,7,"EORA"],[3,7,"ADCA"],[3,7,"ORA"],[3,7,"ADDA"],[3,7,"CMPX"],[3,7,"JSR"],[3,7,"LDX"],[3,7,"STX"],[2,4,"SUBB"],[2,4,"CMPB"],[2,4,"SBCB"],[3,8,"ADDD"],[2,4,"ANDB"],[2,4,"BITB"],[2,4,"LDB"],[1,0,"???"],[2,4,"EORB"],[2,4,"ADCB"],[2,4,"ORB"],[2,4,"ADDB"],[3,8,"LDD"],[1,0,"???"],[3,8,"LDU"],[1,0,"???"],[2,1,"SUBB"],[2,1,"CMPB"],[2,1,"SBCB"],[2,1,"ADDD"],[2,1,"ANDB"],[2,1,"BITB"],[2,1,"LDB"],[2,1,"STB"],[2,1,"EORB"],[2,1,"ADCB"],[2,1,"ORB "],[2,1,"ADDB"],[2,1,"LDD "],[2,1,"STD "],[2,1,"LDU "],[2,1,"STU "],[2,6,"SUBB"],[2,6,"CMPB"],[2,6,"SBCB"],[2,6,"ADDD"],[2,6,"ANDB"],[2,6,"BITB"],[2,6,"LDB"],[2,6,"STB"],[2,6,"EORB"],[2,6,"ADCB"],[2,6,"ORB"],[2,6,"ADDB"],[2,6,"LDD"],[2,6,"STD"],[2,6,"LDU"],[2,6,"STU"],[3,7,"SUBB"],[3,7,"CMPB"],[3,7,"SBCB"],[3,7,"ADDD"],[3,7,"ANDB"],[3,7,"BITB"],[3,7,"LDB"],[3,7,"STB"],[3,7,"EORB"],[3,7,"ADCB"],[3,7,"ORB"],[3,7,"ADDB"],[3,7,"LDD"],[3,7,"STD"],[3,7,"LDU"],[3,7,"STU"]],v={63:[2,2,"SWI3"],131:[4,8,"CMPU"],140:[4,8,"CMPS"],147:[3,1,"CMPU"],156:[3,1,"CMPS"],163:[3,6,"CMPU"],172:[3,6,"CMPS"],179:[4,7,"CMPU"],188:[4,7,"CMPS"]},R={33:[5,3,"LBRN"],34:[5,3,"LBHI"],35:[5,3,"LBLS"],36:[5,3,"LBCC"],37:[5,3,"LBCS"],38:[5,3,"LBNE"],39:[5,3,"LBEQ"],40:[5,3,"LBVC"],41:[5,3,"LBVS"],42:[5,3,"LBPL"],43:[5,3,"LBMI"],44:[5,3,"LBGE"],45:[5,3,"LBLT"],46:[5,3,"LBGT"],47:[5,3,"LBLE"],63:[2,2,"SWI2"],131:[4,8,"CMPD"],140:[4,8,"CMPY"],142:[4,8,"LDY"],147:[3,1,"CMPD"],156:[3,1,"CMPY"],158:[3,1,"LDY"],159:[3,1,"STY"],163:[3,6,"CMPD"],172:[3,6,"CMPY"],174:[3,6,"LDY"],175:[3,6,"STY"],179:[4,7,"CMPD"],188:[4,7,"CMPY"],190:[4,7,"LDY"],191:[4,7,"STY"],206:[4,8,"LDS"],222:[3,1,"LDS"],223:[3,1,"STS"],238:[3,6,"LDS"],239:[3,6,"STS"],254:[4,7,"LDS"],255:[4,7,"STS"]},k=function(u,r,S,q,t,a){var P=function(ue,qe){for(var Pe=ue.toString(16);Pe.length>5];if(!(xe&128)){var Se=xe&31;Se>15&&(Se=Se-32),G+=Se+","+M0;break}var Qe=xe&16,Oe=xe&15,ge=S>127?S-256:S,pe=S*256+q>32767?S*256+q-65536:S*256+q;if(Qe)switch(Oe){case 0:G+="???";break;case 1:G+="[,"+M0+"++]";break;case 2:G+="???";break;case 3:G+="[,--"+M0+"]";break;case 4:G+="[,"+M0+"]";break;case 5:G+="[B,"+M0+"]";break;case 6:G+="[A,"+M0+"]";break;case 7:G+="???";break;case 8:G+="["+ge+","+M0+"]",K0++;break;case 9:G+="["+pe+","+M0+"]",K0+=2;break;case 10:G+="???";break;case 11:G+="[D,"+M0+"]";break;case 12:G+="["+ge+",PC]",K0++;break;case 13:G+="["+pe+",PC]",K0+=2;break;case 14:G+="???";break;case 15:G+="[$"+$0(S*256+q)+"]",K0+=2;break}else switch(Oe){case 0:G+=","+M0+"+";break;case 1:G+=","+M0+"++";break;case 2:G+=",-"+M0;break;case 3:G+=",--"+M0;break;case 4:G+=","+M0;break;case 5:G+="B,"+M0;break;case 6:G+="A,"+M0;break;case 7:G+="???";break;case 8:G+=ge+","+M0,K0++;break;case 9:G+=pe+","+M0,K0+=2;break;case 10:G+="???";break;case 11:G+="D,"+M0;break;case 12:G+=ge+",PC",K0++;break;case 13:G+=pe+",PC",K0+=2;break;case 14:G+="???";break;case 15:G+="$"+$0(S*256+q),K0+=2;break}break;case 7:G+=" $"+$0(r*256+S);break;case 8:G+=" #$"+$0(r*256+S);break;case 10:for(O0=["PC","U","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(O0[7-Q0]),r>>=1;G+=" "+ne.join(",");break;case 11:for(O0=["PC","S","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(O0[7-Q0]),r>>=1;G+=" "+ne.join(",");break;case 20:O0=["D","X","Y","U","S","PC","?","?","A","B","CC","DP","?","?","?","?"],G+=" "+O0[r>>4]+","+O0[r&15];break}return{line:G,nbytes:K0}};return{steps:function(u){for(;u>0;)u-=q0()},runFrame:function(u){for(;T>S;q===0?u+=r[S].toLowerCase():u+=r[S]}return u},disasm:k,isStable:function(){return!0}}}var mt=function(){var C=this;this.powerOn=function(){this.reset()},this.powerOff=function(){},this.clockPulse=function(){n&&(a0++,d[a0]())},this.connectBus=function(m){e=m},this.setRDY=function(m){n=m},this.isRDY=function(){return n},this.reset=function(){g=1,a0=-1,d=[U],i=e.read(T)|e.read(T+1)<<8,this.setRDY(!0)};var e,n=!1,i=0,l=0,o=0,b=0,x=0,f=0,W=0,N=0,g=0,B=0,_=0,a0=-1,_0=-1,d,D=0,t0=0,H=0,K=!1,s=0,c=0,x0=0;let N0=65530,T=65532,p0=65534,p=0,A=1,V0=7,M=6,X=1,m0=0;this.debug=!1,this.trace=!1;var U=function(){_0=e.read(i),d=a[_0],a0=0,i++},y=U,v0=function(){e.read(i)},u0=function(){c=e.read(i),i++},I=function(){t0=e.read(i),i++},U0=function(){t0|=e.read(i)<<8,i++},Y0=function(){t0=e.read(H)},F0=function(){t0|=e.read(H)<<8},R0=function(){H=e.read(i),i++},Q=function(){H|=e.read(i)<<8,i++},b0=function(){H=e.read(s)},E0=function(){H|=e.read(s)<<8},d0=function(){var m=(H&255)+b;K=m>255,H=H&65280|m&255},y0=function(){var m=(H&255)+x;K=m>255,H=H&65280|m&255},W0=function(){var m=(H&255)+1;K=m>255,H=H&65280|m&255},Z0=function(){K&&(H=H+256&65535)},T0=function(){s=e.read(i),i++},w0=function(){s|=e.read(i)<<8,i++},c0=function(){var m=(s&255)+1;s=s&65280|m&255},i0=function(){D=e.read(i),i++},E=function(){D=e.read(t0)},w=function(){D=e.read(H)},F=function(){e.write(t0,D)},s0=function(){e.write(H,D)},Z=function(){var m=i&255,h=m+c&255;c>127?x0=h>m?-256:0:x0=h>>7,W=m>>>6&1,N=m>>>3&1,g=m>>>2&1,B=m>>>1&1,_=m&1},z=function(m){C.debug&&C.breakpoint("Illegal Opcode: "+m)},H0=function(){z("KIL/HLT/JAM");let m=i-1&65535;throw new Ye(`CPU executed halt instruction ($${$(_0,2)}) at $${$(m,4)}`)},r0=function(m){return[U,v0,function(){m(),y()}]},o0=function(m){return[U,i0,function(){m(),y()}]},D0=function(m){return[U,I,E,function(){m(),y()}]},B0=function(m){return[U,I,U0,E,function(){m(),y()}]},X0=function(m){return[U,R0,w,function(){d0(),Y0()},function(){W0(),F0()},E,function(){m(),y()}]},f0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,Q,function(){h(),w(),Z0()},function(){K?w():(j(),y())},function(){j(),y()}]}},h0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,w,function(){h(),w()},function(){j(),y()}]}},A0=function(m){return[U,T0,b0,function(){c0(),E0()},function(){y0(),w(),Z0()},function(){K?w():(m(),y())},function(){m(),y()}]},z0=function(m){return[U,I,function(){m(),F()},y]},V=function(m){return[U,I,U0,function(){m(),F()},y]},q0=function(m){return[U,R0,w,function(){d0(),Y0()},function(){W0(),F0()},function(){m(),F()},y]},j0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,Q,function(){h(),w(),Z0()},function(){j(),s0()},y]}},G0=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,w,function(){h(),j(),s0()},y]}},v=function(m){return[U,T0,b0,function(){c0(),E0()},function(){y0(),w(),Z0()},function(){m(),s0()},y]},R=function(m){return[U,I,E,F,function(){m(),F()},y]},k=function(m){return[U,I,U0,E,F,function(){m(),F()},y]},u=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,w,function(){h(),w()},s0,function(){j(),s0()},y]}},r=function(m){var h=m===p?d0:y0;return function(j){return[U,R0,Q,function(){h(),w(),Z0()},w,s0,function(){j(),s0()},y]}},S=function(m){return[U,R0,w,function(){d0(),Y0()},function(){W0(),F0()},E,F,function(){m(),F()},y]},q=function(m){return[U,T0,b0,function(){c0(),E0()},function(){y0(),w(),Z0()},w,s0,function(){m(),s0()},y]},t=new Array(256),a=new Array(256);t[0]="BRK",a[0]=ln(),t[1]="ORA",a[1]=ce(X0),t[2]="uKIL",a[2]=J0(),t[3]="uSLO",a[3]=Ae(S),t[4]="uNOP",a[4]=P0(D0),t[5]="ORA",a[5]=ce(D0),t[6]="ASL",a[6]=Ze(R),t[7]="uSLO",a[7]=Ae(R),t[8]="PHP",a[8]=cn(),t[9]="ORA",a[9]=ce(o0),t[10]="ASL",a[10]=P(),t[11]="uANC",a[11]=gt(o0),t[12]="uNOP",a[12]=P0(B0),t[13]="ORA",a[13]=ce(B0),t[14]="ASL",a[14]=Ze(k),t[15]="uSLO",a[15]=Ae(k),t[16]="BPL",a[16]=oe(V0,0),t[17]="ORA",a[17]=ce(A0),t[18]="uKIL",a[18]=J0(),t[19]="uSLO",a[19]=Ae(q),t[20]="uNOP",a[20]=P0(h0(p)),t[21]="ORA",a[21]=ce(h0(p)),t[22]="ASL",a[22]=Ze(u(p)),t[23]="uSLO",a[23]=Ae(u(p)),t[24]="CLC",a[24]=L0(),t[25]="ORA",a[25]=ce(f0(A)),t[26]="uNOP",a[26]=P0(r0),t[27]="uSLO",a[27]=Ae(r(A)),t[28]="uNOP",a[28]=P0(f0(p)),t[29]="ORA",a[29]=ce(f0(p)),t[30]="ASL",a[30]=Ze(r(p)),t[31]="uSLO",a[31]=Ae(r(p)),t[32]="JSR",a[32]=un(),t[33]="AND",a[33]=ae(X0),t[34]="uKIL",a[34]=J0(),t[35]="uRLA",a[35]=de(S),t[36]="BIT",a[36]=St(D0),t[37]="AND",a[37]=ae(D0),t[38]="ROL",a[38]=Ue(R),t[39]="uRLA",a[39]=de(R),t[40]="PLP",a[40]=xn(),t[41]="AND",a[41]=ae(o0),t[42]="ROL",a[42]=M0(),t[43]="uANC",a[43]=gt(o0),t[44]="BIT",a[44]=St(B0),t[45]="AND",a[45]=ae(B0),t[46]="ROL",a[46]=Ue(k),t[47]="uRLA",a[47]=de(k),t[48]="BMI",a[48]=oe(V0,1),t[49]="AND",a[49]=ae(A0),t[50]="uKIL",a[50]=J0(),t[51]="uRLA",a[51]=de(q),t[52]="uNOP",a[52]=P0(h0(p)),t[53]="AND",a[53]=ae(h0(p)),t[54]="ROL",a[54]=Ue(u(p)),t[55]="uRLA",a[55]=de(u(p)),t[56]="SEC",a[56]=Qe(),t[57]="AND",a[57]=ae(f0(A)),t[58]="uNOP",a[58]=P0(r0),t[59]="uRLA",a[59]=de(r(A)),t[60]="uNOP",a[60]=P0(f0(p)),t[61]="AND",a[61]=ae(f0(p)),t[62]="ROL",a[62]=Ue(r(p)),t[63]="uRLA",a[63]=de(r(p)),t[64]="RTI",a[64]=dn(),t[65]="EOR",a[65]=fe(X0),t[66]="uKIL",a[66]=J0(),t[67]="uSRE",a[67]=Ce(S),t[68]="uNOP",a[68]=P0(D0),t[69]="EOR",a[69]=fe(D0),t[70]="LSR",a[70]=Te(R),t[71]="uSRE",a[71]=Ce(R),t[72]="PHA",a[72]=sn(),t[73]="EOR",a[73]=fe(o0),t[74]="LSR",a[74]=G(),t[75]="uASR",a[75]=qt(o0),t[76]="JMP",a[76]=An(),t[77]="EOR",a[77]=fe(B0),t[78]="LSR",a[78]=Te(k),t[79]="uSRE",a[79]=Ce(k),t[80]="BVC",a[80]=oe(M,0),t[81]="EOR",a[81]=fe(A0),t[82]="uKIL",a[82]=J0(),t[83]="uSRE",a[83]=Ce(q),t[84]="uNOP",a[84]=P0(h0(p)),t[85]="EOR",a[85]=fe(h0(p)),t[86]="LSR",a[86]=Te(u(p)),t[87]="uSRE",a[87]=Ce(u(p)),t[88]="CLI",a[88]=O0(),t[89]="EOR",a[89]=fe(f0(A)),t[90]="uNOP",a[90]=P0(r0),t[91]="uSRE",a[91]=Ce(r(A)),t[92]="uNOP",a[92]=P0(f0(p)),t[93]="EOR",a[93]=fe(f0(p)),t[94]="LSR",a[94]=Te(r(p)),t[95]="uSRE",a[95]=Ce(r(p)),t[96]="RTS",a[96]=hn(),t[97]="ADC",a[97]=re(X0),t[98]="uKIL",a[98]=J0(),t[99]="uRRA",a[99]=he(S),t[100]="uNOP",a[100]=P0(D0),t[101]="ADC",a[101]=re(D0),t[102]="ROR",a[102]=Xe(R),t[103]="uRRA",a[103]=he(R),t[104]="PLA",a[104]=on(),t[105]="ADC",a[105]=re(o0),t[106]="ROR",a[106]=Se(),t[107]="uARR",a[107]=Qt(o0),t[108]="JMP",a[108]=Cn(),t[109]="ADC",a[109]=re(B0),t[110]="ROR",a[110]=Xe(k),t[111]="uRRA",a[111]=he(k),t[112]="BVS",a[112]=oe(M,1),t[113]="ADC",a[113]=re(A0),t[114]="uKIL",a[114]=J0(),t[115]="uRRA",a[115]=he(q),t[116]="uNOP",a[116]=P0(h0(p)),t[117]="ADC",a[117]=re(h0(p)),t[118]="ROR",a[118]=Xe(u(p)),t[119]="uRRA",a[119]=he(u(p)),t[120]="SEI",a[120]=ge(),t[121]="ADC",a[121]=re(f0(A)),t[122]="uNOP",a[122]=P0(r0),t[123]="uRRA",a[123]=he(r(A)),t[124]="uNOP",a[124]=P0(f0(p)),t[125]="ADC",a[125]=re(f0(p)),t[126]="ROR",a[126]=Xe(r(p)),t[127]="uRRA",a[127]=he(r(p)),t[128]="uNOP",a[128]=P0(o0),t[129]="STA",a[129]=le(q0),t[130]="uNOP",a[130]=P0(o0),t[131]="uSAX",a[131]=Ee(q0),t[132]="STY",a[132]=rt(z0),t[133]="STA",a[133]=le(z0),t[134]="STX",a[134]=nt(z0),t[135]="uSAX",a[135]=Ee(z0),t[136]="DEY",a[136]=ee(),t[137]="uNOP",a[137]=P0(o0),t[138]="TXA",a[138]=Pe(),t[139]="uANE",a[139]=Gt(o0),t[140]="STY",a[140]=rt(V),t[141]="STA",a[141]=le(V),t[142]="STX",a[142]=nt(V),t[143]="uSAX",a[143]=Ee(V),t[144]="BCC",a[144]=oe(m0,0),t[145]="STA",a[145]=le(v),t[146]="uKIL",a[146]=J0(),t[147]="uSHA",a[147]=pt(v),t[148]="STY",a[148]=rt(G0(p)),t[149]="STA",a[149]=le(G0(p)),t[150]="STX",a[150]=nt(G0(A)),t[151]="uSAX",a[151]=Ee(G0(A)),t[152]="TYA",a[152]=Jt(),t[153]="STA",a[153]=le(j0(A)),t[154]="TXS",a[154]=$t(),t[155]="uSHS",a[155]=rn(j0(A)),t[156]="uSHY",a[156]=fn(j0(p)),t[157]="STA",a[157]=le(j0(p)),t[158]="uSHX",a[158]=an(j0(A)),t[159]="uSHA",a[159]=pt(j0(A)),t[160]="LDY",a[160]=De(o0),t[161]="LDA",a[161]=se(X0),t[162]="LDX",a[162]=ke(o0),t[163]="uLAX",a[163]=_e(X0),t[164]="LDY",a[164]=De(D0),t[165]="LDA",a[165]=se(D0),t[166]="LDX",a[166]=ke(D0),t[167]="uLAX",a[167]=_e(D0),t[168]="TAY",a[168]=ue(),t[169]="LDA",a[169]=se(o0),t[170]="TAX",a[170]=pe(),t[171]="uLXA",a[171]=tn(o0),t[172]="LDY",a[172]=De(B0),t[173]="LDA",a[173]=se(B0),t[174]="LDX",a[174]=ke(B0),t[175]="uLAX",a[175]=_e(B0),t[176]="BCS",a[176]=oe(m0,1),t[177]="LDA",a[177]=se(A0),t[178]="uKIL",a[178]=J0(),t[179]="uLAX",a[179]=_e(A0),t[180]="LDY",a[180]=De(h0(p)),t[181]="LDA",a[181]=se(h0(p)),t[182]="LDX",a[182]=ke(h0(A)),t[183]="uLAX",a[183]=_e(h0(A)),t[184]="CLV",a[184]=ne(),t[185]="LDA",a[185]=se(f0(A)),t[186]="TSX",a[186]=qe(),t[187]="uLAS",a[187]=en(f0(A)),t[188]="LDY",a[188]=De(f0(p)),t[189]="LDA",a[189]=se(f0(p)),t[190]="LDX",a[190]=ke(f0(A)),t[191]="uLAX",a[191]=_e(f0(A)),t[192]="CPY",a[192]=tt(o0),t[193]="CMP",a[193]=ie(X0),t[194]="uNOP",a[194]=P0(o0),t[195]="uDCP",a[195]=me(S),t[196]="CPY",a[196]=tt(D0),t[197]="CMP",a[197]=ie(D0),t[198]="DEC",a[198]=Me(R),t[199]="uDCP",a[199]=me(R),t[200]="INY",a[200]=Ge(),t[201]="CMP",a[201]=ie(o0),t[202]="DEX",a[202]=Q0(),t[203]="uSBX",a[203]=nn(o0),t[204]="CPY",a[204]=tt(B0),t[205]="CMP",a[205]=ie(B0),t[206]="DEC",a[206]=Me(k),t[207]="uDCP",a[207]=me(k),t[208]="BNE",a[208]=oe(X,0),t[209]="CMP",a[209]=ie(A0),t[210]="uKIL",a[210]=J0(),t[211]="uDCP",a[211]=me(q),t[212]="uNOP",a[212]=P0(h0(p)),t[213]="CMP",a[213]=ie(h0(p)),t[214]="DEC",a[214]=Me(u(p)),t[215]="uDCP",a[215]=me(u(p)),t[216]="CLD",a[216]=$0(),t[217]="CMP",a[217]=ie(f0(A)),t[218]="uNOP",a[218]=P0(r0),t[219]="uDCP",a[219]=me(r(A)),t[220]="uNOP",a[220]=P0(f0(p)),t[221]="CMP",a[221]=ie(f0(p)),t[222]="DEC",a[222]=Me(r(p)),t[223]="uDCP",a[223]=me(r(p)),t[224]="CPX",a[224]=et(o0),t[225]="SBC",a[225]=te(X0),t[226]="uNOP",a[226]=P0(o0),t[227]="uISB",a[227]=be(S),t[228]="CPX",a[228]=et(D0),t[229]="SBC",a[229]=te(D0),t[230]="INC",a[230]=Fe(R),t[231]="uISB",a[231]=be(R),t[232]="INX",a[232]=K0(),t[233]="SBC",a[233]=te(o0),t[234]="NOP",a[234]=xe(),t[235]="SBC",a[235]=te(o0),t[236]="CPX",a[236]=et(B0),t[237]="SBC",a[237]=te(B0),t[238]="INC",a[238]=Fe(k),t[239]="uISB",a[239]=be(k),t[240]="BEQ",a[240]=oe(X,1),t[241]="SBC",a[241]=te(A0),t[242]="uKIL",a[242]=J0(),t[243]="uISB",a[243]=be(q),t[244]="uNOP",a[244]=P0(h0(p)),t[245]="SBC",a[245]=te(h0(p)),t[246]="INC",a[246]=Fe(u(p)),t[247]="uISB",a[247]=be(u(p)),t[248]="SED",a[248]=Oe(),t[249]="SBC",a[249]=te(f0(A)),t[250]="uNOP",a[250]=P0(r0),t[251]="uISB",a[251]=be(r(A)),t[252]="uNOP",a[252]=P0(f0(p)),t[253]="SBC",a[253]=te(f0(p)),t[254]="INC",a[254]=Fe(r(p)),t[255]="uISB",a[255]=be(r(p));function P(){return r0(function(){Y(o>127),o=o<<1&255,L(o),O(o)})}function L0(){return r0(function(){_=0})}function $0(){return r0(function(){N=0})}function O0(){return r0(function(){g=0})}function ne(){return r0(function(){W=0})}function Q0(){return r0(function(){b=b-1&255,L(b),O(b)})}function ee(){return r0(function(){x=x-1&255,L(x),O(x)})}function K0(){return r0(function(){b=b+1&255,L(b),O(b)})}function Ge(){return r0(function(){x=x+1&255,L(x),O(x)})}function G(){return r0(function(){_=o&1,o>>>=1,L(o),f=0})}function xe(){return r0(function(){})}function M0(){return r0(function(){var m=o>127;o=(o<<1|_)&255,Y(m),L(o),O(o)})}function Se(){return r0(function(){var m=o&1;o=o>>>1|_<<7,Y(m),L(o),O(o)})}function Qe(){return r0(function(){_=1})}function Oe(){return r0(function(){N=1})}function ge(){return r0(function(){g=1})}function pe(){return r0(function(){b=o,L(b),O(b)})}function ue(){return r0(function(){x=o,L(x),O(x)})}function qe(){return r0(function(){b=l,L(b),O(b)})}function Pe(){return r0(function(){o=b,L(o),O(o)})}function $t(){return r0(function(){l=b})}function Jt(){return r0(function(){o=x,L(o),O(o)})}function J0(){return[U,function(){H0()},function(){a0--}]}function P0(m){return m(function(){z("NOP/DOP")})}function re(m){return m(function(){if(N){var h=D,j=(o&15)+(h&15)+_;j>9&&(j+=6);var g0=(o>>4)+(h>>4)+(j>15?1:0)<<4;L(o+h+_&255),O(g0),k0((o^g0)&~(o^h)&128),g0>159&&(g0+=96),Y(g0>255),o=(g0|j&15)&255}else{var C0=o+D+_;Y(C0>255),k0((o^C0)&(D^C0)&128),o=C0&255,L(o),O(o)}})}function ae(m){return m(function(){o&=D,L(o),O(o)})}function St(m){return m(function(){var h=D;L(o&h),k0(h&64),O(h)})}function ie(m){return m(function(){var h=o-D&255;Y(o>=D),L(h),O(h)})}function et(m){return m(function(){var h=b-D&255;Y(b>=D),L(h),O(h)})}function tt(m){return m(function(){var h=x-D&255;Y(x>=D),L(h),O(h)})}function fe(m){return m(function(){o^=D,L(o),O(o)})}function se(m){return m(function(){o=D,L(o),O(o)})}function ke(m){return m(function(){b=D,L(b),O(b)})}function De(m){return m(function(){x=D,L(x),O(x)})}function ce(m){return m(function(){o|=D,L(o),O(o)})}function te(m){return m(function(){if(N){var h=D,j=(o&15)-(h&15)-(1-_),g0=(o>>4)-(h>>4)-(j<0?1:0);j<0&&(j-=6),g0<0&&(g0-=6);var C0=o-h-(1-_);Y(~C0&256),k0((o^h)&(o^C0)&128),L(C0&255),O(C0),o=(g0<<4|j&15)&255}else h=~D&255,C0=o+h+_,Y(C0>255),k0((o^C0)&(h^C0)&128),o=C0&255,L(o),O(o)})}function gt(m){return m(function(){z("ANC"),o&=D,L(o),f=_=o&128?1:0})}function Gt(m){return m(function(){z("ANE")})}function Qt(m){return m(function(){z("ARR");var h=o&D,j=_?128:0;h=h>>>1|j,o=h,L(h),O(h);var g0=o&96;g0==96?(_=1,W=0):g0==0?(_=0,W=0):g0==32?(_=0,W=1):g0==64&&(_=1,W=1)})}function qt(m){return m(function(){z("ASR");var h=o&D;_=h&1,h=h>>>1,o=h,L(h),f=0})}function en(m){return m(function(){z("LAS");var h=l&D;o=h,b=h,l=h,L(h),O(h)})}function _e(m){return m(function(){z("LAX");var h=D;o=h,b=h,L(h),O(h)})}function tn(m){return m(function(){z("LXA");var h=o&D;o=h,b=h,L(h),O(h)})}function nn(m){return m(function(){z("SBX");var h=o&b,j=D,g0=h-j&255;b=g0,Y(h>=j),L(g0),O(g0)})}function le(m){return m(function(){D=o})}function nt(m){return m(function(){D=b})}function rt(m){return m(function(){D=x})}function Ee(m){return m(function(){z("SAX"),D=o&b})}function pt(m){return m(function(){z("SHA"),D=o&b&(H>>>8)+1&255})}function rn(m){return m(function(){z("SHS");var h=o&b;l=h,D=h&(H>>>8)+1&255})}function an(m){return m(function(){z("SHX"),D=b&(H>>>8)+1&255})}function fn(m){return m(function(){z("SHY"),D=x&(H>>>8)+1&255})}function Ze(m){return m(function(){Y(D>127);var h=D<<1&255;D=h,L(h),O(h)})}function Me(m){return m(function(){var h=D-1&255;D=h,L(h),O(h)})}function Fe(m){return m(function(){var h=D+1&255;D=h,L(h),O(h)})}function Te(m){return m(function(){_=D&1,D>>>=1,L(D),f=0})}function Ue(m){return m(function(){var h=D>127,j=(D<<1|_)&255;D=j,Y(h),L(j),O(j)})}function Xe(m){return m(function(){var h=D&1,j=D>>>1|_<<7;D=j,Y(h),L(j),O(j)})}function me(m){return m(function(){z("DCP");var h=D-1&255;D=h,h=o-h,Y(h>=0),L(h),O(h)})}function be(m){return m(function(){if(z("ISB"),D=D+1&255,N){var h=D,j=(o&15)-(h&15)-(1-_),g0=(o>>4)-(h>>4)-(j<0?1:0);j<0&&(j-=6),g0<0&&(g0-=6);var C0=o-h-(1-_);Y(~C0&256),k0((o^h)&(o^C0)&128),L(C0&255),O(C0),o=(g0<<4|j&15)&255}else h=~D&255,C0=o+h+_,Y(C0>255),k0((o^C0)&(h^C0)&128),o=C0&255,L(o),O(o)})}function de(m){return m(function(){z("RLA");var h=D,j=_;Y(h&128),h=(h<<1|j)&255,D=h,o&=h,L(h),O(h)})}function he(m){return m(function(){z("RRA");var h=D,j=_?128:0;if(Y(h&1),h=h>>>1|j,D=h,N){var g0=D,C0=(o&15)+(g0&15)+_;C0>9&&(C0+=6);var we=(o>>4)+(g0>>4)+(C0>15?1:0)<<4;L(o+g0+_&255),O(we),k0((o^we)&~(o^g0)&128),we>159&&(we+=96),Y(we>255),o=(we|C0&15)&255}else{var He=o+D+_;Y(He>255),k0((o^He)&(D^He)&128),o=He&255,L(o),O(o)}})}function Ae(m){return m(function(){z("SLO");var h=D;Y(h&128),h=h<<1&255,D=h,h=o|h,o=h,L(h),O(h)})}function Ce(m){return m(function(){z("SRE");var h=D;Y(h&1),h=h>>>1,D=h,h=(o^h)&255,o=h,L(h),O(h)})}function sn(){return[U,v0,function(){J(o)},y]}function cn(){return[U,v0,function(){J(l0())},y]}function on(){return[U,v0,S0,function(){o=n0(),L(o),O(o)},y]}function xn(){return[U,v0,S0,function(){I0(n0())},y]}function un(){return[U,I,S0,function(){J(i>>>8&255)},function(){J(i&255)},U0,function(){i=t0,y()}]}function ln(){return[U,i0,function(){C.debug&&C.breakpoint("BRK "+D),J(i>>>8&255)},function(){J(i&255)},function(){J(l0())},function(){t0=e.read(p0)},function(){t0|=e.read(p0+1)<<8},function(){i=t0,g=1,y()}]}function mn(){return[U,i0,function(){C.debug&&C.breakpoint("IRQ "+D),J(i>>>8&255)},function(){J(i&255)},function(){J(l0()&-17)},function(){t0=e.read(p0)},function(){t0|=e.read(p0+1)<<8},function(){i=t0,y()}]}function bn(){return[U,i0,function(){C.debug&&C.breakpoint("NMI "+D),J(i>>>8&255)},function(){J(i&255)},function(){J(l0()&-17)},function(){t0=e.read(N0)},function(){t0|=e.read(N0+1)<<8},function(){i=t0,y()}]}function dn(){return[U,v0,S0,function(){I0(n0())},function(){t0=n0()},function(){t0|=n0()<<8},function(){i=t0,y()}]}function hn(){return[U,v0,S0,function(){t0=n0()},function(){t0|=n0()<<8},function(){i=t0,i0()},y]}function An(){return[U,I,U0,function(){i=t0,y()}]}function Cn(){return[U,T0,w0,b0,function(){c0(),E0()},function(){i=H,y()}]}function oe(m,h){var j;return m===X?j=function(){return B===h}:m===V0?j=function(){return f===h}:m===m0?j=function(){return _===h}:j=function(){return W===h},[U,u0,function(){j()?(v0(),Z()):y()},function(){x0?(v0(),e0()):y()},y]}this.saveState=function(){return{PC:i-1&65535,A:o,X:b,Y:x,SP:l,N:f,V:W,D:N,I:g,Z:B,C:_,T:a0,o:_0,R:n?1:0,d:D,AD:t0,BA:H,BC:K?1:0,IA:s,bo:c,boa:x0}},this.loadState=function(m){i=m.PC+1&65535,o=m.A,b=m.X,x=m.Y,l=m.SP,f=m.N,W=m.V,N=m.D,g=m.I,B=m.Z,_=m.C,a0=m.T,_0=m.o,n=!!m.R,D=m.d,t0=m.AD,H=m.BA,K=!!m.BC,s=m.IA,c=m.bo,x0=m.boa,d=_0<0?[U]:a[_0]},this.toString=function(){return"CPU PC: "+i.toString(16)+" op: "+_0.toString()+" T: "+a0+" data: "+D+` A: `+o.toString(16)+" X: "+b.toString(16)+" Y: "+x.toString(16)+" SP: "+l.toString(16)+" N"+f+" V"+W+" D"+N+" I"+g+" Z"+B+" C"+_+" "},this.breakpoint=function(m){if(this.trace)var h="CPU Breakpoint! "+(m?"("+m+")":"")+` -`+this.toString()};var Pt=[7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,0,6,0,6,3,3,3,3,2,0,2,0,4,4,4,4,2,6,0,0,4,4,4,4,2,5,2,0,0,5,0,0,2,6,2,6,3,3,3,3,2,2,2,0,4,4,4,4,2,5,0,5,4,4,4,4,2,4,2,0,4,4,4,4,2,6,0,8,3,3,5,5,2,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,2,6,0,8,3,3,5,5,2,2,2,0,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7],vn=[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1],Sn=[1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,3,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,0,2,0,2,2,2,2,2,1,0,1,0,3,3,3,3,2,2,0,0,2,2,2,3,1,3,1,0,0,3,0,0,2,2,2,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3],On=[1,2,0,0,0,2,2,0,1,2,1,0,0,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,3,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,0,2,0,0,2,2,2,0,1,0,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,0,3,0,0,2,2,2,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0];this.getOpcodeMetadata=function(m,h){return{opcode:m,mnenomic:t[m],minCycles:Pt[m],maxCycles:Pt[m]+vn[m],insnlength:Sn[m]}},this.setNMI=function(){d=bn(),a0=1,i=i-1&65535},this.setIRQ=function(){g||(d=mn(),a0=1,i=i-1&65535)},this.getSP=function(){return l},this.getPC=function(){return i-1&65535},this.getT=function(){return a0},this.isHalted=function(){return t[_0]=="uKIL"},this.isPCStable=function(){return a0==0}};var Ft=class{constructor(){this.cpu=new mt;this.interruptType=0}connectMemoryBus(e){this.cpu.connectBus(e)}advanceClock(){if(this.interruptType&&this.isStable()){switch(this.interruptType){case 1:this.cpu.setNMI();break;case 2:this.cpu.setIRQ();break}this.interruptType=0}this.cpu.clockPulse()}advanceInsn(){do this.advanceClock();while(!this.isStable())}reset(){this.cpu.reset(),this.interruptType=0}interrupt(e){this.interruptType!=1&&(this.interruptType=e)}NMI(){this.interrupt(1)}IRQ(){this.interrupt(2)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.isHalted()}saveState(){var e=this.cpu.saveState();return e.it=this.interruptType,e}loadState(e){this.cpu.loadState(e),this.interruptType=e.it}isStable(){return this.cpu.isPCStable()}getOpcodeMetadata(e){return this.cpu.getOpcodeMetadata(e)}};var Ne=class{constructor(e){this.maxROMSize=262144;this.videoOffsetBytes=0;this.prefix=e;var n=this;this.cpu={getPC:n.getPC.bind(n),getSP:n.getSP.bind(n),isStable:n.isStable.bind(n),reset:n.reset.bind(n),saveState:()=>n.getCPUState(),loadState:()=>{console.log("loadState not implemented")},connectMemoryBus(){console.log("connectMemoryBus not implemented")}}}getImports(e){return{}}async fetchWASM(){var e=await fetch("res/"+this.prefix+".wasm");if(e.status==200||e.size){var n=await e.arrayBuffer(),i=await WebAssembly.compile(n),l=await WebAssembly.instantiate(i,this.getImports(i));this.instance=l,this.exports=l.exports}else throw new Error("could not load WASM file")}allocateBIOS(e){this.biosptr=this.exports.malloc(e.byteLength),this.biosarr=new Uint8Array(this.exports.memory.buffer,this.biosptr,e.byteLength)}async fetchBIOS(){var e=await fetch("res/"+this.prefix+".bios");if(e.status==200||e.size){var n=new Uint8Array(await e.arrayBuffer());this.allocateBIOS(n),this.loadBIOS(n)}else throw new Error("could not load BIOS file")}async initWASM(){this.sys=this.exports.machine_init(this.biosptr);let e=this.exports.machine_get_state_size();this.stateptr=this.exports.malloc(e);let n=this.exports.machine_get_controls_state_size();this.ctrlstateptr=this.exports.malloc(n);let i=this.exports.machine_get_cpu_state_size();this.cpustateptr=this.exports.malloc(i),this.romptr=this.exports.malloc(this.maxROMSize),this.statearr=new Uint8Array(this.exports.memory.buffer,this.stateptr,e),this.ctrlstatearr=new Uint8Array(this.exports.memory.buffer,this.ctrlstateptr,n),this.cpustatearr=new Uint8Array(this.exports.memory.buffer,this.cpustateptr,i);let l=4096*4;this.audioarr=new Float32Array(this.exports.memory.buffer,this.exports.machine_get_sample_buffer(),l),this.romarr=new Uint8Array(this.exports.memory.buffer,this.romptr,this.maxROMSize),console.log("machine_init",this.sys,e,n,i,l)}async loadWASM(){await this.fetchWASM(),this.exports.memory.grow(96),await this.fetchBIOS(),await this.initWASM()}getPC(){return this.exports.machine_cpu_get_pc(this.sys)}getSP(){return this.exports.machine_cpu_get_sp(this.sys)}isStable(){return this.exports.machine_cpu_is_stable(this.sys)}loadROM(e){if(e.length>this.maxROMSize)throw new Ye(`Rom size too big: ${e.length} bytes`);this.romarr.set(e),this.romlen=e.length,console.log("load rom",e.length,"bytes"),this.reset()}loadBIOS(e){this.biosarr.set(e)}reset(){this.exports.machine_reset(this.sys)}read(e){return this.exports.machine_mem_read(this.sys,e&65535)}readConst(e){return this.exports.machine_mem_read(this.sys,e&65535)}write(e,n){this.exports.machine_mem_write(this.sys,e&65535,n&255)}getAudioParams(){return{sampleRate:44100,stereo:!1}}connectVideo(e){this.pixel_dest=e;var n=this.exports.machine_get_pixel_buffer(this.sys);console.log("connectVideo",n,e.length),this.pixel_src=new Uint32Array(this.exports.memory.buffer,n+this.videoOffsetBytes,e.length)}syncVideo(){this.exports.machine_update_video&&this.exports.machine_update_video(this.sys),this.pixel_dest!=null&&this.pixel_dest.set(this.pixel_src)}saveControlsState(){return this.exports.machine_save_controls_state(this.sys,this.ctrlstateptr),{controls:this.ctrlstatearr.slice(0)}}loadControlsState(e){this.ctrlstatearr.set(e.controls),this.exports.machine_load_controls_state(this.sys,this.ctrlstateptr)}connectAudio(e){this.audio=e}syncAudio(){if(this.audio!=null)for(var e=this.exports.machine_get_sample_count(),n=0;n{var e=!1;for(var n in this.id2bp)this.id2bp[n].cond()&&(e=!0);return e}}},ht=class{constructor(){this.recorder=null;this.internalFiles={}}setRecorder(e){this.recorder=e}updateRecorder(){this.recorder&&this.isRunning()&&this.recorder.frameRequested()&&this.recorder.recordFrame(this.saveState())}inspect(e){return kn(this,e)}getDebugTree(){var n;var e={};return e.state=this.saveState(),(n=this.debugSymbols)!=null&&n.debuginfo&&(e.debuginfo=this.debugSymbols.debuginfo),e}readFile(e){return this.internalFiles[e]}writeFile(e,n){return this.internalFiles[e]=n,!0}},ye=class extends ht{constructor(){super(...arguments);this.debugSavedState=null;this.debugBreakState=null;this.debugTargetClock=0;this.debugClock=0;this.breakpoints=new dt;this.frameCount=0;this.debugPCDelta=0}fixPC(n){return n.PC=n.PC+this.debugPCDelta&65535,n}unfixPC(n){return n.PC=n.PC-this.debugPCDelta&65535,n}debugUsesEPC(){return!1}setBreakpoint(n,i){i?(this.breakpoints.id2bp[n]={cond:i},this.restartDebugging()):this.clearBreakpoint(n)}clearBreakpoint(n){delete this.breakpoints.id2bp[n]}hasBreakpoint(n){return this.breakpoints.id2bp[n]!=null}getDebugCallback(){return this.breakpoints.getDebugCondition()}setupDebug(n){this.onBreakpointHit=n}clearDebug(){this.debugBreakState!=null&&this.debugSavedState!=null&&this.loadState(this.debugSavedState),this.debugSavedState=null,this.debugBreakState=null,this.debugTargetClock=-1,this.debugClock=0,this.onBreakpointHit=null,this.clearBreakpoint("debug"),this.frameCount=0}setDebugCondition(n){this.setBreakpoint("debug",n)}resetDebugging(){this.debugSavedState?this.loadState(this.debugSavedState):this.debugSavedState=this.saveState(),this.debugClock=0,this.debugCallback=this.getDebugCallback(),this.debugBreakState=null}restartDebugging(){this.resetDebugging(),this.resume()}preFrame(){this.debugCallback&&!this.debugBreakState&&(this.debugSavedState=this.saveState(),this.debugTargetClock-=this.debugClock,this.debugClock=0)}postFrame(){this.debugCallback&&this.debugBreakState&&this.loadState(this.debugBreakState),this.frameCount++}pollControls(){}nextFrame(n){this.pollControls(),this.updateRecorder(),this.preFrame();var i=this.advance(n);return this.postFrame(),i}evalDebugCondition(){this.debugCallback&&!this.debugBreakState&&this.debugCallback()}wasBreakpointHit(){return this.debugBreakState!=null}breakpointHit(n,i){console.log(this.debugTargetClock,n,this.debugClock,this.isStable()),this.debugTargetClock=n,this.debugBreakState=this.saveState(),console.log("Breakpoint at clk",this.debugClock,"PC",this.debugBreakState.c.PC.toString(16)),this.pause(),this.onBreakpointHit&&this.onBreakpointHit(this.debugBreakState,i)}haltAndCatchFire(n){this.breakpointHit(this.debugClock,n)}runEval(n){this.setDebugCondition(()=>{if(++this.debugClock>=this.debugTargetClock&&this.isStable()){var i=this.getCPUState();return n(i)?(this.breakpointHit(this.debugClock),!0):!1}})}runToPC(n){this.runEvalAtPC(new Map(n.map(i=>[i,null])))}runEvalAtPC(n){this.debugTargetClock++;let i=this.debugUsesEPC();this.setDebugCondition(()=>{if(++this.debugClocki.SP>n)}stepOver(){var x;var n=this,i=this.getPC(),l=null,o=(x=n.readAddress)==null?void 0:x.bind(n);if(o&&n.disassemble&&(l=n.disassemble(i,o)),l&&l.iscall){var b=i+l.nbytes;this.debugTargetClock++,this.runEval(f=>f.PC==b)}else this.step()}hasCustomStepOver(){return!1}runToFrameClock(n){this.restartDebugging(),this.debugTargetClock=n,this.runEval(()=>!0)}step(){this.runToFrameClock(this.debugClock+1)}stepBack(){var n,i,l=this.debugTargetClock;this.restartDebugging(),this.debugTargetClock=l-25,this.runEval(o=>this.debugClockthis.frameCount>n)}};function kn(C,e){if(C.debugSymbols){var n=C.debugSymbols.symbolmap,i=C.debugSymbols.addr2symbol;if(!n||!C.readAddress)return null;var l=n["_"+e]||n[e];if(typeof l!="number")return null;var o=C.readAddress(l);if(i&&i[l+1]!=null)return"$"+$(l,4)+" = $"+$(o,2)+" ("+o+" decimal)";{let b=C.readAddress(l+1),x=o|b<<8;return"$"+$(l,4)+" = $"+$(o,2)+" $"+$(b,2)+" ("+(x<<16>>16)+" decimal)"}}}var Ut=class extends ye{constructor(){super(...arguments);this.debugPCDelta=-1;this.getToolForFilename=it}getSP(){return this.getCPUState().SP}getPC(){return this.getCPUState().PC}isStable(){return!this.getCPUState().T}newCPU(n){var i=new mt;return i.connectBus(n),i}getOpcodeMetadata(n,i){return Kt(n,i)}getOriginPC(){return(this.readAddress(65532)|this.readAddress(65533)<<8)&65535}disassemble(n,i){return ct(n,i(n),i(n+1),i(n+2))}getDefaultExtensions(){return[".c",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}getDebugCategories(){return["CPU","ZPRAM","Stack"]}getDebugInfo(n,i){switch(n){case"CPU":return zt(i.c);case"ZPRAM":return at(i.b||i.ram,0,256);case"Stack":return Le(this,i.b||i.ram,256,511,256+i.c.SP,32)}}};function zt(C){function e(n){var i="";return i+=n.N?" N":" -",i+=n.V?" V":" -",i+=n.D?" D":" -",i+=n.Z?" Z":" -",i+=n.C?" C":" -",i+=n.I?" I":" -",i}return"PC "+$(C.PC,4)+" "+e(C)+` +`+this.toString()};var Pt=[7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,0,6,0,6,3,3,3,3,2,0,2,0,4,4,4,4,2,6,0,0,4,4,4,4,2,5,2,0,0,5,0,0,2,6,2,6,3,3,3,3,2,2,2,0,4,4,4,4,2,5,0,5,4,4,4,4,2,4,2,0,4,4,4,4,2,6,0,8,3,3,5,5,2,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,2,6,0,8,3,3,5,5,2,2,2,0,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7],vn=[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1],Sn=[1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,3,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,0,2,0,2,2,2,2,2,1,0,1,0,3,3,3,3,2,2,0,0,2,2,2,3,1,3,1,0,0,3,0,0,2,2,2,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3],On=[1,2,0,0,0,2,2,0,1,2,1,0,0,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,3,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,0,2,0,0,2,2,2,0,1,0,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,0,3,0,0,2,2,2,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0];this.getOpcodeMetadata=function(m,h){return{opcode:m,mnenomic:t[m],minCycles:Pt[m],maxCycles:Pt[m]+vn[m],insnlength:Sn[m]}},this.setNMI=function(){d=bn(),a0=1,i=i-1&65535},this.setIRQ=function(){g||(d=mn(),a0=1,i=i-1&65535)},this.getSP=function(){return l},this.getPC=function(){return i-1&65535},this.getT=function(){return a0},this.isHalted=function(){return t[_0]=="uKIL"},this.isPCStable=function(){return a0==0}};var Ft=class{constructor(){this.cpu=new mt;this.interruptType=0}connectMemoryBus(e){this.cpu.connectBus(e)}advanceClock(){if(this.interruptType&&this.isStable()){switch(this.interruptType){case 1:this.cpu.setNMI();break;case 2:this.cpu.setIRQ();break}this.interruptType=0}this.cpu.clockPulse()}advanceInsn(){do this.advanceClock();while(!this.isStable())}reset(){this.cpu.reset(),this.interruptType=0}interrupt(e){this.interruptType!=1&&(this.interruptType=e)}NMI(){this.interrupt(1)}IRQ(){this.interrupt(2)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.isHalted()}saveState(){var e=this.cpu.saveState();return e.it=this.interruptType,e}loadState(e){this.cpu.loadState(e),this.interruptType=e.it}isStable(){return this.cpu.isPCStable()}getOpcodeMetadata(e){return this.cpu.getOpcodeMetadata(e)}};var Ne=class{constructor(e){this.maxROMSize=262144;this.videoOffsetBytes=0;this.prefix=e;var n=this;this.cpu={getPC:n.getPC.bind(n),getSP:n.getSP.bind(n),isStable:n.isStable.bind(n),reset:n.reset.bind(n),saveState:()=>n.getCPUState(),loadState:()=>{console.log("loadState not implemented")},connectMemoryBus(){console.log("connectMemoryBus not implemented")}}}getImports(e){return{}}async fetchWASM(){var e=await fetch("res/"+this.prefix+".wasm");if(e.status==200||e.size){var n=await e.arrayBuffer(),i=await WebAssembly.compile(n),l=await WebAssembly.instantiate(i,this.getImports(i));this.instance=l,this.exports=l.exports}else throw new Error("could not load WASM file")}allocateBIOS(e){this.biosptr=this.exports.malloc(e.byteLength),this.biosarr=new Uint8Array(this.exports.memory.buffer,this.biosptr,e.byteLength)}async fetchBIOS(){var e=await fetch("res/"+this.prefix+".bios");if(e.status==200||e.size){var n=new Uint8Array(await e.arrayBuffer());this.allocateBIOS(n),this.loadBIOS(n)}else throw new Error("could not load BIOS file")}async initWASM(){this.sys=this.exports.machine_init(this.biosptr);let e=this.exports.machine_get_state_size();this.stateptr=this.exports.malloc(e);let n=this.exports.machine_get_controls_state_size();this.ctrlstateptr=this.exports.malloc(n);let i=this.exports.machine_get_cpu_state_size();this.cpustateptr=this.exports.malloc(i),this.romptr=this.exports.malloc(this.maxROMSize),this.statearr=new Uint8Array(this.exports.memory.buffer,this.stateptr,e),this.ctrlstatearr=new Uint8Array(this.exports.memory.buffer,this.ctrlstateptr,n),this.cpustatearr=new Uint8Array(this.exports.memory.buffer,this.cpustateptr,i);let l=4096*4;this.audioarr=new Float32Array(this.exports.memory.buffer,this.exports.machine_get_sample_buffer(),l),this.romarr=new Uint8Array(this.exports.memory.buffer,this.romptr,this.maxROMSize),console.log("machine_init",this.sys,e,n,i,l)}async loadWASM(){await this.fetchWASM(),this.exports.memory.grow(96),await this.fetchBIOS(),await this.initWASM()}getPC(){return this.exports.machine_cpu_get_pc(this.sys)}getSP(){return this.exports.machine_cpu_get_sp(this.sys)}isStable(){return this.exports.machine_cpu_is_stable(this.sys)}loadROM(e){if(e.length>this.maxROMSize)throw new Ye(`Rom size too big: ${e.length} bytes`);this.romarr.set(e),this.romlen=e.length,console.log("load rom",e.length,"bytes"),this.reset()}loadBIOS(e){this.biosarr.set(e)}reset(){this.exports.machine_reset(this.sys)}read(e){return this.exports.machine_mem_read(this.sys,e&65535)}readConst(e){return this.exports.machine_mem_read(this.sys,e&65535)}write(e,n){this.exports.machine_mem_write(this.sys,e&65535,n&255)}getAudioParams(){return{sampleRate:44100,stereo:!1}}connectVideo(e){this.pixel_dest=e;var n=this.exports.machine_get_pixel_buffer(this.sys);console.log("connectVideo",n,e.length),this.pixel_src=new Uint32Array(this.exports.memory.buffer,n+this.videoOffsetBytes,e.length)}syncVideo(){this.exports.machine_update_video&&this.exports.machine_update_video(this.sys),this.pixel_dest!=null&&this.pixel_dest.set(this.pixel_src)}saveControlsState(){return this.exports.machine_save_controls_state(this.sys,this.ctrlstateptr),{controls:this.ctrlstatearr.slice(0)}}loadControlsState(e){this.ctrlstatearr.set(e.controls),this.exports.machine_load_controls_state(this.sys,this.ctrlstateptr)}connectAudio(e){this.audio=e}syncAudio(){if(this.audio!=null)for(var e=this.exports.machine_get_sample_count(),n=0;n{var e=!1;for(var n in this.id2bp)this.id2bp[n].cond()&&(e=!0);return e}}},ht=class{constructor(){this.recorder=null;this.internalFiles={}}setRecorder(e){this.recorder=e}updateRecorder(){this.recorder&&this.isRunning()&&this.recorder.frameRequested()&&this.recorder.recordFrame(this.saveState())}inspect(e){return kn(this,e)}getDebugTree(){var n;var e={};return e.state=this.saveState(),(n=this.debugSymbols)!=null&&n.debuginfo&&(e.debuginfo=this.debugSymbols.debuginfo),e}readFile(e){return this.internalFiles[e]}writeFile(e,n){return this.internalFiles[e]=n,!0}},ye=class extends ht{constructor(){super(...arguments);this.debugSavedState=null;this.debugBreakState=null;this.debugTargetClock=0;this.debugClock=0;this.breakpoints=new dt;this.frameCount=0;this.debugPCDelta=0}fixPC(n){return n.PC=n.PC+this.debugPCDelta&65535,n}unfixPC(n){return n.PC=n.PC-this.debugPCDelta&65535,n}debugUsesEPC(){return!1}setBreakpoint(n,i){i?(this.breakpoints.id2bp[n]={cond:i},this.restartDebugging()):this.clearBreakpoint(n)}clearBreakpoint(n){delete this.breakpoints.id2bp[n]}hasBreakpoint(n){return this.breakpoints.id2bp[n]!=null}getDebugCallback(){return this.breakpoints.getDebugCondition()}setupDebug(n){this.onBreakpointHit=n}clearDebug(){this.debugBreakState!=null&&this.debugSavedState!=null&&this.loadState(this.debugSavedState),this.debugSavedState=null,this.debugBreakState=null,this.debugTargetClock=-1,this.debugClock=0,this.onBreakpointHit=null,this.clearBreakpoint("debug"),this.frameCount=0}setDebugCondition(n){this.setBreakpoint("debug",n)}resetDebugging(){this.debugSavedState?this.loadState(this.debugSavedState):this.debugSavedState=this.saveState(),this.debugClock=0,this.debugCallback=this.getDebugCallback(),this.debugBreakState=null}restartDebugging(){this.resetDebugging(),this.resume()}preFrame(){this.debugCallback&&!this.debugBreakState&&(this.debugSavedState=this.saveState(),this.debugTargetClock-=this.debugClock,this.debugClock=0)}postFrame(){this.debugCallback&&this.debugBreakState&&this.loadState(this.debugBreakState),this.frameCount++}pollControls(){}nextFrame(n){this.pollControls(),this.updateRecorder(),this.preFrame();var i=this.advance(n);return this.postFrame(),i}evalDebugCondition(){this.debugCallback&&!this.debugBreakState&&this.debugCallback()}wasBreakpointHit(){return this.debugBreakState!=null}breakpointHit(n,i){console.log(this.debugTargetClock,n,this.debugClock,this.isStable()),this.debugTargetClock=n,this.debugBreakState=this.saveState(),console.log("Breakpoint at clk",this.debugClock,"PC",this.debugBreakState.c.PC.toString(16)),this.pause(),this.onBreakpointHit&&this.onBreakpointHit(this.debugBreakState,i)}haltAndCatchFire(n){this.breakpointHit(this.debugClock,n)}runEval(n){this.setDebugCondition(()=>{if(++this.debugClock>=this.debugTargetClock&&this.isStable()){var i=this.getCPUState();return n(i)?(this.breakpointHit(this.debugClock),!0):!1}})}runToPC(n){this.runEvalAtPC(new Map(n.map(i=>[i,null])))}runEvalAtPC(n){this.debugTargetClock++;let i=this.debugUsesEPC();this.setDebugCondition(()=>{if(++this.debugClocki.SP>n)}stepOver(){var x;var n=this,i=this.getPC(),l=null,o=(x=n.readAddress)==null?void 0:x.bind(n);if(o&&n.disassemble&&(l=n.disassemble(i,o)),l&&l.iscall){var b=i+l.nbytes;this.debugTargetClock++,this.runEval(f=>f.PC==b)}else this.step()}hasCustomStepOver(){return!1}runToFrameClock(n){this.restartDebugging(),this.debugTargetClock=n,this.runEval(()=>!0)}step(){this.runToFrameClock(this.debugClock+1)}stepBack(){var n,i,l=this.debugTargetClock;this.restartDebugging(),this.debugTargetClock=l-25,this.runEval(o=>this.debugClockthis.frameCount>n)}};function kn(C,e){if(C.debugSymbols){var n=C.debugSymbols.symbolmap,i=C.debugSymbols.addr2symbol;if(!n||!C.readAddress)return null;var l=n["_"+e]||n[e];if(typeof l!="number")return null;var o=C.readAddress(l);if(i&&i[l+1]!=null)return"$"+$(l,4)+" = $"+$(o,2)+" ("+o+" decimal)";{let b=C.readAddress(l+1),x=o|b<<8;return"$"+$(l,4)+" = $"+$(o,2)+" $"+$(b,2)+" ("+(x<<16>>16)+" decimal)"}}}var Ut=class extends ye{constructor(){super(...arguments);this.debugPCDelta=-1;this.getToolForFilename=it}getSP(){return this.getCPUState().SP}getPC(){return this.getCPUState().PC}isStable(){return!this.getCPUState().T}newCPU(n){var i=new mt;return i.connectBus(n),i}getOpcodeMetadata(n,i){return Kt(n,i)}getOriginPC(){return(this.readAddress(65532)|this.readAddress(65533)<<8)&65535}disassemble(n,i){return ct(n,i(n),i(n+1),i(n+2))}getDefaultExtensions(){return[".c",".sdcc",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}getDebugCategories(){return["CPU","ZPRAM","Stack"]}getDebugInfo(n,i){switch(n){case"CPU":return zt(i.c);case"ZPRAM":return at(i.b||i.ram,0,256);case"Stack":return Le(this,i.b||i.ram,256,511,256+i.c.SP,32)}}};function zt(C){function e(n){var i="";return i+=n.N?" N":" -",i+=n.V?" V":" -",i+=n.D?" D":" -",i+=n.Z?" Z":" -",i+=n.C?" C":" -",i+=n.I?" I":" -",i}return"PC "+$(C.PC,4)+" "+e(C)+` A `+$(C.A)+" "+(C.R?"":"BUSY")+` X `+$(C.X)+` Y `+$(C.Y)+" SP "+$(C.SP)+` @@ -14,7 +14,7 @@ DE `+$(C.DE,4)+" HL "+$(C.HL,4)+` SP `+$(C.SP,4)+` AF `+$(C.AF,4)+" BC "+$(C.BC,4)+` DE `+$(C.DE,4)+" HL "+$(C.HL,4)+` -`}var At=class extends ye{constructor(){super(...arguments);this.waitCycles=0;this.getToolForFilename=ft}newCPU(n,i){return this._cpu=new We,this._cpu.connectMemoryBus(n),this._cpu.connectIOBus(i),this._cpu}getPC(){return this._cpu.getPC()}getSP(){return this._cpu.getSP()}isStable(){return!0}runCPU(n,i){if(this._cpu=n,this.waitCycles=0,this.wasBreakpointHit())return 0;var l=this.getDebugCallback(),o=0;for(this.waitCycles+=i;this.waitCycles>0;){if(l&&l()){l=null;break}var b=n.advanceInsn();o+=b,this.waitCycles-=b}return o}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}getDebugCategories(){return["CPU","Stack"]}getDebugInfo(n,i){switch(n){case"CPU":return jt(i.c);case"Stack":{var l=i.c.SP-1&65535,o=l&65280,b=o+255;return l==0&&(l=65536),console.log(l,o,b),Le(this,[],o,b,l,205)}}}disassemble(n,i){return lt(n,i(n),i(n+1),i(n+2),i(n+3))}};function Ct(C){function e(n){return Ve(n,["E","F","H","I","N","Z","V","C"],!0)}return"PC "+$(C.PC,4)+" "+e(C.CC)+` +`}var At=class extends ye{constructor(){super(...arguments);this.waitCycles=0;this.getToolForFilename=ft}newCPU(n,i){return this._cpu=new We,this._cpu.connectMemoryBus(n),this._cpu.connectIOBus(i),this._cpu}getPC(){return this._cpu.getPC()}getSP(){return this._cpu.getSP()}isStable(){return!0}runCPU(n,i){if(this._cpu=n,this.waitCycles=0,this.wasBreakpointHit())return 0;var l=this.getDebugCallback(),o=0;for(this.waitCycles+=i;this.waitCycles>0;){if(l&&l()){l=null;break}var b=n.advanceInsn();o+=b,this.waitCycles-=b}return o}getDefaultExtensions(){return[".c",".sdcc",".ns",".s",".scc",".sgb",".z",".wiz"]}getDebugCategories(){return["CPU","Stack"]}getDebugInfo(n,i){switch(n){case"CPU":return jt(i.c);case"Stack":{var l=i.c.SP-1&65535,o=l&65280,b=o+255;return l==0&&(l=65536),console.log(l,o,b),Le(this,[],o,b,l,205)}}}disassemble(n,i){return lt(n,i(n),i(n+1),i(n+2),i(n+3))}};function Ct(C){function e(n){return Ve(n,["E","F","H","I","N","Z","V","C"],!0)}return"PC "+$(C.PC,4)+" "+e(C.CC)+` SP `+$(C.SP,4)+` DP `+$(C.DP,2)+` A `+$(C.A,2)+` @@ -27,4 +27,4 @@ $`+$(l)+": ",x+=$(N,4)+" "+Dn(C,N,!0),l++,f=0):(f==0&&(x+=` $`+$(l)+": "),x+=$(W(l))+" ",++f==8&&(f=0))}return x+` `}function Dn(C,e,n){for(var i=e,l=C.debugSymbols&&C.debugSymbols.addr2symbol;l&&e>=0;){var o=l[e];if(o){var o=l[e];return n?o+" + $"+$(i-e):o}if(!n)break;e--}return""}function Rn(C){return typeof C.connectVideo=="function"}function Bn(C){return typeof C.connectAudio=="function"}function Nn(C){return typeof C.setKeyInput=="function"}function Ht(C){return typeof C.setPaddleInput=="function"}function bt(C){return typeof C.getRasterY=="function"}function yn(C){return typeof C.connectProbe=="function"}function In(C){return typeof C.loadBIOS=="function"}function Ln(C){return typeof C.connectSerialIO=="function"}var Ie=class extends ye{constructor(e){super(),this.mainElement=e}reset(){this.machine.reset(),this.serialVisualizer!=null&&this.serialVisualizer.reset()}loadState(e){if(!this.debugPCDelta||!e.c)return this.machine.loadState(e);this.unfixPC(e.c);try{this.machine.loadState(e)}finally{this.fixPC(e.c)}}saveState(){let e=this.machine.saveState();return this.debugPCDelta&&e.c&&this.fixPC(e.c),e}getSP(){return this.machine.cpu.getSP()}getPC(){return this.machine.cpu.getPC()}isStable(){return this.machine.cpu.isStable()}getCPUState(){return this.fixPC(this.machine.cpu.saveState())}loadControlsState(e){this.machine.loadControlsState(e)}saveControlsState(){return this.machine.saveControlsState()}async start(){this.machine=this.newMachine();let e=this.machine;e instanceof Ne&&await e.loadWASM();var n;if(Rn(e)){var i=e.getVideoParams();this.video=new Dt(this.mainElement,i.width,i.height,{overscan:!!i.overscan,rotate:i.rotate|0,aspect:i.aspect}),this.video.create(),e.connectVideo(this.video.getFrameData()),Nn(e)&&(this.video.setKeyboardEvents(e.setKeyInput.bind(e)),this.poller=new Bt(e.setKeyInput.bind(e))),n=i.videoFrequency}if(this.timer=new Rt(n||60,this.nextFrame.bind(this)),Bn(e)){var l=e.getAudioParams();this.audio=new Ke(l.sampleRate),this.audio.start(),e.connectAudio(this.audio)}Ht(e)&&this.video.setupMouseEvents(),yn(e)&&(this.probeRecorder=new je(e),this.startProbing=()=>(e.connectProbe(this.probeRecorder),this.probeRecorder),this.stopProbing=()=>{e.connectProbe(null)}),In(e)&&(this.loadBIOS=(o,b)=>{e.loadBIOS(b,o)}),Ln(e)&&(this.serialIOInterface==null?this.serialVisualizer=new vt(this.mainElement,e):e.connectSerialIO(this.serialIOInterface))}loadROM(e,n,i){this.machine.loadROM(n,e,i),this.reset()}pollControls(){this.poller&&this.poller.poll(),Ht(this.machine)&&(this.machine.setPaddleInput(0,this.video.paddle_x),this.machine.setPaddleInput(1,this.video.paddle_y),this.machine.setPaddleButton&&this.video.paddle_buttons!=null&&(this.machine.setPaddleButton(0,this.video.paddle_buttons[0]),this.machine.setPaddleButton(1,this.video.paddle_buttons[1]),this.machine.setPaddleButton(2,this.video.paddle_buttons[2]))),this.machine.pollControls&&this.machine.pollControls()}advance(e){let n=this.getDebugCallback();try{var i=this.machine.advanceFrame(n);return i}finally{!e&&this.video&&(this.video.updateFrame(),this.updateVideoDebugger()),!e&&this.serialVisualizer&&this.serialVisualizer.refresh()}}updateVideoDebugger(){var e;if(!this.isRunning()&&bt(this.machine)&&this.machine.getRasterCanvasPosition){let{x:n,y:i}=this.machine.getRasterCanvasPosition();if(n>=0||i>=0){let l=(e=this.video)==null?void 0:e.getContext();l&&kt(l,n,i,1)}}}advanceFrameClock(e,n){if(n>0)return this.machine instanceof Ne?this.machine.advanceFrameClock(e,n):this.machine.advanceFrame(()=>--n<=0)}isRunning(){return this.timer&&this.timer.isRunning()}resume(){this.timer.start(),this.audio&&this.audio.start(),this.poller&&this.poller.start()}pause(){this.timer.stop(),this.audio&&this.audio.stop(),this.poller&&this.poller.stop()}runToVsync(){this.restartDebugging();var e=!1;this.runEval(()=>{if(this.getRasterScanline()>0)e=!0;else return e})}getRasterScanline(){return bt(this.machine)&&this.machine.getRasterY?this.machine.getRasterY():-1}getRasterLineClock(){return bt(this.machine)&&this.machine.getRasterX?this.machine.getRasterX():-1}readAddress(e){return this.machine.read(e)}getDebugCategories(){if(ve(this.machine))return this.machine.getDebugCategories()}getDebugInfo(e,n){return ve(this.machine)&&this.machine.getDebugInfo(e,n)}},Vt=class extends Ie{constructor(){super(...arguments);this.getOpcodeMetadata=Kt}getToolForFilename(n){return it(n)}getDefaultExtensions(){return[".c",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}disassemble(n,i){return ct(n,i(n),i(n+1),i(n+2))}getDebugCategories(){return ve(this.machine)?this.machine.getDebugCategories():["CPU","ZPRAM","Stack"]}getDebugInfo(n,i){switch(n){case"CPU":return zt(i.c);case"ZPRAM":return at(i.b||i.ram,0,256);case"Stack":return Le(this,i.b||i.ram,256,511,256+i.c.SP,32);default:return ve(this.machine)&&this.machine.getDebugInfo(n,i)}}},Yt=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=ft}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}getDebugCategories(){return ve(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,i){switch(n){case"CPU":return jt(i.c);case"Stack":{var l=i.c.SP-1&65535,o=l&65280,b=o+255;return l==0&&(l=65536),Le(this,[],o,b,l,205)}default:return ve(this.machine)&&this.machine.getDebugInfo(n,i)}}disassemble(n,i){return lt(n,i(n),i(n+1),i(n+2),i(n+3))}},Wt=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=st}getDefaultExtensions(){return[".c",".lwasm",".xasm"]}getDebugCategories(){return ve(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,i){switch(n){case"CPU":return Ct(i.c);case"Stack":{var l=i.c.SP-1&65535,o=l&65280,b=o+255;return l==0&&(l=65536),Le(this,[],o,b,l,23,!0)}default:return super.getDebugInfo(n,i)}}disassemble(n,i){return Object.create($e()).disasm(i(n),i(n+1),i(n+2),i(n+3),i(n+4),n)}},vt=class{constructor(e,n){this.lastOutCount=-1;this.lastInCount=-1;this.device=n,this.textarea=document.createElement("textarea"),this.textarea.classList.add("transcript"),this.textarea.classList.add("transcript-style-2"),this.textarea.style.display="none",e.appendChild(this.textarea)}reset(){this.lastOutCount=0,this.lastInCount=0,this.textarea.style.display="none"}refresh(){var e="";if(this.device.serialOut.length!=this.lastOutCount){var n="";for(var i of this.device.serialOut)e!=i.op&&(n!=""&&(n+=` `),i.op==="read"?n+="<< ":i.op==="write"&&(n+=">> "),e=i.op),i.value==10?(n+="\u21B5",e=""):n+=wt(i.value);this.textarea.value=n,this.lastOutCount=this.device.serialOut.length,this.textarea.style.display="block"}}};export{ct as a,lt as b,We as c,ot as d,Nt as e,yt as f,Fn as g,Pn as h,Tn as i,wn as j,Lt as k,$e as l,Ft as m,je as n,Be as o,xt as p,ut as q,Ot as r,Ne as s,Tt as t,ve as u,ht as v,kn as w,Ut as x,zt as y,Kt as z,jt as A,mr as B,At as C,Xt as D,Le as E,Ie as F,Vt as G,Yt as H,Wt as I}; -//# sourceMappingURL=chunk-QYEDG265.js.map +//# sourceMappingURL=chunk-RWTUUV4L.js.map diff --git a/gen/chunk-QYEDG265.js.map b/gen/chunk-RWTUUV4L.js.map similarity index 93% rename from gen/chunk-QYEDG265.js.map rename to gen/chunk-RWTUUV4L.js.map index fc7de495..0ea04941 100644 --- a/gen/chunk-QYEDG265.js.map +++ b/gen/chunk-RWTUUV4L.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/common/cpu/disasm6502.ts", "../src/common/cpu/ZilogZ80.ts", "../src/common/audio.ts", "../src/common/probe.ts", "../src/common/devices.ts", "../src/common/cpu/disasmz80.ts", "../src/common/cpu/6809.ts", "../src/common/cpu/MOS6502.ts", "../src/common/wasmplatform.ts", "../src/common/baseplatform.ts"], - "sourcesContent": ["\nimport { hex } from \"../util\";\n\nexport var OPS_6502 = [\n {mn:\"BRK\",am:\"\",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:\"SI\"}, // 0\n {mn:\"ORA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 2\n {mn:\"SLO\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 4\n {mn:\"ORA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 5\n {mn:\"ASL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6\n {mn:\"SLO\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 7\n {mn:\"PHP\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 8\n {mn:\"ORA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 9\n {mn:\"ASL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // b\n {mn:\"NOP\",am:\"AAAA\",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // c\n {mn:\"ORA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // d\n {mn:\"ASL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // e\n {mn:\"SLO\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // f\n {mn:\"BPL\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 10\n {mn:\"ORA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 11\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 12\n {mn:\"SLO\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 13\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 14\n {mn:\"ORA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 15\n {mn:\"ASL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 16\n {mn:\"SLO\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 17\n {mn:\"CLC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 18\n {mn:\"ORA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 19\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 1a\n {mn:\"SLO\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 1c\n {mn:\"ORA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 1d\n {mn:\"ASL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 1e\n {mn:\"SLO\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1f\n {mn:\"JSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:\"S\"}, // 20\n {mn:\"AND\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 21\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 22\n {mn:\"RLA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 23\n {mn:\"BIT\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 24\n {mn:\"AND\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 25\n {mn:\"ROL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 26\n {mn:\"RLA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 27\n {mn:\"PLP\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SCZIDVN\"}, // 28\n {mn:\"AND\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 29\n {mn:\"ROL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2b\n {mn:\"BIT\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 2c\n {mn:\"AND\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 2d\n {mn:\"ROL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 2e\n {mn:\"RLA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 2f\n {mn:\"BMI\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 30\n {mn:\"AND\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 31\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 32\n {mn:\"RLA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 33\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 34\n {mn:\"AND\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 35\n {mn:\"ROL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 36\n {mn:\"RLA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 37\n {mn:\"SEC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 38\n {mn:\"AND\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 39\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 3a\n {mn:\"RLA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 3c\n {mn:\"AND\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 3d\n {mn:\"ROL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 3e\n {mn:\"RLA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3f\n {mn:\"RTI\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"SCZIDVN\"}, // 40\n {mn:\"EOR\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 41\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 42\n {mn:\"SRE\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 43\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 44\n {mn:\"EOR\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 45\n {mn:\"LSR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 46\n {mn:\"SRE\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 47\n {mn:\"PHA\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 48\n {mn:\"EOR\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 49\n {mn:\"LSR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4a\n {mn:\"ASR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4b\n {mn:\"JMP\",am:\"AAAA\",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 4c\n {mn:\"EOR\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 4d\n {mn:\"LSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 4e\n {mn:\"SRE\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 4f\n {mn:\"BVC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 50\n {mn:\"EOR\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 51\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 52\n {mn:\"SRE\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 53\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 54\n {mn:\"EOR\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 55\n {mn:\"LSR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 56\n {mn:\"SRE\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 57\n {mn:\"CLI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 58\n {mn:\"EOR\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 59\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 5a\n {mn:\"SRE\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 5c\n {mn:\"EOR\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 5d\n {mn:\"LSR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 5e\n {mn:\"SRE\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5f\n {mn:\"RTS\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"S\"}, // 60\n {mn:\"ADC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 61\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 62\n {mn:\"RRA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 63\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 64\n {mn:\"ADC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 65\n {mn:\"ROR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 66\n {mn:\"RRA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 67\n {mn:\"PLA\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SAZN\"}, // 68\n {mn:\"ADC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 69\n {mn:\"ROR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 6a\n {mn:\"ARR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6b\n {mn:\"JMP\",am:\"(AAAA)\",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:\"\"}, // 6c\n {mn:\"ADC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6d\n {mn:\"ROR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6e\n {mn:\"RRA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 6f\n {mn:\"BVS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 70\n {mn:\"ADC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 71\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 72\n {mn:\"RRA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 73\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 74\n {mn:\"ADC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 75\n {mn:\"ROR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 76\n {mn:\"RRA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 77\n {mn:\"SEI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 78\n {mn:\"ADC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 79\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 7a\n {mn:\"RRA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 7c\n {mn:\"ADC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 7d\n {mn:\"ROR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 7e\n {mn:\"RRA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7f\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 80\n {mn:\"STA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 81\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 82\n {mn:\"SAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 83\n {mn:\"STY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 84\n {mn:\"STA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 85\n {mn:\"STX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 86\n {mn:\"SAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 87\n {mn:\"DEY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // 88\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 89\n {mn:\"TXA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8a\n {mn:\"ANE\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8b\n {mn:\"STY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8c\n {mn:\"STA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8d\n {mn:\"STX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8e\n {mn:\"SAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8f\n {mn:\"BCC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 90\n {mn:\"STA\",am:\"(aa),y\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 91\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 92\n {mn:\"SHA\",am:\"(aa),y\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 93\n {mn:\"STY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 94\n {mn:\"STA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 95\n {mn:\"STX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 96\n {mn:\"SAX\",am:\"aa,y\",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:\"\"}, // 97\n {mn:\"TYA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 98\n {mn:\"STA\",am:\"AAAA,y\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 99\n {mn:\"TXS\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"S\"}, // 9a\n {mn:\"SHS\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"S\"}, // 9b\n {mn:\"SHY\",am:\"AAAA,x\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9c\n {mn:\"STA\",am:\"AAAA,x\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9d\n {mn:\"SHX\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9e\n {mn:\"SHA\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9f\n {mn:\"LDY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a0\n {mn:\"LDA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // a1\n {mn:\"LDX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // a2\n {mn:\"LAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a3\n {mn:\"LDY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"YZN\"}, // a4\n {mn:\"LDA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // a5\n {mn:\"LDX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"XZN\"}, // a6\n {mn:\"LAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a7\n {mn:\"TAY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a8\n {mn:\"LDA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // a9\n {mn:\"TAX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // aa\n {mn:\"LXA\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AXZN\"}, // ab\n {mn:\"LDY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // ac\n {mn:\"LDA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // ad\n {mn:\"LDX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // ae\n {mn:\"LAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // af\n {mn:\"BCS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // b0\n {mn:\"LDA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // b1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // b2\n {mn:\"LAX\",am:\"(aa),y\",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:\"AXZN\"}, // b3\n {mn:\"LDY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // b4\n {mn:\"LDA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // b5\n {mn:\"LDX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // b6\n {mn:\"LAX\",am:\"aa,y\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // b7\n {mn:\"CLV\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"V\"}, // b8\n {mn:\"LDA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // b9\n {mn:\"TSX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ba\n {mn:\"LAS\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"SAXZN\"}, // bb\n {mn:\"LDY\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"YZN\"}, // bc\n {mn:\"LDA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // bd\n {mn:\"LDX\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"XZN\"}, // be\n {mn:\"LAX\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"AXZN\"}, // bf\n {mn:\"CPY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c0\n {mn:\"CMP\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"CZN\"}, // c1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // c2\n {mn:\"DCP\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // c3\n {mn:\"CPY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c4\n {mn:\"CMP\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c5\n {mn:\"DEC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // c6\n {mn:\"DCP\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // c7\n {mn:\"INY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // c8\n {mn:\"CMP\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c9\n {mn:\"DEX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ca\n {mn:\"SBX\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"XCZN\"}, // cb\n {mn:\"CPY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cc\n {mn:\"CMP\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cd\n {mn:\"DEC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ce\n {mn:\"DCP\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // cf\n {mn:\"BNE\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // d0\n {mn:\"CMP\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"CZN\"}, // d1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // d2\n {mn:\"DCP\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // d3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // d4\n {mn:\"CMP\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // d5\n {mn:\"DEC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // d6\n {mn:\"DCP\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // d7\n {mn:\"CLD\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // d8\n {mn:\"CMP\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // d9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // da\n {mn:\"DCP\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // db\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // dc\n {mn:\"CMP\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // dd\n {mn:\"DEC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // de\n {mn:\"DCP\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // df\n {mn:\"CPX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // e0\n {mn:\"SBC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // e2\n {mn:\"ISB\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e3\n {mn:\"CPX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // e4\n {mn:\"SBC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e5\n {mn:\"INC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // e6\n {mn:\"ISB\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e7\n {mn:\"INX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // e8\n {mn:\"SBC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e9\n {mn:\"NOP\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // ea\n {mn:\"SBC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // eb\n {mn:\"CPX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // ec\n {mn:\"SBC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // ed\n {mn:\"INC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ee\n {mn:\"ISB\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ef\n {mn:\"BEQ\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // f0\n {mn:\"SBC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // f2\n {mn:\"ISB\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // f4\n {mn:\"SBC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // f5\n {mn:\"INC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // f6\n {mn:\"ISB\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f7\n {mn:\"SED\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // f8\n {mn:\"SBC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // fa\n {mn:\"ISB\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // fb\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // fc\n {mn:\"SBC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // fd\n {mn:\"INC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // fe\n {mn:\"ISB\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ff\n];\n\nexport function disassemble6502(pc:number, b0:number, b1:number, b2:number) : {line:string, nbytes:number, isaddr:boolean, iscall?:boolean} {\n\n var op = OPS_6502[b0];\n if (op == null) return {line:\"???\", nbytes:1, isaddr:false};\n var s = op.mn;\n var am = op.am;\n var isaddr = false;\n if (am == 'branch') {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = '$'+hex(offset, 4);\n isaddr = true;\n } else {\n am = am.replace('aa','$'+hex(b1, 2));\n am = am.replace('AAAA','$'+hex(b1+(b2<<8), 4));\n if (am.indexOf('#') < 0 && am.indexOf('$') >= 0)\n isaddr = true;\n }\n return {line:op.mn + \" \" + am, nbytes:op.nb, isaddr:isaddr, iscall:op.mn==\"JSR\"};\n};\n", "// Generated by CoffeeScript 1.9.3\n\nimport { CPU, Bus, InstructionBased, IOBusConnected, SavesState, Interruptable } from \"../devices\";\n\n///////////////////////////////////////////////////////////////////////////////\n/// @file Z80.js\n///\n/// @brief Emulator for the Zilog Z80 microprocessor\n///\n/// @author Matthew Howell\n///\n/// @remarks\n/// This module is a simple, straightforward instruction interpreter.\n/// There is no fancy dynamic recompilation or cycle-accurate emulation.\n/// The author believes that this should be sufficient for any emulator that\n/// would be feasible to write in JavaScript anyway.\n/// The code and the comments in this file assume that the reader is familiar\n/// with the Z80 architecture. If you're not, here are some references I use:\n/// http://clrhome.org/table/ - Z80 instruction set tables\n/// http://www.zilog.com/docs/z80/um0080.pdf - The official manual\n/// http://www.myquest.nl/z80undocumented/z80-documented-v0.91.pdf\n/// - The Undocumented Z80, Documented\n///\n/// @copyright (c) 2013 Matthew Howell\n/// This code is released under the MIT license,\n/// a copy of which is available in the associated README.md file,\n/// or at http://opensource.org/licenses/MIT\n///////////////////////////////////////////////////////////////////////////////\n\n///////////////////////////////////////////////////////////////////////////////\n/// We'll begin with the object constructor and the public API functions.\n///////////////////////////////////////////////////////////////////////////////\nfunction FastZ80(coreParameter)\n{\n // Obviously we'll be needing the core object's functions again.\n const core = coreParameter;\n \n // The argument to this constructor should be an object containing 4 functions:\n // mem_read(address) should return the byte at the given memory address,\n // mem_write(address, value) should write the given value to the given memory address,\n // io_read(port) should read a return a byte read from the given I/O port,\n // io_write(port, value) should write the given byte to the given I/O port.\n // If any of those functions is missing, this module cannot run.\n if (!core || (typeof core.mem_read !== \"function\") || (typeof core.mem_write !== \"function\") ||\n (typeof core.io_read !== \"function\") || (typeof core.io_write !== \"function\"))\n throw(\"Z80: Core object is missing required functions.\");\n \n // All right, let's initialize the registers.\n // First, the standard 8080 registers.\n let a = 0x00;\n let b = 0x00;\n let c = 0x00;\n let d = 0x00;\n let e = 0x00;\n let h = 0x00;\n let l = 0x00;\n // Now the special Z80 copies of the 8080 registers\n // (the ones used for the SWAP instruction and such).\n let a_prime = 0x00;\n let b_prime = 0x00;\n let c_prime = 0x00;\n let d_prime = 0x00;\n let e_prime = 0x00;\n let h_prime = 0x00;\n let l_prime = 0x00;\n // And now the Z80 index registers.\n let ix = 0x0000;\n let iy = 0x0000;\n // Then the \"utility\" registers: the interrupt vector,\n // the memory refresh, the stack pointer, and the program counter.\n let i = 0x00;\n let r = 0x00;\n let sp = 0x0000; // Changed from 0xdff0 - SP should be undefined at reset, program must initialize it\n let pc = 0x0000;\n // We don't keep an F register for the flags,\n // because most of the time we're only accessing a single flag,\n // so we optimize for that case and use utility functions\n // for the rarer occasions when we need to access the whole register.\n let flags = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n let flags_prime = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n // And finally we have the interrupt mode and flip-flop registers.\n let imode = 0;\n let iff1 = 0;\n let iff2 = 0;\n \n // These are all specific to this implementation, not Z80 features.\n // Keep track of whether we've had a HALT instruction called.\n let halted = false;\n // EI and DI wait one instruction before they take effect;\n // these flags tell us when we're in that wait state.\n let do_delayed_di = false;\n let do_delayed_ei = false;\n // This tracks the number of cycles spent in a single instruction run,\n // including processing any prefixes and handling interrupts.\n let cycle_counter = 0;\n \n function getState():Z80State {\n return {\n PC:pc,\n SP:sp,\n IX:ix,\n IY:iy,\n AF:(a<<8)+get_flags_register(),\n BC:(b<<8)+c,\n DE:(d<<8)+e,\n HL:(h<<8)+l,\n AF_:(a_prime<<8)+get_flags_prime(),\n BC_:(b_prime<<8)+c_prime,\n DE_:(d_prime<<8)+e_prime,\n HL_:(h_prime<<8)+l_prime,\n IR:(i<<8)+r,\n im : imode,\n iff1 : iff1,\n iff2 : iff2,\n halted : halted,\n do_delayed_di : do_delayed_di,\n do_delayed_ei : do_delayed_ei,\n cycle_counter : cycle_counter\n }; \n }\n\n function setState(state:Z80State) {\n pc = state.PC;\n sp = state.SP;\n ix = state.IX;\n iy = state.IY;\n a = (state.AF >> 8) & 0xff;\n set_flags_register(state.AF);\n b = (state.BC >> 8) & 0xff;\n c = state.BC & 0xff;\n d = (state.DE >> 8) & 0xff;\n e = state.DE & 0xff;\n h = (state.HL >> 8) & 0xff;\n l = state.HL & 0xff;\n a_prime = (state.AF_ >> 8) & 0xff;\n set_flags_prime(state.AF_);\n b_prime = (state.BC_ >> 8) & 0xff;\n c_prime = state.BC_ & 0xff;\n d_prime = (state.DE_ >> 8) & 0xff;\n e_prime = state.DE_ & 0xff;\n h_prime = (state.HL_ >> 8) & 0xff;\n l_prime = state.HL_ & 0xff;\n i = (state.IR >> 8) & 0xff;\n r = state.IR & 0xff;\n imode = state.im;\n iff1 = state.iff1;\n iff2 = state.iff2;\n halted = state.halted;\n do_delayed_di = state.do_delayed_di;\n do_delayed_ei = state.do_delayed_ei;\n cycle_counter = state.cycle_counter;\n }\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public reset\n///\n/// @brief Re-initialize the processor as if a reset or power on had occured\n///////////////////////////////////////////////////////////////////////////////\nlet reset = function()\n{\n // These registers are the ones that have predictable states\n // immediately following a power-on or a reset.\n // The others are left alone, because their states are unpredictable.\n sp = 0x0000;\n pc = 0x0000;\n a = 0x00;\n r = 0x00;\n set_flags_register(0);\n // Start up with interrupts disabled.\n imode = 0;\n iff1 = 0;\n iff2 = 0;\n // Don't start halted or in a delayed DI or EI.\n halted = false;\n do_delayed_di = false;\n do_delayed_ei = false;\n // Obviously we've not used any cycles yet.\n cycle_counter = 0;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public run_instruction\n///\n/// @brief Runs a single instruction\n///\n/// @return The number of T cycles the instruction took to run,\n/// plus any time that went into handling interrupts that fired\n/// while this instruction was executing\n///////////////////////////////////////////////////////////////////////////////\nlet run_instruction = function()\n{\n if (!halted)\n {\n // If the previous instruction was a DI or an EI,\n // we'll need to disable or enable interrupts\n // after whatever instruction we're about to run is finished.\n var doing_delayed_di = false, doing_delayed_ei = false;\n if (do_delayed_di)\n {\n do_delayed_di = false;\n doing_delayed_di = true;\n }\n else if (do_delayed_ei)\n {\n do_delayed_ei = false;\n doing_delayed_ei = true;\n }\n\n // R is incremented at the start of every instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n // Read the byte at the PC and run the instruction it encodes.\n var opcode = core.mem_read(pc);\n decode_instruction(opcode);\n pc = (pc + 1) & 0xffff;\n \n // Actually do the delayed interrupt disable/enable if we have one.\n if (doing_delayed_di)\n {\n iff1 = 0;\n iff2 = 0;\n //console.log(\"DI\",pc);\n }\n else if (doing_delayed_ei)\n {\n iff1 = 1;\n iff2 = 1;\n //console.log(\"EI\",pc);\n }\n \n // And finally clear out the cycle counter for the next instruction\n // before returning it to the emulator core.\n var retval = cycle_counter;\n cycle_counter = 0;\n return retval;\n }\n else\n {\n // While we're halted, claim that we spent a cycle doing nothing,\n // so that the rest of the emulator can still proceed.\n return 1;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public interrupt\n///\n/// @brief Simulates pulsing the processor's INT (or NMI) pin\n///\n/// @param non_maskable - true if this is a non-maskable interrupt\n/// @param data - the value to be placed on the data bus, if needed\n///////////////////////////////////////////////////////////////////////////////\nlet interrupt = function(non_maskable:boolean, data:number) : boolean\n{\n //console.log(non_maskable, data, iff1, iff2, do_delayed_ei, do_delayed_di);\n if (non_maskable)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n // Non-maskable interrupts are always handled the same way;\n // clear IFF1 and then do a CALL 0x0066.\n // Also, all interrupts reset the HALT state.\n halted = false;\n iff2 = iff1;\n iff1 = 0;\n push_word(pc);\n pc = 0x66;\n cycle_counter += 11;\n return true;\n }\n else if (iff1)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n halted = false;\n iff1 = 0;\n iff2 = 0;\n \n if (imode === 0)\n {\n // In the 8080-compatible interrupt mode,\n // decode the content of the data bus as an instruction and run it.\n pc = (pc - 1) & 0xffff; //SEH: so do_reset() pushes right value\n decode_instruction(data);\n pc = (pc + 1) & 0xffff; //SEH: so do_reset() pushes right value\n cycle_counter += 2;\n }\n else if (imode === 1)\n {\n // Mode 1 is always just RST 0x38.\n push_word(pc);\n pc = 0x38;\n cycle_counter += 13;\n }\n else if (imode === 2)\n {\n // Mode 2 uses the value on the data bus as in index\n // into the vector table pointer to by the I register.\n push_word(pc);\n // The Z80 manual says that this address must be 2-byte aligned,\n // but it doesn't appear that this is actually the case on the hardware,\n // so we don't attempt to enforce that here.\n var vector_address = ((i << 8) | data);\n pc = core.mem_read(vector_address) | \n (core.mem_read((vector_address + 1) & 0xffff) << 8);\n \n cycle_counter += 19;\n }\n //console.log(imode,data,pc);\n return true;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// The public API functions end here.\n///\n/// What begins here are just general utility functions, used variously.\n///////////////////////////////////////////////////////////////////////////////\nlet decode_instruction = function(opcode)\n{\n // The register-to-register loads and ALU instructions\n // are all so uniform that we can decode them directly\n // instead of going into the instruction array for them.\n // This function gets the operand for all of these instructions.\n var get_operand = function(opcode)\n {\n return ((opcode & 0x07) === 0) ? b :\n ((opcode & 0x07) === 1) ? c :\n ((opcode & 0x07) === 2) ? d :\n ((opcode & 0x07) === 3) ? e :\n ((opcode & 0x07) === 4) ? h :\n ((opcode & 0x07) === 5) ? l :\n ((opcode & 0x07) === 6) ? core.mem_read(l | (h << 8)) : a;\n };\n\n // Handle HALT right up front, because it fouls up our LD decoding\n // by falling where LD (HL), (HL) ought to be.\n if (opcode === 0x76)\n {\n halted = true;\n }\n else if ((opcode >= 0x40) && (opcode < 0x80))\n {\n // This entire range is all 8-bit register loads.\n // Get the operand and assign it to the correct destination.\n var operand = get_operand(opcode);\n \n if (((opcode & 0x38) >>> 3) === 0)\n b = operand;\n else if (((opcode & 0x38) >>> 3) === 1)\n c = operand;\n else if (((opcode & 0x38) >>> 3) === 2)\n d = operand;\n else if (((opcode & 0x38) >>> 3) === 3)\n e = operand;\n else if (((opcode & 0x38) >>> 3) === 4)\n h = operand;\n else if (((opcode & 0x38) >>> 3) === 5)\n l = operand;\n else if (((opcode & 0x38) >>> 3) === 6)\n core.mem_write(l | (h << 8), operand);\n else if (((opcode & 0x38) >>> 3) === 7)\n a = operand;\n }\n else if ((opcode >= 0x80) && (opcode < 0xc0))\n {\n // These are the 8-bit register ALU instructions.\n // We'll get the operand and then use this \"jump table\"\n // to call the correct utility function for the instruction.\n var operand = get_operand(opcode),\n op_array = [do_add, do_adc, do_sub, do_sbc,\n do_and, do_xor, do_or, do_cp];\n \n op_array[(opcode & 0x38) >>> 3]( operand);\n }\n else\n {\n // This is one of the less formulaic instructions;\n // we'll get the specific function for it from our array.\n var func = instructions[opcode];\n func();\n }\n \n // Update the cycle counter with however many cycles\n // the base instruction took.\n // If this was a prefixed instruction, then\n // the prefix handler has added its extra cycles already.\n cycle_counter += cycle_counts[opcode];\n};\n\nlet get_signed_offset_byte = function(value)\n{\n // This function requires some explanation.\n // We just use JavaScript Number variables for our registers,\n // not like a typed array or anything.\n // That means that, when we have a byte value that's supposed\n // to represent a signed offset, the value we actually see\n // isn't signed at all, it's just a small integer.\n // So, this function converts that byte into something JavaScript\n // will recognize as signed, so we can easily do arithmetic with it.\n // First, we clamp the value to a single byte, just in case.\n value &= 0xff;\n // We don't have to do anything if the value is positive.\n if (value & 0x80)\n {\n // But if the value is negative, we need to manually un-two's-compliment it.\n // I'm going to assume you can figure out what I meant by that,\n // because I don't know how else to explain it.\n // We could also just do value |= 0xffffff00, but I prefer\n // not caring how many bits are in the integer representation\n // of a JavaScript number in the currently running browser.\n value = -((0xff & ~value) + 1);\n }\n return value;\n};\n\nlet get_flags_register = function()\n{\n // We need the whole F register for some reason.\n // probably a PUSH AF instruction,\n // so make the F register out of our separate flags.\n return (flags.S << 7) |\n (flags.Z << 6) |\n (flags.Y << 5) |\n (flags.H << 4) |\n (flags.X << 3) |\n (flags.P << 2) |\n (flags.N << 1) |\n (flags.C);\n};\n\nlet get_flags_prime = function()\n{\n // This is the same as the above for the F' register.\n return (flags_prime.S << 7) |\n (flags_prime.Z << 6) |\n (flags_prime.Y << 5) |\n (flags_prime.H << 4) |\n (flags_prime.X << 3) |\n (flags_prime.P << 2) |\n (flags_prime.N << 1) |\n (flags_prime.C);\n};\n\nlet set_flags_register = function(operand)\n{\n // We need to set the F register, probably for a POP AF,\n // so break out the given value into our separate flags.\n flags.S = (operand & 0x80) >>> 7;\n flags.Z = (operand & 0x40) >>> 6;\n flags.Y = (operand & 0x20) >>> 5;\n flags.H = (operand & 0x10) >>> 4;\n flags.X = (operand & 0x08) >>> 3;\n flags.P = (operand & 0x04) >>> 2;\n flags.N = (operand & 0x02) >>> 1;\n flags.C = (operand & 0x01);\n};\n\nlet set_flags_prime = function(operand)\n{\n // Again, this is the same as the above for F'.\n flags_prime.S = (operand & 0x80) >>> 7;\n flags_prime.Z = (operand & 0x40) >>> 6;\n flags_prime.Y = (operand & 0x20) >>> 5;\n flags_prime.H = (operand & 0x10) >>> 4;\n flags_prime.X = (operand & 0x08) >>> 3;\n flags_prime.P = (operand & 0x04) >>> 2;\n flags_prime.N = (operand & 0x02) >>> 1;\n flags_prime.C = (operand & 0x01);\n};\n\nlet update_xy_flags = function(result)\n{\n // Most of the time, the undocumented flags\n // (sometimes called X and Y, or 3 and 5),\n // take their values from the corresponding bits\n // of the result of the instruction,\n // or from some other related value.\n // This is a utility function to set those flags based on those bits.\n flags.Y = (result & 0x20) >>> 5;\n flags.X = (result & 0x08) >>> 3;\n};\n\nlet get_parity = function(value)\n{\n // We could try to actually calculate the parity every time,\n // but why calculate what you can pre-calculate?\n var parity_bits = [\n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,\n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1\n ];\n return parity_bits[value];\n};\n\nlet push_word = function(operand)\n{\n // Pretty obvious what this function does; given a 16-bit value,\n // decrement the stack pointer, write the high byte to the new\n // stack pointer location, then repeat for the low byte.\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, (operand & 0xff00) >>> 8);\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, operand & 0x00ff);\n};\n\nlet pop_word = function()\n{\n // Again, not complicated; read a byte off the top of the stack,\n // increment the stack pointer, rinse and repeat.\n var retval = core.mem_read(sp) & 0xff;\n sp = (sp + 1) & 0xffff;\n retval |= core.mem_read(sp) << 8;\n sp = (sp + 1) & 0xffff;\n return retval;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// Now, the way most instructions work in this emulator is that they set up\n/// their operands according to their addressing mode, and then they call a\n/// utility function that handles all variations of that instruction.\n/// Those utility functions begin here.\n///////////////////////////////////////////////////////////////////////////////\nlet do_conditional_absolute_jump = function(condition)\n{\n // This function implements the JP [condition],nn instructions.\n if (condition)\n {\n // We're taking this jump, so write the new PC,\n // and then decrement the thing we just wrote,\n // because the instruction decoder increments the PC\n // unconditionally at the end of every instruction\n // and we need to counteract that so we end up at the jump target.\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n // We're not taking this jump, just move the PC past the operand.\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_relative_jump = function(condition)\n{\n // This function implements the JR [condition],n instructions.\n if (condition)\n {\n // We need a few more cycles to actually take the jump.\n cycle_counter += 5;\n // Calculate the offset specified by our operand.\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n // Add the offset to the PC, also skipping past this instruction.\n pc = (pc + offset + 1) & 0xffff;\n }\n else\n {\n // No jump happening, just skip the operand.\n pc = (pc + 1) & 0xffff;\n }\n};\n\nlet do_conditional_call = function(condition)\n{\n // This function is the CALL [condition],nn instructions.\n // If you've seen the previous functions, you know this drill.\n if (condition)\n {\n cycle_counter += 7;\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_return = function(condition)\n{\n if (condition)\n {\n cycle_counter += 6;\n pc = (pop_word() - 1) & 0xffff;\n }\n};\n\nlet do_reset = function(address)\n{\n // The RST [address] instructions go through here.\n push_word((pc + 1) & 0xffff);\n pc = (address - 1) & 0xffff;\n};\n\nlet do_add = function(operand)\n{\n // This is the ADD A, [operand] instructions.\n // We'll do the literal addition, which includes any overflow,\n // so that we can more easily figure out whether we had\n // an overflow or a carry and set the flags accordingly.\n var result = a + operand;\n \n // The great majority of the work for the arithmetic instructions\n // turns out to be setting the flags rather than the actual operation.\n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f)) & 0x10) ? 1 : 0;\n // An overflow has happened if the sign bits of the accumulator and the operand\n // don't match the sign bit of the result value.\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_adc = function(operand)\n{\n var result = a + operand + flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f) + flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sub = function(operand)\n{\n var result = a - operand;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f)) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sbc = function(operand)\n{\n var result = a - operand - flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f) - flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_cp = function(operand)\n{\n // A compare instruction is just a subtraction that doesn't save the value,\n // so we implement it as... a subtraction that doesn't save the value.\n var temp = a;\n do_sub(operand);\n a = temp;\n // Since this instruction has no \"result\" value, the undocumented flags\n // are set based on the operand instead.\n update_xy_flags(operand);\n};\n\nlet do_and = function(operand)\n{\n // The logic instructions are all pretty straightforward.\n a &= operand & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 1;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_or = function(operand)\n{\n a = (operand | a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_xor = function(operand)\n{\n a = (operand ^ a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_inc = function(operand)\n{\n var result = operand + 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x0f) ? 1 : 0;\n // It's a good deal easier to detect overflow for an increment/decrement.\n flags.P = (operand === 0x7f) ? 1 : 0;\n flags.N = 0;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_dec = function(operand)\n{\n var result = operand - 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x00) ? 1 : 0;\n flags.P = (operand === 0x80) ? 1 : 0;\n flags.N = 1;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_hl_add = function(operand)\n{\n // The HL arithmetic instructions are the same as the A ones,\n // just with twice as many bits happening.\n var hl = l | (h << 8), result = hl + operand;\n \n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n update_xy_flags(h);\n};\n\nlet do_hl_adc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl + operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) === (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_hl_sbc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl - operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) - (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) !== (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_in = function(port)\n{\n var result = core.io_read(port);\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = result ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(result) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_neg = function()\n{\n // This instruction is defined to not alter the register if it === 0x80.\n if (a !== 0x80)\n {\n // This is a signed operation, so convert A to a signed value.\n a = get_signed_offset_byte(a);\n \n a = (-a) & 0xff;\n }\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = (((-a) & 0x0f) > 0) ? 1 : 0;\n flags.P = (a === 0x80) ? 1 : 0;\n flags.N = 1;\n flags.C = a ? 1 : 0;\n update_xy_flags(a);\n};\n\nlet do_ldi = function()\n{\n // Copy the value that we're supposed to copy.\n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n // Increment DE and HL, and decrement BC.\n var result = (e | (d << 8)) + 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.H = 0;\n flags.P = (c || b) ? 1 : 0;\n flags.N = 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpi = function()\n{\n var temp_carry = flags.C;\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ini = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n flags.N = 1;\n};\n\nlet do_outi = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_ldd = function()\n{\n flags.N = 0;\n flags.H = 0;\n \n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n var result = (e | (d << 8)) - 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = (c || b) ? 1 : 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpd = function()\n{\n var temp_carry = flags.C\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ind = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n flags.N = 1;\n};\n\nlet do_outd = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_rlc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | flags.C) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_rrc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (flags.C << 7);\n \n flags.Z = !(operand & 0xff) ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand & 0xff;\n};\n\nlet do_rl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | temp) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_rr = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (temp << 7);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_sla = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = (operand << 1) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sra = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (operand & 0x80);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sll = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) & 0xff) | 1;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_srl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = (operand >>> 1) & 0x7f;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_ix_add = function(operand)\n{\n flags.N = 0;\n \n var result = ix + operand;\n \n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((ix & 0xfff) + (operand & 0xfff)) & 0x1000) ? 1 : 0;\n update_xy_flags((result & 0xff00) >>> 8);\n \n ix = result & 0xffff;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table contains the implementations for the instructions that weren't\n/// implemented directly in the decoder function (everything but the 8-bit\n/// register loads and the accumulator ALU instructions, in other words).\n/// Similar tables for the ED and DD/FD prefixes follow this one.\n///////////////////////////////////////////////////////////////////////////////\nlet instructions = [];\n\n// 0x00 : NOP\ninstructions[0x00] = function() { };\n// 0x01 : LD BC, nn\ninstructions[0x01] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x02 : LD (BC), A\ninstructions[0x02] = function()\n{\n core.mem_write(c | (b << 8), a);\n};\n// 0x03 : INC BC\ninstructions[0x03] = function()\n{\n var result = (c | (b << 8));\n result += 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x04 : INC B\ninstructions[0x04] = function()\n{\n b = do_inc(b);\n};\n// 0x05 : DEC B\ninstructions[0x05] = function()\n{\n b = do_dec(b);\n};\n// 0x06 : LD B, n\ninstructions[0x06] = function()\n{\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x07 : RLCA\ninstructions[0x07] = function()\n{\n // This instruction is implemented as a special case of the\n // more general Z80-specific RLC instruction.\n // Specifially, RLCA is a version of RLC A that affects fewer flags.\n // The same applies to RRCA, RLA, and RRA.\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rlc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x08 : EX AF, AF'\ninstructions[0x08] = function()\n{\n var temp = a;\n a = a_prime;\n a_prime = temp;\n \n temp = get_flags_register();\n set_flags_register(get_flags_prime());\n set_flags_prime(temp);\n};\n// 0x09 : ADD HL, BC\ninstructions[0x09] = function()\n{\n do_hl_add(c | (b << 8));\n};\n// 0x0a : LD A, (BC)\ninstructions[0x0a] = function()\n{\n a = core.mem_read(c | (b << 8));\n};\n// 0x0b : DEC BC\ninstructions[0x0b] = function()\n{\n var result = (c | (b << 8));\n result -= 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x0c : INC C\ninstructions[0x0c] = function()\n{\n c = do_inc(c);\n};\n// 0x0d : DEC C\ninstructions[0x0d] = function()\n{\n c = do_dec(c);\n};\n// 0x0e : LD C, n\ninstructions[0x0e] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n};\n// 0x0f : RRCA\ninstructions[0x0f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rrc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x10 : DJNZ nn\ninstructions[0x10] = function()\n{\n b = (b - 1) & 0xff;\n do_conditional_relative_jump(b !== 0);\n};\n// 0x11 : LD DE, nn\ninstructions[0x11] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x12 : LD (DE), A\ninstructions[0x12] = function()\n{\n core.mem_write(e | (d << 8), a);\n};\n// 0x13 : INC DE\ninstructions[0x13] = function()\n{\n var result = (e | (d << 8));\n result += 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x14 : INC D\ninstructions[0x14] = function()\n{\n d = do_inc(d);\n};\n// 0x15 : DEC D\ninstructions[0x15] = function()\n{\n d = do_dec(d);\n};\n// 0x16 : LD D, n\ninstructions[0x16] = function()\n{\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x17 : RLA\ninstructions[0x17] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rl(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x18 : JR n\ninstructions[0x18] = function()\n{\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n pc = (pc + offset + 1) & 0xffff;\n};\n// 0x19 : ADD HL, DE\ninstructions[0x19] = function()\n{\n do_hl_add(e | (d << 8));\n};\n// 0x1a : LD A, (DE)\ninstructions[0x1a] = function()\n{\n a = core.mem_read(e | (d << 8));\n};\n// 0x1b : DEC DE\ninstructions[0x1b] = function()\n{\n var result = (e | (d << 8));\n result -= 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x1c : INC E\ninstructions[0x1c] = function()\n{\n e = do_inc(e);\n};\n// 0x1d : DEC E\ninstructions[0x1d] = function()\n{\n e = do_dec(e);\n};\n// 0x1e : LD E, n\ninstructions[0x1e] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n};\n// 0x1f : RRA\ninstructions[0x1f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rr(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x20 : JR NZ, n\ninstructions[0x20] = function()\n{\n do_conditional_relative_jump(!flags.Z);\n};\n// 0x21 : LD HL, nn\ninstructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x22 : LD (nn), HL\ninstructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x23 : INC HL\ninstructions[0x23] = function()\n{\n var result = (l | (h << 8));\n result += 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x24 : INC H\ninstructions[0x24] = function()\n{\n h = do_inc(h);\n};\n// 0x25 : DEC H\ninstructions[0x25] = function()\n{\n h = do_dec(h);\n};\n// 0x26 : LD H, n\ninstructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x27 : DAA\ninstructions[0x27] = function()\n{\n var temp = a;\n if (!flags.N)\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp += 0x06;\n if (flags.C || (a > 0x99))\n temp += 0x60;\n }\n else\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp -= 0x06;\n if (flags.C || (a > 0x99))\n temp -= 0x60;\n }\n \n flags.S = (temp & 0x80) ? 1 : 0;\n flags.Z = !(temp & 0xff) ? 1 : 0;\n flags.H = ((a & 0x10) ^ (temp & 0x10)) ? 1 : 0;\n flags.P = get_parity(temp & 0xff);\n // DAA never clears the carry flag if it was already set,\n // but it is able to set the carry flag if it was clear.\n // Don't ask me, I don't know.\n // Note also that we check for a BCD carry, instead of the usual.\n flags.C = (flags.C || (a > 0x99)) ? 1 : 0;\n \n a = temp & 0xff;\n \n update_xy_flags(a);\n};\n// 0x28 : JR Z, n\ninstructions[0x28] = function()\n{\n do_conditional_relative_jump(!!flags.Z);\n};\n// 0x29 : ADD HL, HL\ninstructions[0x29] = function()\n{\n do_hl_add(l | (h << 8));\n};\n// 0x2a : LD HL, (nn)\ninstructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x2b : DEC HL\ninstructions[0x2b] = function()\n{\n var result = (l | (h << 8));\n result -= 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x2c : INC L\ninstructions[0x2c] = function()\n{\n l = do_inc(l);\n};\n// 0x2d : DEC L\ninstructions[0x2d] = function()\n{\n l = do_dec(l);\n};\n// 0x2e : LD L, n\ninstructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n};\n// 0x2f : CPL\ninstructions[0x2f] = function()\n{\n a = (~a) & 0xff;\n flags.N = 1;\n flags.H = 1;\n update_xy_flags(a);\n};\n// 0x30 : JR NC, n\ninstructions[0x30] = function()\n{\n do_conditional_relative_jump(!flags.C);\n};\n// 0x31 : LD SP, nn\ninstructions[0x31] = function()\n{\n sp = core.mem_read((pc + 1) & 0xffff) | \n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc + 2) & 0xffff;\n};\n// 0x32 : LD (nn), A\ninstructions[0x32] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, a);\n};\n// 0x33 : INC SP\ninstructions[0x33] = function()\n{\n sp = (sp + 1) & 0xffff;\n};\n// 0x34 : INC (HL)\ninstructions[0x34] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_inc(core.mem_read(address)));\n};\n// 0x35 : DEC (HL)\ninstructions[0x35] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_dec(core.mem_read(address)));\n};\n// 0x36 : LD (HL), n\ninstructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.mem_write(l | (h << 8), core.mem_read(pc));\n};\n// 0x37 : SCF\ninstructions[0x37] = function()\n{\n flags.N = 0;\n flags.H = 0;\n flags.C = 1;\n update_xy_flags(a);\n};\n// 0x38 : JR C, n\ninstructions[0x38] = function()\n{\n do_conditional_relative_jump(!!flags.C);\n};\n// 0x39 : ADD HL, SP\ninstructions[0x39] = function()\n{\n do_hl_add(sp);\n};\n// 0x3a : LD A, (nn)\ninstructions[0x3a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n a = core.mem_read(address);\n};\n// 0x3b : DEC SP\ninstructions[0x3b] = function()\n{\n sp = (sp - 1) & 0xffff;\n};\n// 0x3c : INC A\ninstructions[0x3c] = function()\n{\n a = do_inc(a);\n};\n// 0x3d : DEC A\ninstructions[0x3d] = function()\n{\n a = do_dec(a);\n};\n// 0x3e : LD A, n\ninstructions[0x3e] = function()\n{\n a = core.mem_read((pc + 1) & 0xffff);\n pc = (pc + 1) & 0xffff;\n};\n// 0x3f : CCF\ninstructions[0x3f] = function()\n{\n flags.N = 0;\n flags.H = flags.C;\n flags.C = flags.C ? 0 : 1;\n update_xy_flags(a);\n};\n// 0xc0 : RET NZ\ninstructions[0xc0] = function()\n{\n do_conditional_return(!flags.Z);\n};\n// 0xc1 : POP BC\ninstructions[0xc1] = function()\n{\n var result = pop_word();\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0xc2 : JP NZ, nn\ninstructions[0xc2] = function()\n{\n do_conditional_absolute_jump(!flags.Z);\n};\n// 0xc3 : JP nn\ninstructions[0xc3] = function()\n{\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xc4 : CALL NZ, nn\ninstructions[0xc4] = function()\n{\n do_conditional_call(!flags.Z);\n};\n// 0xc5 : PUSH BC\ninstructions[0xc5] = function()\n{\n push_word(c | (b << 8));\n};\n// 0xc6 : ADD A, n\ninstructions[0xc6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_add(core.mem_read(pc));\n};\n// 0xc7 : RST 00h\ninstructions[0xc7] = function()\n{\n do_reset(0x00);\n};\n// 0xc8 : RET Z\ninstructions[0xc8] = function()\n{\n do_conditional_return(!!flags.Z);\n};\n// 0xc9 : RET\ninstructions[0xc9] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0xca : JP Z, nn\ninstructions[0xca] = function()\n{\n do_conditional_absolute_jump(!!flags.Z);\n};\n// 0xcb : CB Prefix\ninstructions[0xcb] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n // We don't have a table for this prefix,\n // the instructions are all so uniform that we can directly decode them.\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n bit_number = (opcode & 0x38) >>> 3,\n reg_code = opcode & 0x07;\n \n if (opcode < 0x40)\n {\n // Shift/rotate instructions\n var op_array = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n if (reg_code === 0)\n b = op_array[bit_number]( b);\n else if (reg_code === 1)\n c = op_array[bit_number]( c);\n else if (reg_code === 2)\n d = op_array[bit_number]( d);\n else if (reg_code === 3)\n e = op_array[bit_number]( e);\n else if (reg_code === 4)\n h = op_array[bit_number]( h);\n else if (reg_code === 5)\n l = op_array[bit_number]( l);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n op_array[bit_number]( core.mem_read(l | (h << 8))));\n else if (reg_code === 7)\n a = op_array[bit_number]( a);\n }\n else if (opcode < 0x80)\n {\n // BIT instructions\n if (reg_code === 0)\n flags.Z = !(b & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 1)\n flags.Z = !(c & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 2)\n flags.Z = !(d & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 3)\n flags.Z = !(e & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 4)\n flags.Z = !(h & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 5)\n flags.Z = !(l & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 6)\n flags.Z = !((core.mem_read(l | (h << 8))) & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 7)\n flags.Z = !(a & (1 << bit_number)) ? 1 : 0;\n \n flags.N = 0;\n flags.H = 1;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n // For the BIT n, (HL) instruction, the X and Y flags are obtained\n // from what is apparently an internal temporary register used for\n // some of the 16-bit arithmetic instructions.\n // I haven't implemented that register here,\n // so for now we'll set X and Y the same way for every BIT opcode,\n // which means that they will usually be wrong for BIT n, (HL).\n flags.Y = ((bit_number === 5) && !flags.Z) ? 1 : 0;\n flags.X = ((bit_number === 3) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES instructions\n if (reg_code === 0)\n b &= (0xff & ~(1 << bit_number));\n else if (reg_code === 1)\n c &= (0xff & ~(1 << bit_number));\n else if (reg_code === 2)\n d &= (0xff & ~(1 << bit_number));\n else if (reg_code === 3)\n e &= (0xff & ~(1 << bit_number));\n else if (reg_code === 4)\n h &= (0xff & ~(1 << bit_number));\n else if (reg_code === 5)\n l &= (0xff & ~(1 << bit_number));\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) & ~(1 << bit_number));\n else if (reg_code === 7)\n a &= (0xff & ~(1 << bit_number));\n }\n else\n {\n // SET instructions\n if (reg_code === 0)\n b |= (1 << bit_number);\n else if (reg_code === 1)\n c |= (1 << bit_number);\n else if (reg_code === 2)\n d |= (1 << bit_number);\n else if (reg_code === 3)\n e |= (1 << bit_number);\n else if (reg_code === 4)\n h |= (1 << bit_number);\n else if (reg_code === 5)\n l |= (1 << bit_number);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) | (1 << bit_number));\n else if (reg_code === 7)\n a |= (1 << bit_number);\n }\n \n cycle_counter += cycle_counts_cb[opcode];\n};\n// 0xcc : CALL Z, nn\ninstructions[0xcc] = function()\n{\n do_conditional_call(!!flags.Z);\n};\n// 0xcd : CALL nn\ninstructions[0xcd] = function()\n{\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xce : ADC A, n\ninstructions[0xce] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_adc(core.mem_read(pc));\n};\n// 0xcf : RST 08h\ninstructions[0xcf] = function()\n{\n do_reset(0x08);\n};\n// 0xd0 : RET NC\ninstructions[0xd0] = function()\n{\n do_conditional_return(!flags.C);\n};\n// 0xd1 : POP DE\ninstructions[0xd1] = function()\n{\n var result = pop_word();\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0xd2 : JP NC, nn\ninstructions[0xd2] = function()\n{\n do_conditional_absolute_jump(!flags.C);\n};\n// 0xd3 : OUT (n), A\ninstructions[0xd3] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.io_write((a << 8) | core.mem_read(pc), a);\n};\n// 0xd4 : CALL NC, nn\ninstructions[0xd4] = function()\n{\n do_conditional_call(!flags.C);\n};\n// 0xd5 : PUSH DE\ninstructions[0xd5] = function()\n{\n push_word(e | (d << 8));\n};\n// 0xd6 : SUB n\ninstructions[0xd6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sub(core.mem_read(pc));\n};\n// 0xd7 : RST 10h\ninstructions[0xd7] = function()\n{\n do_reset(0x10);\n};\n// 0xd8 : RET C\ninstructions[0xd8] = function()\n{\n do_conditional_return(!!flags.C);\n};\n// 0xd9 : EXX\ninstructions[0xd9] = function()\n{\n var temp = b;\n b = b_prime;\n b_prime = temp;\n temp = c;\n c = c_prime;\n c_prime = temp;\n temp = d;\n d = d_prime;\n d_prime = temp;\n temp = e;\n e = e_prime;\n e_prime = temp;\n temp = h;\n h = h_prime;\n h_prime = temp;\n temp = l;\n l = l_prime;\n l_prime = temp;\n};\n// 0xda : JP C, nn\ninstructions[0xda] = function()\n{\n do_conditional_absolute_jump(!!flags.C);\n};\n// 0xdb : IN A, (n)\ninstructions[0xdb] = function()\n{\n pc = (pc + 1) & 0xffff;\n a = core.io_read((a << 8) | core.mem_read(pc));\n};\n// 0xdc : CALL C, nn\ninstructions[0xdc] = function()\n{\n do_conditional_call(!!flags.C);\n};\n// 0xdd : DD Prefix (IX instructions)\ninstructions[0xdd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if a DD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xde : SBC n\ninstructions[0xde] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sbc(core.mem_read(pc));\n};\n// 0xdf : RST 18h\ninstructions[0xdf] = function()\n{\n do_reset(0x18);\n};\n// 0xe0 : RET PO\ninstructions[0xe0] = function()\n{\n do_conditional_return(!flags.P);\n};\n// 0xe1 : POP HL\ninstructions[0xe1] = function()\n{\n var result = pop_word();\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0xe2 : JP PO, (nn)\ninstructions[0xe2] = function()\n{\n do_conditional_absolute_jump(!flags.P);\n};\n// 0xe3 : EX (SP), HL\ninstructions[0xe3] = function()\n{\n var temp = core.mem_read(sp);\n core.mem_write(sp, l);\n l = temp;\n temp = core.mem_read((sp + 1) & 0xffff);\n core.mem_write((sp + 1) & 0xffff, h);\n h = temp;\n};\n// 0xe4 : CALL PO, nn\ninstructions[0xe4] = function()\n{\n do_conditional_call(!flags.P);\n};\n// 0xe5 : PUSH HL\ninstructions[0xe5] = function()\n{\n push_word(l | (h << 8));\n};\n// 0xe6 : AND n\ninstructions[0xe6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_and(core.mem_read(pc));\n};\n// 0xe7 : RST 20h\ninstructions[0xe7] = function()\n{\n do_reset(0x20);\n};\n// 0xe8 : RET PE\ninstructions[0xe8] = function()\n{\n do_conditional_return(!!flags.P);\n};\n// 0xe9 : JP (HL)\ninstructions[0xe9] = function()\n{\n pc = l | (h << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xea : JP PE, nn\ninstructions[0xea] = function()\n{\n do_conditional_absolute_jump(!!flags.P);\n};\n// 0xeb : EX DE, HL\ninstructions[0xeb] = function()\n{\n var temp = d;\n d = h;\n h = temp;\n temp = e;\n e = l;\n l = temp;\n};\n// 0xec : CALL PE, nn\ninstructions[0xec] = function()\n{\n do_conditional_call(!!flags.P);\n};\n// 0xed : ED Prefix\ninstructions[0xed] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = ed_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_ed[opcode];\n }\n else\n {\n // If the opcode didn't exist, the whole thing is a two-byte NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xee : XOR n\ninstructions[0xee] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_xor(core.mem_read(pc));\n};\n// 0xef : RST 28h\ninstructions[0xef] = function()\n{\n do_reset(0x28);\n};\n// 0xf0 : RET P\ninstructions[0xf0] = function()\n{\n do_conditional_return(!flags.S);\n};\n// 0xf1 : POP AF\ninstructions[0xf1] = function()\n{\n var result = pop_word();\n set_flags_register(result & 0xff);\n a = (result & 0xff00) >>> 8;\n};\n// 0xf2 : JP P, nn\ninstructions[0xf2] = function()\n{\n do_conditional_absolute_jump(!flags.S);\n};\n// 0xf3 : DI\ninstructions[0xf3] = function()\n{\n // DI doesn't actually take effect until after the next instruction.\n do_delayed_di = true;\n};\n// 0xf4 : CALL P, nn\ninstructions[0xf4] = function()\n{\n do_conditional_call(!flags.S);\n};\n// 0xf5 : PUSH AF\ninstructions[0xf5] = function()\n{\n push_word(get_flags_register() | (a << 8));\n};\n// 0xf6 : OR n\ninstructions[0xf6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_or(core.mem_read(pc));\n};\n// 0xf7 : RST 30h\ninstructions[0xf7] = function()\n{\n do_reset(0x30);\n};\n// 0xf8 : RET M\ninstructions[0xf8] = function()\n{\n do_conditional_return(!!flags.S);\n};\n// 0xf9 : LD SP, HL\ninstructions[0xf9] = function()\n{\n sp = l | (h << 8);\n};\n// 0xfa : JP M, nn\ninstructions[0xfa] = function()\n{\n do_conditional_absolute_jump(!!flags.S);\n};\n// 0xfb : EI\ninstructions[0xfb] = function()\n{\n // EI doesn't actually take effect until after the next instruction.\n do_delayed_ei = true;\n};\n// 0xfc : CALL M, nn\ninstructions[0xfc] = function()\n{\n do_conditional_call(!!flags.S);\n};\n// 0xfd : FD Prefix (IY instructions)\ninstructions[0xfd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n // Rather than copy and paste all the IX instructions into IY instructions,\n // what we'll do is sneakily copy IY into IX, run the IX instruction,\n // and then copy the result into IY and restore the old IX.\n var temp = ix;\n ix = iy;\n //func = func.bind(this);\n func();\n iy = ix;\n ix = temp;\n \n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if an FD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xfe : CP n\ninstructions[0xfe] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_cp(core.mem_read(pc));\n};\n// 0xff : RST 38h\ninstructions[0xff] = function()\n{\n do_reset(0x38);\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table of ED opcodes is pretty sparse;\n/// there are not very many valid ED-prefixed opcodes in the Z80,\n/// and many of the ones that are valid are not documented.\n///////////////////////////////////////////////////////////////////////////////\nlet ed_instructions = [];\n// 0x40 : IN B, (C)\ned_instructions[0x40] = function()\n{\n b = do_in((b << 8) | c);\n};\n// 0x41 : OUT (C), B\ned_instructions[0x41] = function()\n{\n core.io_write((b << 8) | c, b);\n};\n// 0x42 : SBC HL, BC\ned_instructions[0x42] = function()\n{\n do_hl_sbc(c | (b << 8));\n};\n// 0x43 : LD (nn), BC\ned_instructions[0x43] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, c);\n core.mem_write((address + 1) & 0xffff, b);\n};\n// 0x44 : NEG\ned_instructions[0x44] = function()\n{\n do_neg();\n};\n// 0x45 : RETN\ned_instructions[0x45] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x46 : IM 0\ned_instructions[0x46] = function()\n{\n imode = 0;\n};\n// 0x47 : LD I, A\ned_instructions[0x47] = function()\n{\n i = a\n};\n// 0x48 : IN C, (C)\ned_instructions[0x48] = function()\n{\n c = do_in((b << 8) | c);\n};\n// 0x49 : OUT (C), C\ned_instructions[0x49] = function()\n{\n core.io_write((b << 8) | c, c);\n};\n// 0x4a : ADC HL, BC\ned_instructions[0x4a] = function()\n{\n do_hl_adc(c | (b << 8));\n};\n// 0x4b : LD BC, (nn)\ned_instructions[0x4b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n c = core.mem_read(address);\n b = core.mem_read((address + 1) & 0xffff);\n};\n// 0x4c : NEG (Undocumented)\ned_instructions[0x4c] = function()\n{\n do_neg();\n};\n// 0x4d : RETI\ned_instructions[0x4d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0x4e : IM 0 (Undocumented)\ned_instructions[0x4e] = function()\n{\n imode = 0;\n};\n// 0x4f : LD R, A\ned_instructions[0x4f] = function()\n{\n r = a;\n};\n// 0x50 : IN D, (C)\ned_instructions[0x50] = function()\n{\n d = do_in((b << 8) | c);\n};\n// 0x51 : OUT (C), D\ned_instructions[0x51] = function()\n{\n core.io_write((b << 8) | c, d);\n};\n// 0x52 : SBC HL, DE\ned_instructions[0x52] = function()\n{\n do_hl_sbc(e | (d << 8));\n};\n// 0x53 : LD (nn), DE\ned_instructions[0x53] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, e);\n core.mem_write((address + 1) & 0xffff, d);\n};\n// 0x54 : NEG (Undocumented)\ned_instructions[0x54] = function()\n{\n do_neg();\n};\n// 0x55 : RETN\ned_instructions[0x55] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x56 : IM 1\ned_instructions[0x56] = function()\n{\n imode = 1;\n};\n// 0x57 : LD A, I\ned_instructions[0x57] = function()\n{\n a = i;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x58 : IN E, (C)\ned_instructions[0x58] = function()\n{\n e = do_in((b << 8) | c);\n};\n// 0x59 : OUT (C), E\ned_instructions[0x59] = function()\n{\n core.io_write((b << 8) | c, e);\n};\n// 0x5a : ADC HL, DE\ned_instructions[0x5a] = function()\n{\n do_hl_adc(e | (d << 8));\n};\n// 0x5b : LD DE, (nn)\ned_instructions[0x5b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n e = core.mem_read(address);\n d = core.mem_read((address + 1) & 0xffff);\n};\n// 0x5c : NEG (Undocumented)\ned_instructions[0x5c] = function()\n{\n do_neg();\n};\n// 0x5d : RETN\ned_instructions[0x5d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x5e : IM 2\ned_instructions[0x5e] = function()\n{\n imode = 2;\n};\n// 0x5f : LD A, R\ned_instructions[0x5f] = function()\n{\n a = r;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x60 : IN H, (C)\ned_instructions[0x60] = function()\n{\n h = do_in((b << 8) | c);\n};\n// 0x61 : OUT (C), H\ned_instructions[0x61] = function()\n{\n core.io_write((b << 8) | c, h);\n};\n// 0x62 : SBC HL, HL\ned_instructions[0x62] = function()\n{\n do_hl_sbc(l | (h << 8));\n};\n// 0x63 : LD (nn), HL (Undocumented)\ned_instructions[0x63] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x64 : NEG (Undocumented)\ned_instructions[0x64] = function()\n{\n do_neg();\n};\n// 0x65 : RETN\ned_instructions[0x65] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x66 : IM 0\ned_instructions[0x66] = function()\n{\n imode = 0;\n};\n// 0x67 : RRD\ned_instructions[0x67] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0x0f, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0xf0) >>> 4) | (temp2 << 4);\n a = (a & 0xf0) | temp1;\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x68 : IN L, (C)\ned_instructions[0x68] = function()\n{\n l = do_in((b << 8) | c);\n};\n// 0x69 : OUT (C), L\ned_instructions[0x69] = function()\n{\n core.io_write((b << 8) | c, l);\n};\n// 0x6a : ADC HL, HL\ned_instructions[0x6a] = function()\n{\n do_hl_adc(l | (h << 8));\n};\n// 0x6b : LD HL, (nn) (Undocumented)\ned_instructions[0x6b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x6c : NEG (Undocumented)\ned_instructions[0x6c] = function()\n{\n do_neg();\n};\n// 0x6d : RETN\ned_instructions[0x6d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x6e : IM 0 (Undocumented)\ned_instructions[0x6e] = function()\n{\n imode = 0;\n};\n// 0x6f : RLD\ned_instructions[0x6f] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0xf0, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0x0f) << 4) | temp2;\n a = (a & 0xf0) | (temp1 >>> 4);\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x70 : IN (C) (Undocumented)\ned_instructions[0x70] = function()\n{\n do_in((b << 8) | c);\n};\n// 0x71 : OUT (C), 0 (Undocumented)\ned_instructions[0x71] = function()\n{\n core.io_write((b << 8) | c, 0);\n};\n// 0x72 : SBC HL, SP\ned_instructions[0x72] = function()\n{\n do_hl_sbc(sp);\n};\n// 0x73 : LD (nn), SP\ned_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, sp & 0xff);\n core.mem_write((address + 1) & 0xffff, (sp >>> 8) & 0xff);\n};\n// 0x74 : NEG (Undocumented)\ned_instructions[0x74] = function()\n{\n do_neg();\n};\n// 0x75 : RETN\ned_instructions[0x75] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x76 : IM 1\ned_instructions[0x76] = function()\n{\n imode = 1;\n};\n// 0x78 : IN A, (C)\ned_instructions[0x78] = function()\n{\n a = do_in((b << 8) | c);\n};\n// 0x79 : OUT (C), A\ned_instructions[0x79] = function()\n{\n core.io_write((b << 8) | c, a);\n};\n// 0x7a : ADC HL, SP\ned_instructions[0x7a] = function()\n{\n do_hl_adc(sp);\n};\n// 0x7b : LD SP, (nn)\ned_instructions[0x7b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n sp = core.mem_read(address);\n sp |= core.mem_read((address + 1) & 0xffff) << 8;\n};\n// 0x7c : NEG (Undocumented)\ned_instructions[0x7c] = function()\n{\n do_neg();\n};\n// 0x7d : RETN\ned_instructions[0x7d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x7e : IM 2\ned_instructions[0x7e] = function()\n{\n imode = 2;\n};\n// 0xa0 : LDI\ned_instructions[0xa0] = function()\n{\n do_ldi();\n};\n// 0xa1 : CPI\ned_instructions[0xa1] = function()\n{\n do_cpi();\n};\n// 0xa2 : INI\ned_instructions[0xa2] = function()\n{\n do_ini();\n};\n// 0xa3 : OUTI\ned_instructions[0xa3] = function()\n{\n do_outi();\n};\n// 0xa8 : LDD\ned_instructions[0xa8] = function()\n{\n do_ldd();\n};\n// 0xa9 : CPD\ned_instructions[0xa9] = function()\n{\n do_cpd();\n};\n// 0xaa : IND\ned_instructions[0xaa] = function()\n{\n do_ind();\n};\n// 0xab : OUTD\ned_instructions[0xab] = function()\n{\n do_outd();\n};\n// 0xb0 : LDIR\ned_instructions[0xb0] = function()\n{\n do_ldi();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb1 : CPIR\ned_instructions[0xb1] = function()\n{\n do_cpi();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb2 : INIR\ned_instructions[0xb2] = function()\n{\n do_ini();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb3 : OTIR\ned_instructions[0xb3] = function()\n{\n do_outi();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb8 : LDDR\ned_instructions[0xb8] = function()\n{\n do_ldd();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb9 : CPDR\ned_instructions[0xb9] = function()\n{\n do_cpd();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xba : INDR\ned_instructions[0xba] = function()\n{\n do_ind();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xbb : OTDR\ned_instructions[0xbb] = function()\n{\n do_outd();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// Like ED, this table is quite sparse,\n/// and many of the opcodes here are also undocumented.\n/// The undocumented instructions here are those that deal with only one byte\n/// of the two-byte IX register; the bytes are designed IXH and IXL here.\n///////////////////////////////////////////////////////////////////////////////\nlet dd_instructions = [];\n// 0x09 : ADD IX, BC\ndd_instructions[0x09] = function()\n{\n do_ix_add(c | (b << 8));\n};\n// 0x19 : ADD IX, DE\ndd_instructions[0x19] = function()\n{\n do_ix_add(e | (d << 8));\n};\n// 0x21 : LD IX, nn\ndd_instructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n ix |= (core.mem_read(pc) << 8);\n};\n// 0x22 : LD (nn), IX\ndd_instructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n core.mem_write(address, ix & 0xff);\n core.mem_write((address + 1) & 0xffff, (ix >>> 8) & 0xff);\n};\n// 0x23 : INC IX\ndd_instructions[0x23] = function()\n{\n ix = (ix + 1) & 0xffff;\n};\n// 0x24 : INC IXH (Undocumented)\ndd_instructions[0x24] = function()\n{\n ix = (do_inc(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x25 : DEC IXH (Undocumented)\ndd_instructions[0x25] = function()\n{\n ix = (do_dec(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x26 : LD IXH, n (Undocumented)\ndd_instructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) << 8) | (ix & 0xff);\n};\n// 0x29 : ADD IX, IX\ndd_instructions[0x29] = function()\n{\n do_ix_add(ix);\n};\n// 0x2a : LD IX, (nn)\ndd_instructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n ix = core.mem_read(address);\n ix |= (core.mem_read((address + 1) & 0xffff) << 8);\n};\n// 0x2b : DEC IX\ndd_instructions[0x2b] = function()\n{\n ix = (ix - 1) & 0xffff;\n};\n// 0x2c : INC IXL (Undocumented)\ndd_instructions[0x2c] = function()\n{\n ix = do_inc(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2d : DEC IXL (Undocumented)\ndd_instructions[0x2d] = function()\n{\n ix = do_dec(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2e : LD IXL, n (Undocumented)\ndd_instructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) & 0xff) | (ix & 0xff00);\n};\n// 0x34 : INC (IX+n)\ndd_instructions[0x34] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_inc(value));\n};\n// 0x35 : DEC (IX+n)\ndd_instructions[0x35] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_dec(value));\n};\n// 0x36 : LD (IX+n), n\ndd_instructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n core.mem_write((ix + offset) & 0xffff, core.mem_read(pc)); \n};\n// 0x39 : ADD IX, SP\ndd_instructions[0x39] = function()\n{\n do_ix_add(sp);\n};\n// 0x44 : LD B, IXH (Undocumented)\ndd_instructions[0x44] = function()\n{\n b = (ix >>> 8) & 0xff;\n};\n// 0x45 : LD B, IXL (Undocumented)\ndd_instructions[0x45] = function()\n{\n b = ix & 0xff;\n};\n// 0x46 : LD B, (IX+n)\ndd_instructions[0x46] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n b = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x4c : LD C, IXH (Undocumented)\ndd_instructions[0x4c] = function()\n{\n c = (ix >>> 8) & 0xff;\n};\n// 0x4d : LD C, IXL (Undocumented)\ndd_instructions[0x4d] = function()\n{\n c = ix & 0xff;\n};\n// 0x4e : LD C, (IX+n)\ndd_instructions[0x4e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n c = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x54 : LD D, IXH (Undocumented)\ndd_instructions[0x54] = function()\n{\n d = (ix >>> 8) & 0xff;\n};\n// 0x55 : LD D, IXL (Undocumented)\ndd_instructions[0x55] = function()\n{\n d = ix & 0xff;\n};\n// 0x56 : LD D, (IX+n)\ndd_instructions[0x56] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n d = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x5c : LD E, IXH (Undocumented)\ndd_instructions[0x5c] = function()\n{\n e = (ix >>> 8) & 0xff;\n};\n// 0x5d : LD E, IXL (Undocumented)\ndd_instructions[0x5d] = function()\n{\n e = ix & 0xff;\n};\n// 0x5e : LD E, (IX+n)\ndd_instructions[0x5e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n e = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x60 : LD IXH, B (Undocumented)\ndd_instructions[0x60] = function()\n{\n ix = (ix & 0xff) | (b << 8);\n};\n// 0x61 : LD IXH, C (Undocumented)\ndd_instructions[0x61] = function()\n{\n ix = (ix & 0xff) | (c << 8);\n};\n// 0x62 : LD IXH, D (Undocumented)\ndd_instructions[0x62] = function()\n{\n ix = (ix & 0xff) | (d << 8);\n};\n// 0x63 : LD IXH, E (Undocumented)\ndd_instructions[0x63] = function()\n{\n ix = (ix & 0xff) | (e << 8);\n};\n// 0x64 : LD IXH, IXH (Undocumented)\ndd_instructions[0x64] = function()\n{\n // No-op.\n};\n// 0x65 : LD IXH, IXL (Undocumented)\ndd_instructions[0x65] = function()\n{\n ix = (ix & 0xff) | ((ix & 0xff) << 8);\n};\n// 0x66 : LD H, (IX+n)\ndd_instructions[0x66] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n h = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x67 : LD IXH, A (Undocumented)\ndd_instructions[0x67] = function()\n{\n ix = (ix & 0xff) | (a << 8);\n};\n// 0x68 : LD IXL, B (Undocumented)\ndd_instructions[0x68] = function()\n{\n ix = (ix & 0xff00) | b;\n};\n// 0x69 : LD IXL, C (Undocumented)\ndd_instructions[0x69] = function()\n{\n ix = (ix & 0xff00) | c;\n};\n// 0x6a : LD IXL, D (Undocumented)\ndd_instructions[0x6a] = function()\n{\n ix = (ix & 0xff00) | d;\n};\n// 0x6b : LD IXL, E (Undocumented)\ndd_instructions[0x6b] = function()\n{\n ix = (ix & 0xff00) | e;\n};\n// 0x6c : LD IXL, IXH (Undocumented)\ndd_instructions[0x6c] = function()\n{\n ix = (ix & 0xff00) | (ix >>> 8);\n};\n// 0x6d : LD IXL, IXL (Undocumented)\ndd_instructions[0x6d] = function()\n{\n // No-op.\n};\n// 0x6e : LD L, (IX+n)\ndd_instructions[0x6e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n l = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x6f : LD IXL, A (Undocumented)\ndd_instructions[0x6f] = function()\n{\n ix = (ix & 0xff00) | a;\n};\n// 0x70 : LD (IX+n), B\ndd_instructions[0x70] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, b);\n};\n// 0x71 : LD (IX+n), C\ndd_instructions[0x71] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, c);\n};\n// 0x72 : LD (IX+n), D\ndd_instructions[0x72] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, d);\n};\n// 0x73 : LD (IX+n), E\ndd_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, e);\n};\n// 0x74 : LD (IX+n), H\ndd_instructions[0x74] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, h);\n};\n// 0x75 : LD (IX+n), L\ndd_instructions[0x75] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, l);\n};\n// 0x77 : LD (IX+n), A\ndd_instructions[0x77] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, a);\n};\n// 0x7c : LD A, IXH (Undocumented)\ndd_instructions[0x7c] = function()\n{\n a = (ix >>> 8) & 0xff;\n};\n// 0x7d : LD A, IXL (Undocumented)\ndd_instructions[0x7d] = function()\n{\n a = ix & 0xff;\n};\n// 0x7e : LD A, (IX+n)\ndd_instructions[0x7e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n a = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x84 : ADD A, IXH (Undocumented)\ndd_instructions[0x84] = function()\n{\n do_add((ix >>> 8) & 0xff);\n};\n// 0x85 : ADD A, IXL (Undocumented)\ndd_instructions[0x85] = function()\n{\n do_add(ix & 0xff);\n};\n// 0x86 : ADD A, (IX+n)\ndd_instructions[0x86] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_add(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x8c : ADC A, IXH (Undocumented)\ndd_instructions[0x8c] = function()\n{\n do_adc((ix >>> 8) & 0xff);\n};\n// 0x8d : ADC A, IXL (Undocumented)\ndd_instructions[0x8d] = function()\n{\n do_adc(ix & 0xff);\n};\n// 0x8e : ADC A, (IX+n)\ndd_instructions[0x8e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_adc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x94 : SUB IXH (Undocumented)\ndd_instructions[0x94] = function()\n{\n do_sub((ix >>> 8) & 0xff);\n};\n// 0x95 : SUB IXL (Undocumented)\ndd_instructions[0x95] = function()\n{\n do_sub(ix & 0xff);\n};\n// 0x96 : SUB A, (IX+n)\ndd_instructions[0x96] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sub(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x9c : SBC IXH (Undocumented)\ndd_instructions[0x9c] = function()\n{\n do_sbc((ix >>> 8) & 0xff);\n};\n// 0x9d : SBC IXL (Undocumented)\ndd_instructions[0x9d] = function()\n{\n do_sbc(ix & 0xff);\n};\n// 0x9e : SBC A, (IX+n)\ndd_instructions[0x9e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sbc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xa4 : AND IXH (Undocumented)\ndd_instructions[0xa4] = function()\n{\n do_and((ix >>> 8) & 0xff);\n};\n// 0xa5 : AND IXL (Undocumented)\ndd_instructions[0xa5] = function()\n{\n do_and(ix & 0xff);\n};\n// 0xa6 : AND A, (IX+n)\ndd_instructions[0xa6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_and(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xac : XOR IXH (Undocumented)\ndd_instructions[0xac] = function()\n{\n do_xor((ix >>> 8) & 0xff);\n};\n// 0xad : XOR IXL (Undocumented)\ndd_instructions[0xad] = function()\n{\n do_xor(ix & 0xff);\n};\n// 0xae : XOR A, (IX+n)\ndd_instructions[0xae] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_xor(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xb4 : OR IXH (Undocumented)\ndd_instructions[0xb4] = function()\n{\n do_or((ix >>> 8) & 0xff);\n};\n// 0xb5 : OR IXL (Undocumented)\ndd_instructions[0xb5] = function()\n{\n do_or(ix & 0xff);\n};\n// 0xb6 : OR A, (IX+n)\ndd_instructions[0xb6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_or(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xbc : CP IXH (Undocumented)\ndd_instructions[0xbc] = function()\n{\n do_cp((ix >>> 8) & 0xff);\n};\n// 0xbd : CP IXL (Undocumented)\ndd_instructions[0xbd] = function()\n{\n do_cp(ix & 0xff);\n};\n// 0xbe : CP A, (IX+n)\ndd_instructions[0xbe] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_cp(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xcb : CB Prefix (IX bit instructions)\ndd_instructions[0xcb] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc), value;\n \n // As with the \"normal\" CB prefix, we implement the DDCB prefix\n // by decoding the opcode directly, rather than using a table.\n if (opcode < 0x40)\n {\n // Shift and rotate instructions.\n var ddcb_functions = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n // Most of the opcodes in this range are not valid,\n // so we map this opcode onto one of the ones that is.\n var func = ddcb_functions[(opcode & 0x38) >>> 3],\n value = func( core.mem_read((ix + offset) & 0xffff));\n \n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n var bit_number = (opcode & 0x38) >>> 3;\n \n if (opcode < 0x80)\n {\n // BIT\n flags.N = 0;\n flags.H = 1;\n flags.Z = !(core.mem_read((ix + offset) & 0xffff) & (1 << bit_number)) ? 1 : 0;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES\n value = core.mem_read((ix + offset) & 0xffff) & ~(1 << bit_number) & 0xff;\n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n // SET\n value = core.mem_read((ix + offset) & 0xffff) | (1 << bit_number);\n core.mem_write((ix + offset) & 0xffff, value);\n }\n }\n \n // This implements the undocumented shift, RES, and SET opcodes,\n // which write their result to memory and also to an 8080 register.\n if (value !== undefined)\n {\n if ((opcode & 0x07) === 0)\n b = value;\n else if ((opcode & 0x07) === 1)\n c = value;\n else if ((opcode & 0x07) === 2)\n d = value;\n else if ((opcode & 0x07) === 3)\n e = value;\n else if ((opcode & 0x07) === 4)\n h = value;\n else if ((opcode & 0x07) === 5)\n l = value;\n // 6 is the documented opcode, which doesn't set a register.\n else if ((opcode & 0x07) === 7)\n a = value;\n }\n \n cycle_counter += cycle_counts_cb[opcode] + 8;\n};\n// 0xe1 : POP IX\ndd_instructions[0xe1] = function()\n{\n ix = pop_word();\n};\n// 0xe3 : EX (SP), IX\ndd_instructions[0xe3] = function()\n{\n var temp = ix;\n ix = core.mem_read(sp);\n ix |= core.mem_read((sp + 1) & 0xffff) << 8;\n core.mem_write(sp, temp & 0xff);\n core.mem_write((sp + 1) & 0xffff, (temp >>> 8) & 0xff);\n};\n// 0xe5 : PUSH IX\ndd_instructions[0xe5] = function()\n{\n push_word(ix);\n};\n// 0xe9 : JP (IX)\ndd_instructions[0xe9] = function()\n{\n pc = (ix - 1) & 0xffff;\n};\n// 0xf9 : LD SP, IX\ndd_instructions[0xf9] = function()\n{\n sp = ix;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// These tables contain the number of T cycles used for each instruction.\n/// In a few special cases, such as conditional control flow instructions,\n/// additional cycles might be added to these values.\n/// The total number of cycles is the return value of run_instruction().\n///////////////////////////////////////////////////////////////////////////////\nlet cycle_counts = [\n 4, 10, 7, 6, 4, 4, 7, 4, 4, 11, 7, 6, 4, 4, 7, 4,\n 8, 10, 7, 6, 4, 4, 7, 4, 12, 11, 7, 6, 4, 4, 7, 4,\n 7, 10, 16, 6, 4, 4, 7, 4, 7, 11, 16, 6, 4, 4, 7, 4,\n 7, 10, 13, 6, 11, 11, 10, 4, 7, 11, 13, 6, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 5, 10, 10, 10, 10, 11, 7, 11, 5, 10, 10, 0, 10, 17, 7, 11,\n 5, 10, 10, 11, 10, 11, 7, 11, 5, 4, 10, 11, 10, 0, 7, 11,\n 5, 10, 10, 19, 10, 11, 7, 11, 5, 4, 10, 4, 10, 0, 7, 11,\n 5, 10, 10, 4, 10, 11, 7, 11, 5, 6, 10, 4, 10, 0, 7, 11\n];\n\nlet cycle_counts_ed = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 18, 12, 12, 15, 20, 8, 14, 8, 18,\n 12, 12, 15, 20, 8, 14, 8, 0, 12, 12, 15, 20, 8, 14, 8, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n];\n\nlet cycle_counts_cb = [\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8\n];\n\nlet cycle_counts_dd = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 14, 20, 10, 8, 8, 11, 0, 0, 15, 20, 10, 8, 8, 11, 0,\n 0, 0, 0, 0, 23, 23, 19, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 8, 8, 8, 8, 8, 8, 19, 8, 8, 8, 8, 8, 8, 8, 19, 8,\n 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 14, 0, 23, 0, 15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0\n];\n\n // There's tons of stuff in this object,\n // but only these three functions are the public API.\n this.saveState = getState;\n this.loadState = setState;\n this.reset = reset;\n this.advanceInsn = run_instruction;\n this.interrupt = interrupt;\n this.getPC = ():number => { return pc; }\n this.getSP = ():number => { return sp; }\n this.getHalted = ():boolean => { return halted; }\n}\n\nexport interface Z80State {\nAF : number;\nBC : number;\nDE : number;\nHL : number;\nAF_ : number;\nBC_ : number;\nDE_ : number;\nHL_ : number;\nIX : number;\nIY : number;\nSP : number;\nPC : number;\nIR : number;\niff1 : number;\niff2 : number;\nim : number;\nhalted : boolean;\ndo_delayed_di : boolean;\ndo_delayed_ei : boolean;\ncycle_counter : number;\n}\n\nexport class Z80 implements CPU, InstructionBased, IOBusConnected, SavesState, Interruptable {\n\n cpu;\n interruptType;\n memBus : Bus;\n ioBus : Bus;\n retryInterrupts : boolean = false;\n retryData : number = -1;\n \n private buildCPU() {\n // Build the core only once and route its callbacks through the current\n // bus fields. BasicHeadlessMachine.rewireCPUBuses() swaps memBus/ioBus\n // whenever a probe is attached or detached; rebuilding here would throw\n // away the whole register state (i.e. reset the machine). FastZ80 calls\n // core.mem_read/... at instruction time, so the closures pick up the swap.\n if (this.memBus && this.ioBus && !this.cpu) {\n this.cpu = new FastZ80({\n mem_read: (a) => this.memBus.read(a),\n mem_write: (a, v) => this.memBus.write(a, v),\n io_read: (a) => this.ioBus.read(a),\n io_write: (a, v) => this.ioBus.write(a, v),\n });\n }\n }\n connectMemoryBus(bus:Bus) {\n this.memBus = bus;\n this.buildCPU();\n }\n connectIOBus(bus:Bus) {\n this.ioBus = bus;\n this.buildCPU();\n }\n advanceInsn() {\n if (this.retryInterrupts && this.retryData >= 0 && this.cpu.interrupt(false, this.retryData)) {\n this.retryData = -1;\n }\n return this.cpu.advanceInsn();\n }\n reset() {\n this.cpu.reset();\n }\n interrupt(data:number) {\n if (!this.cpu.interrupt(false, data) && this.retryInterrupts) {\n this.retryData = data;\n }\n }\n NMI() {\n this.cpu.interrupt(true, 0);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.getHalted();\n }\n saveState() {\n return this.cpu.saveState();\n }\n loadState(s) {\n this.cpu.loadState(s);\n }\n isStable() { return true; }\n // TODO: metadata\n // TODO: disassembler\n}\n", "\nimport { SampledAudioSink } from \"./devices\";\n\n// from TSS\ndeclare var MasterChannel, AudioLooper, PsgDeviceChannel;\n\nexport class MasterAudio {\n master = new MasterChannel();\n looper;\n start() {\n if (!this.looper) {\n this.looper = new AudioLooper(512);\n this.looper.setChannel(this.master);\n this.looper.activate();\n }\n }\n stop() {\n if (this.looper) {\n this.looper.setChannel(null);\n this.looper = null;\n }\n }\n}\n\nexport class AY38910_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n curreg = 0;\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910);\n master.master.addChannel(this.psg);\n }\n\n reset() {\n for (var i=15; i>=0; i--) {\n this.selectRegister(i);\n this.setData(0);\n }\n }\n selectRegister(val : number) {\n this.curreg = val & 0xf;\n }\n setData(val : number) {\n this.psg.writeRegisterAY(this.curreg, val & 0xff);\n }\n readData() {\n return this.psg.readRegister(this.curreg);\n }\n currentRegister() { return this.curreg; }\n}\n\nexport class SN76489_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489);\n master.master.addChannel(this.psg);\n }\n reset() {\n // TODO\n }\n setData(val : number) {\n this.psg.writeRegisterSN(0, val & 0xff);\n }\n}\n\n// https://en.wikipedia.org/wiki/POKEY\n// https://user.xmission.com/~trevin/atari/pokey_regs.html\n// http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm\n\nexport function newPOKEYAudio(count:number) {\n var audio = new MasterAudio();\n for (var i=1; i<=count; i++) {\n var pokey = new POKEYDeviceChannel();\n audio['pokey'+i] = pokey; // TODO: cheezy\n audio.master.addChannel(pokey);\n }\n return audio;\n}\n\nfunction combinePolys(a, b) {\n var arr = new Uint8Array(a.length * b.length);\n var n = 0;\n for (var i=0; i 0.5 ? 1 : 0;\n }\n var bit17_5 = combinePolys(bit17, bit5);\n var bit5_4 = combinePolys(bit5, bit4);\n var wavetones = [\n bit17_5, bit5, bit5_4, bit5,\n bit17, bit2, bit4, bit2\n ];\n // TIA\n var div2 = divideBy(2);\n var div6 = divideBy(6);\n var div31 = divideBy(31);\n var div93 = divideBy(93);\n var bit15_4 = combinePolys(bit15, bit4);\n var bit5_2 = combinePolys(bit5, div2);\n var bit5_6 = combinePolys(bit5, div6);\n var tiawavetones = [\n bit1, bit4, bit15_4, bit5_4,\n div2, div2, div31, bit5_2,\n bit9, bit5, div31, bit1,\n div6, div6, div93, bit5_6\n ];\n \n // registers\n var regs = new Uint8Array(16);\n var counters = new Float32Array(4);\n var deltas = new Float32Array(4);\n var volume = new Float32Array(4);\n var audc = new Uint8Array(4);\n var waveforms = [bit1, bit1, bit1, bit1];\n var buffer;\n var sampleRate;\n var clock, baseDelta;\n var dirty = true;\n\n //\n\n this.setBufferLength = function (length) {\n buffer = new Int32Array(length);\n };\n\n this.getBuffer = function () {\n return buffer;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n baseDelta = FREQ_17_EXACT / rate;\n };\n\n function updateValues(addr) {\n var ctrl = regs[8];\n var base = (ctrl & CLOCK_15) ? DIV_15 : DIV_64;\n var div;\n var i = addr & 4;\n var j = i>>1;\n var k = i>>2;\n if (ctrl & (CH1_CH2>>k)) {\n if (ctrl & (CH1_179>>k))\n div = regs[i+2] * 256 + regs[i+0] + 7;\n else\n div = (regs[i+2] * 256 + regs[i+0] + 1) * base;\n deltas[j+1] = baseDelta / div;\n deltas[j+0] = 0;\n } else {\n if (ctrl & (CH1_179>>k)) {\n div = regs[i+0] + 4;\n } else {\n div = (regs[i+0] + 1) * base;\n }\n deltas[j+0] = baseDelta / div;\n div = (regs[i+2] + 1) * base;\n deltas[j+1] = baseDelta / div;\n }\n //console.log(addr, ctrl.toString(16), div, deltas[j+0], deltas[j+1]);\n }\n\n this.setRegister = function(addr, value) {\n addr &= 0xf;\n value &= 0xff;\n if (regs[addr] != value) {\n regs[addr] = value;\n switch (addr) {\n case 0:\n case 2:\n case 4:\n case 6: // AUDF\n case 8: // ctrl\n dirty = true;\n break;\n case 1:\n case 3:\n case 5:\n case 7: // AUDC\n volume[addr>>1] = value & 0xf;\n waveforms[addr>>1] = wavetones[value>>5];\n break;\n }\n }\n }\n\n this.getRegister = function(addr) {\n addr &= 0xf;\n return regs[addr];\n }\n \n this.setTIARegister = function(addr, value) {\n switch (addr) {\n case 0x17:\n case 0x18:\n regs[(addr&1)*4] = value & 0x1f;\n dirty = true;\n break;\n case 0x15:\n case 0x16:\n waveforms[(addr&1)*2] = tiawavetones[value & 0xf];\n break;\n case 0x19:\n case 0x1a:\n volume[(addr&1)*2] = value & 0xf;\n break;\n }\n }\n\n this.generate = function (length) {\n if (dirty) {\n updateValues(0);\n updateValues(4);\n dirty = false;\n }\n for (var s=0; s 0 && d < 1 && v > 0) {\n var wav = waveforms[i];\n var cnt = counters[i] += d;\n if (cnt > wav.length) {\n cnt = counters[i] = cnt - Math.floor(cnt / wav.length) * wav.length;\n }\n var on = wav[Math.floor(cnt)];\n if (on) {\n sample += v;\n }\n }\n }\n sample *= 64;\n buffer[s] = sample;\n buffer[s+1] = sample;\n }\n }\n}\n\n////// Worker sound\n\nexport var WorkerSoundChannel = function(worker) {\n var sampleRate;\n var output;\n var pending = [];\n var pendingLength = 0;\n\n worker.onmessage = function(e) {\n if (e && e.data && e.data.samples && output) {\n pending.push(e.data.samples);\n pendingLength += e.data.samples.length;\n }\n };\n\n this.setBufferLength = function (length) {\n output = new Int16Array(length);\n //worker.postMessage({bufferLength:length,numChannels:2});\n pendingLength = 0;\n };\n\n this.getBuffer = function () {\n return output;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n worker.postMessage({sampleRate:rate});\n };\n\n this.generate = function (length) {\n if (pendingLength < length*3) {\n //console.log(length, pendingLength);\n output.fill(0);\n return; // TODO: send sync msg?\n }\n for (var i=0; i AudioStream) | null = null;\n\n/** Install the streaming output. Pass null to go back to a Web Audio graph. */\nexport function setAudioStreamFactory(factory: ((sourceRate: number) => AudioStream) | null) {\n audioStreamFactory = factory;\n}\n\n// samples per chunk; the same size the IDE's ScriptProcessor asks for\nexport const AUDIO_CHUNK_SAMPLES = 2048;\n\nexport var SampleAudio = function(clockfreq) {\n var self = this;\n var sfrac, sinc, accum;\n var buffer, bufpos, bufferlist;\n var ifill; // physical ring slot the producer is filling\n var written, read; // monotonic buffer counts (committed / consumed)\n var skippedBuffers = 0, lastSkipLog = 0;\n var underruns = 0;\n var fillHist = null; // ring-fill histogram; opt-in via setStatsEnabled\n var collectStats = false;\n // Clock recovery. The emulated frame clock and the AudioContext clock drift apart\n // by a fraction of a percent, so over time the ring either drains (underruns) or\n // fills. We nudge the resample ratio by a hair to hold a small cushion, instead of\n // adding ring depth, which would just add latency.\n var baseSinc = 1; // sr / clockfreq, the untrimmed ratio\n var trim = 1; // current trim around baseSinc\n var fillAvg = 0; // EWMA of ring fill, in buffers\n var lastTrimAdj = 0;\n var FILL_TARGET = 1.5; // buffers of cushion to hold\n var FILL_ALPHA = 0.05; // EWMA weight per consumer pull (~1s at 21 pulls/s)\n var TRIM_GAIN = 0.004; // resample-ratio change per buffer of error\n var MAX_TRIM = 0.01; // cap the pitch shift at 1%\n var TRIM_INTERVAL_MS = 500;\n // The ring is allocated once at MAXBUFFERS and always indexed with that modulo.\n // Measurement showed the fill settles at 1-2 buffers and never nears this cap, so\n // depth is not the latency lever -- the per-buffer floor (bufferlen) is -- and\n // clock recovery holds the small cushion. The cap stays as insurance against the\n // ScriptProcessor callback stalling on the main thread (rendering/GC), ~370ms.\n var MAXBUFFERS = 8;\n var targetDepth = MAXBUFFERS;\n\n function mix(ape) {\n var lbuf = ape.outputBuffer.getChannelData(0);\n var m = this.module;\n if (!m) m = ape.srcElement.module;\n if (!m) return;\n if (m.callback) {\n m.callback(lbuf);\n return;\n } else if (written > read) {\n // copy the oldest committed buffer, then free it\n if (collectStats) fillHist[Math.min(written - read, MAXBUFFERS)]++;\n fillAvg += ((written - read) - fillAvg) * FILL_ALPHA;\n var buf = bufferlist[read % MAXBUFFERS];\n for (var i=0; i= buffer.length) {\n bufpos = 0;\n if (self.stream) {\n // hand the buffer off and get a fresh one; the stream may transfer it\n var out = buffer;\n buffer = new Float32Array(self.bufferlen);\n self.stream.push(out);\n return;\n }\n bufferlist[ifill] = buffer;\n written++;\n // Producer outran the consumer; drop the oldest audio to make room.\n if (written - read >= targetDepth) {\n read++;\n skippedBuffers++;\n var now = Date.now();\n if (now - lastSkipLog > 1000) { // throttle so a sustained overrun doesn't flood the console\n console.warn('SampleAudio: skipped audio buffer(s), total=' + skippedBuffers +\n ', fill=' + (written - read) + '/' + targetDepth +\n ', contextRate=' + self.sr + ', requestedBuf=' + self.bufferlen +\n ', expectedIntervalMs=' + (self.bufferlen * 1000 / self.sr).toFixed(2));\n lastSkipLog = now;\n }\n }\n ifill = (ifill + 1) % MAXBUFFERS;\n buffer = bufferlist[ifill];\n // Clock recovery: steer the resample ratio to hold FILL_TARGET buffers.\n var trimNow = Date.now();\n if (trimNow - lastTrimAdj > TRIM_INTERVAL_MS) {\n lastTrimAdj = trimNow;\n var want = 1 + TRIM_GAIN * (FILL_TARGET - fillAvg);\n if (want > 1 + MAX_TRIM) want = 1 + MAX_TRIM;\n else if (want < 1 - MAX_TRIM) want = 1 - MAX_TRIM;\n trim = want;\n sinc = baseSinc * trim;\n }\n }\n }\n\n this.feedSample = function(value, count) {\n accum += value * count;\n sfrac += sinc * count;\n if (sfrac >= 1) {\n accum /= sfrac;\n while (sfrac >= 1) {\n this.addSingleSample(accum * sinc);\n sfrac -= 1;\n }\n accum *= sfrac;\n }\n }\n\n /**\n * Diagnostics for tuning the ring depth: where the fill actually sits, and how\n * often the producer overruns (drops) or the consumer underruns (silence).\n * Sampling happens on the ScriptProcessor path only; streaming hosts have no ring.\n * The fill histogram is off by default (it touches every consumer pull); turn it\n * on with setStatsEnabled(true) when you want the distribution. The mean/skips/\n * underruns/trim fields are always tracked.\n */\n this.getStats = function() {\n var total = 0, weighted = 0, maxFill = 0;\n if (fillHist) {\n for (var fill=0; fill 0 && fill > maxFill) maxFill = fill;\n }\n }\n return {\n maxBuffers: MAXBUFFERS,\n targetDepth: targetDepth,\n sampleRate: self.sr || 0,\n bufferLength: self.bufferlen || 0,\n fillHistogram: fillHist ? fillHist.slice() : [],\n meanFill: total > 0 ? weighted / total : 0,\n maxFill: maxFill,\n samples: total,\n skippedBuffers: skippedBuffers,\n underruns: underruns,\n fillAvg: fillAvg,\n trim: trim,\n };\n };\n\n /** Turn the per-pull fill histogram on or off (off by default). */\n this.setStatsEnabled = function(on) {\n collectStats = !!on;\n fillHist = collectStats ? new Array(MAXBUFFERS + 1).fill(0) : null;\n };\n \n}\n\n\nexport class SampledAudio {\n sa;\n constructor(sampleRate : number) {\n this.sa = new SampleAudio(sampleRate);\n }\n feedSample(value:number, count:number) {\n this.sa.feedSample(value, count);\n }\n start() {\n this.sa.start();\n }\n stop() {\n this.sa.stop();\n }\n reset() {\n this.sa.reset();\n }\n /** ring-depth diagnostics; see SampleAudio.getStats */\n getStats() {\n return this.sa.getStats ? this.sa.getStats() : null;\n }\n /** turn the ring-fill histogram on or off (off by default) */\n setStatsEnabled(on: boolean) {\n this.sa.setStatsEnabled && this.sa.setStatsEnabled(on);\n }\n /** the rate this sink outputs at, once start() has run (Web Audio or stream) */\n get sampleRate() : number {\n return this.sa.sr || 0;\n }\n}\n\ninterface TssChannel {\n setBufferLength(len : number) : void;\n setSampleRate(rate : number) : void;\n getBuffer() : number[];\n generate(numSamples : number) : void;\n}\n\nexport class TssChannelAdapter {\n channels : TssChannel[];\n audioGain = 1.0 / 8192;\n bufferLength : number;\n\n constructor(chans, oversample:number, sampleRate:number) {\n this.bufferLength = oversample * 2;\n this.channels = chans.generate ? [chans] : chans; // array or single channel\n this.channels.forEach((c) => {\n c.setBufferLength(this.bufferLength);\n c.setSampleRate(sampleRate);\n });\n }\n\n generate(sink:SampledAudioSink) {\n var l = this.bufferLength;\n var bufs = this.channels.map((ch) => ch.getBuffer());\n this.channels.forEach((ch) => {\n ch.generate(l);\n });\n for (let i=0; i total += buf[i]);\n sink.feedSample(total * this.audioGain, 1);\n };\n }\n}\n\n", "\nimport { Probeable, ProbeAll } from \"./devices\";\n\nexport enum ProbeFlags {\n CLOCKS\t = 0x00000000,\n EXECUTE\t = 0x01000000,\n INTERRUPT\t= 0x08000000,\n ILLEGAL\t = 0x09000000,\n SP_PUSH\t = 0x0a000000,\n SP_POP\t = 0x0b000000,\n HAS_VALUE = 0x10000000,\n MEM_READ\t= 0x12000000,\n MEM_WRITE\t= 0x13000000,\n IO_READ\t = 0x14000000,\n IO_WRITE\t= 0x15000000,\n VRAM_READ\t= 0x16000000,\n VRAM_WRITE= 0x17000000,\n DMA_READ = 0x18000000,\n DMA_WRITE = 0x19000000,\n WAIT = 0x1f000000,\n SCANLINE\t= 0x7e000000,\n FRAME\t\t = 0x7f000000,\n}\n\nclass ProbeFrame {\n data : Uint32Array;\n len : number;\n}\n\nexport class ProbeRecorder implements ProbeAll {\n\n m : Probeable; // machine to probe\n buf : Uint32Array; // buffer\n idx : number = 0; // index into buffer\n sl : number = 0; // scanline\n cur_sp = -1; // last stack pointer\n singleFrame : boolean = true; // clear between frames\n\n constructor(m:Probeable, buflen?:number) {\n this.m = m;\n this.reset(buflen || 0x100000);\n }\n start() {\n this.m.connectProbe(this);\n }\n stop() {\n this.m.connectProbe(null);\n }\n reset(newbuflen? : number) {\n if (newbuflen) this.buf = new Uint32Array(newbuflen);\n this.sl = 0;\n this.cur_sp = -1;\n this.clear();\n }\n clear() {\n this.idx = 0;\n }\n logData(a:number) {\n this.log(a);\n }\n log(a:number) {\n // TODO: coalesce READ and EXECUTE and PUSH/POP\n if (this.idx >= this.buf.length) return;\n this.buf[this.idx++] = a;\n }\n relog(a:number) {\n this.buf[this.idx-1] = a;\n }\n lastOp() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xff000000;\n else\n return -1;\n }\n lastAddr() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xffffff;\n else\n return -1;\n }\n addLogBuffer(src: Uint32Array) {\n if (this.idx + src.length > this.buf.length) {\n src = src.slice(0, this.buf.length - this.idx);\n }\n this.buf.set(src, this.idx);\n this.idx += src.length;\n}\n logClocks(clocks:number) {\n clocks |= 0;\n if (clocks > 0) {\n if (this.lastOp() == ProbeFlags.CLOCKS)\n this.relog((this.lastAddr() + clocks) | ProbeFlags.CLOCKS); // coalesce clocks\n else\n this.log(clocks | ProbeFlags.CLOCKS);\n }\n }\n logNewScanline() {\n this.log(ProbeFlags.SCANLINE);\n this.sl++;\n }\n logNewFrame() {\n this.log(ProbeFlags.FRAME);\n this.sl = 0;\n if (this.singleFrame) this.clear();\n }\n logExecute(address:number, SP:number) {\n // record stack pushes/pops (from last instruction)\n if (this.cur_sp !== SP) {\n if (SP < this.cur_sp) {\n this.log(ProbeFlags.SP_PUSH | SP);\n }\n if (SP > this.cur_sp) {\n this.log(ProbeFlags.SP_POP | SP);\n }\n this.cur_sp = SP;\n }\n this.log(address | ProbeFlags.EXECUTE);\n }\n logInterrupt(type:number) {\n this.log(type | ProbeFlags.INTERRUPT);\n }\n logValue(address:number, value:number, op:number) {\n this.log((address & 0xffff) | ((value & 0xff)<<16) | op);\n }\n logRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_READ);\n }\n logWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_WRITE);\n }\n logIORead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_READ);\n }\n logIOWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_WRITE);\n }\n logVRAMRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_READ);\n }\n logVRAMWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_WRITE);\n }\n logIllegal(address:number) {\n this.log(address | ProbeFlags.ILLEGAL);\n }\n logWait(address:number) {\n this.log(address | ProbeFlags.WAIT);\n }\n logDMARead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_READ);\n }\n logDMAWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_WRITE);\n }\n countEvents(op : number) : number {\n var count = 0;\n for (var i=0; i {\n saveState(): S;\n loadState(state: S): void;\n}\n\nexport interface Bus {\n read(a: number): number;\n write(a: number, v: number): void;\n readConst?(a: number): number;\n}\n\nexport interface Bus32 {\n read32(a: number): number;\n write32(a: number, v: number): void;\n readConst32?(a: number): number;\n}\n\nexport interface ClockBased {\n advanceClock(): void;\n}\n\nexport interface InstructionBased {\n advanceInsn(): number;\n}\n\nexport type TrapCondition = () => boolean;\n\nexport interface FrameBased {\n advanceFrame(trap: TrapCondition): number;\n}\n\nexport interface VideoSource {\n getVideoParams(): VideoParams;\n connectVideo(pixels: Uint32Array): void;\n}\n\nexport interface RasterFrameBased extends FrameBased, VideoSource {\n getRasterY(): number;\n getRasterX(): number;\n getRasterCanvasPosition?(): { x: number, y: number };\n}\n\nexport interface VideoParams {\n width: number;\n height: number;\n overscan?: boolean;\n rotate?: number;\n videoFrequency?: number; // default = 60\n aspect?: number;\n}\n\n// TODO: frame buffer optimization (apple2, etc)\n\nexport interface SampledAudioParams {\n sampleRate: number;\n stereo: boolean;\n}\n\nexport interface SampledAudioSink {\n feedSample(value: number, count: number): void;\n //sendAudioFrame(samples:Uint16Array) : void;\n}\n\nexport interface SampledAudioSource {\n getAudioParams(): SampledAudioParams;\n connectAudio(audio: SampledAudioSink): void;\n}\n\nexport interface AcceptsROM {\n loadROM(data: Uint8Array, title?: string, origin?: number): void;\n}\n\nexport interface AcceptsBIOS {\n loadBIOS(data: Uint8Array, title?: string): void;\n}\n\nexport interface Resettable {\n reset(): void;\n}\n\nexport interface MemoryBusConnected {\n connectMemoryBus(bus: Bus): void;\n}\n\nexport interface IOBusConnected {\n connectIOBus(bus: Bus): void;\n}\n\nexport interface CPU extends MemoryBusConnected, Resettable, SavesState {\n getPC(): number;\n getSP(): number;\n isStable(): boolean;\n}\n\nexport interface HasCPU extends Resettable {\n cpu: CPU;\n}\n\nexport interface Interruptable {\n interrupt(type: IT): void;\n}\n\nexport interface SavesInputState {\n loadControlsState(cs: CS): void;\n saveControlsState(): CS;\n}\n\nexport interface AcceptsKeyInput {\n setKeyInput(key: number, code: number, flags: number): void;\n}\n\nexport interface AcceptsPaddleInput {\n setPaddleInput(controller: number, value: number): void;\n setPaddleButton?(index: number, pressed: boolean): void;\n}\n\n// TODO: interface not yet used (setKeyInput() handles joystick)\nexport interface AcceptsJoyInput {\n setJoyInput(joy: number, bitmask: number): void;\n}\n\n// SERIAL I/O\n\nexport interface SerialEvent {\n op: 'read' | 'write';\n value: number;\n nbits: number;\n}\n\n// TODO: all these needed?\nexport interface SerialIOInterface {\n // from machine to platform\n clearToSend(): boolean;\n sendByte(b: number);\n // from platform to machine\n byteAvailable(): boolean;\n recvByte(): number;\n // implement these too\n reset(): void;\n advance(clocks: number): void;\n // refresh() : void;\n}\n\nexport interface HasSerialIO {\n connectSerialIO(serial: SerialIOInterface);\n serialOut?: SerialEvent[]; // outgoing event log\n serialIn?: SerialEvent[]; // incoming queue\n}\n\n/// PROFILER\n\nexport interface Probeable {\n connectProbe(probe: ProbeAll): void;\n}\n\nexport interface ProbeTime {\n logClocks(clocks: number);\n logNewScanline();\n logNewFrame();\n}\n\nexport interface ProbeCPU {\n logExecute(address: number, SP: number);\n logInterrupt(type: number);\n logIllegal(address: number);\n logWait(address: number);\n}\n\nexport interface ProbeBus {\n logRead(address: number, value: number);\n logWrite(address: number, value: number);\n logDMARead(address: number, value: number);\n logDMAWrite(address: number, value: number);\n}\n\nexport interface ProbeIO {\n logIORead(address: number, value: number);\n logIOWrite(address: number, value: number);\n}\n\nexport interface ProbeVRAM {\n logVRAMRead(address: number, value: number);\n logVRAMWrite(address: number, value: number);\n}\n\nexport interface ProbeAll extends ProbeTime, ProbeCPU, ProbeBus, ProbeIO, ProbeVRAM {\n logData(data: number); // entire 32 bits\n addLogBuffer(src: Uint32Array);\n}\n\nexport class NullProbe implements ProbeAll {\n logClocks() { }\n logNewScanline() { }\n logNewFrame() { }\n logExecute() { }\n logInterrupt() { }\n logRead() { }\n logWrite() { }\n logIORead() { }\n logIOWrite() { }\n logVRAMRead() { }\n logVRAMWrite() { }\n logIllegal() { }\n logWait() { }\n logDMARead() { }\n logDMAWrite() { }\n logData() { }\n addLogBuffer(src: Uint32Array) { }\n}\n\n/// CONVENIENCE\n\nexport interface BasicMachineControlsState {\n inputs: Uint8Array;\n}\n\nexport interface BasicMachineState extends BasicMachineControlsState {\n c: any; // TODO\n ram: Uint8Array;\n}\n\nexport abstract class BasicHeadlessMachine implements HasCPU, Bus, AcceptsROM, Probeable,\n SavesState, SavesInputState {\n\n abstract cpuFrequency: number;\n abstract defaultROMSize: number;\n\n abstract cpu: CPU;\n abstract ram: Uint8Array;\n\n rom: Uint8Array;\n inputs: Uint8Array = new Uint8Array(32);\n handler: (key, code, flags) => void; // keyboard handler\n\n nullProbe = new NullProbe();\n probe: ProbeAll = this.nullProbe;\n // True only while a real probe is attached. The probe wrapper around the CPU\n // buses costs ~20% of a frame even when every call lands in NullProbe, so it\n // is spliced in on connectProbe() and taken back out on disconnect rather\n // than left installed for the life of the machine.\n probing: boolean = false;\n // the buses as the machine wired them, before any probe wrapper\n protected cpuMemoryBus: Bus & Partial;\n protected cpuIOBus: Bus;\n\n abstract read(a: number): number;\n abstract write(a: number, v: number): void;\n\n setKeyInput(key: number, code: number, flags: number): void {\n this.handler && this.handler(key, code, flags);\n }\n connectProbe(probe: ProbeAll): void {\n this.probe = probe || this.nullProbe;\n var probing = this.probe !== this.nullProbe;\n if (probing !== this.probing) {\n this.probing = probing;\n this.rewireCPUBuses();\n }\n }\n /** Connect the CPU to the raw buses, or to probe-wrapped ones while probing. */\n protected rewireCPUBuses(): void {\n if (this.cpuMemoryBus) {\n this.cpu.connectMemoryBus(this.probing ? this.probeMemoryBus(this.cpuMemoryBus) : this.cpuMemoryBus);\n }\n if (this.cpuIOBus) {\n this.cpu['connectIOBus'](this.probing ? this.probeIOBus(this.cpuIOBus) : this.cpuIOBus);\n }\n }\n reset() {\n this.cpu.reset();\n }\n loadROM(data: Uint8Array, title?: string, origin?: number): void {\n if (!this.rom) this.rom = new Uint8Array(this.defaultROMSize);\n if (data.length > this.rom.length)\n throw new Error(`ROM too big: ${data.length} > ${this.rom.length}`);\n this.rom.set(data);\n }\n loadState(state) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.inputs.set(state.inputs);\n }\n saveState() {\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(0),\n inputs: this.inputs.slice(0),\n };\n }\n loadControlsState(state) {\n this.inputs.set(state.inputs);\n }\n saveControlsState() {\n return {\n inputs: this.inputs.slice(0)\n };\n }\n advanceCPU() {\n var c = this.cpu as any;\n var n = 1;\n if (this.probing && this.cpu.isStable()) { this.probe.logExecute(this.cpu.getPC(), this.cpu.getSP()); }\n if (c.advanceClock) { c.advanceClock(); }\n else if (c.advanceInsn) { n = c.advanceInsn(1); }\n if (this.probing) { this.probe.logClocks(n); }\n return n;\n }\n probeMemoryBus(membus: Bus & Partial): Bus & Partial {\n return {\n read: (a) => {\n let val = membus.read(a);\n this.probe.logRead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write(a, v);\n },\n read32: (a) => {\n let val = membus.read32(a);\n this.probe.logRead(a, val);\n return val;\n },\n write32: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write32(a, v);\n }\n };\n }\n connectCPUMemoryBus(membus: Bus): void {\n this.cpuMemoryBus = membus as Bus & Bus32;\n this.rewireCPUBuses();\n }\n probeIOBus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logIORead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logIOWrite(a, v);\n iobus.write(a, v);\n },\n };\n }\n probeDMABus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logDMARead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logDMAWrite(a, v);\n iobus.write(a, v);\n }\n };\n }\n connectCPUIOBus(iobus: Bus): void {\n this.cpuIOBus = iobus;\n this.rewireCPUBuses();\n }\n}\n\nexport abstract class BasicMachine extends BasicHeadlessMachine implements SampledAudioSource {\n\n abstract canvasWidth: number;\n abstract numVisibleScanlines: number;\n abstract sampleRate: number;\n overscan: boolean = false;\n rotate: number = 0;\n aspectRatio: number;\n\n pixels: Uint32Array;\n audio: SampledAudioSink;\n\n scanline: number;\n\n getAudioParams(): SampledAudioParams {\n return { sampleRate: this.sampleRate, stereo: false };\n }\n connectAudio(audio: SampledAudioSink): void {\n this.audio = audio;\n }\n getVideoParams(): VideoParams {\n return {\n width: this.canvasWidth,\n height: this.numVisibleScanlines,\n aspect: this.aspectRatio,\n overscan: this.overscan,\n rotate: this.rotate\n };\n }\n connectVideo(pixels: Uint32Array): void {\n this.pixels = pixels;\n }\n}\n\nexport abstract class BasicScanlineMachine extends BasicMachine implements RasterFrameBased {\n\n abstract numTotalScanlines: number;\n abstract cpuCyclesPerLine: number;\n\n abstract startScanline(): void;\n abstract drawScanline(): void;\n\n frameCycles: number;\n\n advanceFrame(trap: TrapCondition): number {\n this.preFrame();\n var endLineClock = 0;\n var steps = 0;\n this.probe.logNewFrame();\n this.frameCycles = 0;\n for (var sl = 0; sl < this.numTotalScanlines; sl++) {\n endLineClock += this.cpuCyclesPerLine; // could be fractional\n this.scanline = sl;\n this.startScanline();\n while (this.frameCycles < endLineClock) {\n if (trap && trap()) {\n sl = 999;\n break;\n }\n this.frameCycles += this.advanceCPU();\n steps++;\n }\n this.drawScanline();\n this.probe.logNewScanline();\n this.probe.logClocks(Math.floor(this.frameCycles - endLineClock)); // remainder of prev. line\n }\n this.postFrame();\n return steps; // TODO: return steps, not clock? for recorder\n }\n preFrame() { }\n postFrame() { }\n getRasterY() { return this.scanline; }\n getRasterX() { return this.frameCycles % this.cpuCyclesPerLine; }\n}\n", "\nimport { hex } from \"../util\";\n\nconst Z80_OPS = [\"nop\",\"ld bc,xx\",\"ld (bc),a\",\"inc bc\",\"inc b\",\"dec b\",\"ld b,x\",\"rlca\",\"ex af,af'\",\"add hl,bc\",\"ld a,(bc)\",\"dec bc\",\"inc c\",\"dec c\",\"ld c,x\",\"rrca\",\"djnz x\",\"ld de,xx\",\"ld (de),a\",\"inc de\",\"inc d\",\"dec d\",\"ld d,x\",\"rla\",\"jr x\",\"add hl,de\",\"ld a,(de)\",\"dec de\",\"inc e\",\"dec e\",\"ld e,x\",\"rra\",\"jr nz,x\",\"ld hl,xx\",\"ld (xx),hl\",\"inc hl\",\"inc h\",\"dec h\",\"ld h,x\",\"daa\",\"jr z,x\",\"add hl,hl\",\"ld hl,(xx)\",\"dec hl\",\"inc l\",\"dec l\",\"ld l,x\",\"cpl\",\"jr nc,x\",\"ld sp,xx\",\"ld (xx),a\",\"inc sp\",\"inc (hl)\",\"dec (hl)\",\"ld (hl),x\",\"scf\",\"jr c,x\",\"add hl,sp\",\"ld a,(xx)\",\"dec sp\",\"inc a\",\"dec a\",\"ld a,x\",\"ccf\",\"ld b,b\",\"ld b,c\",\"ld b,d\",\"ld b,e\",\"ld b,h\",\"ld b,l\",\"ld b,(hl)\",\"ld b,a\",\"ld c,b\",\"ld c,c\",\"ld c,d\",\"ld c,e\",\"ld c,h\",\"ld c,l\",\"ld c,(hl)\",\"ld c,a\",\"ld d,b\",\"ld d,c\",\"ld d,d\",\"ld d,e\",\"ld d,h\",\"ld d,l\",\"ld d,(hl)\",\"ld d,a\",\"ld e,b\",\"ld e,c\",\"ld e,d\",\"ld e,e\",\"ld e,h\",\"ld e,l\",\"ld e,(hl)\",\"ld e,a\",\"ld h,b\",\"ld h,c\",\"ld h,d\",\"ld h,e\",\"ld h,h\",\"ld h,l\",\"ld h,(hl)\",\"ld h,a\",\"ld l,b\",\"ld l,c\",\"ld l,d\",\"ld l,e\",\"ld l,h\",\"ld l,l\",\"ld l,(hl)\",\"ld l,a\",\"ld (hl),b\",\"ld (hl),c\",\"ld (hl),d\",\"ld (hl),e\",\"ld (hl),h\",\"ld (hl),l\",\"halt\",\"ld (hl),a\",\"ld a,b\",\"ld a,c\",\"ld a,d\",\"ld a,e\",\"ld a,h\",\"ld a,l\",\"ld a,(hl)\",\"ld a,a\",\"add a,b\",\"add a,c\",\"add a,d\",\"add a,e\",\"add a,h\",\"add a,l\",\"add a,(hl)\",\"add a,a\",\"adc a,b\",\"adc a,c\",\"adc a,d\",\"adc a,e\",\"adc a,h\",\"adc a,l\",\"adc a,(hl)\",\"adc a,a\",\"sub b\",\"sub c\",\"sub d\",\"sub e\",\"sub h\",\"sub l\",\"sub (hl)\",\"sub a\",\"sbc a,b\",\"sbc a,c\",\"sbc a,d\",\"sbc a,e\",\"sbc a,h\",\"sbc a,l\",\"sbc a,(hl)\",\"sbc a,a\",\"and b\",\"and c\",\"and d\",\"and e\",\"and h\",\"and l\",\"and (hl)\",\"and a\",\"xor b\",\"xor c\",\"xor d\",\"xor e\",\"xor h\",\"xor l\",\"xor (hl)\",\"xor a\",\"or b\",\"or c\",\"or d\",\"or e\",\"or h\",\"or l\",\"or (hl)\",\"or a\",\"cp b\",\"cp c\",\"cp d\",\"cp e\",\"cp h\",\"cp l\",\"cp (hl)\",\"cp a\",\"ret nz\",\"pop bc\",\"jp nz,xx\",\"jp xx\",\"call nz,xx\",\"push bc\",\"add a,x\",\"rst 00h\",\"ret z\",\"ret\",\"jp z,xx\",\"xxBITxx\",\"call z,xx\",\"call xx\",\"adc a,x\",\"rst 08h\",\"ret nc\",\"pop de\",\"jp nc,xx\",\"out (x),a\",\"call nc,xx\",\"push de\",\"sub x\",\"rst 10h\",\"ret c\",\"exx\",\"jp c,xx\",\"in a,(x)\",\"call c,xx\",\"xxIXxx\",\"sbc a,x\",\"rst 18h\",\"ret po\",\"pop hl\",\"jp po,xx\",\"ex (sp),hl\",\"call po,xx\",\"push hl\",\"and x\",\"rst 20h\",\"ret pe\",\"jp (hl)\",\"jp pe,xx\",\"ex de,hl\",\"call pe,xx\",\"xx80xx\",\"xor x\",\"rst 28h\",\"ret p\",\"pop af\",\"jp p,xx\",\"di\",\"call p,xx\",\"push af\",\"or x\",\"rst 30h\",\"ret m\",\"ld sp,hl\",\"jp m,xx\",\"ei\",\"call m,xx\",\"xxIYxx\",\"cp x\",\"rst 38h\"];\nconst Z80_OPS_ED = [\"in b,(c)\",\"out (c),b\",\"sbc hl,bc\",\"ld (xx),bc\",\"neg\",\"retn\",\"im 0\",\"ld i,a\",\"in c,(c)\",\"out (c),c\",\"adc hl,bc\",\"ld bc,(xx)\",\"neg\",\"reti\",\"\",\"ld r,a\",\"in d,(c)\",\"out (c),d\",\"sbc hl,de\",\"ld (xx),de\",\"neg\",\"retn\",\"im 1\",\"ld a,i\",\"in e,(c)\",\"out (c),e\",\"adc hl,de\",\"ld de,(xx)\",\"neg\",\"retn\",\"im 2\",\"ld a,r\",\"in h,(c)\",\"out (c),h\",\"sbc hl,hl\",\"ld (xx),hl\",\"neg\",\"retn\",\"\",\"rrd\",\"in l,(c)\",\"out (c),l\",\"adc hl,hl\",\"ld hl,(xx)\",\"neg\",\"retn\",\"\",\"rld\",\"in f,(c)\",\"out (c),f\",\"sbc hl,sp\",\"ld (xx),sp\",\"neg\",\"retn\",\"\",\"\",\"in a,(c)\",\"out (c),a\",\"adc hl,sp\",\"ld sp,(xx)\",\"neg\",\"reti\",\"\",\"\",\"ldi\",\"cpi\",\"ini\",\"outi\",\"\",\"\",\"\",\"\",\"ldd\",\"cpd\",\"ind\",\"outd\",\"\",\"\",\"\",\"\",\"ldir\",\"cpir\",\"inir\",\"otir\",\"\",\"\",\"\",\"\",\"lddr\",\"cpdr\",\"indr\",\"otdr\",\"\",\"\",\"\",\"\"];\nconst Z80_OPS_CB = [\"rlc b\",\"rlc c\",\"rlc d\",\"rlc e\",\"rlc h\",\"rlc l\",\"rlc (hl)\",\"rlc a\",\"rrc b\",\"rrc c\",\"rrc d\",\"rrc e\",\"rrc h\",\"rrc l\",\"rrc (hl)\",\"rrc a\",\"rl b\",\"rl c\",\"rl d\",\"rl e\",\"rl h\",\"rl l\",\"rl (hl)\",\"rl a\",\"rr b\",\"rr c\",\"rr d\",\"rr e\",\"rr h\",\"rr l\",\"rr (hl)\",\"rr a\",\"sla b\",\"sla c\",\"sla d\",\"sla e\",\"sla h\",\"sla l\",\"sla (hl)\",\"sla a\",\"sra b\",\"sra c\",\"sra d\",\"sra e\",\"sra h\",\"sra l\",\"sra (hl)\",\"sra a\",\"sll b\",\"sll c\",\"sll d\",\"sll e\",\"sll h\",\"sll l\",\"sll (hl)\",\"sll a\",\"srl b\",\"srl c\",\"srl d\",\"srl e\",\"srl h\",\"srl l\",\"srl (hl)\",\"srl a\",\"bit 0,b\",\"bit 0,c\",\"bit 0,d\",\"bit 0,e\",\"bit 0,h\",\"bit 0,l\",\"bit 0,(hl)\",\"bit 0,a\",\"bit 1,b\",\"bit 1,c\",\"bit 1,d\",\"bit 1,e\",\"bit 1,h\",\"bit 1,l\",\"bit 1,(hl)\",\"bit 1,a\",\"bit 2,b\",\"bit 2,c\",\"bit 2,d\",\"bit 2,e\",\"bit 2,h\",\"bit 2,l\",\"bit 2,(hl)\",\"bit 2,a\",\"bit 3,b\",\"bit 3,c\",\"bit 3,d\",\"bit 3,e\",\"bit 3,h\",\"bit 3,l\",\"bit 3,(hl)\",\"bit 3,a\",\"bit 4,b\",\"bit 4,c\",\"bit 4,d\",\"bit 4,e\",\"bit 4,h\",\"bit 4,l\",\"bit 4,(hl)\",\"bit 4,a\",\"bit 5,b\",\"bit 5,c\",\"bit 5,d\",\"bit 5,e\",\"bit 5,h\",\"bit 5,l\",\"bit 5,(hl)\",\"bit 5,a\",\"bit 6,b\",\"bit 6,c\",\"bit 6,d\",\"bit 6,e\",\"bit 6,h\",\"bit 6,l\",\"bit 6,(hl)\",\"bit 6,a\",\"bit 7,b\",\"bit 7,c\",\"bit 7,d\",\"bit 7,e\",\"bit 7,h\",\"bit 7,l\",\"bit 7,(hl)\",\"bit 7,a\",\"res 0,b\",\"res 0,c\",\"res 0,d\",\"res 0,e\",\"res 0,h\",\"res 0,l\",\"res 0,(hl)\",\"res 0,a\",\"res 1,b\",\"res 1,c\",\"res 1,d\",\"res 1,e\",\"res 1,h\",\"res 1,l\",\"res 1,(hl)\",\"res 1,a\",\"res 2,b\",\"res 2,c\",\"res 2,d\",\"res 2,e\",\"res 2,h\",\"res 2,l\",\"res 2,(hl)\",\"res 2,a\",\"res 3,b\",\"res 3,c\",\"res 3,d\",\"res 3,e\",\"res 3,h\",\"res 3,l\",\"res 3,(hl)\",\"res 3,a\",\"res 4,b\",\"res 4,c\",\"res 4,d\",\"res 4,e\",\"res 4,h\",\"res 4,l\",\"res 4,(hl)\",\"res 4,a\",\"res 5,b\",\"res 5,c\",\"res 5,d\",\"res 5,e\",\"res 5,h\",\"res 5,l\",\"res 5,(hl)\",\"res 5,a\",\"res 6,b\",\"res 6,c\",\"res 6,d\",\"res 6,e\",\"res 6,h\",\"res 6,l\",\"res 6,(hl)\",\"res 6,a\",\"res 7,b\",\"res 7,c\",\"res 7,d\",\"res 7,e\",\"res 7,h\",\"res 7,l\",\"res 7,(hl)\",\"res 7,a\",\"set 0,b\",\"set 0,c\",\"set 0,d\",\"set 0,e\",\"set 0,h\",\"set 0,l\",\"set 0,(hl)\",\"set 0,a\",\"set 1,b\",\"set 1,c\",\"set 1,d\",\"set 1,e\",\"set 1,h\",\"set 1,l\",\"set 1,(hl)\",\"set 1,a\",\"set 2,b\",\"set 2,c\",\"set 2,d\",\"set 2,e\",\"set 2,h\",\"set 2,l\",\"set 2,(hl)\",\"set 2,a\",\"set 3,b\",\"set 3,c\",\"set 3,d\",\"set 3,e\",\"set 3,h\",\"set 3,l\",\"set 3,(hl)\",\"set 3,a\",\"set 4,b\",\"set 4,c\",\"set 4,d\",\"set 4,e\",\"set 4,h\",\"set 4,l\",\"set 4,(hl)\",\"set 4,a\",\"set 5,b\",\"set 5,c\",\"set 5,d\",\"set 5,e\",\"set 5,h\",\"set 5,l\",\"set 5,(hl)\",\"set 5,a\",\"set 6,b\",\"set 6,c\",\"set 6,d\",\"set 6,e\",\"set 6,h\",\"set 6,l\",\"set 6,(hl)\",\"set 6,a\",\"set 7,b\",\"set 7,c\",\"set 7,d\",\"set 7,e\",\"set 7,h\",\"set 7,l\",\"set 7,(hl)\",\"set 7,a\"];\n\nexport function disassembleZ80(pc:number, b0:number, b1:number, b2:number, b3:number) : {line:string, nbytes:number, isaddr:boolean, iscall?:boolean} {\n\n var op,n,am;\n var bytes = [b0,b1,b2,b3];\n var isaddr = false;\n var iscall = false;\n n=1;\n switch (b0) {\n case 0xcb:\n am = Z80_OPS_CB[b1];\n n++;\n break;\n case 0xed:\n if (b1 >= 0x40 && b1 <= 0x7f) am = Z80_OPS_ED[b1 - 0x40];\n if (b1 >= 0xa0 && b1 <= 0xbf) am = Z80_OPS_ED[b1 - 0xa0 + 0x40];\n n++;\n break;\n case 0xdd:\n case 0xfd:\n var ireg = (b0 == 0xdd) ? 'ix' : 'iy';\n if (b1 == 0xcb) {\n // swap the 3rd and 4th bytes [$dd $cb displacement opcode]\n am = Z80_OPS_CB[b3];\n bytes[2] = b3;\n bytes[3] = b2;\n n++;\n } else {\n am = Z80_OPS[b1];\n }\n am = am.replace(/[(]hl[)]/, '('+ireg+'+x)');\n am = am.replace(/\\bhl\\b/, ireg);\n n++;\n break;\n default:\n am = Z80_OPS[b0];\n break;\n }\n if (!am || !am.length) am = \"??\";\n iscall = /^(call|rst)/.test(am);\n if (/\\bxx\\b/.test(am)) {\n am = am.replace(/\\bxx\\b/,'$'+hex(bytes[n]+(bytes[n+1]<<8), 4));\n n += 2;\n isaddr = true;\n } else if (/\\bx\\b/.test(am)) {\n if (am.startsWith('j')) {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = am.replace(/\\bx\\b/,'$'+hex(offset, 4));\n isaddr = true;\n } else {\n am = am.replace(/\\bx\\b/,'$'+hex(bytes[n], 2));\n }\n n += 1;\n }\n return {line:am.toUpperCase(), nbytes:n, isaddr:isaddr, iscall:iscall};\n};\n", "\"use strict\";\n/*\nThe MIT License (MIT)\nCopyright (c) 2014 Martin Maly, http://retrocip.cz, http://www.uelectronics.info,\ntwitter: @uelectronics\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function CPU6809() {\n\nvar ticks;\nvar rA,rB,rX,rY,rU,rS,PC,CC,DP,\nF_CARRY =1,\nF_OVERFLOW =2,\nF_ZERO =4,\nF_NEGATIVE =8,\nF_IRQMASK =16,\nF_HALFCARRY =32,\nF_FIRQMASK =64,\nF_ENTIRE =128,\n\nvecRESET = 0xFFFE,\nvecNMI = 0xFFFC,\nvecSWI = 0xFFFA,\nvecIRQ = 0xFFF8,\nvecFIRQ = 0xFFF6,\nvecSWI2 = 0xFFF4,\nvecSWI3 = 0xFFF2,\n\nT=0;\n\nvar IRQs;\n\nvar byteTo, byteAt;\n\nvar cycles = [\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 00-0F */\n 0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6, /* 10-1F */\n 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* 20-2F */\n 4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19, /* 30-3F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 40-4F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 50-5F */\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 60-6F */\n 7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7, /* 70-7F */\n 2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0, /* 80-8F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* 90-9F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* A0-AF */\n 5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6, /* B0-BF */\n 2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0, /* C0-CF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* D0-DF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* E0-EF */\n 5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6]; /* F0-FF */\n\n/* Instruction timing for the two-byte opcodes */\nvar cycles2 = [\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0, /* 80-8F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* 90-9F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* A0-AF */\n 0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7, /* B0-BF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, /* C0-CF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* D0-DF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* E0-EF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7]; /* F0-FF */\n\n/* Negative and zero flags for quicker flag settings */\nvar flagsNZ = [\n 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 80-8F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 90-9F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* A0-AF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* B0-BF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* C0-CF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* D0-DF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* E0-EF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]; /* F0-FF */\n\nvar setV8 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x80)>>6);};\nvar setV16 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x8000)>>14);};\nvar getD = function() {return (rA<<8)+rB;};\nvar setD = function(v) {rA = (v>>8)& 0xff;rB=v&0xff;};\nvar PUSHB = function(b) {\n byteTo(--rS, b & 0xff);\n};\nvar PUSHW = function(b) {\n byteTo(--rS, b & 0xff);\n byteTo(--rS, (b>>8) & 0xff);\n};\n\nvar PUSHBU = function(b) {\n byteTo(--rU, b & 0xff);\n};\nvar PUSHWU = function(b) {\n byteTo(--rU, b & 0xff);\n byteTo(--rU, (b>>8) & 0xff);\n};\nvar PULLB = function() {\n return byteAt(rS++);\n};\nvar PULLW = function() {\n return byteAt(rS++) * 256 + byteAt(rS++);\n};\n\nvar PULLBU = function() {\n return byteAt(rU++);\n};\nvar PULLWU = function() {\n return byteAt(rU++) * 256 + byteAt(rU++);\n};\n\nvar PSHS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHW(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHW(rU);i += 2;}\n if (ucTemp & 0x20){PUSHW(rY);i += 2;}\n if (ucTemp & 0x10){PUSHW(rX);i += 2;}\n if (ucTemp & 0x8){PUSHB(DP); i++;}\n if (ucTemp & 0x4){PUSHB(rB); i++;}\n if (ucTemp & 0x2){PUSHB(rA); i++;}\n if (ucTemp & 0x1){PUSHB(CC); i++;}\n T+=i; //timing\n};\nvar PSHU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHWU(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHWU(rS);i += 2;}\n if (ucTemp & 0x20){PUSHWU(rY);i += 2;}\n if (ucTemp & 0x10){PUSHWU(rX);i += 2;}\n if (ucTemp & 0x8){PUSHBU(DP); i++;}\n if (ucTemp & 0x4){PUSHBU(rB); i++;}\n if (ucTemp & 0x2){PUSHBU(rA); i++;}\n if (ucTemp & 0x1){PUSHBU(CC); i++;}\n T+=i; //timing\n};\nvar PULS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLB(); i++;}\n if (ucTemp & 0x2){rA = PULLB(); i++;}\n if (ucTemp & 0x4){rB = PULLB(); i++;}\n if (ucTemp & 0x8){DP = PULLB(); i++;}\n if (ucTemp & 0x10){rX = PULLW();i += 2;}\n if (ucTemp & 0x20){rY = PULLW();i += 2;}\n if (ucTemp & 0x40) {rU = PULLW();i += 2;}\n if (ucTemp & 0x80) {PC = PULLW();i += 2;}\n T+=i; //timing\n};\nvar PULU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLBU(); i++;}\n if (ucTemp & 0x2){rA = PULLBU(); i++;}\n if (ucTemp & 0x4){rB = PULLBU(); i++;}\n if (ucTemp & 0x8){DP = PULLBU(); i++;}\n if (ucTemp & 0x10){rX = PULLWU();i += 2;}\n if (ucTemp & 0x20){rY = PULLWU();i += 2;}\n if (ucTemp & 0x40) {rS = PULLWU();i += 2;}\n if (ucTemp & 0x80) {PC = PULLWU();i += 2;}\n T+=i; //timing\n};\n\n\nvar getPBR = function(ucPostByte) {\n switch(ucPostByte & 0xf) {\n case 0x00: /* D */\n return getD();\n case 0x1: /* X */\n return rX;\n case 0x2: /* Y */\n return rY;\n case 0x3: /* U */\n return rU;\n case 0x4: /* S */\n return rS;\n case 0x5: /* PC */\n return PC;\n case 0x8: /* A */\n return rA;\n case 0x9: /* B */\n return rB;\n case 0xA: /* CC */\n return CC;\n case 0xB: /* DP */\n return DP;\n default: /* illegal */\n return null;\n }\n};\nvar setPBR = function(ucPostByte, v) {\n switch(ucPostByte & 0xf) /* Get destination register */\n {\n case 0x00: /* D */\n setD(v);return;\n case 0x1: /* X */\n rX = v; return;\n case 0x2: /* Y */\n rY = v; return;\n case 0x3: /* U */\n rU = v; return;\n case 0x4: /* S */\n rS = v; return;\n case 0x5: /* PC */\n PC = v; return;\n case 0x8: /* A */\n rA = v; return;\n case 0x9: /* B */\n rB = v; return;\n case 0xA: /* CC */\n CC = v; return;\n case 0xB: /* DP */\n DP = v; return;\n default: /* illegal */\n return;\n }\n};\n\nvar TFREXG = function(ucPostByte, bExchange)\n{\n\n var ucTemp = ucPostByte & 0x88;\n if (ucTemp == 0x80 || ucTemp == 0x08)\n ucTemp = 0; /* PROBLEM! */\n\n if (bExchange)\n {\n ucTemp = getPBR(ucPostByte>>4);\n setPBR(ucPostByte>>4, getPBR(ucPostByte));\n setPBR(ucPostByte, ucTemp);\n }\n else /* Transfer */ {\n setPBR(ucPostByte, getPBR(ucPostByte>>4));\n }\n} ;\n\nvar signed = function(x) {\n return (x>127)?(x-256):x;\n};\nvar signed16 = function(x) {\n return (x>32767)?(x-65536):x;\n};\n\nvar fetch = function() {\n var v = byteAt(PC++);\n PC &= 0xffff;\n return v;\n};\nvar fetch16 = function() {\n var v1 = byteAt(PC++);\n PC &= 0xffff;\n var v2 = byteAt(PC++);\n PC &= 0xffff;\n return v1*256+v2;\n};\n\nvar ReadWord = function(addr) {\n var v1 = byteAt(addr++);\n addr &= 0xffff;\n var v2 = byteAt(addr++);\n addr &= 0xffff;\n return v1*256+v2;\n};\nvar WriteWord = function(addr,v) {\n byteTo(addr++,(v>>8)&0xff);\n addr &= 0xffff;\n byteTo(addr,v&0xff);\n};\n\nvar PostByte = function() {\n var pb = fetch();\n var preg;\n switch (pb & 0x60) {\n case 0:\n preg = rX; break;\n case 0x20:\n preg = rY; break;\n case 0x40:\n preg = rU; break;\n case 0x60:\n preg = rS; break;\n }\n\n var xchg = null;\n var addr = null;\n var sTemp;\n\n if (pb & 0x80) /* Complex stuff */\n {\n switch (pb & 0x0f)\n {\n case 0: /* EA = ,reg+ */\n addr = preg;\n xchg = preg + 1;\n T += 2;\n break;\n case 1: /* EA = ,reg++ */\n addr = preg;\n xchg = preg + 2;\n T += 3;\n break;\n case 2: /* EA = ,-reg */\n xchg = preg - 1;\n addr = xchg;\n T += 2;\n break;\n case 3: /* EA = ,--reg */\n xchg = preg - 2;\n addr = xchg;\n T += 3;\n break;\n case 4: /* EA = ,reg */\n addr = preg;\n break;\n case 5: /* EA = ,reg + B */\n //usAddr = *pReg + (signed short)(signed char)regs->ucRegB;\n addr = preg + signed(rB);\n T += 1;\n break;\n case 6: /* EA = ,reg + A */\n addr = preg + signed(rA);\n T += 1;\n break;\n case 7: /* illegal */\n addr = 0;\n break;\n case 8: /* EA = ,reg + 8-bit offset */\n addr = preg + signed(fetch());\n T += 1;\n break;\n case 9: /* EA = ,reg + 16-bit offset */\n addr = preg + signed16(fetch16());\n T += 4;\n break;\n case 0xA: /* illegal */\n addr = 0;\n break;\n case 0xB: /* EA = ,reg + D */\n T += 4;\n addr = preg + getD();\n break;\n case 0xC: /* EA = PC + 8-bit offset */\n sTemp = signed(fetch());\n addr = PC + sTemp;\n T += 1;\n break;\n case 0xD: /* EA = PC + 16-bit offset */\n sTemp = signed16(fetch16());\n addr = PC + sTemp;\n T += 5;\n break;\n case 0xe: /* Illegal */\n addr = 0;\n break;\n case 0xF: /* EA = [,address] */\n T += 5;\n addr = fetch16();\n break;\n } /* switch */\n\n addr &= 0xffff;\n\n if (pb & 0x10) /* Indirect addressing */\n {\n addr = byteAt(addr)*256+byteAt((addr+1) & 0xffff);\n T += 3;\n }\n }\n else /* Just a 5 bit signed offset + register */\n {\n var sByte = pb & 0x1f;\n if (sByte > 15) /* Two's complement 5-bit value */\n sByte -= 32;\n addr = preg + sByte;\n T += 1;\n }\n\n if (xchg!==null) {\n switch (pb & 0x60) {\n case 0:\n rX = xchg; break;\n case 0x20:\n rY = xchg; break;\n case 0x40:\n rU = xchg; break;\n case 0x60:\n rS = xchg; break;\n }\n\n }\n\n return addr & 0xffff; /* Return the effective address */\n};\n\nvar flagsNZ16 = function(word) {\n CC &= ~(F_ZERO | F_NEGATIVE);\n if (word===0) CC |= F_ZERO;\n if (word & 0x8000) CC |= F_NEGATIVE;\n};\n\n// ============= Operations\n\nvar oINC = function(b) {\n b++;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0 || b == 0x80) CC |= F_OVERFLOW;\n return b;\n};\nvar oDEC = function(b) {\n b--;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0x7f || b == 0xff) CC |= F_OVERFLOW;\n return b;\n};\nvar oSUB = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oSUB16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADD = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oADD16 = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADC = function(b,v) {\n var temp = b+v+(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oSBC = function(b,v) {\n var temp = b-v-(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oCMP = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return;\n};\nvar oCMP16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return;\n};\n\nvar oNEG = function(b) {\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if (b == 0x80)\n CC |= F_OVERFLOW;\n b = ((~b)&0xff) + 1;\n if (b === 0) CC |= F_ZERO;\n if (b & 0x80) CC |= F_NEGATIVE | F_CARRY;\n return b;\n};\n\nvar oLSR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b >>= 1;\n if (b === 0) CC |= F_ZERO;\n return b & 0xff;\n};\nvar oASR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = (b & 0x80) | (b>>1);\n CC |= flagsNZ[b];\n return b;\n};\nvar oASL = function(b) {\n var temp = b;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b <<= 1;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROL = function(b) {\n var temp = b;\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b = b<<1 | oldc;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROR = function(b) {\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = b>>1 | oldc<<7;\n CC |= flagsNZ[b];\n// if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\n\nvar oEOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b |= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oAND = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b &= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oCOM = function(b) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= 0xff;\n CC |= flagsNZ[b];\n CC |= F_CARRY;\n return b;\n};\n\n//----common\nvar dpadd = function() {\n //direct page + 8bit index\n return DP*256 + fetch();\n};\n\nvar step = function() {\n var oldT = T;\n\n var addr = null;\n var pb = null;\n\n var oldPC = PC;\n var opcode = fetch();\n T+=cycles[opcode];\n switch (opcode) {\n case 0x00: //NEG DP\n addr = dpadd();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x03: //COM DP\n addr = dpadd();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x04: //LSR DP\n addr = dpadd();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x06: //ROR DP\n addr = dpadd();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x07: //ASR DP\n addr = dpadd();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x08: //ASL DP\n addr = dpadd();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x09: //ROL DP\n addr = dpadd();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x0A: //DEC DP\n addr = dpadd();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x0C: //INC DP\n addr = dpadd();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x0D: //TST DP\n addr = dpadd();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x0E: //JMP DP\n addr = dpadd();\n PC = addr;\n break;\n case 0x0F: //CLR DP\n addr = dpadd();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n case 0x12: //NOP\n break;\n case 0x13: //SYNC\n break;\n case 0x16: //LBRA relative\n addr = signed16(fetch16());\n PC += addr;\n break;\n case 0x17: //LBSR relative\n addr = signed16(fetch16());\n PUSHW(PC);\n PC += addr;\n break;\n case 0x19: //DAA\n var cf = 0;\n var nhi = rA & 0xf0, nlo = rA & 0x0f;\n if( nlo>0x09 || CC & 0x20 ) cf |= 0x06;\n if( nhi>0x80 && nlo>0x09 ) cf |= 0x60;\n if( nhi>0x90 || CC & 0x01 ) cf |= 0x60;\n addr = cf + rA;\n CC &= ~(F_CARRY | F_NEGATIVE | F_ZERO | F_OVERFLOW);\n if (addr & 0x100)\n CC |= F_CARRY;\n rA = addr & 0xff;\n CC |= flagsNZ[rA];\n break;\n case 0x1A: //ORCC\n CC |= fetch();\n break;\n case 0x1C: //ANDCC\n CC &= fetch();\n break;\n case 0x1D: //SEX\n rA = (rB & 0x80)?0xff:0;\n flagsNZ16(getD());\n CC &= ~F_OVERFLOW;\n break;\n case 0x1E: //EXG\n pb = fetch();\n TFREXG(pb,true);\n break;\n case 0x1F: //EXG\n pb = fetch();\n TFREXG(pb,false);\n break;\n\n case 0x20: //BRA\n addr = signed(fetch());\n PC += addr;\n break;\n case 0x21: //BRN\n addr = signed(fetch());\n break;\n case 0x22: //BHI\n addr = signed(fetch());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed(fetch());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed(fetch());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed(fetch());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed(fetch());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed(fetch());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed(fetch());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed(fetch());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed(fetch());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed(fetch());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n\n case 0x30: //LEAX\n rX = PostByte();\n if (rX===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x31: //LEAY\n rY = PostByte();\n if (rY===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x32: //LEAS\n rS = PostByte();\n break;\n case 0x33: //LEAU\n rU = PostByte();\n break;\n\n case 0x34: //PSHS\n PSHS(fetch());\n break;\n case 0x35: //PULS\n PULS(fetch());\n break;\n case 0x36: //PSHU\n PSHU(fetch());\n break;\n case 0x37: //PULU\n PULU(fetch());\n break;\n case 0x39: //RTS\n PC = PULLW();\n break;\n case 0x3A: //ABX\n rX += rB;\n break;\n case 0x3B: //RTI\n CC = PULLB();\n if (CC & F_ENTIRE) {\n T+=9;\n rA = PULLB();\n rB = PULLB();\n DP = PULLB();\n rX = PULLW();\n rY = PULLW();\n rU = PULLW();\n }\n PC = PULLW();\n break;\n case 0x3C: //CWAI **todo\n CC &= fetch();\n break;\n case 0x3D: //MUL\n addr = rA * rB;\n if (addr===0) CC|=F_ZERO; else CC&=~F_ZERO;\n if (addr&0x80) CC|=F_CARRY; else CC&=~F_CARRY;\n setD(addr);\n break;\n case 0x3F: //SWI\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI);\n break;\n\n case 0x40:\n rA = oNEG(rA);\n break;\n case 0x43:\n rA = oCOM(rA);\n break;\n case 0x44:\n rA = oLSR(rA);\n break;\n case 0x46:\n rA = oROR(rA);\n break;\n case 0x47:\n rA = oASR(rA);\n break;\n case 0x48:\n rA = oASL(rA);\n break;\n case 0x49:\n rA = oROL(rA);\n break;\n case 0x4A:\n rA = oDEC(rA);\n break;\n case 0x4C:\n rA = oINC(rA);\n break;\n case 0x4D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x4F:\n rA = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x50:\n rB = oNEG(rB);\n break;\n case 0x53:\n rB = oCOM(rB);\n break;\n case 0x54:\n rB = oLSR(rB);\n break;\n case 0x56:\n rB = oROR(rB);\n break;\n case 0x57:\n rB = oASR(rB);\n break;\n case 0x58:\n rB = oASL(rB);\n break;\n case 0x59:\n rB = oROL(rB);\n break;\n case 0x5A:\n rB = oDEC(rB);\n break;\n case 0x5C:\n rB = oINC(rB);\n break;\n case 0x5D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0x5F:\n rB = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x60: //NEG indexed\n addr = PostByte();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x63: //COM indexed\n addr = PostByte();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x64: //LSR indexed\n addr = PostByte();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x66: //ROR indexed\n addr = PostByte();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x67: //ASR indexed\n addr = PostByte();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x68: //ASL indexed\n addr = PostByte();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x69: //ROL indexed\n addr = PostByte();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x6A: //DEC indexed\n addr = PostByte();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x6C: //INC indexed\n addr = PostByte();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x6D: //TST indexed\n addr = PostByte();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x6E: //JMP indexed\n addr = PostByte();\n PC = addr;\n break;\n case 0x6F: //CLR indexed\n addr = PostByte();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n\n case 0x70: //NEG extended\n addr = fetch16();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x73: //COM extended\n addr = fetch16();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x74: //LSR extended\n addr = fetch16();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x76: //ROR extended\n addr = fetch16();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x77: //ASR extended\n addr = fetch16();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x78: //ASL extended\n addr = fetch16();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x79: //ROL extended\n addr = fetch16();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x7A: //DEC extended\n addr = fetch16();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x7C: //INC extended\n addr = fetch16();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x7D: //TST extended\n addr = fetch16();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x7E: //JMP extended\n addr = fetch16();\n PC = addr;\n break;\n case 0x7F: //CLR extended\n addr = fetch16();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n // regs A,X\n\n case 0x80: //SUBA imm\n rA = oSUB(rA, fetch());\n break;\n case 0x81: //CMPA imm\n oCMP(rA, fetch());\n break;\n case 0x82: //SBCA imm\n rA = oSBC(rA, fetch());\n break;\n case 0x83: //SUBD imm\n setD(oSUB16(getD(),fetch16()));\n break;\n case 0x84: //ANDA imm\n rA = oAND(rA, fetch());\n break;\n case 0x85: //BITA imm\n oAND(rA, fetch());\n break;\n case 0x86: //LDA imm\n rA = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x88: //EORA imm\n rA = oEOR(rA, fetch());\n break;\n case 0x89: //ADCA imm\n rA = oADC(rA, fetch());\n break;\n case 0x8A: //ORA imm\n rA = oOR(rA, fetch());\n break;\n case 0x8B: //ADDA imm\n rA = oADD(rA, fetch());\n break;\n case 0x8C: //CMPX imm\n oCMP16(rX, fetch16());\n break;\n\n case 0x8D: //JSR imm\n addr = signed(fetch());\n PUSHW(PC);\n PC+=addr;\n break;\n case 0x8E: //LDX imm\n rX = fetch16();\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0x90: //SUBA direct\n addr = dpadd();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0x91: //CMPA direct\n addr = dpadd();\n oCMP(rA, byteAt(addr));\n break;\n case 0x92: //SBCA direct\n addr = dpadd();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0x93: //SUBD direct\n addr = dpadd();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0x94: //ANDA direct\n addr = dpadd();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0x95: //BITA direct\n addr = dpadd();\n oAND(rA, byteAt(addr));\n break;\n case 0x96: //LDA direct\n addr = dpadd();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x97: //STA direct\n addr = dpadd();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x98: //EORA direct\n addr = dpadd();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0x99: //ADCA direct\n addr = dpadd();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0x9A: //ORA direct\n addr = dpadd();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0x9B: //ADDA direct\n addr = dpadd();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0x9C: //CMPX direct\n addr = dpadd();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0x9D: //JSR direct\n addr = dpadd();\n PUSHW(PC);\n PC=addr;\n break;\n case 0x9E: //LDX direct\n addr = dpadd();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STX direct\n addr = dpadd();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xA0: //SUBA indexed\n addr = PostByte();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xA1: //CMPA indexed\n addr = PostByte();\n oCMP(rA, byteAt(addr));\n break;\n case 0xA2: //SBCA indexed\n addr = PostByte();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xA3: //SUBD indexed\n addr = PostByte();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xA4: //ANDA indexed\n addr = PostByte();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xA5: //BITA indexed\n addr = PostByte();\n oAND(rA, byteAt(addr));\n break;\n case 0xA6: //LDA indexed\n addr = PostByte();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA7: //STA indexed\n addr = PostByte();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA8: //EORA indexed\n addr = PostByte();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xA9: //ADCA indexed\n addr = PostByte();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xAA: //ORA indexed\n addr = PostByte();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xAB: //ADDA indexed\n addr = PostByte();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xAC: //CMPX indexed\n addr = PostByte();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xAD: //JSR indexed\n addr = PostByte();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xAE: //LDX indexed\n addr = PostByte();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STX indexed\n addr = PostByte();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xB0: //SUBA extended\n addr = fetch16();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xB1: //CMPA extended\n addr = fetch16();\n oCMP(rA, byteAt(addr));\n break;\n case 0xB2: //SBCA extended\n addr = fetch16();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xB3: //SUBD extended\n addr = fetch16();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xB4: //ANDA extended\n addr = fetch16();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xB5: //BITA extended\n addr = fetch16();\n oAND(rA, byteAt(addr));\n break;\n case 0xB6: //LDA extended\n addr = fetch16();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB7: //STA extended\n addr = fetch16();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB8: //EORA extended\n addr = fetch16();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xB9: //ADCA extended\n addr = fetch16();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xBA: //ORA extended\n addr = fetch16();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xBB: //ADDA extended\n addr = fetch16();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xBC: //CMPX extended\n addr = fetch16();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xBD: //JSR extended\n addr = fetch16();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xBE: //LDX extended\n addr = fetch16();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STX extended\n addr = fetch16();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n //Regs B, Y\n\n case 0xC0: //SUBB imm\n rB = oSUB(rB, fetch());\n break;\n case 0xC1: //CMPB imm\n oCMP(rB, fetch());\n break;\n case 0xC2: //SBCB imm\n rB = oSBC(rB, fetch());\n break;\n case 0xC3: //ADDD imm\n setD(oADD16(getD(),fetch16()));\n break;\n case 0xC4: //ANDB imm\n rB = oAND(rB, fetch());\n break;\n case 0xC5: //BITB imm\n oAND(rB, fetch());\n break;\n case 0xC6: //LDB imm\n rB = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xC8: //EORB imm\n rB = oEOR(rB, fetch());\n break;\n case 0xC9: //ADCB imm\n rB = oADC(rB, fetch());\n break;\n case 0xCA: //ORB imm\n rB = oOR(rB, fetch());\n break;\n case 0xCB: //ADDB imm\n rB = oADD(rB, fetch());\n break;\n case 0xCC: //LDD imm\n addr = fetch16();\n setD(addr);\n flagsNZ16(addr);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xCE: //LDU imm\n rU = fetch16();\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xD0: //SUBB direct\n addr = dpadd();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xD1: //CMPB direct\n addr = dpadd();\n oCMP(rB, byteAt(addr));\n break;\n case 0xD2: //SBCB direct\n addr = dpadd();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xD3: //ADDD direct\n addr = dpadd();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xD4: //ANDB direct\n addr = dpadd();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xD5: //BITB direct\n addr = dpadd();\n oAND(rB, byteAt(addr));\n break;\n case 0xD6: //LDB direct\n addr = dpadd();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD7: //STB direct\n addr = dpadd();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD8: //EORB direct\n addr = dpadd();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xD9: //ADCB direct\n addr = dpadd();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xDA: //ORB direct\n addr = dpadd();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xDB: //ADDB direct\n addr = dpadd();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xDC: //LDD direct\n addr = dpadd();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xDD: //STD direct\n addr = dpadd();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDU direct\n addr = dpadd();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STU direct\n addr = dpadd();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xE0: //SUBB indexed\n addr = PostByte();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xE1: //CMPB indexed\n addr = PostByte();\n oCMP(rB, byteAt(addr));\n break;\n case 0xE2: //SBCB indexed\n addr = PostByte();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xE3: //ADDD indexed\n addr = PostByte();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xE4: //ANDB indexed\n addr = PostByte();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xE5: //BITB indexed\n addr = PostByte();\n oAND(rB, byteAt(addr));\n break;\n case 0xE6: //LDB indexed\n addr = PostByte();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE7: //STB indexed\n addr = PostByte();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE8: //EORB indexed\n addr = PostByte();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xE9: //ADCB indexed\n addr = PostByte();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xEA: //ORB indexed\n addr = PostByte();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xEB: //ADDB indexed\n addr = PostByte();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xEC: //LDD indexed\n addr = PostByte();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xED: //STD indexed\n addr = PostByte();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDU indexed\n addr = PostByte();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STU indexed\n addr = PostByte();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xF0: //SUBB extended\n addr = fetch16();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xF1: //CMPB extended\n addr = fetch16();\n oCMP(rB, byteAt(addr));\n break;\n case 0xF2: //SBCB extended\n addr = fetch16();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xF3: //ADDD extended\n addr = fetch16();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xF4: //ANDB extended\n addr = fetch16();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xF5: //BITB extended\n addr = fetch16();\n oAND(rB, byteAt(addr));\n break;\n case 0xF6: //LDB extended\n addr = fetch16();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF7: //STB extended\n addr = fetch16();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF8: //EORB extended\n addr = fetch16();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xF9: //ADCB extended\n addr = fetch16();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xFA: //ORB extended\n addr = fetch16();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xFB: //ADDB extended\n addr = fetch16();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xFC: //LDD extended\n addr = fetch16();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xFD: //STD extended\n addr = fetch16();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDU extended\n addr = fetch16();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STU extended\n addr = fetch16();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n // page 1\n case 0x10: //page 1\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x21: //BRN\n addr = signed16(fetch16());\n break;\n case 0x22: //BHI\n addr = signed16(fetch16());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed16(fetch16());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed16(fetch16());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed16(fetch16());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed16(fetch16());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed16(fetch16());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed16(fetch16());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed16(fetch16());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed16(fetch16());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed16(fetch16());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n case 0x3f: //SWI2\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI2);\n break;\n case 0x83: //CMPD imm\n oCMP16(getD(),fetch16());\n break;\n case 0x8C: //CMPY imm\n oCMP16(rY,fetch16());\n break;\n case 0x8E: //LDY imm\n rY = fetch16();\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x93: //CMPD direct\n addr = dpadd();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0x9C: //CMPY direct\n addr = dpadd();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0x9E: //LDY direct\n addr = dpadd();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STY direct\n addr = dpadd();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xA3: //CMPD indexed\n addr = PostByte();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xAC: //CMPY indexed\n addr = PostByte();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xAE: //LDY indexed\n addr = PostByte();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STY indexed\n addr = PostByte();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xB3: //CMPD extended\n addr = fetch16();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xBC: //CMPY extended\n addr = fetch16();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xBE: //LDY extended\n addr = fetch16();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STY extended\n addr = fetch16();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xCE: //LDS imm\n rS = fetch16();\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDS direct\n addr = dpadd();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STS direct\n addr = dpadd();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDS indexed\n addr = PostByte();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STS indexed\n addr = PostByte();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDS extended\n addr = fetch16();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STS extended\n addr = fetch16();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n }\n }\n break;\n // page 2\n case 0x11: //page 2\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x3f: //SWI3\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI3);\n break;\n case 0x83: //CMPU imm\n oCMP16(rU, fetch16());\n break;\n case 0x8C: //CMPS imm\n oCMP16(rS, fetch16());\n break;\n case 0x93: //CMPU imm\n addr = dpadd();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0x9C: //CMPS imm\n addr = dpadd();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xA3: //CMPU imm\n addr = PostByte();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xAC: //CMPS imm\n addr = PostByte();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xB3: //CMPU imm\n addr = fetch16();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xBC: //CMPS imm\n addr = fetch16();\n oCMP16(rS, ReadWord(addr));\n break;\n\n }\n }\n break;\n\n\n }\n\n rA &= 0xff;\n rB &= 0xff;\n CC &= 0xff;\n DP &= 0xff;\n rX &= 0xffff;\n rY &= 0xffff;\n rU &= 0xffff;\n rS &= 0xffff;\n PC &= 0xffff;\n return T-oldT;\n\n};\n\nvar reset = function(){\n PC = ReadWord(vecRESET);\n DP = 0;\n CC |= F_FIRQMASK | F_IRQMASK;\n T=0;\n rA=rB=DP=rX=rY=rU=rS=0;\n};\n\n//---------- Disassembler\n\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n\nPSHS 10\nPSHU 11\n\nEXG, TFR 20\n*/\nvar ds = [\n[2, 1,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 1,\"COM\"],\n[2, 1,\"LSR\"],\n[1, 0,\"???\"],\n[2, 1,\"ROR\"],\n[2, 1,\"ASR\"],\n[2, 1,\"LSL\"],\n[2, 1,\"ROL\"],\n[2, 1,\"DEC\"],\n[1, 0,\"???\"],\n[2, 1,\"INC\"],\n[2, 1,\"TST\"],\n[2, 1,\"JMP\"],\n[2, 1,\"CLR\"],\n[1, 0,\"Prefix\"],\n[1, 0,\"Prefix\"],\n[1, 2,\"NOP\"],\n[1, 2,\"SYNC\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 3,\"LBRA\"],\n[3, 3,\"LBSR\"],\n[1, 0,\"???\"],\n[1, 2,\"DAA\"],\n[2, 4,\"ORCC\"],\n[1, 0,\"???\"],\n[2, 4,\"ANDCC\"],\n[1, 2,\"SEX\"],\n[2, 20,\"EXG\"],\n[2, 20,\"TFR\"],\n[2, 5,\"BRA\"],\n[2, 5,\"BRN\"],\n[2, 5,\"BHI\"],\n[2, 5,\"BLS\"],\n[2, 5,\"BCC\"],\n[2, 5,\"BCS\"],\n[2, 5,\"BNE\"],\n[2, 5,\"BEQ\"],\n[2, 5,\"BVC\"],\n[2, 5,\"BVS\"],\n[2, 5,\"BPL\"],\n[2, 5,\"BMI\"],\n[2, 5,\"BGE\"],\n[2, 5,\"BLT\"],\n[2, 5,\"BGT\"],\n[2, 5,\"BLE\"],\n[2, 6,\"LEAX\"],\n[2, 6,\"LEAY\"],\n[2, 6,\"LEAS\"],\n[2, 6,\"LEAU\"],\n[2, 10,\"PSHS\"],\n[2, 10,\"PULS\"],\n[2, 11,\"PSHU\"],\n[2, 11,\"PULU\"],\n[1, 0,\"???\"],\n[1, 2,\"RTS\"],\n[1, 2,\"ABX\"],\n[1, 2,\"RTI\"],\n[2, 2,\"CWAI\"],\n[1, 2,\"MUL\"],\n[1, 2,\"RESET\"],\n[1, 2,\"SWI1\"],\n[1, 2,\"NEGA\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMA\"],\n[1, 2,\"LSRA\"],\n[1, 0,\"???\"],\n[1, 2,\"RORA\"],\n[1, 2,\"ASRA\"],\n[1, 2,\"ASLA\"],\n[1, 2,\"ROLA\"],\n[1, 2,\"DECA\"],\n[1, 0,\"???\"],\n[1, 2,\"INCA\"],\n[1, 2,\"TSTA\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRA\"],\n[1, 2,\"NEGB\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMB\"],\n[1, 2,\"LSRB\"],\n[1, 0,\"???\"],\n[1, 2,\"RORB\"],\n[1, 2,\"ASRB\"],\n[1, 2,\"ASLB\"],\n[1, 2,\"ROLB\"],\n[1, 2,\"DECB\"],\n[1, 0,\"???\"],\n[1, 2,\"INCB\"],\n[1, 2,\"TSTB\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRB\"],\n[2, 6,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 6,\"COM\"],\n[2, 6,\"LSR\"],\n[1, 0,\"???\"],\n[2, 6,\"ROR\"],\n[2, 6,\"ASR\"],\n[2, 6,\"LSL\"],\n[2, 6,\"ROL\"],\n[2, 6,\"DEC\"],\n[1, 0,\"???\"],\n[2, 6,\"INC\"],\n[2, 6,\"TST\"],\n[2, 6,\"JMP\"],\n[2, 6,\"CLR\"],\n[3, 7,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 7,\"COM\"],\n[3, 7,\"LSR\"],\n[1, 0,\"???\"],\n[3, 7,\"ROR\"],\n[3, 7,\"ASR\"],\n[3, 7,\"LSL\"],\n[3, 7,\"ROL\"],\n[3, 7,\"DEC\"],\n[1, 0,\"???\"],\n[3, 7,\"INC\"],\n[3, 7,\"TST\"],\n[3, 7,\"JMP\"],\n[3, 7,\"CLR\"],\n[2, 4,\"SUBA\"],\n[2, 4,\"CMPA\"],\n[2, 4,\"SBCA\"],\n[3, 8,\"SUBD\"],\n[2, 4,\"ANDA\"],\n[2, 4,\"BITA\"],\n[2, 4,\"LDA\"],\n[1, 0,\"???\"],\n[2, 4,\"EORA\"],\n[2, 4,\"ADCA\"],\n[2, 4,\"ORA\"],\n[2, 4,\"ADDA\"],\n[3, 8,\"CMPX\"],\n[2, 5,\"BSR\"],\n[3, 8,\"LDX\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBA\"],\n[2, 1,\"CMPA\"],\n[2, 1,\"SBCA\"],\n[2, 1,\"SUBd\"],\n[2, 1,\"ANDA\"],\n[2, 1,\"BITA\"],\n[2, 1,\"LDA\"],\n[2, 1,\"STA\"],\n[2, 1,\"EORA\"],\n[2, 1,\"ADCA\"],\n[2, 1,\"ORA\"],\n[2, 1,\"ADDA\"],\n[2, 1,\"CMPX\"],\n[2, 1,\"JSR\"],\n[2, 1,\"LDX\"],\n[2, 1,\"STX\"],\n[2, 6,\"SUBA\"],\n[2, 6,\"CMPA\"],\n[2, 6,\"SBCA\"],\n[2, 6,\"SUBD\"],\n[2, 6,\"ANDA\"],\n[2, 6,\"BITA\"],\n[2, 6,\"LDA\"],\n[2, 6,\"STA\"],\n[2, 6,\"EORA\"],\n[2, 6,\"ADCA\"],\n[2, 6,\"ORA\"],\n[2, 6,\"ADDA\"],\n[2, 6,\"CMPX\"],\n[2, 6,\"JSR\"],\n[2, 6,\"LDX\"],\n[2, 6,\"STX\"],\n[3, 7,\"SUBA\"],\n[3, 7,\"CMPA\"],\n[3, 7,\"SBCA\"],\n[3, 7,\"SUBD\"],\n[3, 7,\"ANDA\"],\n[3, 7,\"BITA\"],\n[3, 7,\"LDA\"],\n[3, 7,\"STA\"],\n[3, 7,\"EORA\"],\n[3, 7,\"ADCA\"],\n[3, 7,\"ORA\"],\n[3, 7,\"ADDA\"],\n[3, 7,\"CMPX\"],\n[3, 7,\"JSR\"],\n[3, 7,\"LDX\"],\n[3, 7,\"STX\"],\n[2, 4,\"SUBB\"],\n[2, 4,\"CMPB\"],\n[2, 4,\"SBCB\"],\n[3, 8,\"ADDD\"],\n[2, 4,\"ANDB\"],\n[2, 4,\"BITB\"],\n[2, 4,\"LDB\"],\n[1, 0,\"???\"],\n[2, 4,\"EORB\"],\n[2, 4,\"ADCB\"],\n[2, 4,\"ORB\"],\n[2, 4,\"ADDB\"],\n[3, 8,\"LDD\"],\n[1, 0,\"???\"],\n[3, 8,\"LDU\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBB\"],\n[2, 1,\"CMPB\"],\n[2, 1,\"SBCB\"],\n[2, 1,\"ADDD\"],\n[2, 1,\"ANDB\"],\n[2, 1,\"BITB\"],\n[2, 1,\"LDB\"],\n[2, 1,\"STB\"],\n[2, 1,\"EORB\"],\n[2, 1,\"ADCB\"],\n[2, 1,\"ORB \"],\n[2, 1,\"ADDB\"],\n[2, 1,\"LDD \"],\n[2, 1,\"STD \"],\n[2, 1,\"LDU \"],\n[2, 1,\"STU \"],\n[2, 6,\"SUBB\"],\n[2, 6,\"CMPB\"],\n[2, 6,\"SBCB\"],\n[2, 6,\"ADDD\"],\n[2, 6,\"ANDB\"],\n[2, 6,\"BITB\"],\n[2, 6,\"LDB\"],\n[2, 6,\"STB\"],\n[2, 6,\"EORB\"],\n[2, 6,\"ADCB\"],\n[2, 6,\"ORB\"],\n[2, 6,\"ADDB\"],\n[2, 6,\"LDD\"],\n[2, 6,\"STD\"],\n[2, 6,\"LDU\"],\n[2, 6,\"STU\"],\n[3, 7,\"SUBB\"],\n[3, 7,\"CMPB\"],\n[3, 7,\"SBCB\"],\n[3, 7,\"ADDD\"],\n[3, 7,\"ANDB\"],\n[3, 7,\"BITB\"],\n[3, 7,\"LDB\"],\n[3, 7,\"STB\"],\n[3, 7,\"EORB\"],\n[3, 7,\"ADCB\"],\n[3, 7,\"ORB\"],\n[3, 7,\"ADDB\"],\n[3, 7,\"LDD\"],\n[3, 7,\"STD\"],\n[3, 7,\"LDU\"],\n[3, 7,\"STU\"]\n];\n\nvar ds11 = {\n0x3F: [2,2,\"SWI3\"],\n0x83: [4,8,\"CMPU\"],\n0x8C: [4,8,\"CMPS\"],\n0x93: [3,1,\"CMPU\"],\n0x9C: [3,1,\"CMPS\"],\n0xA3: [3,6,\"CMPU\"],\n0xAC: [3,6,\"CMPS\"],\n0xB3: [4,7,\"CMPU\"],\n0xBC: [4,7,\"CMPS\"]\n};\n\nvar ds10 = {\n0x21:[5,3,\"LBRN\"],\n0x22:[5,3,\"LBHI\"],\n0x23:[5,3,\"LBLS\"],\n0x24:[5,3,\"LBCC\"],\n0x25:[5,3,\"LBCS\"],\n0x26:[5,3,\"LBNE\"],\n0x27:[5,3,\"LBEQ\"],\n0x28:[5,3,\"LBVC\"],\n0x29:[5,3,\"LBVS\"],\n0x2a:[5,3,\"LBPL\"],\n0x2b:[5,3,\"LBMI\"],\n0x2c:[5,3,\"LBGE\"],\n0x2d:[5,3,\"LBLT\"],\n0x2e:[5,3,\"LBGT\"],\n0x2f:[5,3,\"LBLE\"],\n0x3F:[2,2,\"SWI2\"],\n0x83:[4,8,\"CMPD\"],\n0x8C:[4,8,\"CMPY\"],\n0x8E:[4,8,\"LDY\"],\n0x93:[3,1,\"CMPD\"],\n0x9C:[3,1,\"CMPY\"],\n0x9E:[3,1,\"LDY\"],\n0x9F:[3,1,\"STY\"],\n0xA3:[3,6,\"CMPD\"],\n0xAC:[3,6,\"CMPY\"],\n0xAE:[3,6,\"LDY\"],\n0xAF:[3,6,\"STY\"],\n0xB3:[4,7,\"CMPD\"],\n0xBC:[4,7,\"CMPY\"],\n0xBE:[4,7,\"LDY\"],\n0xBF:[4,7,\"STY\"],\n0xCE:[4,8,\"LDS\"],\n0xDE:[3,1,\"LDS\"],\n0xDF:[3,1,\"STS\"],\n0xEE:[3,6,\"LDS\"],\n0xEF:[3,6,\"STS\"],\n0xFE:[4,7,\"LDS\"],\n0xFF:[4,7,\"STS\"]\n};\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n*/\n\nvar disasm = function(i,a,b,c,d,pc) {\n var toHexN = function(n,d) {\n var s = n.toString(16);\n while (s.length >5];\n if (!(pb & 0x80)) {\n //direct5\n var disp = pb & 0x1f;\n if (disp>15) disp = disp-32;\n mnemo+=disp+','+ixr;\n break;\n }\n var ind = pb & 0x10;\n var mod = pb & 0x0f;\n var ofs8 = (b>127)?(b-256):b;\n var ofs16 = ((b*256+c)>32767)?((b*256+c)-65536):(b*256+c);\n if (!ind) {\n switch (mod) {\n case 0: mnemo += \",\"+ixr+'+'; break;\n case 1: mnemo += \",\"+ixr+'++'; break;\n case 2: mnemo += \",-\"+ixr; break;\n case 3: mnemo += \",--\"+ixr; break;\n case 4: mnemo += \",\"+ixr; break;\n case 5: mnemo += \"B,\"+ixr; break;\n case 6: mnemo += \"A,\"+ixr; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += ofs8+\",\"+ixr; bytes++; break;\n case 9: mnemo += ofs16+\",\"+ixr; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"D,\"+ixr; break;\n case 12: mnemo += ofs8+\",PC\"; bytes++; break;\n case 13: mnemo += ofs16+\",PC\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"$\"+toHex4((b*256+c)); bytes+=2; break;\n }\n } else {\n switch (mod) {\n case 0: mnemo += \"???\"; break;\n case 1: mnemo += \"[,\"+ixr+'++]'; break;\n case 2: mnemo += \"???\"; break;\n case 3: mnemo += \"[,--\"+ixr+']'; break;\n case 4: mnemo += \"[,\"+ixr+']'; break;\n case 5: mnemo += \"[B,\"+ixr+']'; break;\n case 6: mnemo += \"[A,\"+ixr+']'; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += \"[\"+ofs8+\",\"+ixr+']'; bytes++; break;\n case 9: mnemo += \"[\"+ofs16+\",\"+ixr+']'; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"[D,\"+ixr+']'; break;\n case 12: mnemo += \"[\"+ofs8+\",PC]\"; bytes++; break;\n case 13: mnemo += \"[\"+ofs16+\",PC]\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"[$\"+toHex4((b*256+c))+']'; bytes+=2; break;\n }\n }\n\n break;\n case 7: //extended\n mnemo+=\"\\t$\"+toHex4(a*256+b); break;\n case 8: //imm16\n mnemo+=\"\\t#$\"+toHex4(a*256+b); break;\n\n case 10: //pshs, puls\n rx = ['PC','U','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 11: //pshs, puls\n rx = ['PC','S','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 20: //TFR etc\n rx = ['D','X','Y','U','S','PC','?','?','A','B','CC','DP','?','?','?','?'];\n mnemo += '\\t'+rx[a>>4]+','+rx[a&0x0f];\n break;\n }\n\n return {line:mnemo,nbytes:bytes};\n };\n\n\n//---------- Exports\n\nreturn {\n steps: function(Ts){\n //T=0;\n while (Ts>0){\n Ts-=step();\n }\n },\n runFrame: function(Tt){\n while (T>i);\n if (n===0) {f+=fx[i].toLowerCase();} else {f+=fx[i];}\n }\n return f;\n },\n disasm: disasm,\n isStable: function() { return true; }\n};\n\n};\n", "\nimport { CPU, Bus, ClockBased, SavesState, Interruptable } from \"../devices\";\nimport { EmuHalt } from \"../emu\";\nimport { hex } from \"../util\";\n\n// Copyright 2015 by Paulo Augusto Peccin. See license.txt distributed with this file.\n\nexport var _MOS6502 = function() {\n var self = this;\n\n this.powerOn = function() {\n this.reset();\n };\n\n this.powerOff = function() {\n };\n\n this.clockPulse = function() {\n if (!RDY) return; // TODO Should be ignored in the last cycle of the instruction\n T++;\n instruction[T]();\n };\n\n this.connectBus = function(aBus) {\n bus = aBus;\n };\n\n this.setRDY = function(boo) {\n RDY = boo;\n };\n\n this.isRDY = function() {\n return RDY;\n }\n\n this.reset = function() {\n I = 1;\n T = -1;\n instruction = [ fetchOpcodeAndDecodeInstruction ]; // Bootstrap instruction\n PC = bus.read(RESET_VECTOR) | (bus.read(RESET_VECTOR + 1) << 8);\n this.setRDY(true);\n };\n\n // Interfaces\n var bus : Bus;\n var RDY : boolean = false;\n\n // Registers\n var PC : number = 0;\n var SP : number = 0;\n var A : number = 0;\n var X : number = 0;\n var Y : number = 0;\n\n // Status Bits\n var N : number = 0;\n var V : number = 0;\n var D : number = 0;\n var I : number = 0;\n var Z : number = 0;\n var C : number = 0;\n\n // Internal decoding registers\n var T : number = -1;\n var opcode : number = -1;\n var instruction : (() => void)[];\n var data : number = 0;\n var AD : number = 0;\n var BA : number = 0;\n var BALCrossed : boolean = false;\n var IA : number = 0;\n var branchOffset : number = 0;\n var branchOffsetCrossAdjust : number = 0;\n\n // Vectors\n const NMI_VECTOR = 0xfffa;\n const RESET_VECTOR = 0xfffc;\n const IRQ_VECTOR = 0xfffe;\n\n // Index registers names\n const rX = 0;\n const rY = 1;\n\n // Status bits names\n const bN = 7;\n const bV = 6;\n // const bE = 5;\t// Not used\n // const bB = 4;\t// Not used\n // const bD = 3; // Not used\n // const bI = 2; // Not used\n const bZ = 1;\n const bC = 0;\n\n // Auxiliary variables\n // TODO\n //noinspection JSUnusedGlobalSymbols\n this.debug = false;\n //noinspection JSUnusedGlobalSymbols\n this.trace = false;\n\n\n // Internal operations\n\n var fetchOpcodeAndDecodeInstruction = function() {\n opcode = bus.read(PC);\n instruction = instructions[opcode];\n T = 0;\n\n // if (self.trace) self.breakpoint(\"TRACE\");\n // console.log(\"PC: \" + PC + \", op: \" + opcode + \": \" + opcodes[opcode]);\n\n PC++;\n };\n\n var fetchNextOpcode = fetchOpcodeAndDecodeInstruction;\n\n var fetchOpcodeAndDiscard = function() {\n bus.read(PC);\n };\n\n var fetchBranchOffset = function() {\n branchOffset = bus.read(PC);\n PC++;\n };\n\n var fetchADL = function() {\n AD = bus.read(PC);\n PC++;\n };\n\n var fetchADH = function() {\n AD |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchADLFromBA = function() {\n AD = bus.read(BA);\n };\n\n var fetchADHFromBA = function() {\n AD |= bus.read(BA) << 8;\n };\n\n var fetchBAL = function() {\n BA = bus.read(PC);\n PC++;\n };\n\n var fetchBAH = function() {\n BA |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchBALFromIA = function() {\n BA = bus.read(IA);\n };\n\n var fetchBAHFromIA = function() {\n BA |= bus.read(IA) << 8;\n };\n\n var addXtoBAL = function() {\n var low = (BA & 255) + X;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var addYtoBAL = function() {\n var low = (BA & 255) + Y;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAL = function() {\n var low = (BA & 255) + 1;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAHifBALCrossed = function() {\n if (BALCrossed)\n BA = (BA + 0x0100) & 0xffff;\n };\n\n var fetchIAL = function() {\n IA = bus.read(PC);\n PC++;\n };\n\n var fetchIAH = function() {\n IA |= bus.read(PC) << 8;\n PC++;\n };\n\n var add1toIAL = function() {\n var low = (IA & 255) + 1;\n IA = (IA & 0xff00) | (low & 255);\n };\n\n var fetchDataFromImmediate = function() {\n data = bus.read(PC);\n PC++;\n };\n\n var fetchDataFromAD = function() {\n data = bus.read(AD);\n };\n\n var fetchDataFromBA = function() {\n data = bus.read(BA);\n };\n\n var writeDataToAD = function() {\n bus.write(AD, data);\n };\n\n var writeDataToBA = function() {\n bus.write(BA, data);\n };\n\n var addBranchOffsetToPCL = function() {\n var oldLow = (PC & 0x00ff);\n var newLow = (oldLow + branchOffset) & 255;\n // Negative offset?\n if (branchOffset > 127)\n branchOffsetCrossAdjust = (newLow > oldLow) ? -0x0100 : 0;\n else\n branchOffsetCrossAdjust = (newLow < oldLow) ? 0x0100 : 0;\n PC = (PC & 0xff00) | newLow;\n };\n\n var adjustPCHForBranchOffsetCross = function() {\n PC = (PC + branchOffsetCrossAdjust) & 0xffff;\n };\n\n var setZ = function(val) {\n Z = (val === 0) ? 1 : 0;\n };\n\n var setN = function(val) {\n N = (val & 0x080) ? 1 : 0;\n };\n\n var setV = function(boo) {\n V = boo ? 1 : 0;\n };\n\n var setC = function(boo) {\n C = boo ? 1 : 0;\n };\n\n var popFromStack = function() {\n SP = (SP + 1) & 255;\n return bus.read(0x0100 + SP);\n };\n\n var peekFromStack = function() {\n return bus.read(0x0100 + SP);\n };\n\n var pushToStack = function(val) {\n bus.write(0x0100 + SP, val);\n SP = (SP - 1) & 255;\n };\n\n var getStatusBits = function() {\n return N << 7 | V << 6 | 0x30 // Always push with E (bit 5) and B (bit 4) ON\n | D << 3 | I << 2 | Z << 1 | C;\n };\n\n var setStatusBits = function(val) {\n N = val >>> 7; V = val >>> 6 & 1; // E and B flags actually do not exist as real flags, so ignore\n D = val >>> 3 & 1; I = val >>> 2 & 1; Z = val >>> 1 & 1; C = val & 1;\n };\n\n var illegalOpcode = function(op) {\n if (self.debug) self.breakpoint(\"Illegal Opcode: \" + op);\n };\n\n var haltOpcode = function() {\n illegalOpcode(\"KIL/HLT/JAM\");\n // PC has already advanced past the opcode, so the halt is at PC-1\n const addr = (PC - 1) & 0xffff;\n throw new EmuHalt(`CPU executed halt instruction ($${hex(opcode,2)}) at $${hex(addr,4)}`);\n }\n\n\n // Addressing routines\n\n var implied = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var immediateRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var indirectXRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if (BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var zeroPageIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n fetchDataFromBA();\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var indirectYRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if(BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectXWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var zeroPageIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectYWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n var zeroPageReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var zeroPageIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function () {\n addIndex();\n fetchDataFromBA();\n },\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var absoluteIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function () {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectXReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectYReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n // Instructions ========================================================================================\n\n // Complete instruction set\n var opcodes = new Array(256);\n var instructions = new Array(256);\n\n opcodes[0x00] = \"BRK\"; instructions[0x00] = BRK();\n opcodes[0x01] = \"ORA\"; instructions[0x01] = ORA(indirectXRead);\n opcodes[0x02] = \"uKIL\"; instructions[0x02] = uKIL();\n opcodes[0x03] = \"uSLO\"; instructions[0x03] = uSLO(indirectXReadModifyWrite);\n opcodes[0x04] = \"uNOP\"; instructions[0x04] = uNOP(zeroPageRead);\n opcodes[0x05] = \"ORA\"; instructions[0x05] = ORA(zeroPageRead);\n opcodes[0x06] = \"ASL\"; instructions[0x06] = ASL(zeroPageReadModifyWrite);\n opcodes[0x07] = \"uSLO\"; instructions[0x07] = uSLO(zeroPageReadModifyWrite);\n opcodes[0x08] = \"PHP\"; instructions[0x08] = PHP();\n opcodes[0x09] = \"ORA\"; instructions[0x09] = ORA(immediateRead);\n opcodes[0x0a] = \"ASL\"; instructions[0x0a] = ASL_ACC();\n opcodes[0x0b] = \"uANC\"; instructions[0x0b] = uANC(immediateRead);\n opcodes[0x0c] = \"uNOP\"; instructions[0x0c] = uNOP(absoluteRead);\n opcodes[0x0d] = \"ORA\"; instructions[0x0d] = ORA(absoluteRead);\n opcodes[0x0e] = \"ASL\"; instructions[0x0e] = ASL(absoluteReadModifyWrite);\n opcodes[0x0f] = \"uSLO\"; instructions[0x0f] = uSLO(absoluteReadModifyWrite);\n opcodes[0x10] = \"BPL\"; instructions[0x10] = Bxx(bN, 0); // BPL\n opcodes[0x11] = \"ORA\"; instructions[0x11] = ORA(indirectYRead);\n opcodes[0x12] = \"uKIL\"; instructions[0x12] = uKIL();\n opcodes[0x13] = \"uSLO\"; instructions[0x13] = uSLO(indirectYReadModifyWrite);\n opcodes[0x14] = \"uNOP\"; instructions[0x14] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x15] = \"ORA\"; instructions[0x15] = ORA(zeroPageIndexedRead(rX));\n opcodes[0x16] = \"ASL\"; instructions[0x16] = ASL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x17] = \"uSLO\"; instructions[0x17] = uSLO(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x18] = \"CLC\"; instructions[0x18] = CLC();\n opcodes[0x19] = \"ORA\"; instructions[0x19] = ORA(absoluteIndexedRead(rY));\n opcodes[0x1a] = \"uNOP\"; instructions[0x1a] = uNOP(implied);\n opcodes[0x1b] = \"uSLO\"; instructions[0x1b] = uSLO(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x1c] = \"uNOP\"; instructions[0x1c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x1d] = \"ORA\"; instructions[0x1d] = ORA(absoluteIndexedRead(rX));\n opcodes[0x1e] = \"ASL\"; instructions[0x1e] = ASL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x1f] = \"uSLO\"; instructions[0x1f] = uSLO(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x20] = \"JSR\"; instructions[0x20] = JSR();\n opcodes[0x21] = \"AND\"; instructions[0x21] = AND(indirectXRead);\n opcodes[0x22] = \"uKIL\"; instructions[0x22] = uKIL();\n opcodes[0x23] = \"uRLA\"; instructions[0x23] = uRLA(indirectXReadModifyWrite);\n opcodes[0x24] = \"BIT\"; instructions[0x24] = BIT(zeroPageRead);\n opcodes[0x25] = \"AND\"; instructions[0x25] = AND(zeroPageRead);\n opcodes[0x26] = \"ROL\"; instructions[0x26] = ROL(zeroPageReadModifyWrite);\n opcodes[0x27] = \"uRLA\"; instructions[0x27] = uRLA(zeroPageReadModifyWrite);\n opcodes[0x28] = \"PLP\"; instructions[0x28] = PLP();\n opcodes[0x29] = \"AND\"; instructions[0x29] = AND(immediateRead);\n opcodes[0x2a] = \"ROL\"; instructions[0x2a] = ROL_ACC();\n opcodes[0x2b] = \"uANC\"; instructions[0x2b] = uANC(immediateRead);\n opcodes[0x2c] = \"BIT\"; instructions[0x2c] = BIT(absoluteRead);\n opcodes[0x2d] = \"AND\"; instructions[0x2d] = AND(absoluteRead);\n opcodes[0x2e] = \"ROL\"; instructions[0x2e] = ROL(absoluteReadModifyWrite);\n opcodes[0x2f] = \"uRLA\"; instructions[0x2f] = uRLA(absoluteReadModifyWrite);\n opcodes[0x30] = \"BMI\"; instructions[0x30] = Bxx(bN, 1); // BMI\n opcodes[0x31] = \"AND\"; instructions[0x31] = AND(indirectYRead);\n opcodes[0x32] = \"uKIL\"; instructions[0x32] = uKIL();\n opcodes[0x33] = \"uRLA\"; instructions[0x33] = uRLA(indirectYReadModifyWrite);\n opcodes[0x34] = \"uNOP\"; instructions[0x34] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x35] = \"AND\"; instructions[0x35] = AND(zeroPageIndexedRead(rX));\n opcodes[0x36] = \"ROL\"; instructions[0x36] = ROL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x37] = \"uRLA\"; instructions[0x37] = uRLA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x38] = \"SEC\"; instructions[0x38] = SEC();\n opcodes[0x39] = \"AND\"; instructions[0x39] = AND(absoluteIndexedRead(rY));\n opcodes[0x3a] = \"uNOP\"; instructions[0x3a] = uNOP(implied);\n opcodes[0x3b] = \"uRLA\"; instructions[0x3b] = uRLA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x3c] = \"uNOP\"; instructions[0x3c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x3d] = \"AND\"; instructions[0x3d] = AND(absoluteIndexedRead(rX));\n opcodes[0x3e] = \"ROL\"; instructions[0x3e] = ROL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x3f] = \"uRLA\"; instructions[0x3f] = uRLA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x40] = \"RTI\"; instructions[0x40] = RTI();\n opcodes[0x41] = \"EOR\"; instructions[0x41] = EOR(indirectXRead);\n opcodes[0x42] = \"uKIL\"; instructions[0x42] = uKIL();\n opcodes[0x43] = \"uSRE\"; instructions[0x43] = uSRE(indirectXReadModifyWrite);\n opcodes[0x44] = \"uNOP\"; instructions[0x44] = uNOP(zeroPageRead);\n opcodes[0x45] = \"EOR\"; instructions[0x45] = EOR(zeroPageRead);\n opcodes[0x46] = \"LSR\"; instructions[0x46] = LSR(zeroPageReadModifyWrite);\n opcodes[0x47] = \"uSRE\"; instructions[0x47] = uSRE(zeroPageReadModifyWrite);\n opcodes[0x48] = \"PHA\"; instructions[0x48] = PHA();\n opcodes[0x49] = \"EOR\"; instructions[0x49] = EOR(immediateRead);\n opcodes[0x4a] = \"LSR\"; instructions[0x4a] = LSR_ACC();\n opcodes[0x4b] = \"uASR\"; instructions[0x4b] = uASR(immediateRead);\n opcodes[0x4c] = \"JMP\"; instructions[0x4c] = JMP_ABS();\n opcodes[0x4d] = \"EOR\"; instructions[0x4d] = EOR(absoluteRead);\n opcodes[0x4e] = \"LSR\"; instructions[0x4e] = LSR(absoluteReadModifyWrite);\n opcodes[0x4f] = \"uSRE\"; instructions[0x4f] = uSRE(absoluteReadModifyWrite);\n opcodes[0x50] = \"BVC\"; instructions[0x50] = Bxx(bV, 0); // BVC\n opcodes[0x51] = \"EOR\"; instructions[0x51] = EOR(indirectYRead);\n opcodes[0x52] = \"uKIL\"; instructions[0x52] = uKIL();\n opcodes[0x53] = \"uSRE\"; instructions[0x53] = uSRE(indirectYReadModifyWrite);\n opcodes[0x54] = \"uNOP\"; instructions[0x54] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x55] = \"EOR\"; instructions[0x55] = EOR(zeroPageIndexedRead(rX));\n opcodes[0x56] = \"LSR\"; instructions[0x56] = LSR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x57] = \"uSRE\"; instructions[0x57] = uSRE(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x58] = \"CLI\"; instructions[0x58] = CLI();\n opcodes[0x59] = \"EOR\"; instructions[0x59] = EOR(absoluteIndexedRead(rY));\n opcodes[0x5a] = \"uNOP\"; instructions[0x5a] = uNOP(implied);\n opcodes[0x5b] = \"uSRE\"; instructions[0x5b] = uSRE(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x5c] = \"uNOP\"; instructions[0x5c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x5d] = \"EOR\"; instructions[0x5d] = EOR(absoluteIndexedRead(rX));\n opcodes[0x5e] = \"LSR\"; instructions[0x5e] = LSR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x5f] = \"uSRE\"; instructions[0x5f] = uSRE(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x60] = \"RTS\"; instructions[0x60] = RTS();\n opcodes[0x61] = \"ADC\"; instructions[0x61] = ADC(indirectXRead);\n opcodes[0x62] = \"uKIL\"; instructions[0x62] = uKIL();\n opcodes[0x63] = \"uRRA\"; instructions[0x63] = uRRA(indirectXReadModifyWrite);\n opcodes[0x64] = \"uNOP\"; instructions[0x64] = uNOP(zeroPageRead);\n opcodes[0x65] = \"ADC\"; instructions[0x65] = ADC(zeroPageRead);\n opcodes[0x66] = \"ROR\"; instructions[0x66] = ROR(zeroPageReadModifyWrite);\n opcodes[0x67] = \"uRRA\"; instructions[0x67] = uRRA(zeroPageReadModifyWrite);\n opcodes[0x68] = \"PLA\"; instructions[0x68] = PLA();\n opcodes[0x69] = \"ADC\"; instructions[0x69] = ADC(immediateRead);\n opcodes[0x6a] = \"ROR\"; instructions[0x6a] = ROR_ACC();\n opcodes[0x6b] = \"uARR\"; instructions[0x6b] = uARR(immediateRead);\n opcodes[0x6c] = \"JMP\"; instructions[0x6c] = JMP_IND();\n opcodes[0x6d] = \"ADC\"; instructions[0x6d] = ADC(absoluteRead);\n opcodes[0x6e] = \"ROR\"; instructions[0x6e] = ROR(absoluteReadModifyWrite);\n opcodes[0x6f] = \"uRRA\"; instructions[0x6f] = uRRA(absoluteReadModifyWrite);\n opcodes[0x70] = \"BVS\"; instructions[0x70] = Bxx(bV, 1); // BVS\n opcodes[0x71] = \"ADC\"; instructions[0x71] = ADC(indirectYRead);\n opcodes[0x72] = \"uKIL\"; instructions[0x72] = uKIL();\n opcodes[0x73] = \"uRRA\"; instructions[0x73] = uRRA(indirectYReadModifyWrite);\n opcodes[0x74] = \"uNOP\"; instructions[0x74] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x75] = \"ADC\"; instructions[0x75] = ADC(zeroPageIndexedRead(rX));\n opcodes[0x76] = \"ROR\"; instructions[0x76] = ROR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x77] = \"uRRA\"; instructions[0x77] = uRRA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x78] = \"SEI\"; instructions[0x78] = SEI();\n opcodes[0x79] = \"ADC\"; instructions[0x79] = ADC(absoluteIndexedRead(rY));\n opcodes[0x7a] = \"uNOP\"; instructions[0x7a] = uNOP(implied);\n opcodes[0x7b] = \"uRRA\"; instructions[0x7b] = uRRA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x7c] = \"uNOP\"; instructions[0x7c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x7d] = \"ADC\"; instructions[0x7d] = ADC(absoluteIndexedRead(rX));\n opcodes[0x7e] = \"ROR\"; instructions[0x7e] = ROR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x7f] = \"uRRA\"; instructions[0x7f] = uRRA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x80] = \"uNOP\"; instructions[0x80] = uNOP(immediateRead);\n opcodes[0x81] = \"STA\"; instructions[0x81] = STA(indirectXWrite);\n opcodes[0x82] = \"uNOP\"; instructions[0x82] = uNOP(immediateRead);\n opcodes[0x83] = \"uSAX\"; instructions[0x83] = uSAX(indirectXWrite);\n opcodes[0x84] = \"STY\"; instructions[0x84] = STY(zeroPageWrite);\n opcodes[0x85] = \"STA\"; instructions[0x85] = STA(zeroPageWrite);\n opcodes[0x86] = \"STX\"; instructions[0x86] = STX(zeroPageWrite);\n opcodes[0x87] = \"uSAX\"; instructions[0x87] = uSAX(zeroPageWrite);\n opcodes[0x88] = \"DEY\"; instructions[0x88] = DEY();\n opcodes[0x89] = \"uNOP\"; instructions[0x89] = uNOP(immediateRead);\n opcodes[0x8a] = \"TXA\"; instructions[0x8a] = TXA();\n opcodes[0x8b] = \"uANE\"; instructions[0x8b] = uANE(immediateRead);\n opcodes[0x8c] = \"STY\"; instructions[0x8c] = STY(absoluteWrite);\n opcodes[0x8d] = \"STA\"; instructions[0x8d] = STA(absoluteWrite);\n opcodes[0x8e] = \"STX\"; instructions[0x8e] = STX(absoluteWrite);\n opcodes[0x8f] = \"uSAX\"; instructions[0x8f] = uSAX(absoluteWrite);\n opcodes[0x90] = \"BCC\"; instructions[0x90] = Bxx(bC, 0); // BCC\n opcodes[0x91] = \"STA\"; instructions[0x91] = STA(indirectYWrite);\n opcodes[0x92] = \"uKIL\"; instructions[0x92] = uKIL();\n opcodes[0x93] = \"uSHA\"; instructions[0x93] = uSHA(indirectYWrite);\n opcodes[0x94] = \"STY\"; instructions[0x94] = STY(zeroPageIndexedWrite(rX));\n opcodes[0x95] = \"STA\"; instructions[0x95] = STA(zeroPageIndexedWrite(rX));\n opcodes[0x96] = \"STX\"; instructions[0x96] = STX(zeroPageIndexedWrite(rY));\n opcodes[0x97] = \"uSAX\"; instructions[0x97] = uSAX(zeroPageIndexedWrite(rY));\n opcodes[0x98] = \"TYA\"; instructions[0x98] = TYA();\n opcodes[0x99] = \"STA\"; instructions[0x99] = STA(absoluteIndexedWrite(rY));\n opcodes[0x9a] = \"TXS\"; instructions[0x9a] = TXS();\n opcodes[0x9b] = \"uSHS\"; instructions[0x9b] = uSHS(absoluteIndexedWrite(rY));\n opcodes[0x9c] = \"uSHY\"; instructions[0x9c] = uSHY(absoluteIndexedWrite(rX));\n opcodes[0x9d] = \"STA\"; instructions[0x9d] = STA(absoluteIndexedWrite(rX));\n opcodes[0x9e] = \"uSHX\"; instructions[0x9e] = uSHX(absoluteIndexedWrite(rY));\n opcodes[0x9f] = \"uSHA\"; instructions[0x9f] = uSHA(absoluteIndexedWrite(rY));\n opcodes[0xa0] = \"LDY\"; instructions[0xa0] = LDY(immediateRead);\n opcodes[0xa1] = \"LDA\"; instructions[0xa1] = LDA(indirectXRead);\n opcodes[0xa2] = \"LDX\"; instructions[0xa2] = LDX(immediateRead);\n opcodes[0xa3] = \"uLAX\"; instructions[0xa3] = uLAX(indirectXRead);\n opcodes[0xa4] = \"LDY\"; instructions[0xa4] = LDY(zeroPageRead);\n opcodes[0xa5] = \"LDA\"; instructions[0xa5] = LDA(zeroPageRead);\n opcodes[0xa6] = \"LDX\"; instructions[0xa6] = LDX(zeroPageRead);\n opcodes[0xa7] = \"uLAX\"; instructions[0xa7] = uLAX(zeroPageRead);\n opcodes[0xa8] = \"TAY\"; instructions[0xa8] = TAY();\n opcodes[0xa9] = \"LDA\"; instructions[0xa9] = LDA(immediateRead);\n opcodes[0xaa] = \"TAX\"; instructions[0xaa] = TAX();\n opcodes[0xab] = \"uLXA\"; instructions[0xab] = uLXA(immediateRead);\n opcodes[0xac] = \"LDY\"; instructions[0xac] = LDY(absoluteRead);\n opcodes[0xad] = \"LDA\"; instructions[0xad] = LDA(absoluteRead);\n opcodes[0xae] = \"LDX\"; instructions[0xae] = LDX(absoluteRead);\n opcodes[0xaf] = \"uLAX\"; instructions[0xaf] = uLAX(absoluteRead);\n opcodes[0xb0] = \"BCS\"; instructions[0xb0] = Bxx(bC, 1); // BCS\n opcodes[0xb1] = \"LDA\"; instructions[0xb1] = LDA(indirectYRead);\n opcodes[0xb2] = \"uKIL\"; instructions[0xb2] = uKIL();\n opcodes[0xb3] = \"uLAX\"; instructions[0xb3] = uLAX(indirectYRead);\n opcodes[0xb4] = \"LDY\"; instructions[0xb4] = LDY(zeroPageIndexedRead(rX));\n opcodes[0xb5] = \"LDA\"; instructions[0xb5] = LDA(zeroPageIndexedRead(rX));\n opcodes[0xb6] = \"LDX\"; instructions[0xb6] = LDX(zeroPageIndexedRead(rY));\n opcodes[0xb7] = \"uLAX\"; instructions[0xb7] = uLAX(zeroPageIndexedRead(rY));\n opcodes[0xb8] = \"CLV\"; instructions[0xb8] = CLV();\n opcodes[0xb9] = \"LDA\"; instructions[0xb9] = LDA(absoluteIndexedRead(rY));\n opcodes[0xba] = \"TSX\"; instructions[0xba] = TSX();\n opcodes[0xbb] = \"uLAS\"; instructions[0xbb] = uLAS(absoluteIndexedRead(rY));\n opcodes[0xbc] = \"LDY\"; instructions[0xbc] = LDY(absoluteIndexedRead(rX));\n opcodes[0xbd] = \"LDA\"; instructions[0xbd] = LDA(absoluteIndexedRead(rX));\n opcodes[0xbe] = \"LDX\"; instructions[0xbe] = LDX(absoluteIndexedRead(rY));\n opcodes[0xbf] = \"uLAX\"; instructions[0xbf] = uLAX(absoluteIndexedRead(rY));\n opcodes[0xc0] = \"CPY\"; instructions[0xc0] = CPY(immediateRead);\n opcodes[0xc1] = \"CMP\"; instructions[0xc1] = CMP(indirectXRead);\n opcodes[0xc2] = \"uNOP\"; instructions[0xc2] = uNOP(immediateRead);\n opcodes[0xc3] = \"uDCP\"; instructions[0xc3] = uDCP(indirectXReadModifyWrite);\n opcodes[0xc4] = \"CPY\"; instructions[0xc4] = CPY(zeroPageRead);\n opcodes[0xc5] = \"CMP\"; instructions[0xc5] = CMP(zeroPageRead);\n opcodes[0xc6] = \"DEC\"; instructions[0xc6] = DEC(zeroPageReadModifyWrite);\n opcodes[0xc7] = \"uDCP\"; instructions[0xc7] = uDCP(zeroPageReadModifyWrite);\n opcodes[0xc8] = \"INY\"; instructions[0xc8] = INY();\n opcodes[0xc9] = \"CMP\"; instructions[0xc9] = CMP(immediateRead);\n opcodes[0xca] = \"DEX\"; instructions[0xca] = DEX();\n opcodes[0xcb] = \"uSBX\"; instructions[0xcb] = uSBX(immediateRead);\n opcodes[0xcc] = \"CPY\"; instructions[0xcc] = CPY(absoluteRead);\n opcodes[0xcd] = \"CMP\"; instructions[0xcd] = CMP(absoluteRead);\n opcodes[0xce] = \"DEC\"; instructions[0xce] = DEC(absoluteReadModifyWrite);\n opcodes[0xcf] = \"uDCP\"; instructions[0xcf] = uDCP(absoluteReadModifyWrite);\n opcodes[0xd0] = \"BNE\"; instructions[0xd0] = Bxx(bZ, 0); // BNE\n opcodes[0xd1] = \"CMP\"; instructions[0xd1] = CMP(indirectYRead);\n opcodes[0xd2] = \"uKIL\"; instructions[0xd2] = uKIL();\n opcodes[0xd3] = \"uDCP\"; instructions[0xd3] = uDCP(indirectYReadModifyWrite);\n opcodes[0xd4] = \"uNOP\"; instructions[0xd4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xd5] = \"CMP\"; instructions[0xd5] = CMP(zeroPageIndexedRead(rX));\n opcodes[0xd6] = \"DEC\"; instructions[0xd6] = DEC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd7] = \"uDCP\"; instructions[0xd7] = uDCP(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd8] = \"CLD\"; instructions[0xd8] = CLD();\n opcodes[0xd9] = \"CMP\"; instructions[0xd9] = CMP(absoluteIndexedRead(rY));\n opcodes[0xda] = \"uNOP\"; instructions[0xda] = uNOP(implied);\n opcodes[0xdb] = \"uDCP\"; instructions[0xdb] = uDCP(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xdc] = \"uNOP\"; instructions[0xdc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xdd] = \"CMP\"; instructions[0xdd] = CMP(absoluteIndexedRead(rX));\n opcodes[0xde] = \"DEC\"; instructions[0xde] = DEC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xdf] = \"uDCP\"; instructions[0xdf] = uDCP(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xe0] = \"CPX\"; instructions[0xe0] = CPX(immediateRead);\n opcodes[0xe1] = \"SBC\"; instructions[0xe1] = SBC(indirectXRead);\n opcodes[0xe2] = \"uNOP\"; instructions[0xe2] = uNOP(immediateRead);\n opcodes[0xe3] = \"uISB\"; instructions[0xe3] = uISB(indirectXReadModifyWrite);\n opcodes[0xe4] = \"CPX\"; instructions[0xe4] = CPX(zeroPageRead);\n opcodes[0xe5] = \"SBC\"; instructions[0xe5] = SBC(zeroPageRead);\n opcodes[0xe6] = \"INC\"; instructions[0xe6] = INC(zeroPageReadModifyWrite);\n opcodes[0xe7] = \"uISB\"; instructions[0xe7] = uISB(zeroPageReadModifyWrite);\n opcodes[0xe8] = \"INX\"; instructions[0xe8] = INX();\n opcodes[0xe9] = \"SBC\"; instructions[0xe9] = SBC(immediateRead);\n opcodes[0xea] = \"NOP\"; instructions[0xea] = NOP();\n opcodes[0xeb] = \"SBC\"; instructions[0xeb] = SBC(immediateRead);\n opcodes[0xec] = \"CPX\"; instructions[0xec] = CPX(absoluteRead);\n opcodes[0xed] = \"SBC\"; instructions[0xed] = SBC(absoluteRead);\n opcodes[0xee] = \"INC\"; instructions[0xee] = INC(absoluteReadModifyWrite);\n opcodes[0xef] = \"uISB\"; instructions[0xef] = uISB(absoluteReadModifyWrite);\n opcodes[0xf0] = \"BEQ\"; instructions[0xf0] = Bxx(bZ, 1); // BEQ\n opcodes[0xf1] = \"SBC\"; instructions[0xf1] = SBC(indirectYRead);\n opcodes[0xf2] = \"uKIL\"; instructions[0xf2] = uKIL();\n opcodes[0xf3] = \"uISB\"; instructions[0xf3] = uISB(indirectYReadModifyWrite);\n opcodes[0xf4] = \"uNOP\"; instructions[0xf4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xf5] = \"SBC\"; instructions[0xf5] = SBC(zeroPageIndexedRead(rX));\n opcodes[0xf6] = \"INC\"; instructions[0xf6] = INC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf7] = \"uISB\"; instructions[0xf7] = uISB(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf8] = \"SED\"; instructions[0xf8] = SED();\n opcodes[0xf9] = \"SBC\"; instructions[0xf9] = SBC(absoluteIndexedRead(rY));\n opcodes[0xfa] = \"uNOP\"; instructions[0xfa] = uNOP(implied);\n opcodes[0xfb] = \"uISB\"; instructions[0xfb] = uISB(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xfc] = \"uNOP\"; instructions[0xfc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xfd] = \"SBC\"; instructions[0xfd] = SBC(absoluteIndexedRead(rX));\n opcodes[0xfe] = \"INC\"; instructions[0xfe] = INC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xff] = \"uISB\"; instructions[0xff] = uISB(absoluteIndexedReadModifyWrite(rX));\n\n\n // Single Byte instructions\n\n function ASL_ACC() {\n return implied(function() {\n setC(A > 127);\n A = (A << 1) & 255;\n setZ(A);\n setN(A);\n });\n }\n\n function CLC() {\n return implied(function() {\n C = 0;\n });\n }\n\n function CLD() {\n return implied(function() {\n D = 0;\n });\n }\n\n function CLI() {\n return implied(function() {\n I = 0;\n });\n }\n\n function CLV() {\n return implied(function() {\n V = 0;\n });\n }\n\n function DEX() {\n return implied(function() {\n X = (X - 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function DEY() {\n return implied(function() {\n Y = (Y - 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function INX() {\n return implied(function() {\n X = (X + 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function INY() {\n return implied(function() {\n Y = (Y + 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function LSR_ACC() {\n return implied(function() {\n C = A & 0x01;\n A >>>= 1;\n setZ(A);\n N = 0;\n });\n }\n\n function NOP() {\n return implied(function() {\n // nothing\n });\n }\n\n function ROL_ACC() {\n return implied(function() {\n var newC = A > 127;\n A = ((A << 1) | C) & 255;\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function ROR_ACC() {\n return implied(function() {\n var newC = A & 0x01;\n A = (A >>> 1) | (C << 7);\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function SEC() {\n return implied(function() {\n C = 1;\n });\n }\n\n function SED() {\n return implied(function() {\n D = 1;\n });\n }\n\n function SEI() {\n return implied(function() {\n I = 1;\n });\n }\n\n function TAX() {\n return implied(function() {\n X = A;\n setZ(X);\n setN(X);\n });\n }\n\n function TAY() {\n return implied(function() {\n Y = A;\n setZ(Y);\n setN(Y);\n });\n }\n\n function TSX() {\n return implied(function() {\n X = SP;\n setZ(X);\n setN(X);\n });\n }\n\n function TXA() {\n return implied(function() {\n A = X;\n setZ(A);\n setN(A);\n });\n }\n\n function TXS() {\n return implied(function() {\n SP = X;\n });\n }\n\n function TYA() {\n return implied(function() {\n A = Y;\n setZ(A);\n setN(A);\n });\n }\n\n function uKIL() {\n return [\n fetchOpcodeAndDecodeInstruction,\n function() {\n haltOpcode();\n },\n function() {\n T--; // Causes the processor to be stuck in this instruction forever\n }\n ];\n }\n\n function uNOP(addressing) {\n return addressing(function() {\n illegalOpcode(\"NOP/DOP\");\n // nothing\n });\n }\n\n\n // Internal Execution on Memory Data\n\n function ADC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function AND(addressing) {\n return addressing(function() {\n A &= data;\n setZ(A);\n setN(A);\n });\n }\n\n function BIT(addressing) {\n return addressing(function() {\n var par = data;\n setZ(A & par);\n setV(par & 0x40);\n setN(par);\n });\n }\n\n function CMP(addressing) {\n return addressing(function() {\n var val = (A - data) & 255;\n setC(A >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPX(addressing) {\n return addressing(function() {\n var val = (X - data) & 255;\n setC(X >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPY(addressing) {\n return addressing(function() {\n var val = (Y - data) & 255;\n setC(Y >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function EOR(addressing) {\n return addressing(function() {\n A ^= data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDA(addressing) {\n return addressing(function() {\n A = data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDX(addressing) {\n return addressing(function() {\n X = data;\n setZ(X);\n setN(X);\n });\n }\n\n function LDY(addressing) {\n return addressing(function() {\n Y = data;\n setZ(Y);\n setN(Y);\n });\n }\n\n function ORA(addressing) {\n return addressing(function() {\n A |= data;\n setZ(A);\n setN(A);\n });\n }\n\n function SBC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uANC(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANC\");\n A &= data;\n setZ(A);\n N = C = (A & 0x080) ? 1 : 0;\n });\n }\n\n function uANE(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANE\");\n // Exact operation unknown. Do nothing\n });\n }\n\n function uARR(addressing) {\n // Some sources say flags are affected per ROR, others say its more complex. The complex one is chosen\n return addressing(function() {\n illegalOpcode(\"ARR\");\n var val = A & data;\n var oldC = C ? 0x80 : 0;\n val = (val >>> 1) | oldC;\n A = val;\n setZ(val);\n setN(val);\n var comp = A & 0x60;\n if (comp == 0x60) \t\t{ C = 1; V = 0; }\n else if (comp == 0x00) \t{ C = 0; V = 0; }\n else if (comp == 0x20) \t{ C = 0; V = 1; }\n else if (comp == 0x40) \t{ C = 1; V = 1; }\n });\n }\n\n function uASR(addressing) {\n return addressing(function() {\n illegalOpcode(\"ASR\");\n var val = A & data;\n C = (val & 0x01);\t\t// bit 0\n val = val >>> 1;\n A = val;\n setZ(val);\n N = 0;\n });\n }\n\n function uLAS(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAS\");\n var val = SP & data;\n A = val;\n X = val;\n SP = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLAX(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAX\");\n var val = data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLXA(addressing) {\n return addressing(function() {\n // Some sources say its an OR with $EE then AND with IMM, others exclude the OR,\n // others exclude both the OR and the AND. Excluding just the OR...\n illegalOpcode(\"LXA\");\n var val = A /* | 0xEE) */ & data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSBX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SBX\");\n var par = A & X;\n var val = data;\n var newX = (par - val) & 255;\n X = newX;\n setC(par >= val);\n setZ(newX);\n setN(newX);\n });\n }\n\n\n // Store operations\n\n function STA(addressing) {\n return addressing(function() {\n data = A;\n });\n }\n\n function STX(addressing) {\n return addressing(function() {\n data = X;\n });\n }\n\n function STY(addressing) {\n return addressing(function() {\n data = Y;\n });\n }\n\n function uSAX(addressing) {\n return addressing(function() {\n // Some sources say it would affect N and Z flags, some say it wouldn't. Chose not to affect\n illegalOpcode(\"SAX\");\n data = A & X;\n });\n }\n\n function uSHA(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHA\");\n data = A & X & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHS(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHS\");\n var val = A & X;\n SP = val;\n data = val & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHX\");\n data = X & ((BA >>> 8) + 1) & 255; // X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHY(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHY\");\n data = Y & ((BA >>> 8) + 1) & 255; // Y & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n\n // Read-Modify-Write operations\n\n function ASL(addressing) {\n return addressing(function() {\n setC(data > 127);\n var par = (data << 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function DEC(addressing) {\n return addressing(function() {\n var par = (data - 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function INC(addressing) {\n return addressing(function() {\n var par = (data + 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function LSR(addressing) {\n return addressing(function() {\n C = data & 0x01;\n data >>>= 1;\n setZ(data);\n N = 0;\n });\n }\n\n function ROL(addressing) {\n return addressing(function() {\n var newC = data > 127;\n var par = ((data << 1) | C) & 255;\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function ROR(addressing) {\n return addressing(function() {\n var newC = data & 0x01;\n var par = (data >>> 1) | (C << 7);\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function uDCP(addressing) {\n return addressing(function() {\n illegalOpcode(\"DCP\");\n var par = (data - 1) & 255;\n data = par;\n par = A - par;\n setC(par >= 0);\n setZ(par);\n setN(par);\n });\n }\n\n function uISB(addressing) {\n return addressing(function() {\n illegalOpcode(\"ISB\");\n data = (data + 1) & 255; // ISB is the same as SBC but incs the operand first\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uRLA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RLA\");\n var val = data;\n var oldC = C;\n setC(val & 0x80);\t\t// bit 7 was set\n val = ((val << 1) | oldC) & 255;\n data = val;\n A &= val;\n setZ(val); // TODO Verify. May be A instead of val in the flags setting\n setN(val);\n });\n }\n\n function uRRA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RRA\");\n var val = data;\n var oldC = C ? 0x80 : 0;\n setC(val & 0x01);\t\t// bit 0 was set\n val = (val >>> 1) | oldC;\n data = val;\n // RRA is the same as ADC from here\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uSLO(addressing) {\n return addressing(function() {\n illegalOpcode(\"SLO\");\n var val = data;\n setC(val & 0x80);\t\t// bit 7 was set\n val = (val << 1) & 255;\n data = val;\n val = A | val;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSRE(addressing) {\n return addressing(function() {\n illegalOpcode(\"SRE\");\n var val = data;\n setC(val & 0x01);\t\t// bit 0 was set\n val = val >>> 1;\n data = val;\n val = (A ^ val) & 255;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n\n // Miscellaneous operations\n\n function PHA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(A); },\n fetchNextOpcode\n ];\n }\n\n function PHP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(getStatusBits()); },\n fetchNextOpcode\n ];\n }\n\n function PLA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() {\n A = popFromStack();\n setZ(A);\n setN(A);\n },\n fetchNextOpcode\n ];\n }\n\n function PLP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n fetchNextOpcode\n ];\n }\n\n function JSR() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n peekFromStack,\n function() { pushToStack((PC >>> 8) & 0xff); },\n function() { pushToStack(PC & 0xff); },\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function BRK() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"BRK \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits()); }, // set B flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; I = 1; fetchNextOpcode(); }\n ];\n }\n\n function IRQ() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"IRQ \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function NMI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n if (self.debug) self.breakpoint(\"NMI \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(NMI_VECTOR); },\n function() { AD |= bus.read(NMI_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchDataFromImmediate(); },\n fetchNextOpcode\n ];\n }\n\n function JMP_ABS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function JMP_IND() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchIAH,\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() { PC = BA; fetchNextOpcode(); }\n ];\n }\n\n function Bxx(reg, cond) {\n var branchTaken;\n if (reg === bZ) branchTaken = function() { return Z === cond; };\n else if (reg === bN) branchTaken = function() { return N === cond; };\n else if (reg === bC) branchTaken = function() { return C === cond; };\n else branchTaken = function() { return V === cond; };\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBranchOffset,\n function() {\n if (branchTaken()) {\n fetchOpcodeAndDiscard();\n addBranchOffsetToPCL();\n } else {\n fetchNextOpcode();\n }\n },\n function() {\n if(branchOffsetCrossAdjust) {\n fetchOpcodeAndDiscard();\n adjustPCHForBranchOffsetCross();\n } else {\n fetchNextOpcode();\n }\n },\n fetchNextOpcode\n ];\n }\n\n\n // Savestate -------------------------------------------\n\n this.saveState = function():MOS6502State {\n return {\n PC: (PC-1) & 0xffff,\n A: A, X: X, Y: Y, SP: SP,\n N: N, V: V, D: D, I: I, Z: Z, C: C,\n T: T, o: opcode, R: RDY?1:0,\n d: data, AD: AD, BA: BA, BC: BALCrossed?1:0, IA: IA,\n bo: branchOffset, boa: branchOffsetCrossAdjust\n };\n };\n\n this.loadState = function(state:MOS6502State) {\n PC = (state.PC+1) & 0xffff;\n A = state.A; X = state.X; Y = state.Y; SP = state.SP;\n N = state.N; V = state.V; D = state.D; I = state.I; Z = state.Z; C = state.C;\n T = state.T; opcode = state.o; RDY = !!state.R;\n data = state.d; AD = state.AD; BA = state.BA; BALCrossed = !!state.BC; IA = state.IA;\n branchOffset = state.bo; branchOffsetCrossAdjust = state.boa;\n instruction = opcode < 0 ? [ fetchOpcodeAndDecodeInstruction ] : instructions[opcode];\n };\n\n\n // Accessory methods\n\n this.toString = function() {\n return \"CPU \" +\n \" PC: \" + PC.toString(16) + \" op: \" + opcode.toString() + \" T: \" + T + \" data: \" + data + \"\\n\" +\n \" A: \" + A.toString(16) + \" X: \" + X.toString(16) + \" Y: \" + Y.toString(16) + \" SP: \" + SP.toString(16) + \" \" +\n \"N\" + N + \" \" + \"V\" + V + \" \" + \"D\" + D + \" \" + \"I\" + I + \" \" + \"Z\" + Z + \" \" + \"C\" + C + \" \";\n };\n\n this.breakpoint = function(mes) {\n //jt.Util.log(mes);\n if (this.trace) {\n var text = \"CPU Breakpoint! \" + (mes ? \"(\" + mes + \")\" : \"\") + \"\\n\\n\" + this.toString();\n //jt.Util.message(text);\n }\n };\n\n var cycletime = [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0,\n 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4,\n 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ];\n\n var extracycles = [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ];\n\n var insnlengths = [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ];\n\n var validinsns = [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ];\n\n this.getOpcodeMetadata = function(opcode, address) {\n // TODO: more intelligent maximum cycles\n //var i = instructions[opcode];\n return {\n opcode:opcode,\n mnenomic:opcodes[opcode],\n minCycles:cycletime[opcode],\n maxCycles:cycletime[opcode] + extracycles[opcode],\n insnlength:insnlengths[opcode]\n };\n }\n\n // only call when isPCStable() is true\n this.setNMI = function() {\n instruction = NMI();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n this.setIRQ = function() {\n if (!I) { // only if not disabled\n instruction = IRQ();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n }\n\n this.getSP = function() { return SP; }\n this.getPC = function() { return (PC-1) & 0xffff; }\n this.getT = function() { return T; }\n this.isHalted = function() { return opcodes[opcode] == \"uKIL\"; }\n \n this.isPCStable = function() {\n return T == 0;\n }\n};\n\nexport interface MOS6502State {\nPC : number;\nSP : number;\nA : number;\nX : number;\nY : number;\nN : number;\nV : number;\nD : number;\nI : number;\nZ : number;\nC : number;\nT : number;\no : number;\nR : number;\nd : number;\nAD : number;\nBA : number;\nBC : number;\nIA : number;\nbo : number;\nboa : number;\n}\n\nexport enum MOS6502Interrupts { None=0, NMI=1, IRQ=2 };\n\nexport class MOS6502 implements CPU, ClockBased, SavesState, Interruptable {\n\n cpu = new _MOS6502();\n interruptType : MOS6502Interrupts = MOS6502Interrupts.None;\n \n connectMemoryBus(bus:Bus) {\n this.cpu.connectBus(bus);\n }\n advanceClock() {\n if (this.interruptType && this.isStable()) {\n switch (this.interruptType) {\n case MOS6502Interrupts.NMI: this.cpu.setNMI(); break;\n case MOS6502Interrupts.IRQ: this.cpu.setIRQ(); break;\n }\n this.interruptType = 0;\n }\n this.cpu.clockPulse();\n }\n advanceInsn() {\n do {\n this.advanceClock();\n } while (!this.isStable());\n }\n reset() {\n this.cpu.reset();\n this.interruptType = 0;\n }\n interrupt(itype:number) {\n if (this.interruptType != MOS6502Interrupts.NMI) {\n this.interruptType = itype;\n }\n }\n NMI() {\n this.interrupt(MOS6502Interrupts.NMI);\n }\n IRQ() {\n this.interrupt(MOS6502Interrupts.IRQ);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.isHalted();\n }\n saveState() {\n var s = this.cpu.saveState();\n s.it = this.interruptType;\n return s;\n }\n loadState(s) {\n this.cpu.loadState(s);\n this.interruptType = s.it;\n }\n isStable() : boolean {\n return this.cpu.isPCStable();\n }\n getOpcodeMetadata(op: number) {\n return this.cpu.getOpcodeMetadata(op);\n }\n}\n", "\nimport { CpuState, EmuState } from \"./baseplatform\";\nimport { CPU, SampledAudioSink, ProbeAll, NullProbe } from \"./devices\";\nimport { EmuHalt } from \"./emu\";\n\n// WASM Support\n// TODO: detangle from c64\n\nexport abstract class BaseWASMMachine {\n prefix : string;\n instance : WebAssembly.Instance;\n exports : any;\n sys : number;\n pixel_dest : Uint32Array;\n pixel_src : Uint32Array;\n stateptr : number;\n statearr : Uint8Array;\n cpustateptr : number;\n cpustatearr : Uint8Array;\n ctrlstateptr : number;\n ctrlstatearr : Uint8Array;\n cpu : CPU;\n romptr : number;\n romlen : number;\n romarr : Uint8Array;\n biosptr : number;\n biosarr : Uint8Array;\n audio : SampledAudioSink;\n audioarr : Float32Array;\n probe : ProbeAll;\n maxROMSize : number = 0x40000;\n\n abstract getCPUState() : CpuState;\n abstract saveState() : EmuState;\n abstract loadState(state: EmuState);\n\n constructor(prefix: string) {\n this.prefix = prefix;\n var self = this;\n this.cpu = {\n getPC: self.getPC.bind(self),\n getSP: self.getSP.bind(self),\n isStable: self.isStable.bind(self),\n reset: self.reset.bind(self),\n saveState: () => {\n return self.getCPUState();\n },\n loadState: () => {\n console.log(\"loadState not implemented\")\n },\n connectMemoryBus() {\n console.log(\"connectMemoryBus not implemented\")\n },\n }\n }\n getImports(wmod: WebAssembly.Module) {\n return {};\n }\n async fetchWASM() {\n var wasmResponse = await fetch('res/'+this.prefix+'.wasm');\n if (wasmResponse.status == 200 || (wasmResponse as any as Blob).size) {\n var wasmBinary = await wasmResponse.arrayBuffer();\n var wasmCompiled = await WebAssembly.compile(wasmBinary);\n var wasmResult = await WebAssembly.instantiate(wasmCompiled, this.getImports(wasmCompiled));\n this.instance = wasmResult;\n this.exports = wasmResult.exports;\n } else throw new Error('could not load WASM file');\n }\n allocateBIOS(biosBinary: Uint8Array) {\n this.biosptr = this.exports.malloc(biosBinary.byteLength);\n this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength);\n}\n async fetchBIOS() {\n var biosResponse = await fetch('res/'+this.prefix+'.bios');\n if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {\n var biosBinary = new Uint8Array(await biosResponse.arrayBuffer());\n this.allocateBIOS(biosBinary);\n this.loadBIOS(biosBinary);\n } else throw new Error('could not load BIOS file');\n }\n async initWASM() {\n // init machine instance\n this.sys = this.exports.machine_init(this.biosptr);\n let statesize = this.exports.machine_get_state_size();\n this.stateptr = this.exports.malloc(statesize);\n let ctrlstatesize = this.exports.machine_get_controls_state_size();\n this.ctrlstateptr = this.exports.malloc(ctrlstatesize);\n let cpustatesize = this.exports.machine_get_cpu_state_size();\n this.cpustateptr = this.exports.malloc(cpustatesize);\n this.romptr = this.exports.malloc(this.maxROMSize);\n // create state buffers\n // must do this after allocating memory (and everytime we grow memory?)\n this.statearr = new Uint8Array(this.exports.memory.buffer, this.stateptr, statesize);\n this.ctrlstatearr = new Uint8Array(this.exports.memory.buffer, this.ctrlstateptr, ctrlstatesize);\n this.cpustatearr = new Uint8Array(this.exports.memory.buffer, this.cpustateptr, cpustatesize);\n // create audio buffer\n let sampbufsize = 4096*4;\n this.audioarr = new Float32Array(this.exports.memory.buffer, this.exports.machine_get_sample_buffer(), sampbufsize);\n // create ROM buffer\n this.romarr = new Uint8Array(this.exports.memory.buffer, this.romptr, this.maxROMSize);\n // enable c64 joystick map to arrow keys (TODO)\n //this.exports.c64_set_joystick_type(this.sys, 1);\n console.log('machine_init', this.sys, statesize, ctrlstatesize, cpustatesize, sampbufsize);\n }\n async loadWASM() {\n await this.fetchWASM();\n this.exports.memory.grow(96); // TODO: need more when probing?\n await this.fetchBIOS();\n await this.initWASM();\n }\n getPC() : number {\n return this.exports.machine_cpu_get_pc(this.sys);\n }\n getSP() : number {\n return this.exports.machine_cpu_get_sp(this.sys);\n }\n isStable() : boolean {\n return this.exports.machine_cpu_is_stable(this.sys);\n }\n loadROM(rom: Uint8Array) {\n if (rom.length > this.maxROMSize) throw new EmuHalt(`Rom size too big: ${rom.length} bytes`);\n this.romarr.set(rom);\n this.romlen = rom.length;\n console.log('load rom', rom.length, 'bytes');\n this.reset(); // TODO?\n }\n // TODO: can't load after machine_init\n loadBIOS(srcArray: Uint8Array) {\n this.biosarr.set(srcArray);\n }\n reset() {\n this.exports.machine_reset(this.sys);\n }\n /* TODO: we don't need this because c64_exec does this?\n pollControls() {\n this.exports.machine_start_frame(this.sys);\n }\n */\n read(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n readConst(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n write(address: number, value: number) : void {\n this.exports.machine_mem_write(this.sys, address & 0xffff, value & 0xff);\n }\n getAudioParams() {\n return {sampleRate:44100, stereo:false};\n }\n videoOffsetBytes = 0;\n connectVideo(pixels:Uint32Array) : void {\n this.pixel_dest = pixels;\n var pixbuf = this.exports.machine_get_pixel_buffer(this.sys); // save video pointer\n console.log('connectVideo', pixbuf, pixels.length);\n this.pixel_src = new Uint32Array(this.exports.memory.buffer, pixbuf+this.videoOffsetBytes, pixels.length);\n }\n syncVideo() {\n if (this.exports.machine_update_video) {\n this.exports.machine_update_video(this.sys);\n }\n if (this.pixel_dest != null) {\n this.pixel_dest.set(this.pixel_src);\n }\n }\n // assume controls buffer is smaller than cpu buffer\n saveControlsState() : any {\n //console.log(1, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n this.exports.machine_save_controls_state(this.sys, this.ctrlstateptr);\n //console.log(2, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n return { controls:this.ctrlstatearr.slice(0) }\n }\n loadControlsState(state) : void {\n this.ctrlstatearr.set(state.controls);\n this.exports.machine_load_controls_state(this.sys, this.ctrlstateptr);\n }\n connectAudio(audio : SampledAudioSink) : void {\n this.audio = audio;\n }\n syncAudio() {\n if (this.audio != null) {\n var n = this.exports.machine_get_sample_count();\n for (var i=0; i address\n addr2symbol: AddrSymbolMap;\t// address -> symbol\n debuginfo: {}; // extra platform-specific debug info\n symbolsizes?: SymbolMap; // symbol -> size in bytes, if known\n\n constructor(symbolmap: SymbolMap, debuginfo: {}, symbolsizes?: SymbolMap) {\n this.symbolmap = symbolmap;\n this.debuginfo = debuginfo;\n this.symbolsizes = symbolsizes;\n this.addr2symbol = invertMap(symbolmap);\n //// TODO: shouldn't be necc.\n if (!this.addr2symbol[0x0]) this.addr2symbol[0x0] = '$00'; // needed for ...\n this.addr2symbol[0x10000] = '__END__'; // ... dump memory to work\n }\n}\n\ntype MemoryMapType = \"main\" | \"vram\";\ntype MemoryMap = { [type: string]: Segment[] };\n\nexport function isDebuggable(arg: any): arg is Debuggable {\n return arg && typeof arg.getDebugCategories === 'function';\n}\n\nexport interface Debuggable {\n getDebugCategories?(): string[];\n getDebugInfo?(category: string, state: EmuState): string;\n}\n\nexport interface Platform {\n start(): void | Promise;\n reset(): void;\n isRunning(): boolean;\n getToolForFilename(s: string): string;\n getDefaultExtensions(): string[];\n getPresets?(): Preset[];\n pause(): void;\n resume(): void;\n loadROM(title: string, rom: any, origin?: number); // TODO: Uint8Array\n loadBIOS?(title: string, rom: Uint8Array);\n getROMExtension?(rom: FileData): string;\n\n loadState?(state: EmuState): void;\n saveState?(): EmuState;\n loadControlsState?(state: EmuControlsState): void;\n saveControlsState?(): EmuControlsState;\n\n inspect?(ident: string): string;\n disassemble?(addr: number, readfn: (addr: number) => number): DisasmLine;\n readAddress?(addr: number): number;\n readVRAMAddress?(addr: number): number;\n\n setFrameRate?(fps: number): void;\n getFrameRate?(): number;\n\n setupDebug?(callback: BreakpointCallback): void;\n clearDebug?(): void;\n step?(): void;\n runToVsync?(): void;\n runToPC?(pc: number[]): void;\n // like runToPC(), but each address may carry its own extra condition\n // (null = break unconditionally); handles debug-clock bookkeeping so\n // callers don't have to reach into internal fields to arm a runEval()\n runEvalAtPC?(targets: Map): void;\n runUntilReturn?(): void;\n stepBack?(): void;\n runEval?(evalfunc: DebugEvalCondition): void;\n runToFrameClock?(clock: number): void;\n stepOver?(): void;\n hasCustomStepOver?(): boolean; // true if stepOver() is not the generic instruction-level implementation\n restartAtPC?(pc: number): boolean;\n\n getOpcodeMetadata?(opcode: number, offset: number): OpcodeMetadata; //TODO\n getSP?(): number;\n getPC?(): number;\n getOriginPC?(): number;\n newCodeAnalyzer?(): CodeAnalyzer;\n\n getPlatformName?(): string;\n getMemoryMap?(): MemoryMap;\n\n setRecorder?(recorder: EmuRecorder): void;\n advance?(novideo?: boolean): number;\n advanceFrameClock?(trap: DebugCondition, step: number): number;\n showHelp?(): string;\n resize?(): void;\n\n getRasterScanline?(): number;\n getRasterLineClock?(): number;\n setBreakpoint?(id: string, cond: DebugCondition);\n clearBreakpoint?(id: string);\n hasBreakpoint?(id: string): boolean;\n getCPUState?(): CpuState;\n\n debugSymbols?: DebugSymbols;\n getDebugTree?(): {};\n\n startProbing?(): ProbeRecorder;\n stopProbing?(): void;\n\n isBlocked?(): boolean; // is blocked, halted, or waiting for input?\n\n readFile?(path: string): FileData;\n writeFile?(path: string, data: FileData): boolean;\n sourceFileFetch?: (path: string) => FileData;\n\n getDownloadFile?(): { extension: string, blob: Blob };\n getDebugSymbolFile?(): { extension: string, blob: Blob };\n}\n\nexport interface Preset {\n id: string;\n name: string;\n chapter?: number;\n title?: string;\n category?: string;\n}\n\nexport interface MemoryBus {\n read: (address: number) => number;\n write: (address: number, value: number) => void;\n contend?: (address: number, cycles: number) => number;\n isContended?: (address: number) => boolean;\n}\n\nexport type DebugCondition = () => boolean;\nexport type DebugEvalCondition = (c: CpuState) => boolean;\nexport type BreakpointCallback = (s: EmuState, msg?: string) => void;\n// for composite breakpoints w/ single debug function\nexport class BreakpointList {\n id2bp: { [id: string]: Breakpoint } = {};\n getDebugCondition(): DebugCondition {\n if (Object.keys(this.id2bp).length == 0) {\n return null; // no breakpoints\n } else {\n // evaluate all breakpoints\n return () => {\n var result = false;\n for (var id in this.id2bp)\n if (this.id2bp[id].cond())\n result = true;\n return result;\n };\n }\n }\n}\nexport interface Breakpoint {\n cond: DebugCondition;\n};\n\nexport interface EmuRecorder {\n frameRequested(): boolean;\n recordFrame(state: EmuState);\n}\n\n/////\n\nexport abstract class BasePlatform {\n recorder: EmuRecorder = null;\n debugSymbols: DebugSymbols;\n internalFiles: { [path: string]: FileData } = {};\n\n abstract loadState(state: EmuState): void;\n abstract saveState(): EmuState;\n abstract pause(): void;\n abstract resume(): void;\n abstract advance(novideo?: boolean): number;\n\n setRecorder(recorder: EmuRecorder): void {\n this.recorder = recorder;\n }\n updateRecorder() {\n // are we recording and do we need to save a frame?\n if (this.recorder && (this).isRunning() && this.recorder.frameRequested()) {\n this.recorder.recordFrame(this.saveState());\n }\n }\n inspect(sym: string): string {\n return inspectSymbol((this as any) as Platform, sym);\n }\n getDebugTree(): {} {\n var o: any = {};\n o.state = this.saveState();\n if (this.debugSymbols?.debuginfo) o.debuginfo = this.debugSymbols.debuginfo;\n return o;\n }\n readFile(path: string): FileData {\n return this.internalFiles[path];\n }\n writeFile(path: string, data: FileData): boolean {\n this.internalFiles[path] = data;\n return true;\n }\n}\n\nexport abstract class BaseDebugPlatform extends BasePlatform {\n onBreakpointHit: BreakpointCallback;\n debugCallback: DebugCondition;\n debugSavedState: EmuState = null;\n debugBreakState: EmuState = null;\n debugTargetClock: number = 0;\n debugClock: number = 0;\n breakpoints: BreakpointList = new BreakpointList();\n frameCount: number = 0;\n\n abstract getCPUState(): CpuState;\n\n // Some CPU cores save their program counter one byte before or after the\n // opcode they are on, so a raw PC lands on an operand or on the previous\n // instruction. debugPCDelta corrects it: getCPUState() and saveState()\n // report PC + delta, which is the address of the opcode, the same address\n // getPC() returns.\n debugPCDelta = 0;\n fixPC(c) { c.PC = (c.PC + this.debugPCDelta) & 0xffff; return c; }\n unfixPC(c) { c.PC = (c.PC - this.debugPCDelta) & 0xffff; return c; }\n\n // True if a breakpoint targets the effective PC (see EPC), which some\n // platforms use to fold a bank offset into the address. Those need the CPU\n // state to find, so they skip the cheap getPC() test in runEvalAtPC().\n debugUsesEPC(): boolean { return false; }\n\n setBreakpoint(id: string, cond: DebugCondition) {\n if (cond) {\n this.breakpoints.id2bp[id] = { cond: cond };\n this.restartDebugging();\n } else {\n this.clearBreakpoint(id);\n }\n }\n clearBreakpoint(id: string) {\n delete this.breakpoints.id2bp[id];\n }\n hasBreakpoint(id: string) {\n return this.breakpoints.id2bp[id] != null;\n }\n getDebugCallback(): DebugCondition {\n return this.breakpoints.getDebugCondition();\n }\n setupDebug(callback: BreakpointCallback): void {\n this.onBreakpointHit = callback;\n }\n clearDebug() {\n if (this.debugBreakState != null && this.debugSavedState != null) {\n this.loadState(this.debugSavedState);\n }\n this.debugSavedState = null;\n this.debugBreakState = null;\n this.debugTargetClock = -1;\n this.debugClock = 0;\n this.onBreakpointHit = null;\n this.clearBreakpoint('debug');\n this.frameCount = 0;\n }\n setDebugCondition(debugCond: DebugCondition) {\n this.setBreakpoint('debug', debugCond);\n }\n resetDebugging() {\n if (this.debugSavedState) {\n this.loadState(this.debugSavedState);\n } else {\n this.debugSavedState = this.saveState();\n }\n this.debugClock = 0;\n this.debugCallback = this.getDebugCallback();\n this.debugBreakState = null;\n }\n restartDebugging() {\n this.resetDebugging();\n this.resume();\n }\n preFrame() {\n // save state before frame, to record any inputs that happened pre-frame\n if (this.debugCallback && !this.debugBreakState) {\n // save state every frame and rewind debug clocks\n this.debugSavedState = this.saveState();\n this.debugTargetClock -= this.debugClock;\n this.debugClock = 0;\n }\n }\n postFrame() {\n // reload debug state at end of frame after breakpoint\n if (this.debugCallback && this.debugBreakState) {\n this.loadState(this.debugBreakState);\n }\n this.frameCount++;\n }\n pollControls() {\n }\n nextFrame(novideo: boolean): number {\n this.pollControls();\n this.updateRecorder();\n this.preFrame();\n var steps = this.advance(novideo);\n this.postFrame();\n return steps;\n }\n // default debugging\n abstract getSP(): number;\n abstract getPC(): number;\n abstract isStable(): boolean;\n\n evalDebugCondition() {\n if (this.debugCallback && !this.debugBreakState) {\n this.debugCallback();\n }\n }\n wasBreakpointHit(): boolean {\n return this.debugBreakState != null;\n }\n breakpointHit(targetClock: number, reason?: string) {\n console.log(this.debugTargetClock, targetClock, this.debugClock, this.isStable());\n this.debugTargetClock = targetClock;\n this.debugBreakState = this.saveState();\n console.log(\"Breakpoint at clk\", this.debugClock, \"PC\", this.debugBreakState.c.PC.toString(16));\n this.pause();\n if (this.onBreakpointHit) {\n this.onBreakpointHit(this.debugBreakState, reason);\n }\n }\n haltAndCatchFire(reason: string) {\n this.breakpointHit(this.debugClock, reason);\n }\n runEval(evalfunc: DebugEvalCondition) {\n this.setDebugCondition(() => {\n if (++this.debugClock >= this.debugTargetClock && this.isStable()) {\n var cpuState = this.getCPUState();\n if (evalfunc(cpuState)) {\n this.breakpointHit(this.debugClock);\n return true;\n } else {\n return false;\n }\n }\n });\n }\n runToPC(pc: number[]) {\n this.runEvalAtPC(new Map(pc.map((a) => [a, null])));\n }\n // Runs until a breakpoint is hit, which can be a whole frame away, so it\n // tests getPC() on its own rather than building a CPU state at every\n // instruction. The state is only wanted once an address matches, to run\n // that breakpoint's condition.\n runEvalAtPC(targets: Map) {\n this.debugTargetClock++;\n const useEPC = this.debugUsesEPC();\n this.setDebugCondition(() => {\n if (++this.debugClock < this.debugTargetClock || !this.isStable()) return;\n if (!useEPC && !targets.has(this.getPC())) return;\n const c = this.getCPUState();\n const epc = c.EPC != null ? c.EPC : c.PC;\n if (!targets.has(epc)) return;\n const cond = targets.get(epc);\n if (cond && !cond(c)) return;\n this.breakpointHit(this.debugClock);\n return true;\n });\n }\n runUntilReturn() {\n var SP0 = this.getSP();\n this.runEval((c: CpuState): boolean => {\n return c.SP > SP0; // TODO: check for RTS/RET opcode\n });\n }\n // step over one CPU instruction; if it is a subroutine call,\n // run at full speed until the instruction following it\n stepOver() {\n var p = (this);\n var pc = this.getPC();\n var d = null;\n var readfn = p.readAddress?.bind(p);\n if (readfn && p.disassemble) {\n d = p.disassemble(pc, readfn);\n }\n if (d && d.iscall) {\n // run until we return from the subroutine call\n var nextPC = pc + d.nbytes;\n this.debugTargetClock++;\n this.runEval((c) => c.PC == nextPC);\n } else {\n // not a call, just single-step\n this.step();\n }\n }\n hasCustomStepOver() { return false; }\n runToFrameClock(clock: number): void {\n this.restartDebugging();\n this.debugTargetClock = clock;\n this.runEval((): boolean => { return true; });\n }\n step() {\n this.runToFrameClock(this.debugClock + 1);\n }\n stepBack() {\n var prevState;\n var prevClock;\n var clock0 = this.debugTargetClock;\n this.restartDebugging();\n this.debugTargetClock = clock0 - 25; // TODO: depends on CPU\n this.runEval((c: CpuState): boolean => {\n if (this.debugClock < clock0) {\n prevState = this.saveState();\n prevClock = this.debugClock;\n return false;\n } else {\n if (prevState) {\n this.loadState(prevState);\n this.debugClock = prevClock;\n }\n return true;\n }\n });\n }\n runToVsync() {\n this.restartDebugging();\n var frame0 = this.frameCount;\n this.runEval((): boolean => {\n return this.frameCount > frame0;\n });\n }\n}\n\nexport function inspectSymbol(platform: Platform, sym: string): string {\n if (!platform.debugSymbols) return;\n var symmap = platform.debugSymbols.symbolmap;\n var addr2sym = platform.debugSymbols.addr2symbol;\n if (!symmap || !platform.readAddress) return null;\n var addr = symmap[\"_\" + sym] || symmap[sym]; // look for C or asm symbol\n if (!(typeof addr == 'number')) return null;\n var b = platform.readAddress(addr);\n // don't show 2 bytes if there's a symbol at the next address\n if (addr2sym && addr2sym[addr + 1] != null) {\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" (\" + b + \" decimal)\"; // unsigned\n } else {\n let b2 = platform.readAddress(addr + 1);\n let w = b | (b2 << 8);\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" $\" + hex(b2, 2) + \" (\" + ((w << 16) >> 16) + \" decimal)\"; // signed\n }\n}\n\n////// 6502\n\n// TODO: can merge w/ Z80?\nexport abstract class Base6502Platform extends BaseDebugPlatform {\n\n // the MOS6502 keeps its PC one byte past the opcode it fetched\n debugPCDelta = -1;\n getSP() { return this.getCPUState().SP };\n getPC() { return this.getCPUState().PC };\n isStable() { return !this.getCPUState()['T']; }\n abstract readAddress(addr: number): number;\n\n newCPU(membus: MemoryBus) {\n var cpu = new _MOS6502();\n cpu.connectBus(membus);\n return cpu;\n }\n\n getOpcodeMetadata(opcode, offset) {\n return getOpcodeMetadata_6502(opcode, offset);\n }\n\n getOriginPC(): number {\n return (this.readAddress(0xfffc) | (this.readAddress(0xfffd) << 8)) & 0xffff;\n }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getToolForFilename = getToolForFilename_6502;\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; };\n\n getDebugCategories() {\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n }\n }\n}\n\nexport function cpuStateToLongString_6502(c): string {\n function decodeFlags(c) {\n var s = \"\";\n s += c.N ? \" N\" : \" -\";\n s += c.V ? \" V\" : \" -\";\n s += c.D ? \" D\" : \" -\";\n s += c.Z ? \" Z\" : \" -\";\n s += c.C ? \" C\" : \" -\";\n s += c.I ? \" I\" : \" -\";\n return s;\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c) + \"\\n\"\n + \" A \" + hex(c.A) + \" \" + (c.R ? \"\" : \"BUSY\") + \"\\n\"\n + \" X \" + hex(c.X) + \"\\n\"\n + \" Y \" + hex(c.Y) + \" \" + \"SP \" + hex(c.SP) + \"\\n\";\n}\n\nvar OPMETA_6502 = {\n cycletime: [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4, 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0, 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4, 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 3, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ],\n extracycles: [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ],\n insnlengths: [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3, 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ],\n validinsns: [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ],\n}\n\nexport function getOpcodeMetadata_6502(opcode, address) {\n // TODO: more intelligent maximum cycles\n // TODO: must always be new object, b/c we might modify it\n return {\n opcode: opcode,\n minCycles: OPMETA_6502.cycletime[opcode],\n maxCycles: OPMETA_6502.cycletime[opcode] + OPMETA_6502.extracycles[opcode],\n insnlength: OPMETA_6502.insnlengths[opcode]\n };\n}\n\n////// Z80\n\nexport function cpuStateToLongString_Z80(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"S\", \"Z\", , \"H\", , \"V\", \"N\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF) + \" \" + (c.iff1 ? \"I\" : \"-\") + (c.iff2 ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \" IR \" + hex(c.IR, 4) + \"\\n\"\n + \"IX \" + hex(c.IX, 4) + \" IY \" + hex(c.IY, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport function cpuStateToLongString_SM83(c) {\n function decodeFlags(af) {\n return printFlags(af, [\"Z\", \"N\", \"H\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF >> 4) + \" \" + (c.ime ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport abstract class BaseZ80Platform extends BaseDebugPlatform {\n\n _cpu;\n waitCycles: number = 0;\n\n newCPU(membus: MemoryBus, iobus: MemoryBus) {\n this._cpu = new Z80();\n this._cpu.connectMemoryBus(membus);\n this._cpu.connectIOBus(iobus);\n return this._cpu;\n }\n\n getPC() { return this._cpu.getPC(); }\n getSP() { return this._cpu.getSP(); }\n isStable() { return true; }\n\n // TODO: refactor other parts into here\n runCPU(cpu, cycles: number): number {\n this._cpu = cpu; // TODO?\n this.waitCycles = 0; // TODO: needs to spill over betwenn calls\n if (this.wasBreakpointHit())\n return 0;\n var debugCond = this.getDebugCallback();\n var n = 0;\n this.waitCycles += cycles;\n while (this.waitCycles > 0) {\n if (debugCond && debugCond()) {\n debugCond = null;\n break;\n }\n var cyc = cpu.advanceInsn();\n n += cyc;\n this.waitCycles -= cyc;\n }\n return n;\n }\n\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; };\n // TODO: Z80 opcode metadata\n //this.getOpcodeMetadata = function() { }\n\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n console.log(sp, start, end);\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n}\n\n////// 6809\n\nexport function cpuStateToLongString_6809(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"E\", \"F\", \"H\", \"I\", \"N\", \"Z\", \"V\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.CC) + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"DP \" + hex(c.DP, 2) + \"\\n\"\n + \" A \" + hex(c.A, 2) + \"\\n\"\n + \" B \" + hex(c.B, 2) + \"\\n\"\n + \" X \" + hex(c.X, 4) + \"\\n\"\n + \" Y \" + hex(c.Y, 4) + \"\\n\"\n + \" U \" + hex(c.U, 4) + \"\\n\"\n ;\n}\n\nexport abstract class Base6809Platform extends BaseZ80Platform {\n\n newCPU(membus: MemoryBus) {\n var cpu = Object.create(CPU6809());\n cpu.init(membus.write, membus.read, 0);\n return cpu;\n }\n\n cpuStateToLongString(c: CpuState) {\n return cpuStateToLongString_6809(c);\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; };\n //this.getOpcodeMetadata = function() { }\n getToolForFilename = getToolForFilename_6809;\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n default: return super.getDebugInfo(category, state);\n }\n }\n}\n\n\n//TODO: how to get stack_end?\nexport function dumpStackToString(platform: Platform, mem: Uint8Array | number[], start: number, end: number, sp: number, jsrop: number, bigendian?: boolean): string {\n var s = \"\";\n var nraw = 0;\n //s = dumpRAM(mem.slice(start,start+end+1), start, end-start+1);\n function read(addr) {\n if (addr < mem.length) return mem[addr];\n else return platform.readAddress(addr);\n }\n while (sp < end) {\n sp++;\n // see if there's a JSR on the stack here\n // TODO: make work with roms and memory maps\n var addr = read(sp) + read(sp + 1) * 256;\n if (bigendian) { addr = ((addr & 0xff) << 8) | ((addr & 0xff00) >> 8) }\n var jsrofs = jsrop == 0x20 ? -2 : -3; // 6502 vs Z80\n var opcode = read(addr + jsrofs); // might be out of bounds\n if (opcode == jsrop) { // JSR\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(addr, 4) + \" \" + lookupSymbol(platform, addr, true);\n sp++;\n nraw = 0;\n } else {\n if (nraw == 0)\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(read(sp)) + \" \";\n if (++nraw == 8) nraw = 0;\n }\n }\n return s + \"\\n\";\n}\n\n// TODO: slow, funky, uses global\nexport function lookupSymbol(platform: Platform, addr: number, extra: boolean) {\n var start = addr;\n var addr2symbol = platform.debugSymbols && platform.debugSymbols.addr2symbol;\n while (addr2symbol && addr >= 0) {\n var sym = addr2symbol[addr];\n if (sym) { // return first symbol we find\n var sym = addr2symbol[addr];\n return extra ? (sym + \" + $\" + hex(start - addr)) : sym;\n }\n if (!extra) break;\n addr--;\n }\n return \"\";\n}\n\n/// new Machine platform adapters\n\nexport interface Machine extends Bus, Resettable, FrameBased, AcceptsROM, HasCPU, SavesState, SavesInputState {\n}\n\nexport function hasVideo(arg: any): arg is VideoSource {\n return typeof arg.connectVideo === 'function';\n}\nexport function hasAudio(arg: any): arg is SampledAudioSource {\n return typeof arg.connectAudio === 'function';\n}\nexport function hasKeyInput(arg: any): arg is AcceptsKeyInput {\n return typeof arg.setKeyInput === 'function';\n}\nexport function hasJoyInput(arg: any): arg is AcceptsJoyInput {\n return typeof arg.setJoyInput === 'function';\n}\nexport function hasPaddleInput(arg: any): arg is AcceptsPaddleInput {\n return typeof arg.setPaddleInput === 'function';\n}\nexport function isRaster(arg: any): arg is RasterFrameBased {\n return typeof arg.getRasterY === 'function';\n}\nexport function hasProbe(arg: any): arg is Probeable {\n return typeof arg.connectProbe == 'function';\n}\nexport function hasBIOS(arg: any): arg is AcceptsBIOS {\n return typeof arg.loadBIOS == 'function';\n}\nexport function hasSerialIO(arg: any): arg is HasSerialIO {\n return typeof arg.connectSerialIO === 'function';\n}\n\nexport abstract class BaseMachinePlatform extends BaseDebugPlatform implements Platform {\n machine: T;\n mainElement: HTMLElement;\n timer: AnimationTimer;\n video: RasterVideo;\n audio: SampledAudio;\n poller: ControllerPoller;\n serialIOInterface: SerialIOInterface;\n serialVisualizer: SerialIOVisualizer;\n\n probeRecorder: ProbeRecorder;\n startProbing;\n stopProbing;\n\n abstract newMachine(): T;\n abstract getToolForFilename(s: string): string;\n abstract getDefaultExtensions(): string[];\n abstract getPresets(): Preset[];\n\n constructor(mainElement: HTMLElement) {\n super();\n this.mainElement = mainElement;\n }\n\n reset() {\n this.machine.reset();\n if (this.serialVisualizer != null) this.serialVisualizer.reset();\n }\n // The machine's CPU state is the core's own, so debugPCDelta corrects its PC\n // on the way out and restores it on the way in. The machine's cpu.getPC()\n // already names the opcode, so getPC() is left alone.\n loadState(s) {\n if (!this.debugPCDelta || !s.c) return this.machine.loadState(s);\n this.unfixPC(s.c);\n try { this.machine.loadState(s); } finally { this.fixPC(s.c); }\n }\n saveState() {\n const s = this.machine.saveState();\n if (this.debugPCDelta && s.c) this.fixPC(s.c);\n return s;\n }\n getSP() { return this.machine.cpu.getSP(); }\n getPC() { return this.machine.cpu.getPC(); }\n isStable() { return this.machine.cpu.isStable(); }\n getCPUState() { return this.fixPC(this.machine.cpu.saveState()); }\n loadControlsState(s) { this.machine.loadControlsState(s); }\n saveControlsState() { return this.machine.saveControlsState(); }\n\n async start() {\n this.machine = this.newMachine();\n const m = this.machine;\n // block on WASM loading\n if (m instanceof BaseWASMMachine) {\n await m.loadWASM();\n }\n var videoFrequency;\n if (hasVideo(m)) {\n var vp = m.getVideoParams();\n this.video = new RasterVideo(this.mainElement, vp.width, vp.height,\n {\n overscan: !!vp.overscan,\n rotate: vp.rotate | 0,\n aspect: vp.aspect\n });\n this.video.create();\n m.connectVideo(this.video.getFrameData());\n // TODO: support keyboard w/o video?\n if (hasKeyInput(m)) {\n this.video.setKeyboardEvents(m.setKeyInput.bind(m));\n this.poller = new ControllerPoller(m.setKeyInput.bind(m));\n }\n videoFrequency = vp.videoFrequency;\n }\n this.timer = new AnimationTimer(videoFrequency || 60, this.nextFrame.bind(this));\n if (hasAudio(m)) {\n var ap = m.getAudioParams();\n this.audio = new SampledAudio(ap.sampleRate);\n this.audio.start();\n m.connectAudio(this.audio);\n }\n if (hasPaddleInput(m)) {\n this.video.setupMouseEvents();\n }\n if (hasProbe(m)) {\n this.probeRecorder = new ProbeRecorder(m);\n this.startProbing = () => {\n m.connectProbe(this.probeRecorder);\n return this.probeRecorder;\n };\n this.stopProbing = () => {\n m.connectProbe(null);\n };\n }\n if (hasBIOS(m)) {\n this.loadBIOS = (title, data) => {\n m.loadBIOS(data, title);\n };\n }\n if (hasSerialIO(m)) {\n if (this.serialIOInterface == null) {\n this.serialVisualizer = new SerialIOVisualizer(this.mainElement, m);\n } else {\n m.connectSerialIO(this.serialIOInterface);\n }\n }\n }\n\n loadROM(title, data, origin?: number) {\n this.machine.loadROM(data, title, origin);\n this.reset();\n }\n\n loadBIOS: (title, data) => void; // only set if hasBIOS() is true\n\n pollControls() {\n this.poller && this.poller.poll();\n if (hasPaddleInput(this.machine)) {\n this.machine.setPaddleInput(0, this.video.paddle_x);\n this.machine.setPaddleInput(1, this.video.paddle_y);\n if (this.machine.setPaddleButton && this.video.paddle_buttons != null) {\n this.machine.setPaddleButton(0, this.video.paddle_buttons[0]);\n this.machine.setPaddleButton(1, this.video.paddle_buttons[1]);\n this.machine.setPaddleButton(2, this.video.paddle_buttons[2]);\n }\n }\n // TODO: put into interface\n if (this.machine['pollControls']) {\n this.machine['pollControls']();\n }\n }\n\n advance(novideo: boolean) {\n let trap = this.getDebugCallback();\n try {\n var steps = this.machine.advanceFrame(trap);\n return steps;\n } finally {\n // in case EmuHalt is thrown...\n if (!novideo && this.video) {\n this.video.updateFrame();\n this.updateVideoDebugger();\n }\n if (!novideo && this.serialVisualizer) {\n this.serialVisualizer.refresh();\n }\n }\n }\n\n updateVideoDebugger() {\n if (!this.isRunning() && isRaster(this.machine) && this.machine.getRasterCanvasPosition) {\n const { x, y } = this.machine.getRasterCanvasPosition();\n if (x >= 0 || y >= 0) {\n const ctx = this.video?.getContext();\n if (ctx) {\n drawCrosshair(ctx, x, y, 1);\n }\n }\n }\n }\n\n advanceFrameClock(trap, step) {\n if (!(step > 0)) return;\n if (this.machine instanceof BaseWASMMachine) {\n return this.machine.advanceFrameClock(trap, step);\n } else {\n return this.machine.advanceFrame(() => {\n return --step <= 0;\n });\n }\n }\n\n isRunning() {\n return this.timer && this.timer.isRunning();\n }\n\n resume() {\n this.timer.start();\n this.audio && this.audio.start();\n this.poller && this.poller.start();\n }\n\n pause() {\n this.timer.stop();\n this.audio && this.audio.stop();\n this.poller && this.poller.stop();\n }\n\n // so probe views stick around TODO: must be a better way?\n runToVsync() {\n this.restartDebugging();\n var flag = false;\n this.runEval((): boolean => {\n if (this.getRasterScanline() > 0) flag = true;\n else return flag;\n });\n }\n\n // TODO: reset target clock counter\n getRasterScanline() {\n return isRaster(this.machine) && this.machine.getRasterY ? this.machine.getRasterY() : -1;\n }\n getRasterLineClock() {\n return isRaster(this.machine) && this.machine.getRasterX ? this.machine.getRasterX() : -1;\n }\n\n readAddress(addr: number): number {\n return this.machine.read(addr);\n }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n }\n getDebugInfo(category: string, state: EmuState): string {\n return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n}\n\n// TODO: move debug info into CPU?\n\nexport abstract class Base6502MachinePlatform extends BaseMachinePlatform {\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getToolForFilename(fn) { return getToolForFilename_6502(fn); }\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n}\n\nexport abstract class BaseZ80MachinePlatform extends BaseMachinePlatform {\n\n //getOpcodeMetadata = getOpcodeMetadata_z80;\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n\n}\n\nexport abstract class Base6809MachinePlatform extends BaseMachinePlatform {\n\n getToolForFilename = getToolForFilename_6809;\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0x17, true);\n }\n default: return super.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n}\n\n///\n\nclass SerialIOVisualizer {\n\n textarea: HTMLTextAreaElement;\n //vlist: VirtualTextScroller;\n device: HasSerialIO;\n lastOutCount = -1;\n lastInCount = -1;\n\n constructor(parentElement: HTMLElement, device: HasSerialIO) {\n this.device = device;\n this.textarea = document.createElement(\"textarea\");\n this.textarea.classList.add('transcript');\n this.textarea.classList.add('transcript-style-2');\n this.textarea.style.display = 'none';\n parentElement.appendChild(this.textarea);\n /*\n this.vlist = new VirtualTextScroller(parentElement);\n this.vlist.create(parentElement, 1024, this.getMemoryLineAt.bind(this));\n this.vlist.maindiv.style.height = '8em';\n this.vlist.maindiv.style.overflow = 'clip';\n */\n }\n reset() {\n this.lastOutCount = 0;\n this.lastInCount = 0;\n this.textarea.style.display = 'none';\n }\n refresh() {\n var lastop = '';\n if (this.device.serialOut.length != this.lastOutCount) {\n var s = '';\n for (var ev of this.device.serialOut) {\n if (lastop != ev.op) {\n if (s != '') s += '\\n';\n if (ev.op === 'read') s += '<< ';\n else if (ev.op === 'write') s += '>> ';\n lastop = ev.op;\n }\n if (ev.value == 10) { s += '\\u21b5'; lastop = ''; }\n else { s += byteToASCII(ev.value); }\n }\n this.textarea.value = s;\n this.lastOutCount = this.device.serialOut.length;\n this.textarea.style.display = 'block';\n }\n }\n}\n"], - "mappings": "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EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,CAChE,EAEIE,EAAkB,CAClB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAA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,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,EACzhCC,GAAQ,IAAI,WAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,E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EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,EAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,EAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAA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,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI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AAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EA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AAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,WAAY,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,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", + "sourcesContent": ["\nimport { hex } from \"../util\";\n\nexport var OPS_6502 = [\n {mn:\"BRK\",am:\"\",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:\"SI\"}, // 0\n {mn:\"ORA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 2\n {mn:\"SLO\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 4\n {mn:\"ORA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 5\n {mn:\"ASL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6\n {mn:\"SLO\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 7\n {mn:\"PHP\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 8\n {mn:\"ORA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 9\n {mn:\"ASL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // b\n {mn:\"NOP\",am:\"AAAA\",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // c\n {mn:\"ORA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // d\n {mn:\"ASL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // e\n {mn:\"SLO\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // f\n {mn:\"BPL\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 10\n {mn:\"ORA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 11\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 12\n {mn:\"SLO\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 13\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 14\n {mn:\"ORA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 15\n {mn:\"ASL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 16\n {mn:\"SLO\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 17\n {mn:\"CLC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 18\n {mn:\"ORA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 19\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 1a\n {mn:\"SLO\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 1c\n {mn:\"ORA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 1d\n {mn:\"ASL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 1e\n {mn:\"SLO\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1f\n {mn:\"JSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:\"S\"}, // 20\n {mn:\"AND\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 21\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 22\n {mn:\"RLA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 23\n {mn:\"BIT\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 24\n {mn:\"AND\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 25\n {mn:\"ROL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 26\n {mn:\"RLA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 27\n {mn:\"PLP\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SCZIDVN\"}, // 28\n {mn:\"AND\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 29\n {mn:\"ROL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2b\n {mn:\"BIT\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 2c\n {mn:\"AND\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 2d\n {mn:\"ROL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 2e\n {mn:\"RLA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 2f\n {mn:\"BMI\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 30\n {mn:\"AND\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 31\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 32\n {mn:\"RLA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 33\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 34\n {mn:\"AND\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 35\n {mn:\"ROL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 36\n {mn:\"RLA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 37\n {mn:\"SEC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 38\n {mn:\"AND\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 39\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 3a\n {mn:\"RLA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 3c\n {mn:\"AND\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 3d\n {mn:\"ROL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 3e\n {mn:\"RLA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3f\n {mn:\"RTI\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"SCZIDVN\"}, // 40\n {mn:\"EOR\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 41\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 42\n {mn:\"SRE\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 43\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 44\n {mn:\"EOR\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 45\n {mn:\"LSR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 46\n {mn:\"SRE\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 47\n {mn:\"PHA\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 48\n {mn:\"EOR\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 49\n {mn:\"LSR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4a\n {mn:\"ASR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4b\n {mn:\"JMP\",am:\"AAAA\",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 4c\n {mn:\"EOR\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 4d\n {mn:\"LSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 4e\n {mn:\"SRE\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 4f\n {mn:\"BVC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 50\n {mn:\"EOR\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 51\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 52\n {mn:\"SRE\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 53\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 54\n {mn:\"EOR\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 55\n {mn:\"LSR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 56\n {mn:\"SRE\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 57\n {mn:\"CLI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 58\n {mn:\"EOR\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 59\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 5a\n {mn:\"SRE\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 5c\n {mn:\"EOR\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 5d\n {mn:\"LSR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 5e\n {mn:\"SRE\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5f\n {mn:\"RTS\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"S\"}, // 60\n {mn:\"ADC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 61\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 62\n {mn:\"RRA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 63\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 64\n {mn:\"ADC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 65\n {mn:\"ROR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 66\n {mn:\"RRA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 67\n {mn:\"PLA\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SAZN\"}, // 68\n {mn:\"ADC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 69\n {mn:\"ROR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 6a\n {mn:\"ARR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6b\n {mn:\"JMP\",am:\"(AAAA)\",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:\"\"}, // 6c\n {mn:\"ADC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6d\n {mn:\"ROR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6e\n {mn:\"RRA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 6f\n {mn:\"BVS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 70\n {mn:\"ADC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 71\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 72\n {mn:\"RRA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 73\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 74\n {mn:\"ADC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 75\n {mn:\"ROR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 76\n {mn:\"RRA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 77\n {mn:\"SEI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 78\n {mn:\"ADC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 79\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 7a\n {mn:\"RRA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 7c\n {mn:\"ADC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 7d\n {mn:\"ROR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 7e\n {mn:\"RRA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7f\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 80\n {mn:\"STA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 81\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 82\n {mn:\"SAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 83\n {mn:\"STY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 84\n {mn:\"STA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 85\n {mn:\"STX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 86\n {mn:\"SAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 87\n {mn:\"DEY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // 88\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 89\n {mn:\"TXA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8a\n {mn:\"ANE\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8b\n {mn:\"STY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8c\n {mn:\"STA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8d\n {mn:\"STX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8e\n {mn:\"SAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8f\n {mn:\"BCC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 90\n {mn:\"STA\",am:\"(aa),y\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 91\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 92\n {mn:\"SHA\",am:\"(aa),y\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 93\n {mn:\"STY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 94\n {mn:\"STA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 95\n {mn:\"STX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 96\n {mn:\"SAX\",am:\"aa,y\",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:\"\"}, // 97\n {mn:\"TYA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 98\n {mn:\"STA\",am:\"AAAA,y\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 99\n {mn:\"TXS\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"S\"}, // 9a\n {mn:\"SHS\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"S\"}, // 9b\n {mn:\"SHY\",am:\"AAAA,x\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9c\n {mn:\"STA\",am:\"AAAA,x\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9d\n {mn:\"SHX\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9e\n {mn:\"SHA\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9f\n {mn:\"LDY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a0\n {mn:\"LDA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // a1\n {mn:\"LDX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // a2\n {mn:\"LAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a3\n {mn:\"LDY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"YZN\"}, // a4\n {mn:\"LDA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // a5\n {mn:\"LDX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"XZN\"}, // a6\n {mn:\"LAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a7\n {mn:\"TAY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a8\n {mn:\"LDA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // a9\n {mn:\"TAX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // aa\n {mn:\"LXA\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AXZN\"}, // ab\n {mn:\"LDY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // ac\n {mn:\"LDA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // ad\n {mn:\"LDX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // ae\n {mn:\"LAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // af\n {mn:\"BCS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // b0\n {mn:\"LDA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // b1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // b2\n {mn:\"LAX\",am:\"(aa),y\",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:\"AXZN\"}, // b3\n {mn:\"LDY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // b4\n {mn:\"LDA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // b5\n {mn:\"LDX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // b6\n {mn:\"LAX\",am:\"aa,y\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // b7\n {mn:\"CLV\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"V\"}, // b8\n {mn:\"LDA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // b9\n {mn:\"TSX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ba\n {mn:\"LAS\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"SAXZN\"}, // bb\n {mn:\"LDY\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"YZN\"}, // bc\n {mn:\"LDA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // bd\n {mn:\"LDX\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"XZN\"}, // be\n {mn:\"LAX\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"AXZN\"}, // bf\n {mn:\"CPY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c0\n {mn:\"CMP\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"CZN\"}, // c1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // c2\n {mn:\"DCP\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // c3\n {mn:\"CPY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c4\n {mn:\"CMP\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c5\n {mn:\"DEC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // c6\n {mn:\"DCP\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // c7\n {mn:\"INY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // c8\n {mn:\"CMP\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c9\n {mn:\"DEX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ca\n {mn:\"SBX\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"XCZN\"}, // cb\n {mn:\"CPY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cc\n {mn:\"CMP\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cd\n {mn:\"DEC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ce\n {mn:\"DCP\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // cf\n {mn:\"BNE\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // d0\n {mn:\"CMP\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"CZN\"}, // d1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // d2\n {mn:\"DCP\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // d3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // d4\n {mn:\"CMP\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // d5\n {mn:\"DEC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // d6\n {mn:\"DCP\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // d7\n {mn:\"CLD\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // d8\n {mn:\"CMP\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // d9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // da\n {mn:\"DCP\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // db\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // dc\n {mn:\"CMP\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // dd\n {mn:\"DEC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // de\n {mn:\"DCP\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // df\n {mn:\"CPX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // e0\n {mn:\"SBC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // e2\n {mn:\"ISB\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e3\n {mn:\"CPX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // e4\n {mn:\"SBC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e5\n {mn:\"INC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // e6\n {mn:\"ISB\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e7\n {mn:\"INX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // e8\n {mn:\"SBC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e9\n {mn:\"NOP\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // ea\n {mn:\"SBC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // eb\n {mn:\"CPX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // ec\n {mn:\"SBC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // ed\n {mn:\"INC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ee\n {mn:\"ISB\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ef\n {mn:\"BEQ\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // f0\n {mn:\"SBC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // f2\n {mn:\"ISB\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // f4\n {mn:\"SBC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // f5\n {mn:\"INC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // f6\n {mn:\"ISB\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f7\n {mn:\"SED\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // f8\n {mn:\"SBC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // fa\n {mn:\"ISB\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // fb\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // fc\n {mn:\"SBC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // fd\n {mn:\"INC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // fe\n {mn:\"ISB\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ff\n];\n\nexport function disassemble6502(pc:number, b0:number, b1:number, b2:number) : {line:string, nbytes:number, isaddr:boolean, iscall?:boolean} {\n\n var op = OPS_6502[b0];\n if (op == null) return {line:\"???\", nbytes:1, isaddr:false};\n var s = op.mn;\n var am = op.am;\n var isaddr = false;\n if (am == 'branch') {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = '$'+hex(offset, 4);\n isaddr = true;\n } else {\n am = am.replace('aa','$'+hex(b1, 2));\n am = am.replace('AAAA','$'+hex(b1+(b2<<8), 4));\n if (am.indexOf('#') < 0 && am.indexOf('$') >= 0)\n isaddr = true;\n }\n return {line:op.mn + \" \" + am, nbytes:op.nb, isaddr:isaddr, iscall:op.mn==\"JSR\"};\n};\n", "// Generated by CoffeeScript 1.9.3\n\nimport { CPU, Bus, InstructionBased, IOBusConnected, SavesState, Interruptable } from \"../devices\";\n\n///////////////////////////////////////////////////////////////////////////////\n/// @file Z80.js\n///\n/// @brief Emulator for the Zilog Z80 microprocessor\n///\n/// @author Matthew Howell\n///\n/// @remarks\n/// This module is a simple, straightforward instruction interpreter.\n/// There is no fancy dynamic recompilation or cycle-accurate emulation.\n/// The author believes that this should be sufficient for any emulator that\n/// would be feasible to write in JavaScript anyway.\n/// The code and the comments in this file assume that the reader is familiar\n/// with the Z80 architecture. If you're not, here are some references I use:\n/// http://clrhome.org/table/ - Z80 instruction set tables\n/// http://www.zilog.com/docs/z80/um0080.pdf - The official manual\n/// http://www.myquest.nl/z80undocumented/z80-documented-v0.91.pdf\n/// - The Undocumented Z80, Documented\n///\n/// @copyright (c) 2013 Matthew Howell\n/// This code is released under the MIT license,\n/// a copy of which is available in the associated README.md file,\n/// or at http://opensource.org/licenses/MIT\n///////////////////////////////////////////////////////////////////////////////\n\n///////////////////////////////////////////////////////////////////////////////\n/// We'll begin with the object constructor and the public API functions.\n///////////////////////////////////////////////////////////////////////////////\nfunction FastZ80(coreParameter)\n{\n // Obviously we'll be needing the core object's functions again.\n const core = coreParameter;\n \n // The argument to this constructor should be an object containing 4 functions:\n // mem_read(address) should return the byte at the given memory address,\n // mem_write(address, value) should write the given value to the given memory address,\n // io_read(port) should read a return a byte read from the given I/O port,\n // io_write(port, value) should write the given byte to the given I/O port.\n // If any of those functions is missing, this module cannot run.\n if (!core || (typeof core.mem_read !== \"function\") || (typeof core.mem_write !== \"function\") ||\n (typeof core.io_read !== \"function\") || (typeof core.io_write !== \"function\"))\n throw(\"Z80: Core object is missing required functions.\");\n \n // All right, let's initialize the registers.\n // First, the standard 8080 registers.\n let a = 0x00;\n let b = 0x00;\n let c = 0x00;\n let d = 0x00;\n let e = 0x00;\n let h = 0x00;\n let l = 0x00;\n // Now the special Z80 copies of the 8080 registers\n // (the ones used for the SWAP instruction and such).\n let a_prime = 0x00;\n let b_prime = 0x00;\n let c_prime = 0x00;\n let d_prime = 0x00;\n let e_prime = 0x00;\n let h_prime = 0x00;\n let l_prime = 0x00;\n // And now the Z80 index registers.\n let ix = 0x0000;\n let iy = 0x0000;\n // Then the \"utility\" registers: the interrupt vector,\n // the memory refresh, the stack pointer, and the program counter.\n let i = 0x00;\n let r = 0x00;\n let sp = 0x0000; // Changed from 0xdff0 - SP should be undefined at reset, program must initialize it\n let pc = 0x0000;\n // We don't keep an F register for the flags,\n // because most of the time we're only accessing a single flag,\n // so we optimize for that case and use utility functions\n // for the rarer occasions when we need to access the whole register.\n let flags = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n let flags_prime = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n // And finally we have the interrupt mode and flip-flop registers.\n let imode = 0;\n let iff1 = 0;\n let iff2 = 0;\n \n // These are all specific to this implementation, not Z80 features.\n // Keep track of whether we've had a HALT instruction called.\n let halted = false;\n // EI and DI wait one instruction before they take effect;\n // these flags tell us when we're in that wait state.\n let do_delayed_di = false;\n let do_delayed_ei = false;\n // This tracks the number of cycles spent in a single instruction run,\n // including processing any prefixes and handling interrupts.\n let cycle_counter = 0;\n \n function getState():Z80State {\n return {\n PC:pc,\n SP:sp,\n IX:ix,\n IY:iy,\n AF:(a<<8)+get_flags_register(),\n BC:(b<<8)+c,\n DE:(d<<8)+e,\n HL:(h<<8)+l,\n AF_:(a_prime<<8)+get_flags_prime(),\n BC_:(b_prime<<8)+c_prime,\n DE_:(d_prime<<8)+e_prime,\n HL_:(h_prime<<8)+l_prime,\n IR:(i<<8)+r,\n im : imode,\n iff1 : iff1,\n iff2 : iff2,\n halted : halted,\n do_delayed_di : do_delayed_di,\n do_delayed_ei : do_delayed_ei,\n cycle_counter : cycle_counter\n }; \n }\n\n function setState(state:Z80State) {\n pc = state.PC;\n sp = state.SP;\n ix = state.IX;\n iy = state.IY;\n a = (state.AF >> 8) & 0xff;\n set_flags_register(state.AF);\n b = (state.BC >> 8) & 0xff;\n c = state.BC & 0xff;\n d = (state.DE >> 8) & 0xff;\n e = state.DE & 0xff;\n h = (state.HL >> 8) & 0xff;\n l = state.HL & 0xff;\n a_prime = (state.AF_ >> 8) & 0xff;\n set_flags_prime(state.AF_);\n b_prime = (state.BC_ >> 8) & 0xff;\n c_prime = state.BC_ & 0xff;\n d_prime = (state.DE_ >> 8) & 0xff;\n e_prime = state.DE_ & 0xff;\n h_prime = (state.HL_ >> 8) & 0xff;\n l_prime = state.HL_ & 0xff;\n i = (state.IR >> 8) & 0xff;\n r = state.IR & 0xff;\n imode = state.im;\n iff1 = state.iff1;\n iff2 = state.iff2;\n halted = state.halted;\n do_delayed_di = state.do_delayed_di;\n do_delayed_ei = state.do_delayed_ei;\n cycle_counter = state.cycle_counter;\n }\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public reset\n///\n/// @brief Re-initialize the processor as if a reset or power on had occured\n///////////////////////////////////////////////////////////////////////////////\nlet reset = function()\n{\n // These registers are the ones that have predictable states\n // immediately following a power-on or a reset.\n // The others are left alone, because their states are unpredictable.\n sp = 0x0000;\n pc = 0x0000;\n a = 0x00;\n r = 0x00;\n set_flags_register(0);\n // Start up with interrupts disabled.\n imode = 0;\n iff1 = 0;\n iff2 = 0;\n // Don't start halted or in a delayed DI or EI.\n halted = false;\n do_delayed_di = false;\n do_delayed_ei = false;\n // Obviously we've not used any cycles yet.\n cycle_counter = 0;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public run_instruction\n///\n/// @brief Runs a single instruction\n///\n/// @return The number of T cycles the instruction took to run,\n/// plus any time that went into handling interrupts that fired\n/// while this instruction was executing\n///////////////////////////////////////////////////////////////////////////////\nlet run_instruction = function()\n{\n if (!halted)\n {\n // If the previous instruction was a DI or an EI,\n // we'll need to disable or enable interrupts\n // after whatever instruction we're about to run is finished.\n var doing_delayed_di = false, doing_delayed_ei = false;\n if (do_delayed_di)\n {\n do_delayed_di = false;\n doing_delayed_di = true;\n }\n else if (do_delayed_ei)\n {\n do_delayed_ei = false;\n doing_delayed_ei = true;\n }\n\n // R is incremented at the start of every instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n // Read the byte at the PC and run the instruction it encodes.\n var opcode = core.mem_read(pc);\n decode_instruction(opcode);\n pc = (pc + 1) & 0xffff;\n \n // Actually do the delayed interrupt disable/enable if we have one.\n if (doing_delayed_di)\n {\n iff1 = 0;\n iff2 = 0;\n //console.log(\"DI\",pc);\n }\n else if (doing_delayed_ei)\n {\n iff1 = 1;\n iff2 = 1;\n //console.log(\"EI\",pc);\n }\n \n // And finally clear out the cycle counter for the next instruction\n // before returning it to the emulator core.\n var retval = cycle_counter;\n cycle_counter = 0;\n return retval;\n }\n else\n {\n // While we're halted, claim that we spent a cycle doing nothing,\n // so that the rest of the emulator can still proceed.\n return 1;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public interrupt\n///\n/// @brief Simulates pulsing the processor's INT (or NMI) pin\n///\n/// @param non_maskable - true if this is a non-maskable interrupt\n/// @param data - the value to be placed on the data bus, if needed\n///////////////////////////////////////////////////////////////////////////////\nlet interrupt = function(non_maskable:boolean, data:number) : boolean\n{\n //console.log(non_maskable, data, iff1, iff2, do_delayed_ei, do_delayed_di);\n if (non_maskable)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n // Non-maskable interrupts are always handled the same way;\n // clear IFF1 and then do a CALL 0x0066.\n // Also, all interrupts reset the HALT state.\n halted = false;\n iff2 = iff1;\n iff1 = 0;\n push_word(pc);\n pc = 0x66;\n cycle_counter += 11;\n return true;\n }\n else if (iff1)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n halted = false;\n iff1 = 0;\n iff2 = 0;\n \n if (imode === 0)\n {\n // In the 8080-compatible interrupt mode,\n // decode the content of the data bus as an instruction and run it.\n pc = (pc - 1) & 0xffff; //SEH: so do_reset() pushes right value\n decode_instruction(data);\n pc = (pc + 1) & 0xffff; //SEH: so do_reset() pushes right value\n cycle_counter += 2;\n }\n else if (imode === 1)\n {\n // Mode 1 is always just RST 0x38.\n push_word(pc);\n pc = 0x38;\n cycle_counter += 13;\n }\n else if (imode === 2)\n {\n // Mode 2 uses the value on the data bus as in index\n // into the vector table pointer to by the I register.\n push_word(pc);\n // The Z80 manual says that this address must be 2-byte aligned,\n // but it doesn't appear that this is actually the case on the hardware,\n // so we don't attempt to enforce that here.\n var vector_address = ((i << 8) | data);\n pc = core.mem_read(vector_address) | \n (core.mem_read((vector_address + 1) & 0xffff) << 8);\n \n cycle_counter += 19;\n }\n //console.log(imode,data,pc);\n return true;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// The public API functions end here.\n///\n/// What begins here are just general utility functions, used variously.\n///////////////////////////////////////////////////////////////////////////////\nlet decode_instruction = function(opcode)\n{\n // The register-to-register loads and ALU instructions\n // are all so uniform that we can decode them directly\n // instead of going into the instruction array for them.\n // This function gets the operand for all of these instructions.\n var get_operand = function(opcode)\n {\n return ((opcode & 0x07) === 0) ? b :\n ((opcode & 0x07) === 1) ? c :\n ((opcode & 0x07) === 2) ? d :\n ((opcode & 0x07) === 3) ? e :\n ((opcode & 0x07) === 4) ? h :\n ((opcode & 0x07) === 5) ? l :\n ((opcode & 0x07) === 6) ? core.mem_read(l | (h << 8)) : a;\n };\n\n // Handle HALT right up front, because it fouls up our LD decoding\n // by falling where LD (HL), (HL) ought to be.\n if (opcode === 0x76)\n {\n halted = true;\n }\n else if ((opcode >= 0x40) && (opcode < 0x80))\n {\n // This entire range is all 8-bit register loads.\n // Get the operand and assign it to the correct destination.\n var operand = get_operand(opcode);\n \n if (((opcode & 0x38) >>> 3) === 0)\n b = operand;\n else if (((opcode & 0x38) >>> 3) === 1)\n c = operand;\n else if (((opcode & 0x38) >>> 3) === 2)\n d = operand;\n else if (((opcode & 0x38) >>> 3) === 3)\n e = operand;\n else if (((opcode & 0x38) >>> 3) === 4)\n h = operand;\n else if (((opcode & 0x38) >>> 3) === 5)\n l = operand;\n else if (((opcode & 0x38) >>> 3) === 6)\n core.mem_write(l | (h << 8), operand);\n else if (((opcode & 0x38) >>> 3) === 7)\n a = operand;\n }\n else if ((opcode >= 0x80) && (opcode < 0xc0))\n {\n // These are the 8-bit register ALU instructions.\n // We'll get the operand and then use this \"jump table\"\n // to call the correct utility function for the instruction.\n var operand = get_operand(opcode),\n op_array = [do_add, do_adc, do_sub, do_sbc,\n do_and, do_xor, do_or, do_cp];\n \n op_array[(opcode & 0x38) >>> 3]( operand);\n }\n else\n {\n // This is one of the less formulaic instructions;\n // we'll get the specific function for it from our array.\n var func = instructions[opcode];\n func();\n }\n \n // Update the cycle counter with however many cycles\n // the base instruction took.\n // If this was a prefixed instruction, then\n // the prefix handler has added its extra cycles already.\n cycle_counter += cycle_counts[opcode];\n};\n\nlet get_signed_offset_byte = function(value)\n{\n // This function requires some explanation.\n // We just use JavaScript Number variables for our registers,\n // not like a typed array or anything.\n // That means that, when we have a byte value that's supposed\n // to represent a signed offset, the value we actually see\n // isn't signed at all, it's just a small integer.\n // So, this function converts that byte into something JavaScript\n // will recognize as signed, so we can easily do arithmetic with it.\n // First, we clamp the value to a single byte, just in case.\n value &= 0xff;\n // We don't have to do anything if the value is positive.\n if (value & 0x80)\n {\n // But if the value is negative, we need to manually un-two's-compliment it.\n // I'm going to assume you can figure out what I meant by that,\n // because I don't know how else to explain it.\n // We could also just do value |= 0xffffff00, but I prefer\n // not caring how many bits are in the integer representation\n // of a JavaScript number in the currently running browser.\n value = -((0xff & ~value) + 1);\n }\n return value;\n};\n\nlet get_flags_register = function()\n{\n // We need the whole F register for some reason.\n // probably a PUSH AF instruction,\n // so make the F register out of our separate flags.\n return (flags.S << 7) |\n (flags.Z << 6) |\n (flags.Y << 5) |\n (flags.H << 4) |\n (flags.X << 3) |\n (flags.P << 2) |\n (flags.N << 1) |\n (flags.C);\n};\n\nlet get_flags_prime = function()\n{\n // This is the same as the above for the F' register.\n return (flags_prime.S << 7) |\n (flags_prime.Z << 6) |\n (flags_prime.Y << 5) |\n (flags_prime.H << 4) |\n (flags_prime.X << 3) |\n (flags_prime.P << 2) |\n (flags_prime.N << 1) |\n (flags_prime.C);\n};\n\nlet set_flags_register = function(operand)\n{\n // We need to set the F register, probably for a POP AF,\n // so break out the given value into our separate flags.\n flags.S = (operand & 0x80) >>> 7;\n flags.Z = (operand & 0x40) >>> 6;\n flags.Y = (operand & 0x20) >>> 5;\n flags.H = (operand & 0x10) >>> 4;\n flags.X = (operand & 0x08) >>> 3;\n flags.P = (operand & 0x04) >>> 2;\n flags.N = (operand & 0x02) >>> 1;\n flags.C = (operand & 0x01);\n};\n\nlet set_flags_prime = function(operand)\n{\n // Again, this is the same as the above for F'.\n flags_prime.S = (operand & 0x80) >>> 7;\n flags_prime.Z = (operand & 0x40) >>> 6;\n flags_prime.Y = (operand & 0x20) >>> 5;\n flags_prime.H = (operand & 0x10) >>> 4;\n flags_prime.X = (operand & 0x08) >>> 3;\n flags_prime.P = (operand & 0x04) >>> 2;\n flags_prime.N = (operand & 0x02) >>> 1;\n flags_prime.C = (operand & 0x01);\n};\n\nlet update_xy_flags = function(result)\n{\n // Most of the time, the undocumented flags\n // (sometimes called X and Y, or 3 and 5),\n // take their values from the corresponding bits\n // of the result of the instruction,\n // or from some other related value.\n // This is a utility function to set those flags based on those bits.\n flags.Y = (result & 0x20) >>> 5;\n flags.X = (result & 0x08) >>> 3;\n};\n\nlet get_parity = function(value)\n{\n // We could try to actually calculate the parity every time,\n // but why calculate what you can pre-calculate?\n var parity_bits = [\n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,\n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1\n ];\n return parity_bits[value];\n};\n\nlet push_word = function(operand)\n{\n // Pretty obvious what this function does; given a 16-bit value,\n // decrement the stack pointer, write the high byte to the new\n // stack pointer location, then repeat for the low byte.\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, (operand & 0xff00) >>> 8);\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, operand & 0x00ff);\n};\n\nlet pop_word = function()\n{\n // Again, not complicated; read a byte off the top of the stack,\n // increment the stack pointer, rinse and repeat.\n var retval = core.mem_read(sp) & 0xff;\n sp = (sp + 1) & 0xffff;\n retval |= core.mem_read(sp) << 8;\n sp = (sp + 1) & 0xffff;\n return retval;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// Now, the way most instructions work in this emulator is that they set up\n/// their operands according to their addressing mode, and then they call a\n/// utility function that handles all variations of that instruction.\n/// Those utility functions begin here.\n///////////////////////////////////////////////////////////////////////////////\nlet do_conditional_absolute_jump = function(condition)\n{\n // This function implements the JP [condition],nn instructions.\n if (condition)\n {\n // We're taking this jump, so write the new PC,\n // and then decrement the thing we just wrote,\n // because the instruction decoder increments the PC\n // unconditionally at the end of every instruction\n // and we need to counteract that so we end up at the jump target.\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n // We're not taking this jump, just move the PC past the operand.\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_relative_jump = function(condition)\n{\n // This function implements the JR [condition],n instructions.\n if (condition)\n {\n // We need a few more cycles to actually take the jump.\n cycle_counter += 5;\n // Calculate the offset specified by our operand.\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n // Add the offset to the PC, also skipping past this instruction.\n pc = (pc + offset + 1) & 0xffff;\n }\n else\n {\n // No jump happening, just skip the operand.\n pc = (pc + 1) & 0xffff;\n }\n};\n\nlet do_conditional_call = function(condition)\n{\n // This function is the CALL [condition],nn instructions.\n // If you've seen the previous functions, you know this drill.\n if (condition)\n {\n cycle_counter += 7;\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_return = function(condition)\n{\n if (condition)\n {\n cycle_counter += 6;\n pc = (pop_word() - 1) & 0xffff;\n }\n};\n\nlet do_reset = function(address)\n{\n // The RST [address] instructions go through here.\n push_word((pc + 1) & 0xffff);\n pc = (address - 1) & 0xffff;\n};\n\nlet do_add = function(operand)\n{\n // This is the ADD A, [operand] instructions.\n // We'll do the literal addition, which includes any overflow,\n // so that we can more easily figure out whether we had\n // an overflow or a carry and set the flags accordingly.\n var result = a + operand;\n \n // The great majority of the work for the arithmetic instructions\n // turns out to be setting the flags rather than the actual operation.\n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f)) & 0x10) ? 1 : 0;\n // An overflow has happened if the sign bits of the accumulator and the operand\n // don't match the sign bit of the result value.\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_adc = function(operand)\n{\n var result = a + operand + flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f) + flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sub = function(operand)\n{\n var result = a - operand;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f)) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sbc = function(operand)\n{\n var result = a - operand - flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f) - flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_cp = function(operand)\n{\n // A compare instruction is just a subtraction that doesn't save the value,\n // so we implement it as... a subtraction that doesn't save the value.\n var temp = a;\n do_sub(operand);\n a = temp;\n // Since this instruction has no \"result\" value, the undocumented flags\n // are set based on the operand instead.\n update_xy_flags(operand);\n};\n\nlet do_and = function(operand)\n{\n // The logic instructions are all pretty straightforward.\n a &= operand & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 1;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_or = function(operand)\n{\n a = (operand | a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_xor = function(operand)\n{\n a = (operand ^ a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_inc = function(operand)\n{\n var result = operand + 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x0f) ? 1 : 0;\n // It's a good deal easier to detect overflow for an increment/decrement.\n flags.P = (operand === 0x7f) ? 1 : 0;\n flags.N = 0;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_dec = function(operand)\n{\n var result = operand - 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x00) ? 1 : 0;\n flags.P = (operand === 0x80) ? 1 : 0;\n flags.N = 1;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_hl_add = function(operand)\n{\n // The HL arithmetic instructions are the same as the A ones,\n // just with twice as many bits happening.\n var hl = l | (h << 8), result = hl + operand;\n \n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n update_xy_flags(h);\n};\n\nlet do_hl_adc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl + operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) === (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_hl_sbc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl - operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) - (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) !== (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_in = function(port)\n{\n var result = core.io_read(port);\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = result ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(result) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_neg = function()\n{\n // This instruction is defined to not alter the register if it === 0x80.\n if (a !== 0x80)\n {\n // This is a signed operation, so convert A to a signed value.\n a = get_signed_offset_byte(a);\n \n a = (-a) & 0xff;\n }\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = (((-a) & 0x0f) > 0) ? 1 : 0;\n flags.P = (a === 0x80) ? 1 : 0;\n flags.N = 1;\n flags.C = a ? 1 : 0;\n update_xy_flags(a);\n};\n\nlet do_ldi = function()\n{\n // Copy the value that we're supposed to copy.\n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n // Increment DE and HL, and decrement BC.\n var result = (e | (d << 8)) + 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.H = 0;\n flags.P = (c || b) ? 1 : 0;\n flags.N = 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpi = function()\n{\n var temp_carry = flags.C;\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ini = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n flags.N = 1;\n};\n\nlet do_outi = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_ldd = function()\n{\n flags.N = 0;\n flags.H = 0;\n \n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n var result = (e | (d << 8)) - 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = (c || b) ? 1 : 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpd = function()\n{\n var temp_carry = flags.C\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ind = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n flags.N = 1;\n};\n\nlet do_outd = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_rlc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | flags.C) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_rrc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (flags.C << 7);\n \n flags.Z = !(operand & 0xff) ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand & 0xff;\n};\n\nlet do_rl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | temp) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_rr = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (temp << 7);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_sla = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = (operand << 1) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sra = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (operand & 0x80);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sll = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) & 0xff) | 1;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_srl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = (operand >>> 1) & 0x7f;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_ix_add = function(operand)\n{\n flags.N = 0;\n \n var result = ix + operand;\n \n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((ix & 0xfff) + (operand & 0xfff)) & 0x1000) ? 1 : 0;\n update_xy_flags((result & 0xff00) >>> 8);\n \n ix = result & 0xffff;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table contains the implementations for the instructions that weren't\n/// implemented directly in the decoder function (everything but the 8-bit\n/// register loads and the accumulator ALU instructions, in other words).\n/// Similar tables for the ED and DD/FD prefixes follow this one.\n///////////////////////////////////////////////////////////////////////////////\nlet instructions = [];\n\n// 0x00 : NOP\ninstructions[0x00] = function() { };\n// 0x01 : LD BC, nn\ninstructions[0x01] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x02 : LD (BC), A\ninstructions[0x02] = function()\n{\n core.mem_write(c | (b << 8), a);\n};\n// 0x03 : INC BC\ninstructions[0x03] = function()\n{\n var result = (c | (b << 8));\n result += 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x04 : INC B\ninstructions[0x04] = function()\n{\n b = do_inc(b);\n};\n// 0x05 : DEC B\ninstructions[0x05] = function()\n{\n b = do_dec(b);\n};\n// 0x06 : LD B, n\ninstructions[0x06] = function()\n{\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x07 : RLCA\ninstructions[0x07] = function()\n{\n // This instruction is implemented as a special case of the\n // more general Z80-specific RLC instruction.\n // Specifially, RLCA is a version of RLC A that affects fewer flags.\n // The same applies to RRCA, RLA, and RRA.\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rlc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x08 : EX AF, AF'\ninstructions[0x08] = function()\n{\n var temp = a;\n a = a_prime;\n a_prime = temp;\n \n temp = get_flags_register();\n set_flags_register(get_flags_prime());\n set_flags_prime(temp);\n};\n// 0x09 : ADD HL, BC\ninstructions[0x09] = function()\n{\n do_hl_add(c | (b << 8));\n};\n// 0x0a : LD A, (BC)\ninstructions[0x0a] = function()\n{\n a = core.mem_read(c | (b << 8));\n};\n// 0x0b : DEC BC\ninstructions[0x0b] = function()\n{\n var result = (c | (b << 8));\n result -= 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x0c : INC C\ninstructions[0x0c] = function()\n{\n c = do_inc(c);\n};\n// 0x0d : DEC C\ninstructions[0x0d] = function()\n{\n c = do_dec(c);\n};\n// 0x0e : LD C, n\ninstructions[0x0e] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n};\n// 0x0f : RRCA\ninstructions[0x0f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rrc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x10 : DJNZ nn\ninstructions[0x10] = function()\n{\n b = (b - 1) & 0xff;\n do_conditional_relative_jump(b !== 0);\n};\n// 0x11 : LD DE, nn\ninstructions[0x11] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x12 : LD (DE), A\ninstructions[0x12] = function()\n{\n core.mem_write(e | (d << 8), a);\n};\n// 0x13 : INC DE\ninstructions[0x13] = function()\n{\n var result = (e | (d << 8));\n result += 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x14 : INC D\ninstructions[0x14] = function()\n{\n d = do_inc(d);\n};\n// 0x15 : DEC D\ninstructions[0x15] = function()\n{\n d = do_dec(d);\n};\n// 0x16 : LD D, n\ninstructions[0x16] = function()\n{\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x17 : RLA\ninstructions[0x17] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rl(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x18 : JR n\ninstructions[0x18] = function()\n{\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n pc = (pc + offset + 1) & 0xffff;\n};\n// 0x19 : ADD HL, DE\ninstructions[0x19] = function()\n{\n do_hl_add(e | (d << 8));\n};\n// 0x1a : LD A, (DE)\ninstructions[0x1a] = function()\n{\n a = core.mem_read(e | (d << 8));\n};\n// 0x1b : DEC DE\ninstructions[0x1b] = function()\n{\n var result = (e | (d << 8));\n result -= 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x1c : INC E\ninstructions[0x1c] = function()\n{\n e = do_inc(e);\n};\n// 0x1d : DEC E\ninstructions[0x1d] = function()\n{\n e = do_dec(e);\n};\n// 0x1e : LD E, n\ninstructions[0x1e] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n};\n// 0x1f : RRA\ninstructions[0x1f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rr(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x20 : JR NZ, n\ninstructions[0x20] = function()\n{\n do_conditional_relative_jump(!flags.Z);\n};\n// 0x21 : LD HL, nn\ninstructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x22 : LD (nn), HL\ninstructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x23 : INC HL\ninstructions[0x23] = function()\n{\n var result = (l | (h << 8));\n result += 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x24 : INC H\ninstructions[0x24] = function()\n{\n h = do_inc(h);\n};\n// 0x25 : DEC H\ninstructions[0x25] = function()\n{\n h = do_dec(h);\n};\n// 0x26 : LD H, n\ninstructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x27 : DAA\ninstructions[0x27] = function()\n{\n var temp = a;\n if (!flags.N)\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp += 0x06;\n if (flags.C || (a > 0x99))\n temp += 0x60;\n }\n else\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp -= 0x06;\n if (flags.C || (a > 0x99))\n temp -= 0x60;\n }\n \n flags.S = (temp & 0x80) ? 1 : 0;\n flags.Z = !(temp & 0xff) ? 1 : 0;\n flags.H = ((a & 0x10) ^ (temp & 0x10)) ? 1 : 0;\n flags.P = get_parity(temp & 0xff);\n // DAA never clears the carry flag if it was already set,\n // but it is able to set the carry flag if it was clear.\n // Don't ask me, I don't know.\n // Note also that we check for a BCD carry, instead of the usual.\n flags.C = (flags.C || (a > 0x99)) ? 1 : 0;\n \n a = temp & 0xff;\n \n update_xy_flags(a);\n};\n// 0x28 : JR Z, n\ninstructions[0x28] = function()\n{\n do_conditional_relative_jump(!!flags.Z);\n};\n// 0x29 : ADD HL, HL\ninstructions[0x29] = function()\n{\n do_hl_add(l | (h << 8));\n};\n// 0x2a : LD HL, (nn)\ninstructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x2b : DEC HL\ninstructions[0x2b] = function()\n{\n var result = (l | (h << 8));\n result -= 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x2c : INC L\ninstructions[0x2c] = function()\n{\n l = do_inc(l);\n};\n// 0x2d : DEC L\ninstructions[0x2d] = function()\n{\n l = do_dec(l);\n};\n// 0x2e : LD L, n\ninstructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n};\n// 0x2f : CPL\ninstructions[0x2f] = function()\n{\n a = (~a) & 0xff;\n flags.N = 1;\n flags.H = 1;\n update_xy_flags(a);\n};\n// 0x30 : JR NC, n\ninstructions[0x30] = function()\n{\n do_conditional_relative_jump(!flags.C);\n};\n// 0x31 : LD SP, nn\ninstructions[0x31] = function()\n{\n sp = core.mem_read((pc + 1) & 0xffff) | \n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc + 2) & 0xffff;\n};\n// 0x32 : LD (nn), A\ninstructions[0x32] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, a);\n};\n// 0x33 : INC SP\ninstructions[0x33] = function()\n{\n sp = (sp + 1) & 0xffff;\n};\n// 0x34 : INC (HL)\ninstructions[0x34] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_inc(core.mem_read(address)));\n};\n// 0x35 : DEC (HL)\ninstructions[0x35] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_dec(core.mem_read(address)));\n};\n// 0x36 : LD (HL), n\ninstructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.mem_write(l | (h << 8), core.mem_read(pc));\n};\n// 0x37 : SCF\ninstructions[0x37] = function()\n{\n flags.N = 0;\n flags.H = 0;\n flags.C = 1;\n update_xy_flags(a);\n};\n// 0x38 : JR C, n\ninstructions[0x38] = function()\n{\n do_conditional_relative_jump(!!flags.C);\n};\n// 0x39 : ADD HL, SP\ninstructions[0x39] = function()\n{\n do_hl_add(sp);\n};\n// 0x3a : LD A, (nn)\ninstructions[0x3a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n a = core.mem_read(address);\n};\n// 0x3b : DEC SP\ninstructions[0x3b] = function()\n{\n sp = (sp - 1) & 0xffff;\n};\n// 0x3c : INC A\ninstructions[0x3c] = function()\n{\n a = do_inc(a);\n};\n// 0x3d : DEC A\ninstructions[0x3d] = function()\n{\n a = do_dec(a);\n};\n// 0x3e : LD A, n\ninstructions[0x3e] = function()\n{\n a = core.mem_read((pc + 1) & 0xffff);\n pc = (pc + 1) & 0xffff;\n};\n// 0x3f : CCF\ninstructions[0x3f] = function()\n{\n flags.N = 0;\n flags.H = flags.C;\n flags.C = flags.C ? 0 : 1;\n update_xy_flags(a);\n};\n// 0xc0 : RET NZ\ninstructions[0xc0] = function()\n{\n do_conditional_return(!flags.Z);\n};\n// 0xc1 : POP BC\ninstructions[0xc1] = function()\n{\n var result = pop_word();\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0xc2 : JP NZ, nn\ninstructions[0xc2] = function()\n{\n do_conditional_absolute_jump(!flags.Z);\n};\n// 0xc3 : JP nn\ninstructions[0xc3] = function()\n{\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xc4 : CALL NZ, nn\ninstructions[0xc4] = function()\n{\n do_conditional_call(!flags.Z);\n};\n// 0xc5 : PUSH BC\ninstructions[0xc5] = function()\n{\n push_word(c | (b << 8));\n};\n// 0xc6 : ADD A, n\ninstructions[0xc6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_add(core.mem_read(pc));\n};\n// 0xc7 : RST 00h\ninstructions[0xc7] = function()\n{\n do_reset(0x00);\n};\n// 0xc8 : RET Z\ninstructions[0xc8] = function()\n{\n do_conditional_return(!!flags.Z);\n};\n// 0xc9 : RET\ninstructions[0xc9] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0xca : JP Z, nn\ninstructions[0xca] = function()\n{\n do_conditional_absolute_jump(!!flags.Z);\n};\n// 0xcb : CB Prefix\ninstructions[0xcb] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n // We don't have a table for this prefix,\n // the instructions are all so uniform that we can directly decode them.\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n bit_number = (opcode & 0x38) >>> 3,\n reg_code = opcode & 0x07;\n \n if (opcode < 0x40)\n {\n // Shift/rotate instructions\n var op_array = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n if (reg_code === 0)\n b = op_array[bit_number]( b);\n else if (reg_code === 1)\n c = op_array[bit_number]( c);\n else if (reg_code === 2)\n d = op_array[bit_number]( d);\n else if (reg_code === 3)\n e = op_array[bit_number]( e);\n else if (reg_code === 4)\n h = op_array[bit_number]( h);\n else if (reg_code === 5)\n l = op_array[bit_number]( l);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n op_array[bit_number]( core.mem_read(l | (h << 8))));\n else if (reg_code === 7)\n a = op_array[bit_number]( a);\n }\n else if (opcode < 0x80)\n {\n // BIT instructions\n if (reg_code === 0)\n flags.Z = !(b & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 1)\n flags.Z = !(c & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 2)\n flags.Z = !(d & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 3)\n flags.Z = !(e & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 4)\n flags.Z = !(h & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 5)\n flags.Z = !(l & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 6)\n flags.Z = !((core.mem_read(l | (h << 8))) & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 7)\n flags.Z = !(a & (1 << bit_number)) ? 1 : 0;\n \n flags.N = 0;\n flags.H = 1;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n // For the BIT n, (HL) instruction, the X and Y flags are obtained\n // from what is apparently an internal temporary register used for\n // some of the 16-bit arithmetic instructions.\n // I haven't implemented that register here,\n // so for now we'll set X and Y the same way for every BIT opcode,\n // which means that they will usually be wrong for BIT n, (HL).\n flags.Y = ((bit_number === 5) && !flags.Z) ? 1 : 0;\n flags.X = ((bit_number === 3) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES instructions\n if (reg_code === 0)\n b &= (0xff & ~(1 << bit_number));\n else if (reg_code === 1)\n c &= (0xff & ~(1 << bit_number));\n else if (reg_code === 2)\n d &= (0xff & ~(1 << bit_number));\n else if (reg_code === 3)\n e &= (0xff & ~(1 << bit_number));\n else if (reg_code === 4)\n h &= (0xff & ~(1 << bit_number));\n else if (reg_code === 5)\n l &= (0xff & ~(1 << bit_number));\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) & ~(1 << bit_number));\n else if (reg_code === 7)\n a &= (0xff & ~(1 << bit_number));\n }\n else\n {\n // SET instructions\n if (reg_code === 0)\n b |= (1 << bit_number);\n else if (reg_code === 1)\n c |= (1 << bit_number);\n else if (reg_code === 2)\n d |= (1 << bit_number);\n else if (reg_code === 3)\n e |= (1 << bit_number);\n else if (reg_code === 4)\n h |= (1 << bit_number);\n else if (reg_code === 5)\n l |= (1 << bit_number);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) | (1 << bit_number));\n else if (reg_code === 7)\n a |= (1 << bit_number);\n }\n \n cycle_counter += cycle_counts_cb[opcode];\n};\n// 0xcc : CALL Z, nn\ninstructions[0xcc] = function()\n{\n do_conditional_call(!!flags.Z);\n};\n// 0xcd : CALL nn\ninstructions[0xcd] = function()\n{\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xce : ADC A, n\ninstructions[0xce] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_adc(core.mem_read(pc));\n};\n// 0xcf : RST 08h\ninstructions[0xcf] = function()\n{\n do_reset(0x08);\n};\n// 0xd0 : RET NC\ninstructions[0xd0] = function()\n{\n do_conditional_return(!flags.C);\n};\n// 0xd1 : POP DE\ninstructions[0xd1] = function()\n{\n var result = pop_word();\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0xd2 : JP NC, nn\ninstructions[0xd2] = function()\n{\n do_conditional_absolute_jump(!flags.C);\n};\n// 0xd3 : OUT (n), A\ninstructions[0xd3] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.io_write((a << 8) | core.mem_read(pc), a);\n};\n// 0xd4 : CALL NC, nn\ninstructions[0xd4] = function()\n{\n do_conditional_call(!flags.C);\n};\n// 0xd5 : PUSH DE\ninstructions[0xd5] = function()\n{\n push_word(e | (d << 8));\n};\n// 0xd6 : SUB n\ninstructions[0xd6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sub(core.mem_read(pc));\n};\n// 0xd7 : RST 10h\ninstructions[0xd7] = function()\n{\n do_reset(0x10);\n};\n// 0xd8 : RET C\ninstructions[0xd8] = function()\n{\n do_conditional_return(!!flags.C);\n};\n// 0xd9 : EXX\ninstructions[0xd9] = function()\n{\n var temp = b;\n b = b_prime;\n b_prime = temp;\n temp = c;\n c = c_prime;\n c_prime = temp;\n temp = d;\n d = d_prime;\n d_prime = temp;\n temp = e;\n e = e_prime;\n e_prime = temp;\n temp = h;\n h = h_prime;\n h_prime = temp;\n temp = l;\n l = l_prime;\n l_prime = temp;\n};\n// 0xda : JP C, nn\ninstructions[0xda] = function()\n{\n do_conditional_absolute_jump(!!flags.C);\n};\n// 0xdb : IN A, (n)\ninstructions[0xdb] = function()\n{\n pc = (pc + 1) & 0xffff;\n a = core.io_read((a << 8) | core.mem_read(pc));\n};\n// 0xdc : CALL C, nn\ninstructions[0xdc] = function()\n{\n do_conditional_call(!!flags.C);\n};\n// 0xdd : DD Prefix (IX instructions)\ninstructions[0xdd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if a DD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xde : SBC n\ninstructions[0xde] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sbc(core.mem_read(pc));\n};\n// 0xdf : RST 18h\ninstructions[0xdf] = function()\n{\n do_reset(0x18);\n};\n// 0xe0 : RET PO\ninstructions[0xe0] = function()\n{\n do_conditional_return(!flags.P);\n};\n// 0xe1 : POP HL\ninstructions[0xe1] = function()\n{\n var result = pop_word();\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0xe2 : JP PO, (nn)\ninstructions[0xe2] = function()\n{\n do_conditional_absolute_jump(!flags.P);\n};\n// 0xe3 : EX (SP), HL\ninstructions[0xe3] = function()\n{\n var temp = core.mem_read(sp);\n core.mem_write(sp, l);\n l = temp;\n temp = core.mem_read((sp + 1) & 0xffff);\n core.mem_write((sp + 1) & 0xffff, h);\n h = temp;\n};\n// 0xe4 : CALL PO, nn\ninstructions[0xe4] = function()\n{\n do_conditional_call(!flags.P);\n};\n// 0xe5 : PUSH HL\ninstructions[0xe5] = function()\n{\n push_word(l | (h << 8));\n};\n// 0xe6 : AND n\ninstructions[0xe6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_and(core.mem_read(pc));\n};\n// 0xe7 : RST 20h\ninstructions[0xe7] = function()\n{\n do_reset(0x20);\n};\n// 0xe8 : RET PE\ninstructions[0xe8] = function()\n{\n do_conditional_return(!!flags.P);\n};\n// 0xe9 : JP (HL)\ninstructions[0xe9] = function()\n{\n pc = l | (h << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xea : JP PE, nn\ninstructions[0xea] = function()\n{\n do_conditional_absolute_jump(!!flags.P);\n};\n// 0xeb : EX DE, HL\ninstructions[0xeb] = function()\n{\n var temp = d;\n d = h;\n h = temp;\n temp = e;\n e = l;\n l = temp;\n};\n// 0xec : CALL PE, nn\ninstructions[0xec] = function()\n{\n do_conditional_call(!!flags.P);\n};\n// 0xed : ED Prefix\ninstructions[0xed] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = ed_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_ed[opcode];\n }\n else\n {\n // If the opcode didn't exist, the whole thing is a two-byte NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xee : XOR n\ninstructions[0xee] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_xor(core.mem_read(pc));\n};\n// 0xef : RST 28h\ninstructions[0xef] = function()\n{\n do_reset(0x28);\n};\n// 0xf0 : RET P\ninstructions[0xf0] = function()\n{\n do_conditional_return(!flags.S);\n};\n// 0xf1 : POP AF\ninstructions[0xf1] = function()\n{\n var result = pop_word();\n set_flags_register(result & 0xff);\n a = (result & 0xff00) >>> 8;\n};\n// 0xf2 : JP P, nn\ninstructions[0xf2] = function()\n{\n do_conditional_absolute_jump(!flags.S);\n};\n// 0xf3 : DI\ninstructions[0xf3] = function()\n{\n // DI doesn't actually take effect until after the next instruction.\n do_delayed_di = true;\n};\n// 0xf4 : CALL P, nn\ninstructions[0xf4] = function()\n{\n do_conditional_call(!flags.S);\n};\n// 0xf5 : PUSH AF\ninstructions[0xf5] = function()\n{\n push_word(get_flags_register() | (a << 8));\n};\n// 0xf6 : OR n\ninstructions[0xf6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_or(core.mem_read(pc));\n};\n// 0xf7 : RST 30h\ninstructions[0xf7] = function()\n{\n do_reset(0x30);\n};\n// 0xf8 : RET M\ninstructions[0xf8] = function()\n{\n do_conditional_return(!!flags.S);\n};\n// 0xf9 : LD SP, HL\ninstructions[0xf9] = function()\n{\n sp = l | (h << 8);\n};\n// 0xfa : JP M, nn\ninstructions[0xfa] = function()\n{\n do_conditional_absolute_jump(!!flags.S);\n};\n// 0xfb : EI\ninstructions[0xfb] = function()\n{\n // EI doesn't actually take effect until after the next instruction.\n do_delayed_ei = true;\n};\n// 0xfc : CALL M, nn\ninstructions[0xfc] = function()\n{\n do_conditional_call(!!flags.S);\n};\n// 0xfd : FD Prefix (IY instructions)\ninstructions[0xfd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n // Rather than copy and paste all the IX instructions into IY instructions,\n // what we'll do is sneakily copy IY into IX, run the IX instruction,\n // and then copy the result into IY and restore the old IX.\n var temp = ix;\n ix = iy;\n //func = func.bind(this);\n func();\n iy = ix;\n ix = temp;\n \n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if an FD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xfe : CP n\ninstructions[0xfe] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_cp(core.mem_read(pc));\n};\n// 0xff : RST 38h\ninstructions[0xff] = function()\n{\n do_reset(0x38);\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table of ED opcodes is pretty sparse;\n/// there are not very many valid ED-prefixed opcodes in the Z80,\n/// and many of the ones that are valid are not documented.\n///////////////////////////////////////////////////////////////////////////////\nlet ed_instructions = [];\n// 0x40 : IN B, (C)\ned_instructions[0x40] = function()\n{\n b = do_in((b << 8) | c);\n};\n// 0x41 : OUT (C), B\ned_instructions[0x41] = function()\n{\n core.io_write((b << 8) | c, b);\n};\n// 0x42 : SBC HL, BC\ned_instructions[0x42] = function()\n{\n do_hl_sbc(c | (b << 8));\n};\n// 0x43 : LD (nn), BC\ned_instructions[0x43] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, c);\n core.mem_write((address + 1) & 0xffff, b);\n};\n// 0x44 : NEG\ned_instructions[0x44] = function()\n{\n do_neg();\n};\n// 0x45 : RETN\ned_instructions[0x45] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x46 : IM 0\ned_instructions[0x46] = function()\n{\n imode = 0;\n};\n// 0x47 : LD I, A\ned_instructions[0x47] = function()\n{\n i = a\n};\n// 0x48 : IN C, (C)\ned_instructions[0x48] = function()\n{\n c = do_in((b << 8) | c);\n};\n// 0x49 : OUT (C), C\ned_instructions[0x49] = function()\n{\n core.io_write((b << 8) | c, c);\n};\n// 0x4a : ADC HL, BC\ned_instructions[0x4a] = function()\n{\n do_hl_adc(c | (b << 8));\n};\n// 0x4b : LD BC, (nn)\ned_instructions[0x4b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n c = core.mem_read(address);\n b = core.mem_read((address + 1) & 0xffff);\n};\n// 0x4c : NEG (Undocumented)\ned_instructions[0x4c] = function()\n{\n do_neg();\n};\n// 0x4d : RETI\ned_instructions[0x4d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0x4e : IM 0 (Undocumented)\ned_instructions[0x4e] = function()\n{\n imode = 0;\n};\n// 0x4f : LD R, A\ned_instructions[0x4f] = function()\n{\n r = a;\n};\n// 0x50 : IN D, (C)\ned_instructions[0x50] = function()\n{\n d = do_in((b << 8) | c);\n};\n// 0x51 : OUT (C), D\ned_instructions[0x51] = function()\n{\n core.io_write((b << 8) | c, d);\n};\n// 0x52 : SBC HL, DE\ned_instructions[0x52] = function()\n{\n do_hl_sbc(e | (d << 8));\n};\n// 0x53 : LD (nn), DE\ned_instructions[0x53] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, e);\n core.mem_write((address + 1) & 0xffff, d);\n};\n// 0x54 : NEG (Undocumented)\ned_instructions[0x54] = function()\n{\n do_neg();\n};\n// 0x55 : RETN\ned_instructions[0x55] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x56 : IM 1\ned_instructions[0x56] = function()\n{\n imode = 1;\n};\n// 0x57 : LD A, I\ned_instructions[0x57] = function()\n{\n a = i;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x58 : IN E, (C)\ned_instructions[0x58] = function()\n{\n e = do_in((b << 8) | c);\n};\n// 0x59 : OUT (C), E\ned_instructions[0x59] = function()\n{\n core.io_write((b << 8) | c, e);\n};\n// 0x5a : ADC HL, DE\ned_instructions[0x5a] = function()\n{\n do_hl_adc(e | (d << 8));\n};\n// 0x5b : LD DE, (nn)\ned_instructions[0x5b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n e = core.mem_read(address);\n d = core.mem_read((address + 1) & 0xffff);\n};\n// 0x5c : NEG (Undocumented)\ned_instructions[0x5c] = function()\n{\n do_neg();\n};\n// 0x5d : RETN\ned_instructions[0x5d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x5e : IM 2\ned_instructions[0x5e] = function()\n{\n imode = 2;\n};\n// 0x5f : LD A, R\ned_instructions[0x5f] = function()\n{\n a = r;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x60 : IN H, (C)\ned_instructions[0x60] = function()\n{\n h = do_in((b << 8) | c);\n};\n// 0x61 : OUT (C), H\ned_instructions[0x61] = function()\n{\n core.io_write((b << 8) | c, h);\n};\n// 0x62 : SBC HL, HL\ned_instructions[0x62] = function()\n{\n do_hl_sbc(l | (h << 8));\n};\n// 0x63 : LD (nn), HL (Undocumented)\ned_instructions[0x63] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x64 : NEG (Undocumented)\ned_instructions[0x64] = function()\n{\n do_neg();\n};\n// 0x65 : RETN\ned_instructions[0x65] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x66 : IM 0\ned_instructions[0x66] = function()\n{\n imode = 0;\n};\n// 0x67 : RRD\ned_instructions[0x67] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0x0f, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0xf0) >>> 4) | (temp2 << 4);\n a = (a & 0xf0) | temp1;\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x68 : IN L, (C)\ned_instructions[0x68] = function()\n{\n l = do_in((b << 8) | c);\n};\n// 0x69 : OUT (C), L\ned_instructions[0x69] = function()\n{\n core.io_write((b << 8) | c, l);\n};\n// 0x6a : ADC HL, HL\ned_instructions[0x6a] = function()\n{\n do_hl_adc(l | (h << 8));\n};\n// 0x6b : LD HL, (nn) (Undocumented)\ned_instructions[0x6b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x6c : NEG (Undocumented)\ned_instructions[0x6c] = function()\n{\n do_neg();\n};\n// 0x6d : RETN\ned_instructions[0x6d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x6e : IM 0 (Undocumented)\ned_instructions[0x6e] = function()\n{\n imode = 0;\n};\n// 0x6f : RLD\ned_instructions[0x6f] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0xf0, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0x0f) << 4) | temp2;\n a = (a & 0xf0) | (temp1 >>> 4);\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x70 : IN (C) (Undocumented)\ned_instructions[0x70] = function()\n{\n do_in((b << 8) | c);\n};\n// 0x71 : OUT (C), 0 (Undocumented)\ned_instructions[0x71] = function()\n{\n core.io_write((b << 8) | c, 0);\n};\n// 0x72 : SBC HL, SP\ned_instructions[0x72] = function()\n{\n do_hl_sbc(sp);\n};\n// 0x73 : LD (nn), SP\ned_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, sp & 0xff);\n core.mem_write((address + 1) & 0xffff, (sp >>> 8) & 0xff);\n};\n// 0x74 : NEG (Undocumented)\ned_instructions[0x74] = function()\n{\n do_neg();\n};\n// 0x75 : RETN\ned_instructions[0x75] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x76 : IM 1\ned_instructions[0x76] = function()\n{\n imode = 1;\n};\n// 0x78 : IN A, (C)\ned_instructions[0x78] = function()\n{\n a = do_in((b << 8) | c);\n};\n// 0x79 : OUT (C), A\ned_instructions[0x79] = function()\n{\n core.io_write((b << 8) | c, a);\n};\n// 0x7a : ADC HL, SP\ned_instructions[0x7a] = function()\n{\n do_hl_adc(sp);\n};\n// 0x7b : LD SP, (nn)\ned_instructions[0x7b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n sp = core.mem_read(address);\n sp |= core.mem_read((address + 1) & 0xffff) << 8;\n};\n// 0x7c : NEG (Undocumented)\ned_instructions[0x7c] = function()\n{\n do_neg();\n};\n// 0x7d : RETN\ned_instructions[0x7d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x7e : IM 2\ned_instructions[0x7e] = function()\n{\n imode = 2;\n};\n// 0xa0 : LDI\ned_instructions[0xa0] = function()\n{\n do_ldi();\n};\n// 0xa1 : CPI\ned_instructions[0xa1] = function()\n{\n do_cpi();\n};\n// 0xa2 : INI\ned_instructions[0xa2] = function()\n{\n do_ini();\n};\n// 0xa3 : OUTI\ned_instructions[0xa3] = function()\n{\n do_outi();\n};\n// 0xa8 : LDD\ned_instructions[0xa8] = function()\n{\n do_ldd();\n};\n// 0xa9 : CPD\ned_instructions[0xa9] = function()\n{\n do_cpd();\n};\n// 0xaa : IND\ned_instructions[0xaa] = function()\n{\n do_ind();\n};\n// 0xab : OUTD\ned_instructions[0xab] = function()\n{\n do_outd();\n};\n// 0xb0 : LDIR\ned_instructions[0xb0] = function()\n{\n do_ldi();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb1 : CPIR\ned_instructions[0xb1] = function()\n{\n do_cpi();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb2 : INIR\ned_instructions[0xb2] = function()\n{\n do_ini();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb3 : OTIR\ned_instructions[0xb3] = function()\n{\n do_outi();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb8 : LDDR\ned_instructions[0xb8] = function()\n{\n do_ldd();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb9 : CPDR\ned_instructions[0xb9] = function()\n{\n do_cpd();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xba : INDR\ned_instructions[0xba] = function()\n{\n do_ind();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xbb : OTDR\ned_instructions[0xbb] = function()\n{\n do_outd();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// Like ED, this table is quite sparse,\n/// and many of the opcodes here are also undocumented.\n/// The undocumented instructions here are those that deal with only one byte\n/// of the two-byte IX register; the bytes are designed IXH and IXL here.\n///////////////////////////////////////////////////////////////////////////////\nlet dd_instructions = [];\n// 0x09 : ADD IX, BC\ndd_instructions[0x09] = function()\n{\n do_ix_add(c | (b << 8));\n};\n// 0x19 : ADD IX, DE\ndd_instructions[0x19] = function()\n{\n do_ix_add(e | (d << 8));\n};\n// 0x21 : LD IX, nn\ndd_instructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n ix |= (core.mem_read(pc) << 8);\n};\n// 0x22 : LD (nn), IX\ndd_instructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n core.mem_write(address, ix & 0xff);\n core.mem_write((address + 1) & 0xffff, (ix >>> 8) & 0xff);\n};\n// 0x23 : INC IX\ndd_instructions[0x23] = function()\n{\n ix = (ix + 1) & 0xffff;\n};\n// 0x24 : INC IXH (Undocumented)\ndd_instructions[0x24] = function()\n{\n ix = (do_inc(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x25 : DEC IXH (Undocumented)\ndd_instructions[0x25] = function()\n{\n ix = (do_dec(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x26 : LD IXH, n (Undocumented)\ndd_instructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) << 8) | (ix & 0xff);\n};\n// 0x29 : ADD IX, IX\ndd_instructions[0x29] = function()\n{\n do_ix_add(ix);\n};\n// 0x2a : LD IX, (nn)\ndd_instructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n ix = core.mem_read(address);\n ix |= (core.mem_read((address + 1) & 0xffff) << 8);\n};\n// 0x2b : DEC IX\ndd_instructions[0x2b] = function()\n{\n ix = (ix - 1) & 0xffff;\n};\n// 0x2c : INC IXL (Undocumented)\ndd_instructions[0x2c] = function()\n{\n ix = do_inc(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2d : DEC IXL (Undocumented)\ndd_instructions[0x2d] = function()\n{\n ix = do_dec(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2e : LD IXL, n (Undocumented)\ndd_instructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) & 0xff) | (ix & 0xff00);\n};\n// 0x34 : INC (IX+n)\ndd_instructions[0x34] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_inc(value));\n};\n// 0x35 : DEC (IX+n)\ndd_instructions[0x35] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_dec(value));\n};\n// 0x36 : LD (IX+n), n\ndd_instructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n core.mem_write((ix + offset) & 0xffff, core.mem_read(pc)); \n};\n// 0x39 : ADD IX, SP\ndd_instructions[0x39] = function()\n{\n do_ix_add(sp);\n};\n// 0x44 : LD B, IXH (Undocumented)\ndd_instructions[0x44] = function()\n{\n b = (ix >>> 8) & 0xff;\n};\n// 0x45 : LD B, IXL (Undocumented)\ndd_instructions[0x45] = function()\n{\n b = ix & 0xff;\n};\n// 0x46 : LD B, (IX+n)\ndd_instructions[0x46] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n b = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x4c : LD C, IXH (Undocumented)\ndd_instructions[0x4c] = function()\n{\n c = (ix >>> 8) & 0xff;\n};\n// 0x4d : LD C, IXL (Undocumented)\ndd_instructions[0x4d] = function()\n{\n c = ix & 0xff;\n};\n// 0x4e : LD C, (IX+n)\ndd_instructions[0x4e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n c = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x54 : LD D, IXH (Undocumented)\ndd_instructions[0x54] = function()\n{\n d = (ix >>> 8) & 0xff;\n};\n// 0x55 : LD D, IXL (Undocumented)\ndd_instructions[0x55] = function()\n{\n d = ix & 0xff;\n};\n// 0x56 : LD D, (IX+n)\ndd_instructions[0x56] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n d = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x5c : LD E, IXH (Undocumented)\ndd_instructions[0x5c] = function()\n{\n e = (ix >>> 8) & 0xff;\n};\n// 0x5d : LD E, IXL (Undocumented)\ndd_instructions[0x5d] = function()\n{\n e = ix & 0xff;\n};\n// 0x5e : LD E, (IX+n)\ndd_instructions[0x5e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n e = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x60 : LD IXH, B (Undocumented)\ndd_instructions[0x60] = function()\n{\n ix = (ix & 0xff) | (b << 8);\n};\n// 0x61 : LD IXH, C (Undocumented)\ndd_instructions[0x61] = function()\n{\n ix = (ix & 0xff) | (c << 8);\n};\n// 0x62 : LD IXH, D (Undocumented)\ndd_instructions[0x62] = function()\n{\n ix = (ix & 0xff) | (d << 8);\n};\n// 0x63 : LD IXH, E (Undocumented)\ndd_instructions[0x63] = function()\n{\n ix = (ix & 0xff) | (e << 8);\n};\n// 0x64 : LD IXH, IXH (Undocumented)\ndd_instructions[0x64] = function()\n{\n // No-op.\n};\n// 0x65 : LD IXH, IXL (Undocumented)\ndd_instructions[0x65] = function()\n{\n ix = (ix & 0xff) | ((ix & 0xff) << 8);\n};\n// 0x66 : LD H, (IX+n)\ndd_instructions[0x66] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n h = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x67 : LD IXH, A (Undocumented)\ndd_instructions[0x67] = function()\n{\n ix = (ix & 0xff) | (a << 8);\n};\n// 0x68 : LD IXL, B (Undocumented)\ndd_instructions[0x68] = function()\n{\n ix = (ix & 0xff00) | b;\n};\n// 0x69 : LD IXL, C (Undocumented)\ndd_instructions[0x69] = function()\n{\n ix = (ix & 0xff00) | c;\n};\n// 0x6a : LD IXL, D (Undocumented)\ndd_instructions[0x6a] = function()\n{\n ix = (ix & 0xff00) | d;\n};\n// 0x6b : LD IXL, E (Undocumented)\ndd_instructions[0x6b] = function()\n{\n ix = (ix & 0xff00) | e;\n};\n// 0x6c : LD IXL, IXH (Undocumented)\ndd_instructions[0x6c] = function()\n{\n ix = (ix & 0xff00) | (ix >>> 8);\n};\n// 0x6d : LD IXL, IXL (Undocumented)\ndd_instructions[0x6d] = function()\n{\n // No-op.\n};\n// 0x6e : LD L, (IX+n)\ndd_instructions[0x6e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n l = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x6f : LD IXL, A (Undocumented)\ndd_instructions[0x6f] = function()\n{\n ix = (ix & 0xff00) | a;\n};\n// 0x70 : LD (IX+n), B\ndd_instructions[0x70] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, b);\n};\n// 0x71 : LD (IX+n), C\ndd_instructions[0x71] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, c);\n};\n// 0x72 : LD (IX+n), D\ndd_instructions[0x72] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, d);\n};\n// 0x73 : LD (IX+n), E\ndd_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, e);\n};\n// 0x74 : LD (IX+n), H\ndd_instructions[0x74] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, h);\n};\n// 0x75 : LD (IX+n), L\ndd_instructions[0x75] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, l);\n};\n// 0x77 : LD (IX+n), A\ndd_instructions[0x77] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, a);\n};\n// 0x7c : LD A, IXH (Undocumented)\ndd_instructions[0x7c] = function()\n{\n a = (ix >>> 8) & 0xff;\n};\n// 0x7d : LD A, IXL (Undocumented)\ndd_instructions[0x7d] = function()\n{\n a = ix & 0xff;\n};\n// 0x7e : LD A, (IX+n)\ndd_instructions[0x7e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n a = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x84 : ADD A, IXH (Undocumented)\ndd_instructions[0x84] = function()\n{\n do_add((ix >>> 8) & 0xff);\n};\n// 0x85 : ADD A, IXL (Undocumented)\ndd_instructions[0x85] = function()\n{\n do_add(ix & 0xff);\n};\n// 0x86 : ADD A, (IX+n)\ndd_instructions[0x86] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_add(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x8c : ADC A, IXH (Undocumented)\ndd_instructions[0x8c] = function()\n{\n do_adc((ix >>> 8) & 0xff);\n};\n// 0x8d : ADC A, IXL (Undocumented)\ndd_instructions[0x8d] = function()\n{\n do_adc(ix & 0xff);\n};\n// 0x8e : ADC A, (IX+n)\ndd_instructions[0x8e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_adc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x94 : SUB IXH (Undocumented)\ndd_instructions[0x94] = function()\n{\n do_sub((ix >>> 8) & 0xff);\n};\n// 0x95 : SUB IXL (Undocumented)\ndd_instructions[0x95] = function()\n{\n do_sub(ix & 0xff);\n};\n// 0x96 : SUB A, (IX+n)\ndd_instructions[0x96] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sub(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x9c : SBC IXH (Undocumented)\ndd_instructions[0x9c] = function()\n{\n do_sbc((ix >>> 8) & 0xff);\n};\n// 0x9d : SBC IXL (Undocumented)\ndd_instructions[0x9d] = function()\n{\n do_sbc(ix & 0xff);\n};\n// 0x9e : SBC A, (IX+n)\ndd_instructions[0x9e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sbc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xa4 : AND IXH (Undocumented)\ndd_instructions[0xa4] = function()\n{\n do_and((ix >>> 8) & 0xff);\n};\n// 0xa5 : AND IXL (Undocumented)\ndd_instructions[0xa5] = function()\n{\n do_and(ix & 0xff);\n};\n// 0xa6 : AND A, (IX+n)\ndd_instructions[0xa6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_and(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xac : XOR IXH (Undocumented)\ndd_instructions[0xac] = function()\n{\n do_xor((ix >>> 8) & 0xff);\n};\n// 0xad : XOR IXL (Undocumented)\ndd_instructions[0xad] = function()\n{\n do_xor(ix & 0xff);\n};\n// 0xae : XOR A, (IX+n)\ndd_instructions[0xae] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_xor(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xb4 : OR IXH (Undocumented)\ndd_instructions[0xb4] = function()\n{\n do_or((ix >>> 8) & 0xff);\n};\n// 0xb5 : OR IXL (Undocumented)\ndd_instructions[0xb5] = function()\n{\n do_or(ix & 0xff);\n};\n// 0xb6 : OR A, (IX+n)\ndd_instructions[0xb6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_or(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xbc : CP IXH (Undocumented)\ndd_instructions[0xbc] = function()\n{\n do_cp((ix >>> 8) & 0xff);\n};\n// 0xbd : CP IXL (Undocumented)\ndd_instructions[0xbd] = function()\n{\n do_cp(ix & 0xff);\n};\n// 0xbe : CP A, (IX+n)\ndd_instructions[0xbe] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_cp(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xcb : CB Prefix (IX bit instructions)\ndd_instructions[0xcb] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc), value;\n \n // As with the \"normal\" CB prefix, we implement the DDCB prefix\n // by decoding the opcode directly, rather than using a table.\n if (opcode < 0x40)\n {\n // Shift and rotate instructions.\n var ddcb_functions = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n // Most of the opcodes in this range are not valid,\n // so we map this opcode onto one of the ones that is.\n var func = ddcb_functions[(opcode & 0x38) >>> 3],\n value = func( core.mem_read((ix + offset) & 0xffff));\n \n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n var bit_number = (opcode & 0x38) >>> 3;\n \n if (opcode < 0x80)\n {\n // BIT\n flags.N = 0;\n flags.H = 1;\n flags.Z = !(core.mem_read((ix + offset) & 0xffff) & (1 << bit_number)) ? 1 : 0;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES\n value = core.mem_read((ix + offset) & 0xffff) & ~(1 << bit_number) & 0xff;\n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n // SET\n value = core.mem_read((ix + offset) & 0xffff) | (1 << bit_number);\n core.mem_write((ix + offset) & 0xffff, value);\n }\n }\n \n // This implements the undocumented shift, RES, and SET opcodes,\n // which write their result to memory and also to an 8080 register.\n if (value !== undefined)\n {\n if ((opcode & 0x07) === 0)\n b = value;\n else if ((opcode & 0x07) === 1)\n c = value;\n else if ((opcode & 0x07) === 2)\n d = value;\n else if ((opcode & 0x07) === 3)\n e = value;\n else if ((opcode & 0x07) === 4)\n h = value;\n else if ((opcode & 0x07) === 5)\n l = value;\n // 6 is the documented opcode, which doesn't set a register.\n else if ((opcode & 0x07) === 7)\n a = value;\n }\n \n cycle_counter += cycle_counts_cb[opcode] + 8;\n};\n// 0xe1 : POP IX\ndd_instructions[0xe1] = function()\n{\n ix = pop_word();\n};\n// 0xe3 : EX (SP), IX\ndd_instructions[0xe3] = function()\n{\n var temp = ix;\n ix = core.mem_read(sp);\n ix |= core.mem_read((sp + 1) & 0xffff) << 8;\n core.mem_write(sp, temp & 0xff);\n core.mem_write((sp + 1) & 0xffff, (temp >>> 8) & 0xff);\n};\n// 0xe5 : PUSH IX\ndd_instructions[0xe5] = function()\n{\n push_word(ix);\n};\n// 0xe9 : JP (IX)\ndd_instructions[0xe9] = function()\n{\n pc = (ix - 1) & 0xffff;\n};\n// 0xf9 : LD SP, IX\ndd_instructions[0xf9] = function()\n{\n sp = ix;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// These tables contain the number of T cycles used for each instruction.\n/// In a few special cases, such as conditional control flow instructions,\n/// additional cycles might be added to these values.\n/// The total number of cycles is the return value of run_instruction().\n///////////////////////////////////////////////////////////////////////////////\nlet cycle_counts = [\n 4, 10, 7, 6, 4, 4, 7, 4, 4, 11, 7, 6, 4, 4, 7, 4,\n 8, 10, 7, 6, 4, 4, 7, 4, 12, 11, 7, 6, 4, 4, 7, 4,\n 7, 10, 16, 6, 4, 4, 7, 4, 7, 11, 16, 6, 4, 4, 7, 4,\n 7, 10, 13, 6, 11, 11, 10, 4, 7, 11, 13, 6, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 5, 10, 10, 10, 10, 11, 7, 11, 5, 10, 10, 0, 10, 17, 7, 11,\n 5, 10, 10, 11, 10, 11, 7, 11, 5, 4, 10, 11, 10, 0, 7, 11,\n 5, 10, 10, 19, 10, 11, 7, 11, 5, 4, 10, 4, 10, 0, 7, 11,\n 5, 10, 10, 4, 10, 11, 7, 11, 5, 6, 10, 4, 10, 0, 7, 11\n];\n\nlet cycle_counts_ed = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 18, 12, 12, 15, 20, 8, 14, 8, 18,\n 12, 12, 15, 20, 8, 14, 8, 0, 12, 12, 15, 20, 8, 14, 8, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n];\n\nlet cycle_counts_cb = [\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8\n];\n\nlet cycle_counts_dd = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 14, 20, 10, 8, 8, 11, 0, 0, 15, 20, 10, 8, 8, 11, 0,\n 0, 0, 0, 0, 23, 23, 19, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 8, 8, 8, 8, 8, 8, 19, 8, 8, 8, 8, 8, 8, 8, 19, 8,\n 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 14, 0, 23, 0, 15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0\n];\n\n // There's tons of stuff in this object,\n // but only these three functions are the public API.\n this.saveState = getState;\n this.loadState = setState;\n this.reset = reset;\n this.advanceInsn = run_instruction;\n this.interrupt = interrupt;\n this.getPC = ():number => { return pc; }\n this.getSP = ():number => { return sp; }\n this.getHalted = ():boolean => { return halted; }\n}\n\nexport interface Z80State {\nAF : number;\nBC : number;\nDE : number;\nHL : number;\nAF_ : number;\nBC_ : number;\nDE_ : number;\nHL_ : number;\nIX : number;\nIY : number;\nSP : number;\nPC : number;\nIR : number;\niff1 : number;\niff2 : number;\nim : number;\nhalted : boolean;\ndo_delayed_di : boolean;\ndo_delayed_ei : boolean;\ncycle_counter : number;\n}\n\nexport class Z80 implements CPU, InstructionBased, IOBusConnected, SavesState, Interruptable {\n\n cpu;\n interruptType;\n memBus : Bus;\n ioBus : Bus;\n retryInterrupts : boolean = false;\n retryData : number = -1;\n \n private buildCPU() {\n // Build the core only once and route its callbacks through the current\n // bus fields. BasicHeadlessMachine.rewireCPUBuses() swaps memBus/ioBus\n // whenever a probe is attached or detached; rebuilding here would throw\n // away the whole register state (i.e. reset the machine). FastZ80 calls\n // core.mem_read/... at instruction time, so the closures pick up the swap.\n if (this.memBus && this.ioBus && !this.cpu) {\n this.cpu = new FastZ80({\n mem_read: (a) => this.memBus.read(a),\n mem_write: (a, v) => this.memBus.write(a, v),\n io_read: (a) => this.ioBus.read(a),\n io_write: (a, v) => this.ioBus.write(a, v),\n });\n }\n }\n connectMemoryBus(bus:Bus) {\n this.memBus = bus;\n this.buildCPU();\n }\n connectIOBus(bus:Bus) {\n this.ioBus = bus;\n this.buildCPU();\n }\n advanceInsn() {\n if (this.retryInterrupts && this.retryData >= 0 && this.cpu.interrupt(false, this.retryData)) {\n this.retryData = -1;\n }\n return this.cpu.advanceInsn();\n }\n reset() {\n this.cpu.reset();\n }\n interrupt(data:number) {\n if (!this.cpu.interrupt(false, data) && this.retryInterrupts) {\n this.retryData = data;\n }\n }\n NMI() {\n this.cpu.interrupt(true, 0);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.getHalted();\n }\n saveState() {\n return this.cpu.saveState();\n }\n loadState(s) {\n this.cpu.loadState(s);\n }\n isStable() { return true; }\n // TODO: metadata\n // TODO: disassembler\n}\n", "\nimport { SampledAudioSink } from \"./devices\";\n\n// from TSS\ndeclare var MasterChannel, AudioLooper, PsgDeviceChannel;\n\nexport class MasterAudio {\n master = new MasterChannel();\n looper;\n start() {\n if (!this.looper) {\n this.looper = new AudioLooper(512);\n this.looper.setChannel(this.master);\n this.looper.activate();\n }\n }\n stop() {\n if (this.looper) {\n this.looper.setChannel(null);\n this.looper = null;\n }\n }\n}\n\nexport class AY38910_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n curreg = 0;\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910);\n master.master.addChannel(this.psg);\n }\n\n reset() {\n for (var i=15; i>=0; i--) {\n this.selectRegister(i);\n this.setData(0);\n }\n }\n selectRegister(val : number) {\n this.curreg = val & 0xf;\n }\n setData(val : number) {\n this.psg.writeRegisterAY(this.curreg, val & 0xff);\n }\n readData() {\n return this.psg.readRegister(this.curreg);\n }\n currentRegister() { return this.curreg; }\n}\n\nexport class SN76489_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489);\n master.master.addChannel(this.psg);\n }\n reset() {\n // TODO\n }\n setData(val : number) {\n this.psg.writeRegisterSN(0, val & 0xff);\n }\n}\n\n// https://en.wikipedia.org/wiki/POKEY\n// https://user.xmission.com/~trevin/atari/pokey_regs.html\n// http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm\n\nexport function newPOKEYAudio(count:number) {\n var audio = new MasterAudio();\n for (var i=1; i<=count; i++) {\n var pokey = new POKEYDeviceChannel();\n audio['pokey'+i] = pokey; // TODO: cheezy\n audio.master.addChannel(pokey);\n }\n return audio;\n}\n\nfunction combinePolys(a, b) {\n var arr = new Uint8Array(a.length * b.length);\n var n = 0;\n for (var i=0; i 0.5 ? 1 : 0;\n }\n var bit17_5 = combinePolys(bit17, bit5);\n var bit5_4 = combinePolys(bit5, bit4);\n var wavetones = [\n bit17_5, bit5, bit5_4, bit5,\n bit17, bit2, bit4, bit2\n ];\n // TIA\n var div2 = divideBy(2);\n var div6 = divideBy(6);\n var div31 = divideBy(31);\n var div93 = divideBy(93);\n var bit15_4 = combinePolys(bit15, bit4);\n var bit5_2 = combinePolys(bit5, div2);\n var bit5_6 = combinePolys(bit5, div6);\n var tiawavetones = [\n bit1, bit4, bit15_4, bit5_4,\n div2, div2, div31, bit5_2,\n bit9, bit5, div31, bit1,\n div6, div6, div93, bit5_6\n ];\n \n // registers\n var regs = new Uint8Array(16);\n var counters = new Float32Array(4);\n var deltas = new Float32Array(4);\n var volume = new Float32Array(4);\n var audc = new Uint8Array(4);\n var waveforms = [bit1, bit1, bit1, bit1];\n var buffer;\n var sampleRate;\n var clock, baseDelta;\n var dirty = true;\n\n //\n\n this.setBufferLength = function (length) {\n buffer = new Int32Array(length);\n };\n\n this.getBuffer = function () {\n return buffer;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n baseDelta = FREQ_17_EXACT / rate;\n };\n\n function updateValues(addr) {\n var ctrl = regs[8];\n var base = (ctrl & CLOCK_15) ? DIV_15 : DIV_64;\n var div;\n var i = addr & 4;\n var j = i>>1;\n var k = i>>2;\n if (ctrl & (CH1_CH2>>k)) {\n if (ctrl & (CH1_179>>k))\n div = regs[i+2] * 256 + regs[i+0] + 7;\n else\n div = (regs[i+2] * 256 + regs[i+0] + 1) * base;\n deltas[j+1] = baseDelta / div;\n deltas[j+0] = 0;\n } else {\n if (ctrl & (CH1_179>>k)) {\n div = regs[i+0] + 4;\n } else {\n div = (regs[i+0] + 1) * base;\n }\n deltas[j+0] = baseDelta / div;\n div = (regs[i+2] + 1) * base;\n deltas[j+1] = baseDelta / div;\n }\n //console.log(addr, ctrl.toString(16), div, deltas[j+0], deltas[j+1]);\n }\n\n this.setRegister = function(addr, value) {\n addr &= 0xf;\n value &= 0xff;\n if (regs[addr] != value) {\n regs[addr] = value;\n switch (addr) {\n case 0:\n case 2:\n case 4:\n case 6: // AUDF\n case 8: // ctrl\n dirty = true;\n break;\n case 1:\n case 3:\n case 5:\n case 7: // AUDC\n volume[addr>>1] = value & 0xf;\n waveforms[addr>>1] = wavetones[value>>5];\n break;\n }\n }\n }\n\n this.getRegister = function(addr) {\n addr &= 0xf;\n return regs[addr];\n }\n \n this.setTIARegister = function(addr, value) {\n switch (addr) {\n case 0x17:\n case 0x18:\n regs[(addr&1)*4] = value & 0x1f;\n dirty = true;\n break;\n case 0x15:\n case 0x16:\n waveforms[(addr&1)*2] = tiawavetones[value & 0xf];\n break;\n case 0x19:\n case 0x1a:\n volume[(addr&1)*2] = value & 0xf;\n break;\n }\n }\n\n this.generate = function (length) {\n if (dirty) {\n updateValues(0);\n updateValues(4);\n dirty = false;\n }\n for (var s=0; s 0 && d < 1 && v > 0) {\n var wav = waveforms[i];\n var cnt = counters[i] += d;\n if (cnt > wav.length) {\n cnt = counters[i] = cnt - Math.floor(cnt / wav.length) * wav.length;\n }\n var on = wav[Math.floor(cnt)];\n if (on) {\n sample += v;\n }\n }\n }\n sample *= 64;\n buffer[s] = sample;\n buffer[s+1] = sample;\n }\n }\n}\n\n////// Worker sound\n\nexport var WorkerSoundChannel = function(worker) {\n var sampleRate;\n var output;\n var pending = [];\n var pendingLength = 0;\n\n worker.onmessage = function(e) {\n if (e && e.data && e.data.samples && output) {\n pending.push(e.data.samples);\n pendingLength += e.data.samples.length;\n }\n };\n\n this.setBufferLength = function (length) {\n output = new Int16Array(length);\n //worker.postMessage({bufferLength:length,numChannels:2});\n pendingLength = 0;\n };\n\n this.getBuffer = function () {\n return output;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n worker.postMessage({sampleRate:rate});\n };\n\n this.generate = function (length) {\n if (pendingLength < length*3) {\n //console.log(length, pendingLength);\n output.fill(0);\n return; // TODO: send sync msg?\n }\n for (var i=0; i AudioStream) | null = null;\n\n/** Install the streaming output. Pass null to go back to a Web Audio graph. */\nexport function setAudioStreamFactory(factory: ((sourceRate: number) => AudioStream) | null) {\n audioStreamFactory = factory;\n}\n\n// samples per chunk; the same size the IDE's ScriptProcessor asks for\nexport const AUDIO_CHUNK_SAMPLES = 2048;\n\nexport var SampleAudio = function(clockfreq) {\n var self = this;\n var sfrac, sinc, accum;\n var buffer, bufpos, bufferlist;\n var ifill; // physical ring slot the producer is filling\n var written, read; // monotonic buffer counts (committed / consumed)\n var skippedBuffers = 0, lastSkipLog = 0;\n var underruns = 0;\n var fillHist = null; // ring-fill histogram; opt-in via setStatsEnabled\n var collectStats = false;\n // Clock recovery. The emulated frame clock and the AudioContext clock drift apart\n // by a fraction of a percent, so over time the ring either drains (underruns) or\n // fills. We nudge the resample ratio by a hair to hold a small cushion, instead of\n // adding ring depth, which would just add latency.\n var baseSinc = 1; // sr / clockfreq, the untrimmed ratio\n var trim = 1; // current trim around baseSinc\n var fillAvg = 0; // EWMA of ring fill, in buffers\n var lastTrimAdj = 0;\n var FILL_TARGET = 1.5; // buffers of cushion to hold\n var FILL_ALPHA = 0.05; // EWMA weight per consumer pull (~1s at 21 pulls/s)\n var TRIM_GAIN = 0.004; // resample-ratio change per buffer of error\n var MAX_TRIM = 0.01; // cap the pitch shift at 1%\n var TRIM_INTERVAL_MS = 500;\n // The ring is allocated once at MAXBUFFERS and always indexed with that modulo.\n // Measurement showed the fill settles at 1-2 buffers and never nears this cap, so\n // depth is not the latency lever -- the per-buffer floor (bufferlen) is -- and\n // clock recovery holds the small cushion. The cap stays as insurance against the\n // ScriptProcessor callback stalling on the main thread (rendering/GC), ~370ms.\n var MAXBUFFERS = 8;\n var targetDepth = MAXBUFFERS;\n\n function mix(ape) {\n var lbuf = ape.outputBuffer.getChannelData(0);\n var m = this.module;\n if (!m) m = ape.srcElement.module;\n if (!m) return;\n if (m.callback) {\n m.callback(lbuf);\n return;\n } else if (written > read) {\n // copy the oldest committed buffer, then free it\n if (collectStats) fillHist[Math.min(written - read, MAXBUFFERS)]++;\n fillAvg += ((written - read) - fillAvg) * FILL_ALPHA;\n var buf = bufferlist[read % MAXBUFFERS];\n for (var i=0; i= buffer.length) {\n bufpos = 0;\n if (self.stream) {\n // hand the buffer off and get a fresh one; the stream may transfer it\n var out = buffer;\n buffer = new Float32Array(self.bufferlen);\n self.stream.push(out);\n return;\n }\n bufferlist[ifill] = buffer;\n written++;\n // Producer outran the consumer; drop the oldest audio to make room.\n if (written - read >= targetDepth) {\n read++;\n skippedBuffers++;\n var now = Date.now();\n if (now - lastSkipLog > 1000) { // throttle so a sustained overrun doesn't flood the console\n console.warn('SampleAudio: skipped audio buffer(s), total=' + skippedBuffers +\n ', fill=' + (written - read) + '/' + targetDepth +\n ', contextRate=' + self.sr + ', requestedBuf=' + self.bufferlen +\n ', expectedIntervalMs=' + (self.bufferlen * 1000 / self.sr).toFixed(2));\n lastSkipLog = now;\n }\n }\n ifill = (ifill + 1) % MAXBUFFERS;\n buffer = bufferlist[ifill];\n // Clock recovery: steer the resample ratio to hold FILL_TARGET buffers.\n var trimNow = Date.now();\n if (trimNow - lastTrimAdj > TRIM_INTERVAL_MS) {\n lastTrimAdj = trimNow;\n var want = 1 + TRIM_GAIN * (FILL_TARGET - fillAvg);\n if (want > 1 + MAX_TRIM) want = 1 + MAX_TRIM;\n else if (want < 1 - MAX_TRIM) want = 1 - MAX_TRIM;\n trim = want;\n sinc = baseSinc * trim;\n }\n }\n }\n\n this.feedSample = function(value, count) {\n accum += value * count;\n sfrac += sinc * count;\n if (sfrac >= 1) {\n accum /= sfrac;\n while (sfrac >= 1) {\n this.addSingleSample(accum * sinc);\n sfrac -= 1;\n }\n accum *= sfrac;\n }\n }\n\n /**\n * Diagnostics for tuning the ring depth: where the fill actually sits, and how\n * often the producer overruns (drops) or the consumer underruns (silence).\n * Sampling happens on the ScriptProcessor path only; streaming hosts have no ring.\n * The fill histogram is off by default (it touches every consumer pull); turn it\n * on with setStatsEnabled(true) when you want the distribution. The mean/skips/\n * underruns/trim fields are always tracked.\n */\n this.getStats = function() {\n var total = 0, weighted = 0, maxFill = 0;\n if (fillHist) {\n for (var fill=0; fill 0 && fill > maxFill) maxFill = fill;\n }\n }\n return {\n maxBuffers: MAXBUFFERS,\n targetDepth: targetDepth,\n sampleRate: self.sr || 0,\n bufferLength: self.bufferlen || 0,\n fillHistogram: fillHist ? fillHist.slice() : [],\n meanFill: total > 0 ? weighted / total : 0,\n maxFill: maxFill,\n samples: total,\n skippedBuffers: skippedBuffers,\n underruns: underruns,\n fillAvg: fillAvg,\n trim: trim,\n };\n };\n\n /** Turn the per-pull fill histogram on or off (off by default). */\n this.setStatsEnabled = function(on) {\n collectStats = !!on;\n fillHist = collectStats ? new Array(MAXBUFFERS + 1).fill(0) : null;\n };\n \n}\n\n\nexport class SampledAudio {\n sa;\n constructor(sampleRate : number) {\n this.sa = new SampleAudio(sampleRate);\n }\n feedSample(value:number, count:number) {\n this.sa.feedSample(value, count);\n }\n start() {\n this.sa.start();\n }\n stop() {\n this.sa.stop();\n }\n reset() {\n this.sa.reset();\n }\n /** ring-depth diagnostics; see SampleAudio.getStats */\n getStats() {\n return this.sa.getStats ? this.sa.getStats() : null;\n }\n /** turn the ring-fill histogram on or off (off by default) */\n setStatsEnabled(on: boolean) {\n this.sa.setStatsEnabled && this.sa.setStatsEnabled(on);\n }\n /** the rate this sink outputs at, once start() has run (Web Audio or stream) */\n get sampleRate() : number {\n return this.sa.sr || 0;\n }\n}\n\ninterface TssChannel {\n setBufferLength(len : number) : void;\n setSampleRate(rate : number) : void;\n getBuffer() : number[];\n generate(numSamples : number) : void;\n}\n\nexport class TssChannelAdapter {\n channels : TssChannel[];\n audioGain = 1.0 / 8192;\n bufferLength : number;\n\n constructor(chans, oversample:number, sampleRate:number) {\n this.bufferLength = oversample * 2;\n this.channels = chans.generate ? [chans] : chans; // array or single channel\n this.channels.forEach((c) => {\n c.setBufferLength(this.bufferLength);\n c.setSampleRate(sampleRate);\n });\n }\n\n generate(sink:SampledAudioSink) {\n var l = this.bufferLength;\n var bufs = this.channels.map((ch) => ch.getBuffer());\n this.channels.forEach((ch) => {\n ch.generate(l);\n });\n for (let i=0; i total += buf[i]);\n sink.feedSample(total * this.audioGain, 1);\n };\n }\n}\n\n", "\nimport { Probeable, ProbeAll } from \"./devices\";\n\nexport enum ProbeFlags {\n CLOCKS\t = 0x00000000,\n EXECUTE\t = 0x01000000,\n INTERRUPT\t= 0x08000000,\n ILLEGAL\t = 0x09000000,\n SP_PUSH\t = 0x0a000000,\n SP_POP\t = 0x0b000000,\n HAS_VALUE = 0x10000000,\n MEM_READ\t= 0x12000000,\n MEM_WRITE\t= 0x13000000,\n IO_READ\t = 0x14000000,\n IO_WRITE\t= 0x15000000,\n VRAM_READ\t= 0x16000000,\n VRAM_WRITE= 0x17000000,\n DMA_READ = 0x18000000,\n DMA_WRITE = 0x19000000,\n WAIT = 0x1f000000,\n SCANLINE\t= 0x7e000000,\n FRAME\t\t = 0x7f000000,\n}\n\nclass ProbeFrame {\n data : Uint32Array;\n len : number;\n}\n\nexport class ProbeRecorder implements ProbeAll {\n\n m : Probeable; // machine to probe\n buf : Uint32Array; // buffer\n idx : number = 0; // index into buffer\n sl : number = 0; // scanline\n cur_sp = -1; // last stack pointer\n singleFrame : boolean = true; // clear between frames\n\n constructor(m:Probeable, buflen?:number) {\n this.m = m;\n this.reset(buflen || 0x100000);\n }\n start() {\n this.m.connectProbe(this);\n }\n stop() {\n this.m.connectProbe(null);\n }\n reset(newbuflen? : number) {\n if (newbuflen) this.buf = new Uint32Array(newbuflen);\n this.sl = 0;\n this.cur_sp = -1;\n this.clear();\n }\n clear() {\n this.idx = 0;\n }\n logData(a:number) {\n this.log(a);\n }\n log(a:number) {\n // TODO: coalesce READ and EXECUTE and PUSH/POP\n if (this.idx >= this.buf.length) return;\n this.buf[this.idx++] = a;\n }\n relog(a:number) {\n this.buf[this.idx-1] = a;\n }\n lastOp() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xff000000;\n else\n return -1;\n }\n lastAddr() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xffffff;\n else\n return -1;\n }\n addLogBuffer(src: Uint32Array) {\n if (this.idx + src.length > this.buf.length) {\n src = src.slice(0, this.buf.length - this.idx);\n }\n this.buf.set(src, this.idx);\n this.idx += src.length;\n}\n logClocks(clocks:number) {\n clocks |= 0;\n if (clocks > 0) {\n if (this.lastOp() == ProbeFlags.CLOCKS)\n this.relog((this.lastAddr() + clocks) | ProbeFlags.CLOCKS); // coalesce clocks\n else\n this.log(clocks | ProbeFlags.CLOCKS);\n }\n }\n logNewScanline() {\n this.log(ProbeFlags.SCANLINE);\n this.sl++;\n }\n logNewFrame() {\n this.log(ProbeFlags.FRAME);\n this.sl = 0;\n if (this.singleFrame) this.clear();\n }\n logExecute(address:number, SP:number) {\n // record stack pushes/pops (from last instruction)\n if (this.cur_sp !== SP) {\n if (SP < this.cur_sp) {\n this.log(ProbeFlags.SP_PUSH | SP);\n }\n if (SP > this.cur_sp) {\n this.log(ProbeFlags.SP_POP | SP);\n }\n this.cur_sp = SP;\n }\n this.log(address | ProbeFlags.EXECUTE);\n }\n logInterrupt(type:number) {\n this.log(type | ProbeFlags.INTERRUPT);\n }\n logValue(address:number, value:number, op:number) {\n this.log((address & 0xffff) | ((value & 0xff)<<16) | op);\n }\n logRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_READ);\n }\n logWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_WRITE);\n }\n logIORead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_READ);\n }\n logIOWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_WRITE);\n }\n logVRAMRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_READ);\n }\n logVRAMWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_WRITE);\n }\n logIllegal(address:number) {\n this.log(address | ProbeFlags.ILLEGAL);\n }\n logWait(address:number) {\n this.log(address | ProbeFlags.WAIT);\n }\n logDMARead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_READ);\n }\n logDMAWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_WRITE);\n }\n countEvents(op : number) : number {\n var count = 0;\n for (var i=0; i {\n saveState(): S;\n loadState(state: S): void;\n}\n\nexport interface Bus {\n read(a: number): number;\n write(a: number, v: number): void;\n readConst?(a: number): number;\n}\n\nexport interface Bus32 {\n read32(a: number): number;\n write32(a: number, v: number): void;\n readConst32?(a: number): number;\n}\n\nexport interface ClockBased {\n advanceClock(): void;\n}\n\nexport interface InstructionBased {\n advanceInsn(): number;\n}\n\nexport type TrapCondition = () => boolean;\n\nexport interface FrameBased {\n advanceFrame(trap: TrapCondition): number;\n}\n\nexport interface VideoSource {\n getVideoParams(): VideoParams;\n connectVideo(pixels: Uint32Array): void;\n}\n\nexport interface RasterFrameBased extends FrameBased, VideoSource {\n getRasterY(): number;\n getRasterX(): number;\n getRasterCanvasPosition?(): { x: number, y: number };\n}\n\nexport interface VideoParams {\n width: number;\n height: number;\n overscan?: boolean;\n rotate?: number;\n videoFrequency?: number; // default = 60\n aspect?: number;\n}\n\n// TODO: frame buffer optimization (apple2, etc)\n\nexport interface SampledAudioParams {\n sampleRate: number;\n stereo: boolean;\n}\n\nexport interface SampledAudioSink {\n feedSample(value: number, count: number): void;\n //sendAudioFrame(samples:Uint16Array) : void;\n}\n\nexport interface SampledAudioSource {\n getAudioParams(): SampledAudioParams;\n connectAudio(audio: SampledAudioSink): void;\n}\n\nexport interface AcceptsROM {\n loadROM(data: Uint8Array, title?: string, origin?: number): void;\n}\n\nexport interface AcceptsBIOS {\n loadBIOS(data: Uint8Array, title?: string): void;\n}\n\nexport interface Resettable {\n reset(): void;\n}\n\nexport interface MemoryBusConnected {\n connectMemoryBus(bus: Bus): void;\n}\n\nexport interface IOBusConnected {\n connectIOBus(bus: Bus): void;\n}\n\nexport interface CPU extends MemoryBusConnected, Resettable, SavesState {\n getPC(): number;\n getSP(): number;\n isStable(): boolean;\n}\n\nexport interface HasCPU extends Resettable {\n cpu: CPU;\n}\n\nexport interface Interruptable {\n interrupt(type: IT): void;\n}\n\nexport interface SavesInputState {\n loadControlsState(cs: CS): void;\n saveControlsState(): CS;\n}\n\nexport interface AcceptsKeyInput {\n setKeyInput(key: number, code: number, flags: number): void;\n}\n\nexport interface AcceptsPaddleInput {\n setPaddleInput(controller: number, value: number): void;\n setPaddleButton?(index: number, pressed: boolean): void;\n}\n\n// TODO: interface not yet used (setKeyInput() handles joystick)\nexport interface AcceptsJoyInput {\n setJoyInput(joy: number, bitmask: number): void;\n}\n\n// SERIAL I/O\n\nexport interface SerialEvent {\n op: 'read' | 'write';\n value: number;\n nbits: number;\n}\n\n// TODO: all these needed?\nexport interface SerialIOInterface {\n // from machine to platform\n clearToSend(): boolean;\n sendByte(b: number);\n // from platform to machine\n byteAvailable(): boolean;\n recvByte(): number;\n // implement these too\n reset(): void;\n advance(clocks: number): void;\n // refresh() : void;\n}\n\nexport interface HasSerialIO {\n connectSerialIO(serial: SerialIOInterface);\n serialOut?: SerialEvent[]; // outgoing event log\n serialIn?: SerialEvent[]; // incoming queue\n}\n\n/// PROFILER\n\nexport interface Probeable {\n connectProbe(probe: ProbeAll): void;\n}\n\nexport interface ProbeTime {\n logClocks(clocks: number);\n logNewScanline();\n logNewFrame();\n}\n\nexport interface ProbeCPU {\n logExecute(address: number, SP: number);\n logInterrupt(type: number);\n logIllegal(address: number);\n logWait(address: number);\n}\n\nexport interface ProbeBus {\n logRead(address: number, value: number);\n logWrite(address: number, value: number);\n logDMARead(address: number, value: number);\n logDMAWrite(address: number, value: number);\n}\n\nexport interface ProbeIO {\n logIORead(address: number, value: number);\n logIOWrite(address: number, value: number);\n}\n\nexport interface ProbeVRAM {\n logVRAMRead(address: number, value: number);\n logVRAMWrite(address: number, value: number);\n}\n\nexport interface ProbeAll extends ProbeTime, ProbeCPU, ProbeBus, ProbeIO, ProbeVRAM {\n logData(data: number); // entire 32 bits\n addLogBuffer(src: Uint32Array);\n}\n\nexport class NullProbe implements ProbeAll {\n logClocks() { }\n logNewScanline() { }\n logNewFrame() { }\n logExecute() { }\n logInterrupt() { }\n logRead() { }\n logWrite() { }\n logIORead() { }\n logIOWrite() { }\n logVRAMRead() { }\n logVRAMWrite() { }\n logIllegal() { }\n logWait() { }\n logDMARead() { }\n logDMAWrite() { }\n logData() { }\n addLogBuffer(src: Uint32Array) { }\n}\n\n/// CONVENIENCE\n\nexport interface BasicMachineControlsState {\n inputs: Uint8Array;\n}\n\nexport interface BasicMachineState extends BasicMachineControlsState {\n c: any; // TODO\n ram: Uint8Array;\n}\n\nexport abstract class BasicHeadlessMachine implements HasCPU, Bus, AcceptsROM, Probeable,\n SavesState, SavesInputState {\n\n abstract cpuFrequency: number;\n abstract defaultROMSize: number;\n\n abstract cpu: CPU;\n abstract ram: Uint8Array;\n\n rom: Uint8Array;\n inputs: Uint8Array = new Uint8Array(32);\n handler: (key, code, flags) => void; // keyboard handler\n\n nullProbe = new NullProbe();\n probe: ProbeAll = this.nullProbe;\n // True only while a real probe is attached. The probe wrapper around the CPU\n // buses costs ~20% of a frame even when every call lands in NullProbe, so it\n // is spliced in on connectProbe() and taken back out on disconnect rather\n // than left installed for the life of the machine.\n probing: boolean = false;\n // the buses as the machine wired them, before any probe wrapper\n protected cpuMemoryBus: Bus & Partial;\n protected cpuIOBus: Bus;\n\n abstract read(a: number): number;\n abstract write(a: number, v: number): void;\n\n setKeyInput(key: number, code: number, flags: number): void {\n this.handler && this.handler(key, code, flags);\n }\n connectProbe(probe: ProbeAll): void {\n this.probe = probe || this.nullProbe;\n var probing = this.probe !== this.nullProbe;\n if (probing !== this.probing) {\n this.probing = probing;\n this.rewireCPUBuses();\n }\n }\n /** Connect the CPU to the raw buses, or to probe-wrapped ones while probing. */\n protected rewireCPUBuses(): void {\n if (this.cpuMemoryBus) {\n this.cpu.connectMemoryBus(this.probing ? this.probeMemoryBus(this.cpuMemoryBus) : this.cpuMemoryBus);\n }\n if (this.cpuIOBus) {\n this.cpu['connectIOBus'](this.probing ? this.probeIOBus(this.cpuIOBus) : this.cpuIOBus);\n }\n }\n reset() {\n this.cpu.reset();\n }\n loadROM(data: Uint8Array, title?: string, origin?: number): void {\n if (!this.rom) this.rom = new Uint8Array(this.defaultROMSize);\n if (data.length > this.rom.length)\n throw new Error(`ROM too big: ${data.length} > ${this.rom.length}`);\n this.rom.set(data);\n }\n loadState(state) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.inputs.set(state.inputs);\n }\n saveState() {\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(0),\n inputs: this.inputs.slice(0),\n };\n }\n loadControlsState(state) {\n this.inputs.set(state.inputs);\n }\n saveControlsState() {\n return {\n inputs: this.inputs.slice(0)\n };\n }\n advanceCPU() {\n var c = this.cpu as any;\n var n = 1;\n if (this.probing && this.cpu.isStable()) { this.probe.logExecute(this.cpu.getPC(), this.cpu.getSP()); }\n if (c.advanceClock) { c.advanceClock(); }\n else if (c.advanceInsn) { n = c.advanceInsn(1); }\n if (this.probing) { this.probe.logClocks(n); }\n return n;\n }\n probeMemoryBus(membus: Bus & Partial): Bus & Partial {\n return {\n read: (a) => {\n let val = membus.read(a);\n this.probe.logRead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write(a, v);\n },\n read32: (a) => {\n let val = membus.read32(a);\n this.probe.logRead(a, val);\n return val;\n },\n write32: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write32(a, v);\n }\n };\n }\n connectCPUMemoryBus(membus: Bus): void {\n this.cpuMemoryBus = membus as Bus & Bus32;\n this.rewireCPUBuses();\n }\n probeIOBus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logIORead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logIOWrite(a, v);\n iobus.write(a, v);\n },\n };\n }\n probeDMABus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logDMARead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logDMAWrite(a, v);\n iobus.write(a, v);\n }\n };\n }\n connectCPUIOBus(iobus: Bus): void {\n this.cpuIOBus = iobus;\n this.rewireCPUBuses();\n }\n}\n\nexport abstract class BasicMachine extends BasicHeadlessMachine implements SampledAudioSource {\n\n abstract canvasWidth: number;\n abstract numVisibleScanlines: number;\n abstract sampleRate: number;\n overscan: boolean = false;\n rotate: number = 0;\n aspectRatio: number;\n\n pixels: Uint32Array;\n audio: SampledAudioSink;\n\n scanline: number;\n\n getAudioParams(): SampledAudioParams {\n return { sampleRate: this.sampleRate, stereo: false };\n }\n connectAudio(audio: SampledAudioSink): void {\n this.audio = audio;\n }\n getVideoParams(): VideoParams {\n return {\n width: this.canvasWidth,\n height: this.numVisibleScanlines,\n aspect: this.aspectRatio,\n overscan: this.overscan,\n rotate: this.rotate\n };\n }\n connectVideo(pixels: Uint32Array): void {\n this.pixels = pixels;\n }\n}\n\nexport abstract class BasicScanlineMachine extends BasicMachine implements RasterFrameBased {\n\n abstract numTotalScanlines: number;\n abstract cpuCyclesPerLine: number;\n\n abstract startScanline(): void;\n abstract drawScanline(): void;\n\n frameCycles: number;\n\n advanceFrame(trap: TrapCondition): number {\n this.preFrame();\n var endLineClock = 0;\n var steps = 0;\n this.probe.logNewFrame();\n this.frameCycles = 0;\n for (var sl = 0; sl < this.numTotalScanlines; sl++) {\n endLineClock += this.cpuCyclesPerLine; // could be fractional\n this.scanline = sl;\n this.startScanline();\n while (this.frameCycles < endLineClock) {\n if (trap && trap()) {\n sl = 999;\n break;\n }\n this.frameCycles += this.advanceCPU();\n steps++;\n }\n this.drawScanline();\n this.probe.logNewScanline();\n this.probe.logClocks(Math.floor(this.frameCycles - endLineClock)); // remainder of prev. line\n }\n this.postFrame();\n return steps; // TODO: return steps, not clock? for recorder\n }\n preFrame() { }\n postFrame() { }\n getRasterY() { return this.scanline; }\n getRasterX() { return this.frameCycles % this.cpuCyclesPerLine; }\n}\n", "\nimport { hex } from \"../util\";\n\nconst Z80_OPS = [\"nop\",\"ld bc,xx\",\"ld (bc),a\",\"inc bc\",\"inc b\",\"dec b\",\"ld b,x\",\"rlca\",\"ex af,af'\",\"add hl,bc\",\"ld a,(bc)\",\"dec bc\",\"inc c\",\"dec c\",\"ld c,x\",\"rrca\",\"djnz x\",\"ld de,xx\",\"ld (de),a\",\"inc de\",\"inc d\",\"dec d\",\"ld d,x\",\"rla\",\"jr x\",\"add hl,de\",\"ld a,(de)\",\"dec de\",\"inc e\",\"dec e\",\"ld e,x\",\"rra\",\"jr nz,x\",\"ld hl,xx\",\"ld (xx),hl\",\"inc hl\",\"inc h\",\"dec h\",\"ld h,x\",\"daa\",\"jr z,x\",\"add hl,hl\",\"ld hl,(xx)\",\"dec hl\",\"inc l\",\"dec l\",\"ld l,x\",\"cpl\",\"jr nc,x\",\"ld sp,xx\",\"ld (xx),a\",\"inc sp\",\"inc (hl)\",\"dec (hl)\",\"ld (hl),x\",\"scf\",\"jr c,x\",\"add hl,sp\",\"ld a,(xx)\",\"dec sp\",\"inc a\",\"dec a\",\"ld a,x\",\"ccf\",\"ld b,b\",\"ld b,c\",\"ld b,d\",\"ld b,e\",\"ld b,h\",\"ld b,l\",\"ld b,(hl)\",\"ld b,a\",\"ld c,b\",\"ld c,c\",\"ld c,d\",\"ld c,e\",\"ld c,h\",\"ld c,l\",\"ld c,(hl)\",\"ld c,a\",\"ld d,b\",\"ld d,c\",\"ld d,d\",\"ld d,e\",\"ld d,h\",\"ld d,l\",\"ld d,(hl)\",\"ld d,a\",\"ld e,b\",\"ld e,c\",\"ld e,d\",\"ld e,e\",\"ld e,h\",\"ld e,l\",\"ld e,(hl)\",\"ld e,a\",\"ld h,b\",\"ld h,c\",\"ld h,d\",\"ld h,e\",\"ld h,h\",\"ld h,l\",\"ld h,(hl)\",\"ld h,a\",\"ld l,b\",\"ld l,c\",\"ld l,d\",\"ld l,e\",\"ld l,h\",\"ld l,l\",\"ld l,(hl)\",\"ld l,a\",\"ld (hl),b\",\"ld (hl),c\",\"ld (hl),d\",\"ld (hl),e\",\"ld (hl),h\",\"ld (hl),l\",\"halt\",\"ld (hl),a\",\"ld a,b\",\"ld a,c\",\"ld a,d\",\"ld a,e\",\"ld a,h\",\"ld a,l\",\"ld a,(hl)\",\"ld a,a\",\"add a,b\",\"add a,c\",\"add a,d\",\"add a,e\",\"add a,h\",\"add a,l\",\"add a,(hl)\",\"add a,a\",\"adc a,b\",\"adc a,c\",\"adc a,d\",\"adc a,e\",\"adc a,h\",\"adc a,l\",\"adc a,(hl)\",\"adc a,a\",\"sub b\",\"sub c\",\"sub d\",\"sub e\",\"sub h\",\"sub l\",\"sub (hl)\",\"sub a\",\"sbc a,b\",\"sbc a,c\",\"sbc a,d\",\"sbc a,e\",\"sbc a,h\",\"sbc a,l\",\"sbc a,(hl)\",\"sbc a,a\",\"and b\",\"and c\",\"and d\",\"and e\",\"and h\",\"and l\",\"and (hl)\",\"and a\",\"xor b\",\"xor c\",\"xor d\",\"xor e\",\"xor h\",\"xor l\",\"xor (hl)\",\"xor a\",\"or b\",\"or c\",\"or d\",\"or e\",\"or h\",\"or l\",\"or (hl)\",\"or a\",\"cp b\",\"cp c\",\"cp d\",\"cp e\",\"cp h\",\"cp l\",\"cp (hl)\",\"cp a\",\"ret nz\",\"pop bc\",\"jp nz,xx\",\"jp xx\",\"call nz,xx\",\"push bc\",\"add a,x\",\"rst 00h\",\"ret z\",\"ret\",\"jp z,xx\",\"xxBITxx\",\"call z,xx\",\"call xx\",\"adc a,x\",\"rst 08h\",\"ret nc\",\"pop de\",\"jp nc,xx\",\"out (x),a\",\"call nc,xx\",\"push de\",\"sub x\",\"rst 10h\",\"ret c\",\"exx\",\"jp c,xx\",\"in a,(x)\",\"call c,xx\",\"xxIXxx\",\"sbc a,x\",\"rst 18h\",\"ret po\",\"pop hl\",\"jp po,xx\",\"ex (sp),hl\",\"call po,xx\",\"push hl\",\"and x\",\"rst 20h\",\"ret pe\",\"jp (hl)\",\"jp pe,xx\",\"ex de,hl\",\"call pe,xx\",\"xx80xx\",\"xor x\",\"rst 28h\",\"ret p\",\"pop af\",\"jp p,xx\",\"di\",\"call p,xx\",\"push af\",\"or x\",\"rst 30h\",\"ret m\",\"ld sp,hl\",\"jp m,xx\",\"ei\",\"call m,xx\",\"xxIYxx\",\"cp x\",\"rst 38h\"];\nconst Z80_OPS_ED = [\"in b,(c)\",\"out (c),b\",\"sbc hl,bc\",\"ld (xx),bc\",\"neg\",\"retn\",\"im 0\",\"ld i,a\",\"in c,(c)\",\"out (c),c\",\"adc hl,bc\",\"ld bc,(xx)\",\"neg\",\"reti\",\"\",\"ld r,a\",\"in d,(c)\",\"out (c),d\",\"sbc hl,de\",\"ld (xx),de\",\"neg\",\"retn\",\"im 1\",\"ld a,i\",\"in e,(c)\",\"out (c),e\",\"adc hl,de\",\"ld de,(xx)\",\"neg\",\"retn\",\"im 2\",\"ld a,r\",\"in h,(c)\",\"out (c),h\",\"sbc hl,hl\",\"ld (xx),hl\",\"neg\",\"retn\",\"\",\"rrd\",\"in l,(c)\",\"out (c),l\",\"adc hl,hl\",\"ld hl,(xx)\",\"neg\",\"retn\",\"\",\"rld\",\"in f,(c)\",\"out (c),f\",\"sbc hl,sp\",\"ld (xx),sp\",\"neg\",\"retn\",\"\",\"\",\"in a,(c)\",\"out (c),a\",\"adc hl,sp\",\"ld sp,(xx)\",\"neg\",\"reti\",\"\",\"\",\"ldi\",\"cpi\",\"ini\",\"outi\",\"\",\"\",\"\",\"\",\"ldd\",\"cpd\",\"ind\",\"outd\",\"\",\"\",\"\",\"\",\"ldir\",\"cpir\",\"inir\",\"otir\",\"\",\"\",\"\",\"\",\"lddr\",\"cpdr\",\"indr\",\"otdr\",\"\",\"\",\"\",\"\"];\nconst Z80_OPS_CB = [\"rlc b\",\"rlc c\",\"rlc d\",\"rlc e\",\"rlc h\",\"rlc l\",\"rlc (hl)\",\"rlc a\",\"rrc b\",\"rrc c\",\"rrc d\",\"rrc e\",\"rrc h\",\"rrc l\",\"rrc (hl)\",\"rrc a\",\"rl b\",\"rl c\",\"rl d\",\"rl e\",\"rl h\",\"rl l\",\"rl (hl)\",\"rl a\",\"rr b\",\"rr c\",\"rr d\",\"rr e\",\"rr h\",\"rr l\",\"rr (hl)\",\"rr a\",\"sla b\",\"sla c\",\"sla d\",\"sla e\",\"sla h\",\"sla l\",\"sla (hl)\",\"sla a\",\"sra b\",\"sra c\",\"sra d\",\"sra e\",\"sra h\",\"sra l\",\"sra (hl)\",\"sra a\",\"sll b\",\"sll c\",\"sll d\",\"sll e\",\"sll h\",\"sll l\",\"sll (hl)\",\"sll a\",\"srl b\",\"srl c\",\"srl d\",\"srl e\",\"srl h\",\"srl l\",\"srl (hl)\",\"srl a\",\"bit 0,b\",\"bit 0,c\",\"bit 0,d\",\"bit 0,e\",\"bit 0,h\",\"bit 0,l\",\"bit 0,(hl)\",\"bit 0,a\",\"bit 1,b\",\"bit 1,c\",\"bit 1,d\",\"bit 1,e\",\"bit 1,h\",\"bit 1,l\",\"bit 1,(hl)\",\"bit 1,a\",\"bit 2,b\",\"bit 2,c\",\"bit 2,d\",\"bit 2,e\",\"bit 2,h\",\"bit 2,l\",\"bit 2,(hl)\",\"bit 2,a\",\"bit 3,b\",\"bit 3,c\",\"bit 3,d\",\"bit 3,e\",\"bit 3,h\",\"bit 3,l\",\"bit 3,(hl)\",\"bit 3,a\",\"bit 4,b\",\"bit 4,c\",\"bit 4,d\",\"bit 4,e\",\"bit 4,h\",\"bit 4,l\",\"bit 4,(hl)\",\"bit 4,a\",\"bit 5,b\",\"bit 5,c\",\"bit 5,d\",\"bit 5,e\",\"bit 5,h\",\"bit 5,l\",\"bit 5,(hl)\",\"bit 5,a\",\"bit 6,b\",\"bit 6,c\",\"bit 6,d\",\"bit 6,e\",\"bit 6,h\",\"bit 6,l\",\"bit 6,(hl)\",\"bit 6,a\",\"bit 7,b\",\"bit 7,c\",\"bit 7,d\",\"bit 7,e\",\"bit 7,h\",\"bit 7,l\",\"bit 7,(hl)\",\"bit 7,a\",\"res 0,b\",\"res 0,c\",\"res 0,d\",\"res 0,e\",\"res 0,h\",\"res 0,l\",\"res 0,(hl)\",\"res 0,a\",\"res 1,b\",\"res 1,c\",\"res 1,d\",\"res 1,e\",\"res 1,h\",\"res 1,l\",\"res 1,(hl)\",\"res 1,a\",\"res 2,b\",\"res 2,c\",\"res 2,d\",\"res 2,e\",\"res 2,h\",\"res 2,l\",\"res 2,(hl)\",\"res 2,a\",\"res 3,b\",\"res 3,c\",\"res 3,d\",\"res 3,e\",\"res 3,h\",\"res 3,l\",\"res 3,(hl)\",\"res 3,a\",\"res 4,b\",\"res 4,c\",\"res 4,d\",\"res 4,e\",\"res 4,h\",\"res 4,l\",\"res 4,(hl)\",\"res 4,a\",\"res 5,b\",\"res 5,c\",\"res 5,d\",\"res 5,e\",\"res 5,h\",\"res 5,l\",\"res 5,(hl)\",\"res 5,a\",\"res 6,b\",\"res 6,c\",\"res 6,d\",\"res 6,e\",\"res 6,h\",\"res 6,l\",\"res 6,(hl)\",\"res 6,a\",\"res 7,b\",\"res 7,c\",\"res 7,d\",\"res 7,e\",\"res 7,h\",\"res 7,l\",\"res 7,(hl)\",\"res 7,a\",\"set 0,b\",\"set 0,c\",\"set 0,d\",\"set 0,e\",\"set 0,h\",\"set 0,l\",\"set 0,(hl)\",\"set 0,a\",\"set 1,b\",\"set 1,c\",\"set 1,d\",\"set 1,e\",\"set 1,h\",\"set 1,l\",\"set 1,(hl)\",\"set 1,a\",\"set 2,b\",\"set 2,c\",\"set 2,d\",\"set 2,e\",\"set 2,h\",\"set 2,l\",\"set 2,(hl)\",\"set 2,a\",\"set 3,b\",\"set 3,c\",\"set 3,d\",\"set 3,e\",\"set 3,h\",\"set 3,l\",\"set 3,(hl)\",\"set 3,a\",\"set 4,b\",\"set 4,c\",\"set 4,d\",\"set 4,e\",\"set 4,h\",\"set 4,l\",\"set 4,(hl)\",\"set 4,a\",\"set 5,b\",\"set 5,c\",\"set 5,d\",\"set 5,e\",\"set 5,h\",\"set 5,l\",\"set 5,(hl)\",\"set 5,a\",\"set 6,b\",\"set 6,c\",\"set 6,d\",\"set 6,e\",\"set 6,h\",\"set 6,l\",\"set 6,(hl)\",\"set 6,a\",\"set 7,b\",\"set 7,c\",\"set 7,d\",\"set 7,e\",\"set 7,h\",\"set 7,l\",\"set 7,(hl)\",\"set 7,a\"];\n\nexport function disassembleZ80(pc:number, b0:number, b1:number, b2:number, b3:number) : {line:string, nbytes:number, isaddr:boolean, iscall?:boolean} {\n\n var op,n,am;\n var bytes = [b0,b1,b2,b3];\n var isaddr = false;\n var iscall = false;\n n=1;\n switch (b0) {\n case 0xcb:\n am = Z80_OPS_CB[b1];\n n++;\n break;\n case 0xed:\n if (b1 >= 0x40 && b1 <= 0x7f) am = Z80_OPS_ED[b1 - 0x40];\n if (b1 >= 0xa0 && b1 <= 0xbf) am = Z80_OPS_ED[b1 - 0xa0 + 0x40];\n n++;\n break;\n case 0xdd:\n case 0xfd:\n var ireg = (b0 == 0xdd) ? 'ix' : 'iy';\n if (b1 == 0xcb) {\n // swap the 3rd and 4th bytes [$dd $cb displacement opcode]\n am = Z80_OPS_CB[b3];\n bytes[2] = b3;\n bytes[3] = b2;\n n++;\n } else {\n am = Z80_OPS[b1];\n }\n am = am.replace(/[(]hl[)]/, '('+ireg+'+x)');\n am = am.replace(/\\bhl\\b/, ireg);\n n++;\n break;\n default:\n am = Z80_OPS[b0];\n break;\n }\n if (!am || !am.length) am = \"??\";\n iscall = /^(call|rst)/.test(am);\n if (/\\bxx\\b/.test(am)) {\n am = am.replace(/\\bxx\\b/,'$'+hex(bytes[n]+(bytes[n+1]<<8), 4));\n n += 2;\n isaddr = true;\n } else if (/\\bx\\b/.test(am)) {\n if (am.startsWith('j')) {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = am.replace(/\\bx\\b/,'$'+hex(offset, 4));\n isaddr = true;\n } else {\n am = am.replace(/\\bx\\b/,'$'+hex(bytes[n], 2));\n }\n n += 1;\n }\n return {line:am.toUpperCase(), nbytes:n, isaddr:isaddr, iscall:iscall};\n};\n", "\"use strict\";\n/*\nThe MIT License (MIT)\nCopyright (c) 2014 Martin Maly, http://retrocip.cz, http://www.uelectronics.info,\ntwitter: @uelectronics\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function CPU6809() {\n\nvar ticks;\nvar rA,rB,rX,rY,rU,rS,PC,CC,DP,\nF_CARRY =1,\nF_OVERFLOW =2,\nF_ZERO =4,\nF_NEGATIVE =8,\nF_IRQMASK =16,\nF_HALFCARRY =32,\nF_FIRQMASK =64,\nF_ENTIRE =128,\n\nvecRESET = 0xFFFE,\nvecNMI = 0xFFFC,\nvecSWI = 0xFFFA,\nvecIRQ = 0xFFF8,\nvecFIRQ = 0xFFF6,\nvecSWI2 = 0xFFF4,\nvecSWI3 = 0xFFF2,\n\nT=0;\n\nvar IRQs;\n\nvar byteTo, byteAt;\n\nvar cycles = [\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 00-0F */\n 0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6, /* 10-1F */\n 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* 20-2F */\n 4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19, /* 30-3F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 40-4F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 50-5F */\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 60-6F */\n 7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7, /* 70-7F */\n 2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0, /* 80-8F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* 90-9F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* A0-AF */\n 5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6, /* B0-BF */\n 2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0, /* C0-CF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* D0-DF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* E0-EF */\n 5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6]; /* F0-FF */\n\n/* Instruction timing for the two-byte opcodes */\nvar cycles2 = [\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0, /* 80-8F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* 90-9F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* A0-AF */\n 0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7, /* B0-BF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, /* C0-CF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* D0-DF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* E0-EF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7]; /* F0-FF */\n\n/* Negative and zero flags for quicker flag settings */\nvar flagsNZ = [\n 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 80-8F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 90-9F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* A0-AF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* B0-BF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* C0-CF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* D0-DF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* E0-EF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]; /* F0-FF */\n\nvar setV8 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x80)>>6);};\nvar setV16 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x8000)>>14);};\nvar getD = function() {return (rA<<8)+rB;};\nvar setD = function(v) {rA = (v>>8)& 0xff;rB=v&0xff;};\nvar PUSHB = function(b) {\n byteTo(--rS, b & 0xff);\n};\nvar PUSHW = function(b) {\n byteTo(--rS, b & 0xff);\n byteTo(--rS, (b>>8) & 0xff);\n};\n\nvar PUSHBU = function(b) {\n byteTo(--rU, b & 0xff);\n};\nvar PUSHWU = function(b) {\n byteTo(--rU, b & 0xff);\n byteTo(--rU, (b>>8) & 0xff);\n};\nvar PULLB = function() {\n return byteAt(rS++);\n};\nvar PULLW = function() {\n return byteAt(rS++) * 256 + byteAt(rS++);\n};\n\nvar PULLBU = function() {\n return byteAt(rU++);\n};\nvar PULLWU = function() {\n return byteAt(rU++) * 256 + byteAt(rU++);\n};\n\nvar PSHS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHW(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHW(rU);i += 2;}\n if (ucTemp & 0x20){PUSHW(rY);i += 2;}\n if (ucTemp & 0x10){PUSHW(rX);i += 2;}\n if (ucTemp & 0x8){PUSHB(DP); i++;}\n if (ucTemp & 0x4){PUSHB(rB); i++;}\n if (ucTemp & 0x2){PUSHB(rA); i++;}\n if (ucTemp & 0x1){PUSHB(CC); i++;}\n T+=i; //timing\n};\nvar PSHU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHWU(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHWU(rS);i += 2;}\n if (ucTemp & 0x20){PUSHWU(rY);i += 2;}\n if (ucTemp & 0x10){PUSHWU(rX);i += 2;}\n if (ucTemp & 0x8){PUSHBU(DP); i++;}\n if (ucTemp & 0x4){PUSHBU(rB); i++;}\n if (ucTemp & 0x2){PUSHBU(rA); i++;}\n if (ucTemp & 0x1){PUSHBU(CC); i++;}\n T+=i; //timing\n};\nvar PULS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLB(); i++;}\n if (ucTemp & 0x2){rA = PULLB(); i++;}\n if (ucTemp & 0x4){rB = PULLB(); i++;}\n if (ucTemp & 0x8){DP = PULLB(); i++;}\n if (ucTemp & 0x10){rX = PULLW();i += 2;}\n if (ucTemp & 0x20){rY = PULLW();i += 2;}\n if (ucTemp & 0x40) {rU = PULLW();i += 2;}\n if (ucTemp & 0x80) {PC = PULLW();i += 2;}\n T+=i; //timing\n};\nvar PULU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLBU(); i++;}\n if (ucTemp & 0x2){rA = PULLBU(); i++;}\n if (ucTemp & 0x4){rB = PULLBU(); i++;}\n if (ucTemp & 0x8){DP = PULLBU(); i++;}\n if (ucTemp & 0x10){rX = PULLWU();i += 2;}\n if (ucTemp & 0x20){rY = PULLWU();i += 2;}\n if (ucTemp & 0x40) {rS = PULLWU();i += 2;}\n if (ucTemp & 0x80) {PC = PULLWU();i += 2;}\n T+=i; //timing\n};\n\n\nvar getPBR = function(ucPostByte) {\n switch(ucPostByte & 0xf) {\n case 0x00: /* D */\n return getD();\n case 0x1: /* X */\n return rX;\n case 0x2: /* Y */\n return rY;\n case 0x3: /* U */\n return rU;\n case 0x4: /* S */\n return rS;\n case 0x5: /* PC */\n return PC;\n case 0x8: /* A */\n return rA;\n case 0x9: /* B */\n return rB;\n case 0xA: /* CC */\n return CC;\n case 0xB: /* DP */\n return DP;\n default: /* illegal */\n return null;\n }\n};\nvar setPBR = function(ucPostByte, v) {\n switch(ucPostByte & 0xf) /* Get destination register */\n {\n case 0x00: /* D */\n setD(v);return;\n case 0x1: /* X */\n rX = v; return;\n case 0x2: /* Y */\n rY = v; return;\n case 0x3: /* U */\n rU = v; return;\n case 0x4: /* S */\n rS = v; return;\n case 0x5: /* PC */\n PC = v; return;\n case 0x8: /* A */\n rA = v; return;\n case 0x9: /* B */\n rB = v; return;\n case 0xA: /* CC */\n CC = v; return;\n case 0xB: /* DP */\n DP = v; return;\n default: /* illegal */\n return;\n }\n};\n\nvar TFREXG = function(ucPostByte, bExchange)\n{\n\n var ucTemp = ucPostByte & 0x88;\n if (ucTemp == 0x80 || ucTemp == 0x08)\n ucTemp = 0; /* PROBLEM! */\n\n if (bExchange)\n {\n ucTemp = getPBR(ucPostByte>>4);\n setPBR(ucPostByte>>4, getPBR(ucPostByte));\n setPBR(ucPostByte, ucTemp);\n }\n else /* Transfer */ {\n setPBR(ucPostByte, getPBR(ucPostByte>>4));\n }\n} ;\n\nvar signed = function(x) {\n return (x>127)?(x-256):x;\n};\nvar signed16 = function(x) {\n return (x>32767)?(x-65536):x;\n};\n\nvar fetch = function() {\n var v = byteAt(PC++);\n PC &= 0xffff;\n return v;\n};\nvar fetch16 = function() {\n var v1 = byteAt(PC++);\n PC &= 0xffff;\n var v2 = byteAt(PC++);\n PC &= 0xffff;\n return v1*256+v2;\n};\n\nvar ReadWord = function(addr) {\n var v1 = byteAt(addr++);\n addr &= 0xffff;\n var v2 = byteAt(addr++);\n addr &= 0xffff;\n return v1*256+v2;\n};\nvar WriteWord = function(addr,v) {\n byteTo(addr++,(v>>8)&0xff);\n addr &= 0xffff;\n byteTo(addr,v&0xff);\n};\n\nvar PostByte = function() {\n var pb = fetch();\n var preg;\n switch (pb & 0x60) {\n case 0:\n preg = rX; break;\n case 0x20:\n preg = rY; break;\n case 0x40:\n preg = rU; break;\n case 0x60:\n preg = rS; break;\n }\n\n var xchg = null;\n var addr = null;\n var sTemp;\n\n if (pb & 0x80) /* Complex stuff */\n {\n switch (pb & 0x0f)\n {\n case 0: /* EA = ,reg+ */\n addr = preg;\n xchg = preg + 1;\n T += 2;\n break;\n case 1: /* EA = ,reg++ */\n addr = preg;\n xchg = preg + 2;\n T += 3;\n break;\n case 2: /* EA = ,-reg */\n xchg = preg - 1;\n addr = xchg;\n T += 2;\n break;\n case 3: /* EA = ,--reg */\n xchg = preg - 2;\n addr = xchg;\n T += 3;\n break;\n case 4: /* EA = ,reg */\n addr = preg;\n break;\n case 5: /* EA = ,reg + B */\n //usAddr = *pReg + (signed short)(signed char)regs->ucRegB;\n addr = preg + signed(rB);\n T += 1;\n break;\n case 6: /* EA = ,reg + A */\n addr = preg + signed(rA);\n T += 1;\n break;\n case 7: /* illegal */\n addr = 0;\n break;\n case 8: /* EA = ,reg + 8-bit offset */\n addr = preg + signed(fetch());\n T += 1;\n break;\n case 9: /* EA = ,reg + 16-bit offset */\n addr = preg + signed16(fetch16());\n T += 4;\n break;\n case 0xA: /* illegal */\n addr = 0;\n break;\n case 0xB: /* EA = ,reg + D */\n T += 4;\n addr = preg + getD();\n break;\n case 0xC: /* EA = PC + 8-bit offset */\n sTemp = signed(fetch());\n addr = PC + sTemp;\n T += 1;\n break;\n case 0xD: /* EA = PC + 16-bit offset */\n sTemp = signed16(fetch16());\n addr = PC + sTemp;\n T += 5;\n break;\n case 0xe: /* Illegal */\n addr = 0;\n break;\n case 0xF: /* EA = [,address] */\n T += 5;\n addr = fetch16();\n break;\n } /* switch */\n\n addr &= 0xffff;\n\n if (pb & 0x10) /* Indirect addressing */\n {\n addr = byteAt(addr)*256+byteAt((addr+1) & 0xffff);\n T += 3;\n }\n }\n else /* Just a 5 bit signed offset + register */\n {\n var sByte = pb & 0x1f;\n if (sByte > 15) /* Two's complement 5-bit value */\n sByte -= 32;\n addr = preg + sByte;\n T += 1;\n }\n\n if (xchg!==null) {\n switch (pb & 0x60) {\n case 0:\n rX = xchg; break;\n case 0x20:\n rY = xchg; break;\n case 0x40:\n rU = xchg; break;\n case 0x60:\n rS = xchg; break;\n }\n\n }\n\n return addr & 0xffff; /* Return the effective address */\n};\n\nvar flagsNZ16 = function(word) {\n CC &= ~(F_ZERO | F_NEGATIVE);\n if (word===0) CC |= F_ZERO;\n if (word & 0x8000) CC |= F_NEGATIVE;\n};\n\n// ============= Operations\n\nvar oINC = function(b) {\n b++;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0 || b == 0x80) CC |= F_OVERFLOW;\n return b;\n};\nvar oDEC = function(b) {\n b--;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0x7f || b == 0xff) CC |= F_OVERFLOW;\n return b;\n};\nvar oSUB = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oSUB16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADD = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oADD16 = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADC = function(b,v) {\n var temp = b+v+(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oSBC = function(b,v) {\n var temp = b-v-(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oCMP = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return;\n};\nvar oCMP16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return;\n};\n\nvar oNEG = function(b) {\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if (b == 0x80)\n CC |= F_OVERFLOW;\n b = ((~b)&0xff) + 1;\n if (b === 0) CC |= F_ZERO;\n if (b & 0x80) CC |= F_NEGATIVE | F_CARRY;\n return b;\n};\n\nvar oLSR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b >>= 1;\n if (b === 0) CC |= F_ZERO;\n return b & 0xff;\n};\nvar oASR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = (b & 0x80) | (b>>1);\n CC |= flagsNZ[b];\n return b;\n};\nvar oASL = function(b) {\n var temp = b;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b <<= 1;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROL = function(b) {\n var temp = b;\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b = b<<1 | oldc;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROR = function(b) {\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = b>>1 | oldc<<7;\n CC |= flagsNZ[b];\n// if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\n\nvar oEOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b |= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oAND = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b &= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oCOM = function(b) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= 0xff;\n CC |= flagsNZ[b];\n CC |= F_CARRY;\n return b;\n};\n\n//----common\nvar dpadd = function() {\n //direct page + 8bit index\n return DP*256 + fetch();\n};\n\nvar step = function() {\n var oldT = T;\n\n var addr = null;\n var pb = null;\n\n var oldPC = PC;\n var opcode = fetch();\n T+=cycles[opcode];\n switch (opcode) {\n case 0x00: //NEG DP\n addr = dpadd();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x03: //COM DP\n addr = dpadd();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x04: //LSR DP\n addr = dpadd();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x06: //ROR DP\n addr = dpadd();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x07: //ASR DP\n addr = dpadd();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x08: //ASL DP\n addr = dpadd();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x09: //ROL DP\n addr = dpadd();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x0A: //DEC DP\n addr = dpadd();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x0C: //INC DP\n addr = dpadd();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x0D: //TST DP\n addr = dpadd();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x0E: //JMP DP\n addr = dpadd();\n PC = addr;\n break;\n case 0x0F: //CLR DP\n addr = dpadd();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n case 0x12: //NOP\n break;\n case 0x13: //SYNC\n break;\n case 0x16: //LBRA relative\n addr = signed16(fetch16());\n PC += addr;\n break;\n case 0x17: //LBSR relative\n addr = signed16(fetch16());\n PUSHW(PC);\n PC += addr;\n break;\n case 0x19: //DAA\n var cf = 0;\n var nhi = rA & 0xf0, nlo = rA & 0x0f;\n if( nlo>0x09 || CC & 0x20 ) cf |= 0x06;\n if( nhi>0x80 && nlo>0x09 ) cf |= 0x60;\n if( nhi>0x90 || CC & 0x01 ) cf |= 0x60;\n addr = cf + rA;\n CC &= ~(F_CARRY | F_NEGATIVE | F_ZERO | F_OVERFLOW);\n if (addr & 0x100)\n CC |= F_CARRY;\n rA = addr & 0xff;\n CC |= flagsNZ[rA];\n break;\n case 0x1A: //ORCC\n CC |= fetch();\n break;\n case 0x1C: //ANDCC\n CC &= fetch();\n break;\n case 0x1D: //SEX\n rA = (rB & 0x80)?0xff:0;\n flagsNZ16(getD());\n CC &= ~F_OVERFLOW;\n break;\n case 0x1E: //EXG\n pb = fetch();\n TFREXG(pb,true);\n break;\n case 0x1F: //EXG\n pb = fetch();\n TFREXG(pb,false);\n break;\n\n case 0x20: //BRA\n addr = signed(fetch());\n PC += addr;\n break;\n case 0x21: //BRN\n addr = signed(fetch());\n break;\n case 0x22: //BHI\n addr = signed(fetch());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed(fetch());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed(fetch());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed(fetch());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed(fetch());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed(fetch());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed(fetch());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed(fetch());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed(fetch());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed(fetch());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n\n case 0x30: //LEAX\n rX = PostByte();\n if (rX===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x31: //LEAY\n rY = PostByte();\n if (rY===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x32: //LEAS\n rS = PostByte();\n break;\n case 0x33: //LEAU\n rU = PostByte();\n break;\n\n case 0x34: //PSHS\n PSHS(fetch());\n break;\n case 0x35: //PULS\n PULS(fetch());\n break;\n case 0x36: //PSHU\n PSHU(fetch());\n break;\n case 0x37: //PULU\n PULU(fetch());\n break;\n case 0x39: //RTS\n PC = PULLW();\n break;\n case 0x3A: //ABX\n rX += rB;\n break;\n case 0x3B: //RTI\n CC = PULLB();\n if (CC & F_ENTIRE) {\n T+=9;\n rA = PULLB();\n rB = PULLB();\n DP = PULLB();\n rX = PULLW();\n rY = PULLW();\n rU = PULLW();\n }\n PC = PULLW();\n break;\n case 0x3C: //CWAI **todo\n CC &= fetch();\n break;\n case 0x3D: //MUL\n addr = rA * rB;\n if (addr===0) CC|=F_ZERO; else CC&=~F_ZERO;\n if (addr&0x80) CC|=F_CARRY; else CC&=~F_CARRY;\n setD(addr);\n break;\n case 0x3F: //SWI\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI);\n break;\n\n case 0x40:\n rA = oNEG(rA);\n break;\n case 0x43:\n rA = oCOM(rA);\n break;\n case 0x44:\n rA = oLSR(rA);\n break;\n case 0x46:\n rA = oROR(rA);\n break;\n case 0x47:\n rA = oASR(rA);\n break;\n case 0x48:\n rA = oASL(rA);\n break;\n case 0x49:\n rA = oROL(rA);\n break;\n case 0x4A:\n rA = oDEC(rA);\n break;\n case 0x4C:\n rA = oINC(rA);\n break;\n case 0x4D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x4F:\n rA = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x50:\n rB = oNEG(rB);\n break;\n case 0x53:\n rB = oCOM(rB);\n break;\n case 0x54:\n rB = oLSR(rB);\n break;\n case 0x56:\n rB = oROR(rB);\n break;\n case 0x57:\n rB = oASR(rB);\n break;\n case 0x58:\n rB = oASL(rB);\n break;\n case 0x59:\n rB = oROL(rB);\n break;\n case 0x5A:\n rB = oDEC(rB);\n break;\n case 0x5C:\n rB = oINC(rB);\n break;\n case 0x5D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0x5F:\n rB = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x60: //NEG indexed\n addr = PostByte();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x63: //COM indexed\n addr = PostByte();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x64: //LSR indexed\n addr = PostByte();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x66: //ROR indexed\n addr = PostByte();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x67: //ASR indexed\n addr = PostByte();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x68: //ASL indexed\n addr = PostByte();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x69: //ROL indexed\n addr = PostByte();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x6A: //DEC indexed\n addr = PostByte();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x6C: //INC indexed\n addr = PostByte();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x6D: //TST indexed\n addr = PostByte();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x6E: //JMP indexed\n addr = PostByte();\n PC = addr;\n break;\n case 0x6F: //CLR indexed\n addr = PostByte();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n\n case 0x70: //NEG extended\n addr = fetch16();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x73: //COM extended\n addr = fetch16();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x74: //LSR extended\n addr = fetch16();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x76: //ROR extended\n addr = fetch16();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x77: //ASR extended\n addr = fetch16();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x78: //ASL extended\n addr = fetch16();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x79: //ROL extended\n addr = fetch16();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x7A: //DEC extended\n addr = fetch16();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x7C: //INC extended\n addr = fetch16();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x7D: //TST extended\n addr = fetch16();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x7E: //JMP extended\n addr = fetch16();\n PC = addr;\n break;\n case 0x7F: //CLR extended\n addr = fetch16();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n // regs A,X\n\n case 0x80: //SUBA imm\n rA = oSUB(rA, fetch());\n break;\n case 0x81: //CMPA imm\n oCMP(rA, fetch());\n break;\n case 0x82: //SBCA imm\n rA = oSBC(rA, fetch());\n break;\n case 0x83: //SUBD imm\n setD(oSUB16(getD(),fetch16()));\n break;\n case 0x84: //ANDA imm\n rA = oAND(rA, fetch());\n break;\n case 0x85: //BITA imm\n oAND(rA, fetch());\n break;\n case 0x86: //LDA imm\n rA = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x88: //EORA imm\n rA = oEOR(rA, fetch());\n break;\n case 0x89: //ADCA imm\n rA = oADC(rA, fetch());\n break;\n case 0x8A: //ORA imm\n rA = oOR(rA, fetch());\n break;\n case 0x8B: //ADDA imm\n rA = oADD(rA, fetch());\n break;\n case 0x8C: //CMPX imm\n oCMP16(rX, fetch16());\n break;\n\n case 0x8D: //JSR imm\n addr = signed(fetch());\n PUSHW(PC);\n PC+=addr;\n break;\n case 0x8E: //LDX imm\n rX = fetch16();\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0x90: //SUBA direct\n addr = dpadd();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0x91: //CMPA direct\n addr = dpadd();\n oCMP(rA, byteAt(addr));\n break;\n case 0x92: //SBCA direct\n addr = dpadd();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0x93: //SUBD direct\n addr = dpadd();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0x94: //ANDA direct\n addr = dpadd();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0x95: //BITA direct\n addr = dpadd();\n oAND(rA, byteAt(addr));\n break;\n case 0x96: //LDA direct\n addr = dpadd();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x97: //STA direct\n addr = dpadd();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x98: //EORA direct\n addr = dpadd();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0x99: //ADCA direct\n addr = dpadd();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0x9A: //ORA direct\n addr = dpadd();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0x9B: //ADDA direct\n addr = dpadd();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0x9C: //CMPX direct\n addr = dpadd();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0x9D: //JSR direct\n addr = dpadd();\n PUSHW(PC);\n PC=addr;\n break;\n case 0x9E: //LDX direct\n addr = dpadd();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STX direct\n addr = dpadd();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xA0: //SUBA indexed\n addr = PostByte();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xA1: //CMPA indexed\n addr = PostByte();\n oCMP(rA, byteAt(addr));\n break;\n case 0xA2: //SBCA indexed\n addr = PostByte();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xA3: //SUBD indexed\n addr = PostByte();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xA4: //ANDA indexed\n addr = PostByte();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xA5: //BITA indexed\n addr = PostByte();\n oAND(rA, byteAt(addr));\n break;\n case 0xA6: //LDA indexed\n addr = PostByte();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA7: //STA indexed\n addr = PostByte();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA8: //EORA indexed\n addr = PostByte();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xA9: //ADCA indexed\n addr = PostByte();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xAA: //ORA indexed\n addr = PostByte();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xAB: //ADDA indexed\n addr = PostByte();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xAC: //CMPX indexed\n addr = PostByte();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xAD: //JSR indexed\n addr = PostByte();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xAE: //LDX indexed\n addr = PostByte();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STX indexed\n addr = PostByte();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xB0: //SUBA extended\n addr = fetch16();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xB1: //CMPA extended\n addr = fetch16();\n oCMP(rA, byteAt(addr));\n break;\n case 0xB2: //SBCA extended\n addr = fetch16();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xB3: //SUBD extended\n addr = fetch16();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xB4: //ANDA extended\n addr = fetch16();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xB5: //BITA extended\n addr = fetch16();\n oAND(rA, byteAt(addr));\n break;\n case 0xB6: //LDA extended\n addr = fetch16();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB7: //STA extended\n addr = fetch16();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB8: //EORA extended\n addr = fetch16();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xB9: //ADCA extended\n addr = fetch16();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xBA: //ORA extended\n addr = fetch16();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xBB: //ADDA extended\n addr = fetch16();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xBC: //CMPX extended\n addr = fetch16();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xBD: //JSR extended\n addr = fetch16();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xBE: //LDX extended\n addr = fetch16();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STX extended\n addr = fetch16();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n //Regs B, Y\n\n case 0xC0: //SUBB imm\n rB = oSUB(rB, fetch());\n break;\n case 0xC1: //CMPB imm\n oCMP(rB, fetch());\n break;\n case 0xC2: //SBCB imm\n rB = oSBC(rB, fetch());\n break;\n case 0xC3: //ADDD imm\n setD(oADD16(getD(),fetch16()));\n break;\n case 0xC4: //ANDB imm\n rB = oAND(rB, fetch());\n break;\n case 0xC5: //BITB imm\n oAND(rB, fetch());\n break;\n case 0xC6: //LDB imm\n rB = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xC8: //EORB imm\n rB = oEOR(rB, fetch());\n break;\n case 0xC9: //ADCB imm\n rB = oADC(rB, fetch());\n break;\n case 0xCA: //ORB imm\n rB = oOR(rB, fetch());\n break;\n case 0xCB: //ADDB imm\n rB = oADD(rB, fetch());\n break;\n case 0xCC: //LDD imm\n addr = fetch16();\n setD(addr);\n flagsNZ16(addr);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xCE: //LDU imm\n rU = fetch16();\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xD0: //SUBB direct\n addr = dpadd();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xD1: //CMPB direct\n addr = dpadd();\n oCMP(rB, byteAt(addr));\n break;\n case 0xD2: //SBCB direct\n addr = dpadd();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xD3: //ADDD direct\n addr = dpadd();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xD4: //ANDB direct\n addr = dpadd();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xD5: //BITB direct\n addr = dpadd();\n oAND(rB, byteAt(addr));\n break;\n case 0xD6: //LDB direct\n addr = dpadd();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD7: //STB direct\n addr = dpadd();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD8: //EORB direct\n addr = dpadd();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xD9: //ADCB direct\n addr = dpadd();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xDA: //ORB direct\n addr = dpadd();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xDB: //ADDB direct\n addr = dpadd();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xDC: //LDD direct\n addr = dpadd();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xDD: //STD direct\n addr = dpadd();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDU direct\n addr = dpadd();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STU direct\n addr = dpadd();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xE0: //SUBB indexed\n addr = PostByte();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xE1: //CMPB indexed\n addr = PostByte();\n oCMP(rB, byteAt(addr));\n break;\n case 0xE2: //SBCB indexed\n addr = PostByte();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xE3: //ADDD indexed\n addr = PostByte();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xE4: //ANDB indexed\n addr = PostByte();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xE5: //BITB indexed\n addr = PostByte();\n oAND(rB, byteAt(addr));\n break;\n case 0xE6: //LDB indexed\n addr = PostByte();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE7: //STB indexed\n addr = PostByte();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE8: //EORB indexed\n addr = PostByte();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xE9: //ADCB indexed\n addr = PostByte();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xEA: //ORB indexed\n addr = PostByte();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xEB: //ADDB indexed\n addr = PostByte();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xEC: //LDD indexed\n addr = PostByte();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xED: //STD indexed\n addr = PostByte();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDU indexed\n addr = PostByte();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STU indexed\n addr = PostByte();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xF0: //SUBB extended\n addr = fetch16();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xF1: //CMPB extended\n addr = fetch16();\n oCMP(rB, byteAt(addr));\n break;\n case 0xF2: //SBCB extended\n addr = fetch16();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xF3: //ADDD extended\n addr = fetch16();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xF4: //ANDB extended\n addr = fetch16();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xF5: //BITB extended\n addr = fetch16();\n oAND(rB, byteAt(addr));\n break;\n case 0xF6: //LDB extended\n addr = fetch16();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF7: //STB extended\n addr = fetch16();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF8: //EORB extended\n addr = fetch16();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xF9: //ADCB extended\n addr = fetch16();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xFA: //ORB extended\n addr = fetch16();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xFB: //ADDB extended\n addr = fetch16();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xFC: //LDD extended\n addr = fetch16();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xFD: //STD extended\n addr = fetch16();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDU extended\n addr = fetch16();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STU extended\n addr = fetch16();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n // page 1\n case 0x10: //page 1\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x21: //BRN\n addr = signed16(fetch16());\n break;\n case 0x22: //BHI\n addr = signed16(fetch16());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed16(fetch16());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed16(fetch16());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed16(fetch16());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed16(fetch16());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed16(fetch16());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed16(fetch16());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed16(fetch16());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed16(fetch16());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed16(fetch16());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n case 0x3f: //SWI2\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI2);\n break;\n case 0x83: //CMPD imm\n oCMP16(getD(),fetch16());\n break;\n case 0x8C: //CMPY imm\n oCMP16(rY,fetch16());\n break;\n case 0x8E: //LDY imm\n rY = fetch16();\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x93: //CMPD direct\n addr = dpadd();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0x9C: //CMPY direct\n addr = dpadd();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0x9E: //LDY direct\n addr = dpadd();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STY direct\n addr = dpadd();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xA3: //CMPD indexed\n addr = PostByte();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xAC: //CMPY indexed\n addr = PostByte();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xAE: //LDY indexed\n addr = PostByte();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STY indexed\n addr = PostByte();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xB3: //CMPD extended\n addr = fetch16();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xBC: //CMPY extended\n addr = fetch16();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xBE: //LDY extended\n addr = fetch16();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STY extended\n addr = fetch16();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xCE: //LDS imm\n rS = fetch16();\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDS direct\n addr = dpadd();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STS direct\n addr = dpadd();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDS indexed\n addr = PostByte();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STS indexed\n addr = PostByte();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDS extended\n addr = fetch16();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STS extended\n addr = fetch16();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n }\n }\n break;\n // page 2\n case 0x11: //page 2\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x3f: //SWI3\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI3);\n break;\n case 0x83: //CMPU imm\n oCMP16(rU, fetch16());\n break;\n case 0x8C: //CMPS imm\n oCMP16(rS, fetch16());\n break;\n case 0x93: //CMPU imm\n addr = dpadd();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0x9C: //CMPS imm\n addr = dpadd();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xA3: //CMPU imm\n addr = PostByte();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xAC: //CMPS imm\n addr = PostByte();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xB3: //CMPU imm\n addr = fetch16();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xBC: //CMPS imm\n addr = fetch16();\n oCMP16(rS, ReadWord(addr));\n break;\n\n }\n }\n break;\n\n\n }\n\n rA &= 0xff;\n rB &= 0xff;\n CC &= 0xff;\n DP &= 0xff;\n rX &= 0xffff;\n rY &= 0xffff;\n rU &= 0xffff;\n rS &= 0xffff;\n PC &= 0xffff;\n return T-oldT;\n\n};\n\nvar reset = function(){\n PC = ReadWord(vecRESET);\n DP = 0;\n CC |= F_FIRQMASK | F_IRQMASK;\n T=0;\n rA=rB=DP=rX=rY=rU=rS=0;\n};\n\n//---------- Disassembler\n\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n\nPSHS 10\nPSHU 11\n\nEXG, TFR 20\n*/\nvar ds = [\n[2, 1,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 1,\"COM\"],\n[2, 1,\"LSR\"],\n[1, 0,\"???\"],\n[2, 1,\"ROR\"],\n[2, 1,\"ASR\"],\n[2, 1,\"LSL\"],\n[2, 1,\"ROL\"],\n[2, 1,\"DEC\"],\n[1, 0,\"???\"],\n[2, 1,\"INC\"],\n[2, 1,\"TST\"],\n[2, 1,\"JMP\"],\n[2, 1,\"CLR\"],\n[1, 0,\"Prefix\"],\n[1, 0,\"Prefix\"],\n[1, 2,\"NOP\"],\n[1, 2,\"SYNC\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 3,\"LBRA\"],\n[3, 3,\"LBSR\"],\n[1, 0,\"???\"],\n[1, 2,\"DAA\"],\n[2, 4,\"ORCC\"],\n[1, 0,\"???\"],\n[2, 4,\"ANDCC\"],\n[1, 2,\"SEX\"],\n[2, 20,\"EXG\"],\n[2, 20,\"TFR\"],\n[2, 5,\"BRA\"],\n[2, 5,\"BRN\"],\n[2, 5,\"BHI\"],\n[2, 5,\"BLS\"],\n[2, 5,\"BCC\"],\n[2, 5,\"BCS\"],\n[2, 5,\"BNE\"],\n[2, 5,\"BEQ\"],\n[2, 5,\"BVC\"],\n[2, 5,\"BVS\"],\n[2, 5,\"BPL\"],\n[2, 5,\"BMI\"],\n[2, 5,\"BGE\"],\n[2, 5,\"BLT\"],\n[2, 5,\"BGT\"],\n[2, 5,\"BLE\"],\n[2, 6,\"LEAX\"],\n[2, 6,\"LEAY\"],\n[2, 6,\"LEAS\"],\n[2, 6,\"LEAU\"],\n[2, 10,\"PSHS\"],\n[2, 10,\"PULS\"],\n[2, 11,\"PSHU\"],\n[2, 11,\"PULU\"],\n[1, 0,\"???\"],\n[1, 2,\"RTS\"],\n[1, 2,\"ABX\"],\n[1, 2,\"RTI\"],\n[2, 2,\"CWAI\"],\n[1, 2,\"MUL\"],\n[1, 2,\"RESET\"],\n[1, 2,\"SWI1\"],\n[1, 2,\"NEGA\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMA\"],\n[1, 2,\"LSRA\"],\n[1, 0,\"???\"],\n[1, 2,\"RORA\"],\n[1, 2,\"ASRA\"],\n[1, 2,\"ASLA\"],\n[1, 2,\"ROLA\"],\n[1, 2,\"DECA\"],\n[1, 0,\"???\"],\n[1, 2,\"INCA\"],\n[1, 2,\"TSTA\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRA\"],\n[1, 2,\"NEGB\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMB\"],\n[1, 2,\"LSRB\"],\n[1, 0,\"???\"],\n[1, 2,\"RORB\"],\n[1, 2,\"ASRB\"],\n[1, 2,\"ASLB\"],\n[1, 2,\"ROLB\"],\n[1, 2,\"DECB\"],\n[1, 0,\"???\"],\n[1, 2,\"INCB\"],\n[1, 2,\"TSTB\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRB\"],\n[2, 6,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 6,\"COM\"],\n[2, 6,\"LSR\"],\n[1, 0,\"???\"],\n[2, 6,\"ROR\"],\n[2, 6,\"ASR\"],\n[2, 6,\"LSL\"],\n[2, 6,\"ROL\"],\n[2, 6,\"DEC\"],\n[1, 0,\"???\"],\n[2, 6,\"INC\"],\n[2, 6,\"TST\"],\n[2, 6,\"JMP\"],\n[2, 6,\"CLR\"],\n[3, 7,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 7,\"COM\"],\n[3, 7,\"LSR\"],\n[1, 0,\"???\"],\n[3, 7,\"ROR\"],\n[3, 7,\"ASR\"],\n[3, 7,\"LSL\"],\n[3, 7,\"ROL\"],\n[3, 7,\"DEC\"],\n[1, 0,\"???\"],\n[3, 7,\"INC\"],\n[3, 7,\"TST\"],\n[3, 7,\"JMP\"],\n[3, 7,\"CLR\"],\n[2, 4,\"SUBA\"],\n[2, 4,\"CMPA\"],\n[2, 4,\"SBCA\"],\n[3, 8,\"SUBD\"],\n[2, 4,\"ANDA\"],\n[2, 4,\"BITA\"],\n[2, 4,\"LDA\"],\n[1, 0,\"???\"],\n[2, 4,\"EORA\"],\n[2, 4,\"ADCA\"],\n[2, 4,\"ORA\"],\n[2, 4,\"ADDA\"],\n[3, 8,\"CMPX\"],\n[2, 5,\"BSR\"],\n[3, 8,\"LDX\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBA\"],\n[2, 1,\"CMPA\"],\n[2, 1,\"SBCA\"],\n[2, 1,\"SUBd\"],\n[2, 1,\"ANDA\"],\n[2, 1,\"BITA\"],\n[2, 1,\"LDA\"],\n[2, 1,\"STA\"],\n[2, 1,\"EORA\"],\n[2, 1,\"ADCA\"],\n[2, 1,\"ORA\"],\n[2, 1,\"ADDA\"],\n[2, 1,\"CMPX\"],\n[2, 1,\"JSR\"],\n[2, 1,\"LDX\"],\n[2, 1,\"STX\"],\n[2, 6,\"SUBA\"],\n[2, 6,\"CMPA\"],\n[2, 6,\"SBCA\"],\n[2, 6,\"SUBD\"],\n[2, 6,\"ANDA\"],\n[2, 6,\"BITA\"],\n[2, 6,\"LDA\"],\n[2, 6,\"STA\"],\n[2, 6,\"EORA\"],\n[2, 6,\"ADCA\"],\n[2, 6,\"ORA\"],\n[2, 6,\"ADDA\"],\n[2, 6,\"CMPX\"],\n[2, 6,\"JSR\"],\n[2, 6,\"LDX\"],\n[2, 6,\"STX\"],\n[3, 7,\"SUBA\"],\n[3, 7,\"CMPA\"],\n[3, 7,\"SBCA\"],\n[3, 7,\"SUBD\"],\n[3, 7,\"ANDA\"],\n[3, 7,\"BITA\"],\n[3, 7,\"LDA\"],\n[3, 7,\"STA\"],\n[3, 7,\"EORA\"],\n[3, 7,\"ADCA\"],\n[3, 7,\"ORA\"],\n[3, 7,\"ADDA\"],\n[3, 7,\"CMPX\"],\n[3, 7,\"JSR\"],\n[3, 7,\"LDX\"],\n[3, 7,\"STX\"],\n[2, 4,\"SUBB\"],\n[2, 4,\"CMPB\"],\n[2, 4,\"SBCB\"],\n[3, 8,\"ADDD\"],\n[2, 4,\"ANDB\"],\n[2, 4,\"BITB\"],\n[2, 4,\"LDB\"],\n[1, 0,\"???\"],\n[2, 4,\"EORB\"],\n[2, 4,\"ADCB\"],\n[2, 4,\"ORB\"],\n[2, 4,\"ADDB\"],\n[3, 8,\"LDD\"],\n[1, 0,\"???\"],\n[3, 8,\"LDU\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBB\"],\n[2, 1,\"CMPB\"],\n[2, 1,\"SBCB\"],\n[2, 1,\"ADDD\"],\n[2, 1,\"ANDB\"],\n[2, 1,\"BITB\"],\n[2, 1,\"LDB\"],\n[2, 1,\"STB\"],\n[2, 1,\"EORB\"],\n[2, 1,\"ADCB\"],\n[2, 1,\"ORB \"],\n[2, 1,\"ADDB\"],\n[2, 1,\"LDD \"],\n[2, 1,\"STD \"],\n[2, 1,\"LDU \"],\n[2, 1,\"STU \"],\n[2, 6,\"SUBB\"],\n[2, 6,\"CMPB\"],\n[2, 6,\"SBCB\"],\n[2, 6,\"ADDD\"],\n[2, 6,\"ANDB\"],\n[2, 6,\"BITB\"],\n[2, 6,\"LDB\"],\n[2, 6,\"STB\"],\n[2, 6,\"EORB\"],\n[2, 6,\"ADCB\"],\n[2, 6,\"ORB\"],\n[2, 6,\"ADDB\"],\n[2, 6,\"LDD\"],\n[2, 6,\"STD\"],\n[2, 6,\"LDU\"],\n[2, 6,\"STU\"],\n[3, 7,\"SUBB\"],\n[3, 7,\"CMPB\"],\n[3, 7,\"SBCB\"],\n[3, 7,\"ADDD\"],\n[3, 7,\"ANDB\"],\n[3, 7,\"BITB\"],\n[3, 7,\"LDB\"],\n[3, 7,\"STB\"],\n[3, 7,\"EORB\"],\n[3, 7,\"ADCB\"],\n[3, 7,\"ORB\"],\n[3, 7,\"ADDB\"],\n[3, 7,\"LDD\"],\n[3, 7,\"STD\"],\n[3, 7,\"LDU\"],\n[3, 7,\"STU\"]\n];\n\nvar ds11 = {\n0x3F: [2,2,\"SWI3\"],\n0x83: [4,8,\"CMPU\"],\n0x8C: [4,8,\"CMPS\"],\n0x93: [3,1,\"CMPU\"],\n0x9C: [3,1,\"CMPS\"],\n0xA3: [3,6,\"CMPU\"],\n0xAC: [3,6,\"CMPS\"],\n0xB3: [4,7,\"CMPU\"],\n0xBC: [4,7,\"CMPS\"]\n};\n\nvar ds10 = {\n0x21:[5,3,\"LBRN\"],\n0x22:[5,3,\"LBHI\"],\n0x23:[5,3,\"LBLS\"],\n0x24:[5,3,\"LBCC\"],\n0x25:[5,3,\"LBCS\"],\n0x26:[5,3,\"LBNE\"],\n0x27:[5,3,\"LBEQ\"],\n0x28:[5,3,\"LBVC\"],\n0x29:[5,3,\"LBVS\"],\n0x2a:[5,3,\"LBPL\"],\n0x2b:[5,3,\"LBMI\"],\n0x2c:[5,3,\"LBGE\"],\n0x2d:[5,3,\"LBLT\"],\n0x2e:[5,3,\"LBGT\"],\n0x2f:[5,3,\"LBLE\"],\n0x3F:[2,2,\"SWI2\"],\n0x83:[4,8,\"CMPD\"],\n0x8C:[4,8,\"CMPY\"],\n0x8E:[4,8,\"LDY\"],\n0x93:[3,1,\"CMPD\"],\n0x9C:[3,1,\"CMPY\"],\n0x9E:[3,1,\"LDY\"],\n0x9F:[3,1,\"STY\"],\n0xA3:[3,6,\"CMPD\"],\n0xAC:[3,6,\"CMPY\"],\n0xAE:[3,6,\"LDY\"],\n0xAF:[3,6,\"STY\"],\n0xB3:[4,7,\"CMPD\"],\n0xBC:[4,7,\"CMPY\"],\n0xBE:[4,7,\"LDY\"],\n0xBF:[4,7,\"STY\"],\n0xCE:[4,8,\"LDS\"],\n0xDE:[3,1,\"LDS\"],\n0xDF:[3,1,\"STS\"],\n0xEE:[3,6,\"LDS\"],\n0xEF:[3,6,\"STS\"],\n0xFE:[4,7,\"LDS\"],\n0xFF:[4,7,\"STS\"]\n};\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n*/\n\nvar disasm = function(i,a,b,c,d,pc) {\n var toHexN = function(n,d) {\n var s = n.toString(16);\n while (s.length >5];\n if (!(pb & 0x80)) {\n //direct5\n var disp = pb & 0x1f;\n if (disp>15) disp = disp-32;\n mnemo+=disp+','+ixr;\n break;\n }\n var ind = pb & 0x10;\n var mod = pb & 0x0f;\n var ofs8 = (b>127)?(b-256):b;\n var ofs16 = ((b*256+c)>32767)?((b*256+c)-65536):(b*256+c);\n if (!ind) {\n switch (mod) {\n case 0: mnemo += \",\"+ixr+'+'; break;\n case 1: mnemo += \",\"+ixr+'++'; break;\n case 2: mnemo += \",-\"+ixr; break;\n case 3: mnemo += \",--\"+ixr; break;\n case 4: mnemo += \",\"+ixr; break;\n case 5: mnemo += \"B,\"+ixr; break;\n case 6: mnemo += \"A,\"+ixr; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += ofs8+\",\"+ixr; bytes++; break;\n case 9: mnemo += ofs16+\",\"+ixr; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"D,\"+ixr; break;\n case 12: mnemo += ofs8+\",PC\"; bytes++; break;\n case 13: mnemo += ofs16+\",PC\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"$\"+toHex4((b*256+c)); bytes+=2; break;\n }\n } else {\n switch (mod) {\n case 0: mnemo += \"???\"; break;\n case 1: mnemo += \"[,\"+ixr+'++]'; break;\n case 2: mnemo += \"???\"; break;\n case 3: mnemo += \"[,--\"+ixr+']'; break;\n case 4: mnemo += \"[,\"+ixr+']'; break;\n case 5: mnemo += \"[B,\"+ixr+']'; break;\n case 6: mnemo += \"[A,\"+ixr+']'; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += \"[\"+ofs8+\",\"+ixr+']'; bytes++; break;\n case 9: mnemo += \"[\"+ofs16+\",\"+ixr+']'; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"[D,\"+ixr+']'; break;\n case 12: mnemo += \"[\"+ofs8+\",PC]\"; bytes++; break;\n case 13: mnemo += \"[\"+ofs16+\",PC]\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"[$\"+toHex4((b*256+c))+']'; bytes+=2; break;\n }\n }\n\n break;\n case 7: //extended\n mnemo+=\"\\t$\"+toHex4(a*256+b); break;\n case 8: //imm16\n mnemo+=\"\\t#$\"+toHex4(a*256+b); break;\n\n case 10: //pshs, puls\n rx = ['PC','U','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 11: //pshs, puls\n rx = ['PC','S','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 20: //TFR etc\n rx = ['D','X','Y','U','S','PC','?','?','A','B','CC','DP','?','?','?','?'];\n mnemo += '\\t'+rx[a>>4]+','+rx[a&0x0f];\n break;\n }\n\n return {line:mnemo,nbytes:bytes};\n };\n\n\n//---------- Exports\n\nreturn {\n steps: function(Ts){\n //T=0;\n while (Ts>0){\n Ts-=step();\n }\n },\n runFrame: function(Tt){\n while (T>i);\n if (n===0) {f+=fx[i].toLowerCase();} else {f+=fx[i];}\n }\n return f;\n },\n disasm: disasm,\n isStable: function() { return true; }\n};\n\n};\n", "\nimport { CPU, Bus, ClockBased, SavesState, Interruptable } from \"../devices\";\nimport { EmuHalt } from \"../emu\";\nimport { hex } from \"../util\";\n\n// Copyright 2015 by Paulo Augusto Peccin. See license.txt distributed with this file.\n\nexport var _MOS6502 = function() {\n var self = this;\n\n this.powerOn = function() {\n this.reset();\n };\n\n this.powerOff = function() {\n };\n\n this.clockPulse = function() {\n if (!RDY) return; // TODO Should be ignored in the last cycle of the instruction\n T++;\n instruction[T]();\n };\n\n this.connectBus = function(aBus) {\n bus = aBus;\n };\n\n this.setRDY = function(boo) {\n RDY = boo;\n };\n\n this.isRDY = function() {\n return RDY;\n }\n\n this.reset = function() {\n I = 1;\n T = -1;\n instruction = [ fetchOpcodeAndDecodeInstruction ]; // Bootstrap instruction\n PC = bus.read(RESET_VECTOR) | (bus.read(RESET_VECTOR + 1) << 8);\n this.setRDY(true);\n };\n\n // Interfaces\n var bus : Bus;\n var RDY : boolean = false;\n\n // Registers\n var PC : number = 0;\n var SP : number = 0;\n var A : number = 0;\n var X : number = 0;\n var Y : number = 0;\n\n // Status Bits\n var N : number = 0;\n var V : number = 0;\n var D : number = 0;\n var I : number = 0;\n var Z : number = 0;\n var C : number = 0;\n\n // Internal decoding registers\n var T : number = -1;\n var opcode : number = -1;\n var instruction : (() => void)[];\n var data : number = 0;\n var AD : number = 0;\n var BA : number = 0;\n var BALCrossed : boolean = false;\n var IA : number = 0;\n var branchOffset : number = 0;\n var branchOffsetCrossAdjust : number = 0;\n\n // Vectors\n const NMI_VECTOR = 0xfffa;\n const RESET_VECTOR = 0xfffc;\n const IRQ_VECTOR = 0xfffe;\n\n // Index registers names\n const rX = 0;\n const rY = 1;\n\n // Status bits names\n const bN = 7;\n const bV = 6;\n // const bE = 5;\t// Not used\n // const bB = 4;\t// Not used\n // const bD = 3; // Not used\n // const bI = 2; // Not used\n const bZ = 1;\n const bC = 0;\n\n // Auxiliary variables\n // TODO\n //noinspection JSUnusedGlobalSymbols\n this.debug = false;\n //noinspection JSUnusedGlobalSymbols\n this.trace = false;\n\n\n // Internal operations\n\n var fetchOpcodeAndDecodeInstruction = function() {\n opcode = bus.read(PC);\n instruction = instructions[opcode];\n T = 0;\n\n // if (self.trace) self.breakpoint(\"TRACE\");\n // console.log(\"PC: \" + PC + \", op: \" + opcode + \": \" + opcodes[opcode]);\n\n PC++;\n };\n\n var fetchNextOpcode = fetchOpcodeAndDecodeInstruction;\n\n var fetchOpcodeAndDiscard = function() {\n bus.read(PC);\n };\n\n var fetchBranchOffset = function() {\n branchOffset = bus.read(PC);\n PC++;\n };\n\n var fetchADL = function() {\n AD = bus.read(PC);\n PC++;\n };\n\n var fetchADH = function() {\n AD |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchADLFromBA = function() {\n AD = bus.read(BA);\n };\n\n var fetchADHFromBA = function() {\n AD |= bus.read(BA) << 8;\n };\n\n var fetchBAL = function() {\n BA = bus.read(PC);\n PC++;\n };\n\n var fetchBAH = function() {\n BA |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchBALFromIA = function() {\n BA = bus.read(IA);\n };\n\n var fetchBAHFromIA = function() {\n BA |= bus.read(IA) << 8;\n };\n\n var addXtoBAL = function() {\n var low = (BA & 255) + X;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var addYtoBAL = function() {\n var low = (BA & 255) + Y;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAL = function() {\n var low = (BA & 255) + 1;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAHifBALCrossed = function() {\n if (BALCrossed)\n BA = (BA + 0x0100) & 0xffff;\n };\n\n var fetchIAL = function() {\n IA = bus.read(PC);\n PC++;\n };\n\n var fetchIAH = function() {\n IA |= bus.read(PC) << 8;\n PC++;\n };\n\n var add1toIAL = function() {\n var low = (IA & 255) + 1;\n IA = (IA & 0xff00) | (low & 255);\n };\n\n var fetchDataFromImmediate = function() {\n data = bus.read(PC);\n PC++;\n };\n\n var fetchDataFromAD = function() {\n data = bus.read(AD);\n };\n\n var fetchDataFromBA = function() {\n data = bus.read(BA);\n };\n\n var writeDataToAD = function() {\n bus.write(AD, data);\n };\n\n var writeDataToBA = function() {\n bus.write(BA, data);\n };\n\n var addBranchOffsetToPCL = function() {\n var oldLow = (PC & 0x00ff);\n var newLow = (oldLow + branchOffset) & 255;\n // Negative offset?\n if (branchOffset > 127)\n branchOffsetCrossAdjust = (newLow > oldLow) ? -0x0100 : 0;\n else\n branchOffsetCrossAdjust = (newLow < oldLow) ? 0x0100 : 0;\n PC = (PC & 0xff00) | newLow;\n };\n\n var adjustPCHForBranchOffsetCross = function() {\n PC = (PC + branchOffsetCrossAdjust) & 0xffff;\n };\n\n var setZ = function(val) {\n Z = (val === 0) ? 1 : 0;\n };\n\n var setN = function(val) {\n N = (val & 0x080) ? 1 : 0;\n };\n\n var setV = function(boo) {\n V = boo ? 1 : 0;\n };\n\n var setC = function(boo) {\n C = boo ? 1 : 0;\n };\n\n var popFromStack = function() {\n SP = (SP + 1) & 255;\n return bus.read(0x0100 + SP);\n };\n\n var peekFromStack = function() {\n return bus.read(0x0100 + SP);\n };\n\n var pushToStack = function(val) {\n bus.write(0x0100 + SP, val);\n SP = (SP - 1) & 255;\n };\n\n var getStatusBits = function() {\n return N << 7 | V << 6 | 0x30 // Always push with E (bit 5) and B (bit 4) ON\n | D << 3 | I << 2 | Z << 1 | C;\n };\n\n var setStatusBits = function(val) {\n N = val >>> 7; V = val >>> 6 & 1; // E and B flags actually do not exist as real flags, so ignore\n D = val >>> 3 & 1; I = val >>> 2 & 1; Z = val >>> 1 & 1; C = val & 1;\n };\n\n var illegalOpcode = function(op) {\n if (self.debug) self.breakpoint(\"Illegal Opcode: \" + op);\n };\n\n var haltOpcode = function() {\n illegalOpcode(\"KIL/HLT/JAM\");\n // PC has already advanced past the opcode, so the halt is at PC-1\n const addr = (PC - 1) & 0xffff;\n throw new EmuHalt(`CPU executed halt instruction ($${hex(opcode,2)}) at $${hex(addr,4)}`);\n }\n\n\n // Addressing routines\n\n var implied = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var immediateRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var indirectXRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if (BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var zeroPageIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n fetchDataFromBA();\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var indirectYRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if(BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectXWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var zeroPageIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectYWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n var zeroPageReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var zeroPageIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function () {\n addIndex();\n fetchDataFromBA();\n },\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var absoluteIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function () {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectXReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectYReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n // Instructions ========================================================================================\n\n // Complete instruction set\n var opcodes = new Array(256);\n var instructions = new Array(256);\n\n opcodes[0x00] = \"BRK\"; instructions[0x00] = BRK();\n opcodes[0x01] = \"ORA\"; instructions[0x01] = ORA(indirectXRead);\n opcodes[0x02] = \"uKIL\"; instructions[0x02] = uKIL();\n opcodes[0x03] = \"uSLO\"; instructions[0x03] = uSLO(indirectXReadModifyWrite);\n opcodes[0x04] = \"uNOP\"; instructions[0x04] = uNOP(zeroPageRead);\n opcodes[0x05] = \"ORA\"; instructions[0x05] = ORA(zeroPageRead);\n opcodes[0x06] = \"ASL\"; instructions[0x06] = ASL(zeroPageReadModifyWrite);\n opcodes[0x07] = \"uSLO\"; instructions[0x07] = uSLO(zeroPageReadModifyWrite);\n opcodes[0x08] = \"PHP\"; instructions[0x08] = PHP();\n opcodes[0x09] = \"ORA\"; instructions[0x09] = ORA(immediateRead);\n opcodes[0x0a] = \"ASL\"; instructions[0x0a] = ASL_ACC();\n opcodes[0x0b] = \"uANC\"; instructions[0x0b] = uANC(immediateRead);\n opcodes[0x0c] = \"uNOP\"; instructions[0x0c] = uNOP(absoluteRead);\n opcodes[0x0d] = \"ORA\"; instructions[0x0d] = ORA(absoluteRead);\n opcodes[0x0e] = \"ASL\"; instructions[0x0e] = ASL(absoluteReadModifyWrite);\n opcodes[0x0f] = \"uSLO\"; instructions[0x0f] = uSLO(absoluteReadModifyWrite);\n opcodes[0x10] = \"BPL\"; instructions[0x10] = Bxx(bN, 0); // BPL\n opcodes[0x11] = \"ORA\"; instructions[0x11] = ORA(indirectYRead);\n opcodes[0x12] = \"uKIL\"; instructions[0x12] = uKIL();\n opcodes[0x13] = \"uSLO\"; instructions[0x13] = uSLO(indirectYReadModifyWrite);\n opcodes[0x14] = \"uNOP\"; instructions[0x14] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x15] = \"ORA\"; instructions[0x15] = ORA(zeroPageIndexedRead(rX));\n opcodes[0x16] = \"ASL\"; instructions[0x16] = ASL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x17] = \"uSLO\"; instructions[0x17] = uSLO(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x18] = \"CLC\"; instructions[0x18] = CLC();\n opcodes[0x19] = \"ORA\"; instructions[0x19] = ORA(absoluteIndexedRead(rY));\n opcodes[0x1a] = \"uNOP\"; instructions[0x1a] = uNOP(implied);\n opcodes[0x1b] = \"uSLO\"; instructions[0x1b] = uSLO(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x1c] = \"uNOP\"; instructions[0x1c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x1d] = \"ORA\"; instructions[0x1d] = ORA(absoluteIndexedRead(rX));\n opcodes[0x1e] = \"ASL\"; instructions[0x1e] = ASL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x1f] = \"uSLO\"; instructions[0x1f] = uSLO(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x20] = \"JSR\"; instructions[0x20] = JSR();\n opcodes[0x21] = \"AND\"; instructions[0x21] = AND(indirectXRead);\n opcodes[0x22] = \"uKIL\"; instructions[0x22] = uKIL();\n opcodes[0x23] = \"uRLA\"; instructions[0x23] = uRLA(indirectXReadModifyWrite);\n opcodes[0x24] = \"BIT\"; instructions[0x24] = BIT(zeroPageRead);\n opcodes[0x25] = \"AND\"; instructions[0x25] = AND(zeroPageRead);\n opcodes[0x26] = \"ROL\"; instructions[0x26] = ROL(zeroPageReadModifyWrite);\n opcodes[0x27] = \"uRLA\"; instructions[0x27] = uRLA(zeroPageReadModifyWrite);\n opcodes[0x28] = \"PLP\"; instructions[0x28] = PLP();\n opcodes[0x29] = \"AND\"; instructions[0x29] = AND(immediateRead);\n opcodes[0x2a] = \"ROL\"; instructions[0x2a] = ROL_ACC();\n opcodes[0x2b] = \"uANC\"; instructions[0x2b] = uANC(immediateRead);\n opcodes[0x2c] = \"BIT\"; instructions[0x2c] = BIT(absoluteRead);\n opcodes[0x2d] = \"AND\"; instructions[0x2d] = AND(absoluteRead);\n opcodes[0x2e] = \"ROL\"; instructions[0x2e] = ROL(absoluteReadModifyWrite);\n opcodes[0x2f] = \"uRLA\"; instructions[0x2f] = uRLA(absoluteReadModifyWrite);\n opcodes[0x30] = \"BMI\"; instructions[0x30] = Bxx(bN, 1); // BMI\n opcodes[0x31] = \"AND\"; instructions[0x31] = AND(indirectYRead);\n opcodes[0x32] = \"uKIL\"; instructions[0x32] = uKIL();\n opcodes[0x33] = \"uRLA\"; instructions[0x33] = uRLA(indirectYReadModifyWrite);\n opcodes[0x34] = \"uNOP\"; instructions[0x34] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x35] = \"AND\"; instructions[0x35] = AND(zeroPageIndexedRead(rX));\n opcodes[0x36] = \"ROL\"; instructions[0x36] = ROL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x37] = \"uRLA\"; instructions[0x37] = uRLA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x38] = \"SEC\"; instructions[0x38] = SEC();\n opcodes[0x39] = \"AND\"; instructions[0x39] = AND(absoluteIndexedRead(rY));\n opcodes[0x3a] = \"uNOP\"; instructions[0x3a] = uNOP(implied);\n opcodes[0x3b] = \"uRLA\"; instructions[0x3b] = uRLA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x3c] = \"uNOP\"; instructions[0x3c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x3d] = \"AND\"; instructions[0x3d] = AND(absoluteIndexedRead(rX));\n opcodes[0x3e] = \"ROL\"; instructions[0x3e] = ROL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x3f] = \"uRLA\"; instructions[0x3f] = uRLA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x40] = \"RTI\"; instructions[0x40] = RTI();\n opcodes[0x41] = \"EOR\"; instructions[0x41] = EOR(indirectXRead);\n opcodes[0x42] = \"uKIL\"; instructions[0x42] = uKIL();\n opcodes[0x43] = \"uSRE\"; instructions[0x43] = uSRE(indirectXReadModifyWrite);\n opcodes[0x44] = \"uNOP\"; instructions[0x44] = uNOP(zeroPageRead);\n opcodes[0x45] = \"EOR\"; instructions[0x45] = EOR(zeroPageRead);\n opcodes[0x46] = \"LSR\"; instructions[0x46] = LSR(zeroPageReadModifyWrite);\n opcodes[0x47] = \"uSRE\"; instructions[0x47] = uSRE(zeroPageReadModifyWrite);\n opcodes[0x48] = \"PHA\"; instructions[0x48] = PHA();\n opcodes[0x49] = \"EOR\"; instructions[0x49] = EOR(immediateRead);\n opcodes[0x4a] = \"LSR\"; instructions[0x4a] = LSR_ACC();\n opcodes[0x4b] = \"uASR\"; instructions[0x4b] = uASR(immediateRead);\n opcodes[0x4c] = \"JMP\"; instructions[0x4c] = JMP_ABS();\n opcodes[0x4d] = \"EOR\"; instructions[0x4d] = EOR(absoluteRead);\n opcodes[0x4e] = \"LSR\"; instructions[0x4e] = LSR(absoluteReadModifyWrite);\n opcodes[0x4f] = \"uSRE\"; instructions[0x4f] = uSRE(absoluteReadModifyWrite);\n opcodes[0x50] = \"BVC\"; instructions[0x50] = Bxx(bV, 0); // BVC\n opcodes[0x51] = \"EOR\"; instructions[0x51] = EOR(indirectYRead);\n opcodes[0x52] = \"uKIL\"; instructions[0x52] = uKIL();\n opcodes[0x53] = \"uSRE\"; instructions[0x53] = uSRE(indirectYReadModifyWrite);\n opcodes[0x54] = \"uNOP\"; instructions[0x54] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x55] = \"EOR\"; instructions[0x55] = EOR(zeroPageIndexedRead(rX));\n opcodes[0x56] = \"LSR\"; instructions[0x56] = LSR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x57] = \"uSRE\"; instructions[0x57] = uSRE(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x58] = \"CLI\"; instructions[0x58] = CLI();\n opcodes[0x59] = \"EOR\"; instructions[0x59] = EOR(absoluteIndexedRead(rY));\n opcodes[0x5a] = \"uNOP\"; instructions[0x5a] = uNOP(implied);\n opcodes[0x5b] = \"uSRE\"; instructions[0x5b] = uSRE(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x5c] = \"uNOP\"; instructions[0x5c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x5d] = \"EOR\"; instructions[0x5d] = EOR(absoluteIndexedRead(rX));\n opcodes[0x5e] = \"LSR\"; instructions[0x5e] = LSR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x5f] = \"uSRE\"; instructions[0x5f] = uSRE(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x60] = \"RTS\"; instructions[0x60] = RTS();\n opcodes[0x61] = \"ADC\"; instructions[0x61] = ADC(indirectXRead);\n opcodes[0x62] = \"uKIL\"; instructions[0x62] = uKIL();\n opcodes[0x63] = \"uRRA\"; instructions[0x63] = uRRA(indirectXReadModifyWrite);\n opcodes[0x64] = \"uNOP\"; instructions[0x64] = uNOP(zeroPageRead);\n opcodes[0x65] = \"ADC\"; instructions[0x65] = ADC(zeroPageRead);\n opcodes[0x66] = \"ROR\"; instructions[0x66] = ROR(zeroPageReadModifyWrite);\n opcodes[0x67] = \"uRRA\"; instructions[0x67] = uRRA(zeroPageReadModifyWrite);\n opcodes[0x68] = \"PLA\"; instructions[0x68] = PLA();\n opcodes[0x69] = \"ADC\"; instructions[0x69] = ADC(immediateRead);\n opcodes[0x6a] = \"ROR\"; instructions[0x6a] = ROR_ACC();\n opcodes[0x6b] = \"uARR\"; instructions[0x6b] = uARR(immediateRead);\n opcodes[0x6c] = \"JMP\"; instructions[0x6c] = JMP_IND();\n opcodes[0x6d] = \"ADC\"; instructions[0x6d] = ADC(absoluteRead);\n opcodes[0x6e] = \"ROR\"; instructions[0x6e] = ROR(absoluteReadModifyWrite);\n opcodes[0x6f] = \"uRRA\"; instructions[0x6f] = uRRA(absoluteReadModifyWrite);\n opcodes[0x70] = \"BVS\"; instructions[0x70] = Bxx(bV, 1); // BVS\n opcodes[0x71] = \"ADC\"; instructions[0x71] = ADC(indirectYRead);\n opcodes[0x72] = \"uKIL\"; instructions[0x72] = uKIL();\n opcodes[0x73] = \"uRRA\"; instructions[0x73] = uRRA(indirectYReadModifyWrite);\n opcodes[0x74] = \"uNOP\"; instructions[0x74] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x75] = \"ADC\"; instructions[0x75] = ADC(zeroPageIndexedRead(rX));\n opcodes[0x76] = \"ROR\"; instructions[0x76] = ROR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x77] = \"uRRA\"; instructions[0x77] = uRRA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x78] = \"SEI\"; instructions[0x78] = SEI();\n opcodes[0x79] = \"ADC\"; instructions[0x79] = ADC(absoluteIndexedRead(rY));\n opcodes[0x7a] = \"uNOP\"; instructions[0x7a] = uNOP(implied);\n opcodes[0x7b] = \"uRRA\"; instructions[0x7b] = uRRA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x7c] = \"uNOP\"; instructions[0x7c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x7d] = \"ADC\"; instructions[0x7d] = ADC(absoluteIndexedRead(rX));\n opcodes[0x7e] = \"ROR\"; instructions[0x7e] = ROR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x7f] = \"uRRA\"; instructions[0x7f] = uRRA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x80] = \"uNOP\"; instructions[0x80] = uNOP(immediateRead);\n opcodes[0x81] = \"STA\"; instructions[0x81] = STA(indirectXWrite);\n opcodes[0x82] = \"uNOP\"; instructions[0x82] = uNOP(immediateRead);\n opcodes[0x83] = \"uSAX\"; instructions[0x83] = uSAX(indirectXWrite);\n opcodes[0x84] = \"STY\"; instructions[0x84] = STY(zeroPageWrite);\n opcodes[0x85] = \"STA\"; instructions[0x85] = STA(zeroPageWrite);\n opcodes[0x86] = \"STX\"; instructions[0x86] = STX(zeroPageWrite);\n opcodes[0x87] = \"uSAX\"; instructions[0x87] = uSAX(zeroPageWrite);\n opcodes[0x88] = \"DEY\"; instructions[0x88] = DEY();\n opcodes[0x89] = \"uNOP\"; instructions[0x89] = uNOP(immediateRead);\n opcodes[0x8a] = \"TXA\"; instructions[0x8a] = TXA();\n opcodes[0x8b] = \"uANE\"; instructions[0x8b] = uANE(immediateRead);\n opcodes[0x8c] = \"STY\"; instructions[0x8c] = STY(absoluteWrite);\n opcodes[0x8d] = \"STA\"; instructions[0x8d] = STA(absoluteWrite);\n opcodes[0x8e] = \"STX\"; instructions[0x8e] = STX(absoluteWrite);\n opcodes[0x8f] = \"uSAX\"; instructions[0x8f] = uSAX(absoluteWrite);\n opcodes[0x90] = \"BCC\"; instructions[0x90] = Bxx(bC, 0); // BCC\n opcodes[0x91] = \"STA\"; instructions[0x91] = STA(indirectYWrite);\n opcodes[0x92] = \"uKIL\"; instructions[0x92] = uKIL();\n opcodes[0x93] = \"uSHA\"; instructions[0x93] = uSHA(indirectYWrite);\n opcodes[0x94] = \"STY\"; instructions[0x94] = STY(zeroPageIndexedWrite(rX));\n opcodes[0x95] = \"STA\"; instructions[0x95] = STA(zeroPageIndexedWrite(rX));\n opcodes[0x96] = \"STX\"; instructions[0x96] = STX(zeroPageIndexedWrite(rY));\n opcodes[0x97] = \"uSAX\"; instructions[0x97] = uSAX(zeroPageIndexedWrite(rY));\n opcodes[0x98] = \"TYA\"; instructions[0x98] = TYA();\n opcodes[0x99] = \"STA\"; instructions[0x99] = STA(absoluteIndexedWrite(rY));\n opcodes[0x9a] = \"TXS\"; instructions[0x9a] = TXS();\n opcodes[0x9b] = \"uSHS\"; instructions[0x9b] = uSHS(absoluteIndexedWrite(rY));\n opcodes[0x9c] = \"uSHY\"; instructions[0x9c] = uSHY(absoluteIndexedWrite(rX));\n opcodes[0x9d] = \"STA\"; instructions[0x9d] = STA(absoluteIndexedWrite(rX));\n opcodes[0x9e] = \"uSHX\"; instructions[0x9e] = uSHX(absoluteIndexedWrite(rY));\n opcodes[0x9f] = \"uSHA\"; instructions[0x9f] = uSHA(absoluteIndexedWrite(rY));\n opcodes[0xa0] = \"LDY\"; instructions[0xa0] = LDY(immediateRead);\n opcodes[0xa1] = \"LDA\"; instructions[0xa1] = LDA(indirectXRead);\n opcodes[0xa2] = \"LDX\"; instructions[0xa2] = LDX(immediateRead);\n opcodes[0xa3] = \"uLAX\"; instructions[0xa3] = uLAX(indirectXRead);\n opcodes[0xa4] = \"LDY\"; instructions[0xa4] = LDY(zeroPageRead);\n opcodes[0xa5] = \"LDA\"; instructions[0xa5] = LDA(zeroPageRead);\n opcodes[0xa6] = \"LDX\"; instructions[0xa6] = LDX(zeroPageRead);\n opcodes[0xa7] = \"uLAX\"; instructions[0xa7] = uLAX(zeroPageRead);\n opcodes[0xa8] = \"TAY\"; instructions[0xa8] = TAY();\n opcodes[0xa9] = \"LDA\"; instructions[0xa9] = LDA(immediateRead);\n opcodes[0xaa] = \"TAX\"; instructions[0xaa] = TAX();\n opcodes[0xab] = \"uLXA\"; instructions[0xab] = uLXA(immediateRead);\n opcodes[0xac] = \"LDY\"; instructions[0xac] = LDY(absoluteRead);\n opcodes[0xad] = \"LDA\"; instructions[0xad] = LDA(absoluteRead);\n opcodes[0xae] = \"LDX\"; instructions[0xae] = LDX(absoluteRead);\n opcodes[0xaf] = \"uLAX\"; instructions[0xaf] = uLAX(absoluteRead);\n opcodes[0xb0] = \"BCS\"; instructions[0xb0] = Bxx(bC, 1); // BCS\n opcodes[0xb1] = \"LDA\"; instructions[0xb1] = LDA(indirectYRead);\n opcodes[0xb2] = \"uKIL\"; instructions[0xb2] = uKIL();\n opcodes[0xb3] = \"uLAX\"; instructions[0xb3] = uLAX(indirectYRead);\n opcodes[0xb4] = \"LDY\"; instructions[0xb4] = LDY(zeroPageIndexedRead(rX));\n opcodes[0xb5] = \"LDA\"; instructions[0xb5] = LDA(zeroPageIndexedRead(rX));\n opcodes[0xb6] = \"LDX\"; instructions[0xb6] = LDX(zeroPageIndexedRead(rY));\n opcodes[0xb7] = \"uLAX\"; instructions[0xb7] = uLAX(zeroPageIndexedRead(rY));\n opcodes[0xb8] = \"CLV\"; instructions[0xb8] = CLV();\n opcodes[0xb9] = \"LDA\"; instructions[0xb9] = LDA(absoluteIndexedRead(rY));\n opcodes[0xba] = \"TSX\"; instructions[0xba] = TSX();\n opcodes[0xbb] = \"uLAS\"; instructions[0xbb] = uLAS(absoluteIndexedRead(rY));\n opcodes[0xbc] = \"LDY\"; instructions[0xbc] = LDY(absoluteIndexedRead(rX));\n opcodes[0xbd] = \"LDA\"; instructions[0xbd] = LDA(absoluteIndexedRead(rX));\n opcodes[0xbe] = \"LDX\"; instructions[0xbe] = LDX(absoluteIndexedRead(rY));\n opcodes[0xbf] = \"uLAX\"; instructions[0xbf] = uLAX(absoluteIndexedRead(rY));\n opcodes[0xc0] = \"CPY\"; instructions[0xc0] = CPY(immediateRead);\n opcodes[0xc1] = \"CMP\"; instructions[0xc1] = CMP(indirectXRead);\n opcodes[0xc2] = \"uNOP\"; instructions[0xc2] = uNOP(immediateRead);\n opcodes[0xc3] = \"uDCP\"; instructions[0xc3] = uDCP(indirectXReadModifyWrite);\n opcodes[0xc4] = \"CPY\"; instructions[0xc4] = CPY(zeroPageRead);\n opcodes[0xc5] = \"CMP\"; instructions[0xc5] = CMP(zeroPageRead);\n opcodes[0xc6] = \"DEC\"; instructions[0xc6] = DEC(zeroPageReadModifyWrite);\n opcodes[0xc7] = \"uDCP\"; instructions[0xc7] = uDCP(zeroPageReadModifyWrite);\n opcodes[0xc8] = \"INY\"; instructions[0xc8] = INY();\n opcodes[0xc9] = \"CMP\"; instructions[0xc9] = CMP(immediateRead);\n opcodes[0xca] = \"DEX\"; instructions[0xca] = DEX();\n opcodes[0xcb] = \"uSBX\"; instructions[0xcb] = uSBX(immediateRead);\n opcodes[0xcc] = \"CPY\"; instructions[0xcc] = CPY(absoluteRead);\n opcodes[0xcd] = \"CMP\"; instructions[0xcd] = CMP(absoluteRead);\n opcodes[0xce] = \"DEC\"; instructions[0xce] = DEC(absoluteReadModifyWrite);\n opcodes[0xcf] = \"uDCP\"; instructions[0xcf] = uDCP(absoluteReadModifyWrite);\n opcodes[0xd0] = \"BNE\"; instructions[0xd0] = Bxx(bZ, 0); // BNE\n opcodes[0xd1] = \"CMP\"; instructions[0xd1] = CMP(indirectYRead);\n opcodes[0xd2] = \"uKIL\"; instructions[0xd2] = uKIL();\n opcodes[0xd3] = \"uDCP\"; instructions[0xd3] = uDCP(indirectYReadModifyWrite);\n opcodes[0xd4] = \"uNOP\"; instructions[0xd4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xd5] = \"CMP\"; instructions[0xd5] = CMP(zeroPageIndexedRead(rX));\n opcodes[0xd6] = \"DEC\"; instructions[0xd6] = DEC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd7] = \"uDCP\"; instructions[0xd7] = uDCP(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd8] = \"CLD\"; instructions[0xd8] = CLD();\n opcodes[0xd9] = \"CMP\"; instructions[0xd9] = CMP(absoluteIndexedRead(rY));\n opcodes[0xda] = \"uNOP\"; instructions[0xda] = uNOP(implied);\n opcodes[0xdb] = \"uDCP\"; instructions[0xdb] = uDCP(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xdc] = \"uNOP\"; instructions[0xdc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xdd] = \"CMP\"; instructions[0xdd] = CMP(absoluteIndexedRead(rX));\n opcodes[0xde] = \"DEC\"; instructions[0xde] = DEC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xdf] = \"uDCP\"; instructions[0xdf] = uDCP(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xe0] = \"CPX\"; instructions[0xe0] = CPX(immediateRead);\n opcodes[0xe1] = \"SBC\"; instructions[0xe1] = SBC(indirectXRead);\n opcodes[0xe2] = \"uNOP\"; instructions[0xe2] = uNOP(immediateRead);\n opcodes[0xe3] = \"uISB\"; instructions[0xe3] = uISB(indirectXReadModifyWrite);\n opcodes[0xe4] = \"CPX\"; instructions[0xe4] = CPX(zeroPageRead);\n opcodes[0xe5] = \"SBC\"; instructions[0xe5] = SBC(zeroPageRead);\n opcodes[0xe6] = \"INC\"; instructions[0xe6] = INC(zeroPageReadModifyWrite);\n opcodes[0xe7] = \"uISB\"; instructions[0xe7] = uISB(zeroPageReadModifyWrite);\n opcodes[0xe8] = \"INX\"; instructions[0xe8] = INX();\n opcodes[0xe9] = \"SBC\"; instructions[0xe9] = SBC(immediateRead);\n opcodes[0xea] = \"NOP\"; instructions[0xea] = NOP();\n opcodes[0xeb] = \"SBC\"; instructions[0xeb] = SBC(immediateRead);\n opcodes[0xec] = \"CPX\"; instructions[0xec] = CPX(absoluteRead);\n opcodes[0xed] = \"SBC\"; instructions[0xed] = SBC(absoluteRead);\n opcodes[0xee] = \"INC\"; instructions[0xee] = INC(absoluteReadModifyWrite);\n opcodes[0xef] = \"uISB\"; instructions[0xef] = uISB(absoluteReadModifyWrite);\n opcodes[0xf0] = \"BEQ\"; instructions[0xf0] = Bxx(bZ, 1); // BEQ\n opcodes[0xf1] = \"SBC\"; instructions[0xf1] = SBC(indirectYRead);\n opcodes[0xf2] = \"uKIL\"; instructions[0xf2] = uKIL();\n opcodes[0xf3] = \"uISB\"; instructions[0xf3] = uISB(indirectYReadModifyWrite);\n opcodes[0xf4] = \"uNOP\"; instructions[0xf4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xf5] = \"SBC\"; instructions[0xf5] = SBC(zeroPageIndexedRead(rX));\n opcodes[0xf6] = \"INC\"; instructions[0xf6] = INC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf7] = \"uISB\"; instructions[0xf7] = uISB(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf8] = \"SED\"; instructions[0xf8] = SED();\n opcodes[0xf9] = \"SBC\"; instructions[0xf9] = SBC(absoluteIndexedRead(rY));\n opcodes[0xfa] = \"uNOP\"; instructions[0xfa] = uNOP(implied);\n opcodes[0xfb] = \"uISB\"; instructions[0xfb] = uISB(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xfc] = \"uNOP\"; instructions[0xfc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xfd] = \"SBC\"; instructions[0xfd] = SBC(absoluteIndexedRead(rX));\n opcodes[0xfe] = \"INC\"; instructions[0xfe] = INC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xff] = \"uISB\"; instructions[0xff] = uISB(absoluteIndexedReadModifyWrite(rX));\n\n\n // Single Byte instructions\n\n function ASL_ACC() {\n return implied(function() {\n setC(A > 127);\n A = (A << 1) & 255;\n setZ(A);\n setN(A);\n });\n }\n\n function CLC() {\n return implied(function() {\n C = 0;\n });\n }\n\n function CLD() {\n return implied(function() {\n D = 0;\n });\n }\n\n function CLI() {\n return implied(function() {\n I = 0;\n });\n }\n\n function CLV() {\n return implied(function() {\n V = 0;\n });\n }\n\n function DEX() {\n return implied(function() {\n X = (X - 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function DEY() {\n return implied(function() {\n Y = (Y - 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function INX() {\n return implied(function() {\n X = (X + 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function INY() {\n return implied(function() {\n Y = (Y + 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function LSR_ACC() {\n return implied(function() {\n C = A & 0x01;\n A >>>= 1;\n setZ(A);\n N = 0;\n });\n }\n\n function NOP() {\n return implied(function() {\n // nothing\n });\n }\n\n function ROL_ACC() {\n return implied(function() {\n var newC = A > 127;\n A = ((A << 1) | C) & 255;\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function ROR_ACC() {\n return implied(function() {\n var newC = A & 0x01;\n A = (A >>> 1) | (C << 7);\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function SEC() {\n return implied(function() {\n C = 1;\n });\n }\n\n function SED() {\n return implied(function() {\n D = 1;\n });\n }\n\n function SEI() {\n return implied(function() {\n I = 1;\n });\n }\n\n function TAX() {\n return implied(function() {\n X = A;\n setZ(X);\n setN(X);\n });\n }\n\n function TAY() {\n return implied(function() {\n Y = A;\n setZ(Y);\n setN(Y);\n });\n }\n\n function TSX() {\n return implied(function() {\n X = SP;\n setZ(X);\n setN(X);\n });\n }\n\n function TXA() {\n return implied(function() {\n A = X;\n setZ(A);\n setN(A);\n });\n }\n\n function TXS() {\n return implied(function() {\n SP = X;\n });\n }\n\n function TYA() {\n return implied(function() {\n A = Y;\n setZ(A);\n setN(A);\n });\n }\n\n function uKIL() {\n return [\n fetchOpcodeAndDecodeInstruction,\n function() {\n haltOpcode();\n },\n function() {\n T--; // Causes the processor to be stuck in this instruction forever\n }\n ];\n }\n\n function uNOP(addressing) {\n return addressing(function() {\n illegalOpcode(\"NOP/DOP\");\n // nothing\n });\n }\n\n\n // Internal Execution on Memory Data\n\n function ADC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function AND(addressing) {\n return addressing(function() {\n A &= data;\n setZ(A);\n setN(A);\n });\n }\n\n function BIT(addressing) {\n return addressing(function() {\n var par = data;\n setZ(A & par);\n setV(par & 0x40);\n setN(par);\n });\n }\n\n function CMP(addressing) {\n return addressing(function() {\n var val = (A - data) & 255;\n setC(A >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPX(addressing) {\n return addressing(function() {\n var val = (X - data) & 255;\n setC(X >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPY(addressing) {\n return addressing(function() {\n var val = (Y - data) & 255;\n setC(Y >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function EOR(addressing) {\n return addressing(function() {\n A ^= data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDA(addressing) {\n return addressing(function() {\n A = data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDX(addressing) {\n return addressing(function() {\n X = data;\n setZ(X);\n setN(X);\n });\n }\n\n function LDY(addressing) {\n return addressing(function() {\n Y = data;\n setZ(Y);\n setN(Y);\n });\n }\n\n function ORA(addressing) {\n return addressing(function() {\n A |= data;\n setZ(A);\n setN(A);\n });\n }\n\n function SBC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uANC(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANC\");\n A &= data;\n setZ(A);\n N = C = (A & 0x080) ? 1 : 0;\n });\n }\n\n function uANE(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANE\");\n // Exact operation unknown. Do nothing\n });\n }\n\n function uARR(addressing) {\n // Some sources say flags are affected per ROR, others say its more complex. The complex one is chosen\n return addressing(function() {\n illegalOpcode(\"ARR\");\n var val = A & data;\n var oldC = C ? 0x80 : 0;\n val = (val >>> 1) | oldC;\n A = val;\n setZ(val);\n setN(val);\n var comp = A & 0x60;\n if (comp == 0x60) \t\t{ C = 1; V = 0; }\n else if (comp == 0x00) \t{ C = 0; V = 0; }\n else if (comp == 0x20) \t{ C = 0; V = 1; }\n else if (comp == 0x40) \t{ C = 1; V = 1; }\n });\n }\n\n function uASR(addressing) {\n return addressing(function() {\n illegalOpcode(\"ASR\");\n var val = A & data;\n C = (val & 0x01);\t\t// bit 0\n val = val >>> 1;\n A = val;\n setZ(val);\n N = 0;\n });\n }\n\n function uLAS(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAS\");\n var val = SP & data;\n A = val;\n X = val;\n SP = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLAX(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAX\");\n var val = data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLXA(addressing) {\n return addressing(function() {\n // Some sources say its an OR with $EE then AND with IMM, others exclude the OR,\n // others exclude both the OR and the AND. Excluding just the OR...\n illegalOpcode(\"LXA\");\n var val = A /* | 0xEE) */ & data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSBX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SBX\");\n var par = A & X;\n var val = data;\n var newX = (par - val) & 255;\n X = newX;\n setC(par >= val);\n setZ(newX);\n setN(newX);\n });\n }\n\n\n // Store operations\n\n function STA(addressing) {\n return addressing(function() {\n data = A;\n });\n }\n\n function STX(addressing) {\n return addressing(function() {\n data = X;\n });\n }\n\n function STY(addressing) {\n return addressing(function() {\n data = Y;\n });\n }\n\n function uSAX(addressing) {\n return addressing(function() {\n // Some sources say it would affect N and Z flags, some say it wouldn't. Chose not to affect\n illegalOpcode(\"SAX\");\n data = A & X;\n });\n }\n\n function uSHA(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHA\");\n data = A & X & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHS(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHS\");\n var val = A & X;\n SP = val;\n data = val & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHX\");\n data = X & ((BA >>> 8) + 1) & 255; // X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHY(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHY\");\n data = Y & ((BA >>> 8) + 1) & 255; // Y & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n\n // Read-Modify-Write operations\n\n function ASL(addressing) {\n return addressing(function() {\n setC(data > 127);\n var par = (data << 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function DEC(addressing) {\n return addressing(function() {\n var par = (data - 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function INC(addressing) {\n return addressing(function() {\n var par = (data + 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function LSR(addressing) {\n return addressing(function() {\n C = data & 0x01;\n data >>>= 1;\n setZ(data);\n N = 0;\n });\n }\n\n function ROL(addressing) {\n return addressing(function() {\n var newC = data > 127;\n var par = ((data << 1) | C) & 255;\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function ROR(addressing) {\n return addressing(function() {\n var newC = data & 0x01;\n var par = (data >>> 1) | (C << 7);\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function uDCP(addressing) {\n return addressing(function() {\n illegalOpcode(\"DCP\");\n var par = (data - 1) & 255;\n data = par;\n par = A - par;\n setC(par >= 0);\n setZ(par);\n setN(par);\n });\n }\n\n function uISB(addressing) {\n return addressing(function() {\n illegalOpcode(\"ISB\");\n data = (data + 1) & 255; // ISB is the same as SBC but incs the operand first\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uRLA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RLA\");\n var val = data;\n var oldC = C;\n setC(val & 0x80);\t\t// bit 7 was set\n val = ((val << 1) | oldC) & 255;\n data = val;\n A &= val;\n setZ(val); // TODO Verify. May be A instead of val in the flags setting\n setN(val);\n });\n }\n\n function uRRA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RRA\");\n var val = data;\n var oldC = C ? 0x80 : 0;\n setC(val & 0x01);\t\t// bit 0 was set\n val = (val >>> 1) | oldC;\n data = val;\n // RRA is the same as ADC from here\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uSLO(addressing) {\n return addressing(function() {\n illegalOpcode(\"SLO\");\n var val = data;\n setC(val & 0x80);\t\t// bit 7 was set\n val = (val << 1) & 255;\n data = val;\n val = A | val;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSRE(addressing) {\n return addressing(function() {\n illegalOpcode(\"SRE\");\n var val = data;\n setC(val & 0x01);\t\t// bit 0 was set\n val = val >>> 1;\n data = val;\n val = (A ^ val) & 255;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n\n // Miscellaneous operations\n\n function PHA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(A); },\n fetchNextOpcode\n ];\n }\n\n function PHP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(getStatusBits()); },\n fetchNextOpcode\n ];\n }\n\n function PLA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() {\n A = popFromStack();\n setZ(A);\n setN(A);\n },\n fetchNextOpcode\n ];\n }\n\n function PLP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n fetchNextOpcode\n ];\n }\n\n function JSR() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n peekFromStack,\n function() { pushToStack((PC >>> 8) & 0xff); },\n function() { pushToStack(PC & 0xff); },\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function BRK() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"BRK \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits()); }, // set B flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; I = 1; fetchNextOpcode(); }\n ];\n }\n\n function IRQ() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"IRQ \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function NMI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n if (self.debug) self.breakpoint(\"NMI \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(NMI_VECTOR); },\n function() { AD |= bus.read(NMI_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchDataFromImmediate(); },\n fetchNextOpcode\n ];\n }\n\n function JMP_ABS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function JMP_IND() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchIAH,\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() { PC = BA; fetchNextOpcode(); }\n ];\n }\n\n function Bxx(reg, cond) {\n var branchTaken;\n if (reg === bZ) branchTaken = function() { return Z === cond; };\n else if (reg === bN) branchTaken = function() { return N === cond; };\n else if (reg === bC) branchTaken = function() { return C === cond; };\n else branchTaken = function() { return V === cond; };\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBranchOffset,\n function() {\n if (branchTaken()) {\n fetchOpcodeAndDiscard();\n addBranchOffsetToPCL();\n } else {\n fetchNextOpcode();\n }\n },\n function() {\n if(branchOffsetCrossAdjust) {\n fetchOpcodeAndDiscard();\n adjustPCHForBranchOffsetCross();\n } else {\n fetchNextOpcode();\n }\n },\n fetchNextOpcode\n ];\n }\n\n\n // Savestate -------------------------------------------\n\n this.saveState = function():MOS6502State {\n return {\n PC: (PC-1) & 0xffff,\n A: A, X: X, Y: Y, SP: SP,\n N: N, V: V, D: D, I: I, Z: Z, C: C,\n T: T, o: opcode, R: RDY?1:0,\n d: data, AD: AD, BA: BA, BC: BALCrossed?1:0, IA: IA,\n bo: branchOffset, boa: branchOffsetCrossAdjust\n };\n };\n\n this.loadState = function(state:MOS6502State) {\n PC = (state.PC+1) & 0xffff;\n A = state.A; X = state.X; Y = state.Y; SP = state.SP;\n N = state.N; V = state.V; D = state.D; I = state.I; Z = state.Z; C = state.C;\n T = state.T; opcode = state.o; RDY = !!state.R;\n data = state.d; AD = state.AD; BA = state.BA; BALCrossed = !!state.BC; IA = state.IA;\n branchOffset = state.bo; branchOffsetCrossAdjust = state.boa;\n instruction = opcode < 0 ? [ fetchOpcodeAndDecodeInstruction ] : instructions[opcode];\n };\n\n\n // Accessory methods\n\n this.toString = function() {\n return \"CPU \" +\n \" PC: \" + PC.toString(16) + \" op: \" + opcode.toString() + \" T: \" + T + \" data: \" + data + \"\\n\" +\n \" A: \" + A.toString(16) + \" X: \" + X.toString(16) + \" Y: \" + Y.toString(16) + \" SP: \" + SP.toString(16) + \" \" +\n \"N\" + N + \" \" + \"V\" + V + \" \" + \"D\" + D + \" \" + \"I\" + I + \" \" + \"Z\" + Z + \" \" + \"C\" + C + \" \";\n };\n\n this.breakpoint = function(mes) {\n //jt.Util.log(mes);\n if (this.trace) {\n var text = \"CPU Breakpoint! \" + (mes ? \"(\" + mes + \")\" : \"\") + \"\\n\\n\" + this.toString();\n //jt.Util.message(text);\n }\n };\n\n var cycletime = [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0,\n 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4,\n 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ];\n\n var extracycles = [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ];\n\n var insnlengths = [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ];\n\n var validinsns = [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ];\n\n this.getOpcodeMetadata = function(opcode, address) {\n // TODO: more intelligent maximum cycles\n //var i = instructions[opcode];\n return {\n opcode:opcode,\n mnenomic:opcodes[opcode],\n minCycles:cycletime[opcode],\n maxCycles:cycletime[opcode] + extracycles[opcode],\n insnlength:insnlengths[opcode]\n };\n }\n\n // only call when isPCStable() is true\n this.setNMI = function() {\n instruction = NMI();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n this.setIRQ = function() {\n if (!I) { // only if not disabled\n instruction = IRQ();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n }\n\n this.getSP = function() { return SP; }\n this.getPC = function() { return (PC-1) & 0xffff; }\n this.getT = function() { return T; }\n this.isHalted = function() { return opcodes[opcode] == \"uKIL\"; }\n \n this.isPCStable = function() {\n return T == 0;\n }\n};\n\nexport interface MOS6502State {\nPC : number;\nSP : number;\nA : number;\nX : number;\nY : number;\nN : number;\nV : number;\nD : number;\nI : number;\nZ : number;\nC : number;\nT : number;\no : number;\nR : number;\nd : number;\nAD : number;\nBA : number;\nBC : number;\nIA : number;\nbo : number;\nboa : number;\n}\n\nexport enum MOS6502Interrupts { None=0, NMI=1, IRQ=2 };\n\nexport class MOS6502 implements CPU, ClockBased, SavesState, Interruptable {\n\n cpu = new _MOS6502();\n interruptType : MOS6502Interrupts = MOS6502Interrupts.None;\n \n connectMemoryBus(bus:Bus) {\n this.cpu.connectBus(bus);\n }\n advanceClock() {\n if (this.interruptType && this.isStable()) {\n switch (this.interruptType) {\n case MOS6502Interrupts.NMI: this.cpu.setNMI(); break;\n case MOS6502Interrupts.IRQ: this.cpu.setIRQ(); break;\n }\n this.interruptType = 0;\n }\n this.cpu.clockPulse();\n }\n advanceInsn() {\n do {\n this.advanceClock();\n } while (!this.isStable());\n }\n reset() {\n this.cpu.reset();\n this.interruptType = 0;\n }\n interrupt(itype:number) {\n if (this.interruptType != MOS6502Interrupts.NMI) {\n this.interruptType = itype;\n }\n }\n NMI() {\n this.interrupt(MOS6502Interrupts.NMI);\n }\n IRQ() {\n this.interrupt(MOS6502Interrupts.IRQ);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.isHalted();\n }\n saveState() {\n var s = this.cpu.saveState();\n s.it = this.interruptType;\n return s;\n }\n loadState(s) {\n this.cpu.loadState(s);\n this.interruptType = s.it;\n }\n isStable() : boolean {\n return this.cpu.isPCStable();\n }\n getOpcodeMetadata(op: number) {\n return this.cpu.getOpcodeMetadata(op);\n }\n}\n", "\nimport { CpuState, EmuState } from \"./baseplatform\";\nimport { CPU, SampledAudioSink, ProbeAll, NullProbe } from \"./devices\";\nimport { EmuHalt } from \"./emu\";\n\n// WASM Support\n// TODO: detangle from c64\n\nexport abstract class BaseWASMMachine {\n prefix : string;\n instance : WebAssembly.Instance;\n exports : any;\n sys : number;\n pixel_dest : Uint32Array;\n pixel_src : Uint32Array;\n stateptr : number;\n statearr : Uint8Array;\n cpustateptr : number;\n cpustatearr : Uint8Array;\n ctrlstateptr : number;\n ctrlstatearr : Uint8Array;\n cpu : CPU;\n romptr : number;\n romlen : number;\n romarr : Uint8Array;\n biosptr : number;\n biosarr : Uint8Array;\n audio : SampledAudioSink;\n audioarr : Float32Array;\n probe : ProbeAll;\n maxROMSize : number = 0x40000;\n\n abstract getCPUState() : CpuState;\n abstract saveState() : EmuState;\n abstract loadState(state: EmuState);\n\n constructor(prefix: string) {\n this.prefix = prefix;\n var self = this;\n this.cpu = {\n getPC: self.getPC.bind(self),\n getSP: self.getSP.bind(self),\n isStable: self.isStable.bind(self),\n reset: self.reset.bind(self),\n saveState: () => {\n return self.getCPUState();\n },\n loadState: () => {\n console.log(\"loadState not implemented\")\n },\n connectMemoryBus() {\n console.log(\"connectMemoryBus not implemented\")\n },\n }\n }\n getImports(wmod: WebAssembly.Module) {\n return {};\n }\n async fetchWASM() {\n var wasmResponse = await fetch('res/'+this.prefix+'.wasm');\n if (wasmResponse.status == 200 || (wasmResponse as any as Blob).size) {\n var wasmBinary = await wasmResponse.arrayBuffer();\n var wasmCompiled = await WebAssembly.compile(wasmBinary);\n var wasmResult = await WebAssembly.instantiate(wasmCompiled, this.getImports(wasmCompiled));\n this.instance = wasmResult;\n this.exports = wasmResult.exports;\n } else throw new Error('could not load WASM file');\n }\n allocateBIOS(biosBinary: Uint8Array) {\n this.biosptr = this.exports.malloc(biosBinary.byteLength);\n this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength);\n}\n async fetchBIOS() {\n var biosResponse = await fetch('res/'+this.prefix+'.bios');\n if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {\n var biosBinary = new Uint8Array(await biosResponse.arrayBuffer());\n this.allocateBIOS(biosBinary);\n this.loadBIOS(biosBinary);\n } else throw new Error('could not load BIOS file');\n }\n async initWASM() {\n // init machine instance\n this.sys = this.exports.machine_init(this.biosptr);\n let statesize = this.exports.machine_get_state_size();\n this.stateptr = this.exports.malloc(statesize);\n let ctrlstatesize = this.exports.machine_get_controls_state_size();\n this.ctrlstateptr = this.exports.malloc(ctrlstatesize);\n let cpustatesize = this.exports.machine_get_cpu_state_size();\n this.cpustateptr = this.exports.malloc(cpustatesize);\n this.romptr = this.exports.malloc(this.maxROMSize);\n // create state buffers\n // must do this after allocating memory (and everytime we grow memory?)\n this.statearr = new Uint8Array(this.exports.memory.buffer, this.stateptr, statesize);\n this.ctrlstatearr = new Uint8Array(this.exports.memory.buffer, this.ctrlstateptr, ctrlstatesize);\n this.cpustatearr = new Uint8Array(this.exports.memory.buffer, this.cpustateptr, cpustatesize);\n // create audio buffer\n let sampbufsize = 4096*4;\n this.audioarr = new Float32Array(this.exports.memory.buffer, this.exports.machine_get_sample_buffer(), sampbufsize);\n // create ROM buffer\n this.romarr = new Uint8Array(this.exports.memory.buffer, this.romptr, this.maxROMSize);\n // enable c64 joystick map to arrow keys (TODO)\n //this.exports.c64_set_joystick_type(this.sys, 1);\n console.log('machine_init', this.sys, statesize, ctrlstatesize, cpustatesize, sampbufsize);\n }\n async loadWASM() {\n await this.fetchWASM();\n this.exports.memory.grow(96); // TODO: need more when probing?\n await this.fetchBIOS();\n await this.initWASM();\n }\n getPC() : number {\n return this.exports.machine_cpu_get_pc(this.sys);\n }\n getSP() : number {\n return this.exports.machine_cpu_get_sp(this.sys);\n }\n isStable() : boolean {\n return this.exports.machine_cpu_is_stable(this.sys);\n }\n loadROM(rom: Uint8Array) {\n if (rom.length > this.maxROMSize) throw new EmuHalt(`Rom size too big: ${rom.length} bytes`);\n this.romarr.set(rom);\n this.romlen = rom.length;\n console.log('load rom', rom.length, 'bytes');\n this.reset(); // TODO?\n }\n // TODO: can't load after machine_init\n loadBIOS(srcArray: Uint8Array) {\n this.biosarr.set(srcArray);\n }\n reset() {\n this.exports.machine_reset(this.sys);\n }\n /* TODO: we don't need this because c64_exec does this?\n pollControls() {\n this.exports.machine_start_frame(this.sys);\n }\n */\n read(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n readConst(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n write(address: number, value: number) : void {\n this.exports.machine_mem_write(this.sys, address & 0xffff, value & 0xff);\n }\n getAudioParams() {\n return {sampleRate:44100, stereo:false};\n }\n videoOffsetBytes = 0;\n connectVideo(pixels:Uint32Array) : void {\n this.pixel_dest = pixels;\n var pixbuf = this.exports.machine_get_pixel_buffer(this.sys); // save video pointer\n console.log('connectVideo', pixbuf, pixels.length);\n this.pixel_src = new Uint32Array(this.exports.memory.buffer, pixbuf+this.videoOffsetBytes, pixels.length);\n }\n syncVideo() {\n if (this.exports.machine_update_video) {\n this.exports.machine_update_video(this.sys);\n }\n if (this.pixel_dest != null) {\n this.pixel_dest.set(this.pixel_src);\n }\n }\n // assume controls buffer is smaller than cpu buffer\n saveControlsState() : any {\n //console.log(1, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n this.exports.machine_save_controls_state(this.sys, this.ctrlstateptr);\n //console.log(2, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n return { controls:this.ctrlstatearr.slice(0) }\n }\n loadControlsState(state) : void {\n this.ctrlstatearr.set(state.controls);\n this.exports.machine_load_controls_state(this.sys, this.ctrlstateptr);\n }\n connectAudio(audio : SampledAudioSink) : void {\n this.audio = audio;\n }\n syncAudio() {\n if (this.audio != null) {\n var n = this.exports.machine_get_sample_count();\n for (var i=0; i address\n addr2symbol: AddrSymbolMap;\t// address -> symbol\n debuginfo: {}; // extra platform-specific debug info\n symbolsizes?: SymbolMap; // symbol -> size in bytes, if known\n\n constructor(symbolmap: SymbolMap, debuginfo: {}, symbolsizes?: SymbolMap) {\n this.symbolmap = symbolmap;\n this.debuginfo = debuginfo;\n this.symbolsizes = symbolsizes;\n this.addr2symbol = invertMap(symbolmap);\n //// TODO: shouldn't be necc.\n if (!this.addr2symbol[0x0]) this.addr2symbol[0x0] = '$00'; // needed for ...\n this.addr2symbol[0x10000] = '__END__'; // ... dump memory to work\n }\n}\n\ntype MemoryMapType = \"main\" | \"vram\";\ntype MemoryMap = { [type: string]: Segment[] };\n\nexport function isDebuggable(arg: any): arg is Debuggable {\n return arg && typeof arg.getDebugCategories === 'function';\n}\n\nexport interface Debuggable {\n getDebugCategories?(): string[];\n getDebugInfo?(category: string, state: EmuState): string;\n}\n\nexport interface Platform {\n start(): void | Promise;\n reset(): void;\n isRunning(): boolean;\n getToolForFilename(s: string): string;\n getDefaultExtensions(): string[];\n getPresets?(): Preset[];\n pause(): void;\n resume(): void;\n loadROM(title: string, rom: any, origin?: number); // TODO: Uint8Array\n loadBIOS?(title: string, rom: Uint8Array);\n getROMExtension?(rom: FileData): string;\n\n loadState?(state: EmuState): void;\n saveState?(): EmuState;\n loadControlsState?(state: EmuControlsState): void;\n saveControlsState?(): EmuControlsState;\n\n inspect?(ident: string): string;\n disassemble?(addr: number, readfn: (addr: number) => number): DisasmLine;\n readAddress?(addr: number): number;\n readVRAMAddress?(addr: number): number;\n\n setFrameRate?(fps: number): void;\n getFrameRate?(): number;\n\n setupDebug?(callback: BreakpointCallback): void;\n clearDebug?(): void;\n step?(): void;\n runToVsync?(): void;\n runToPC?(pc: number[]): void;\n // like runToPC(), but each address may carry its own extra condition\n // (null = break unconditionally); handles debug-clock bookkeeping so\n // callers don't have to reach into internal fields to arm a runEval()\n runEvalAtPC?(targets: Map): void;\n runUntilReturn?(): void;\n stepBack?(): void;\n runEval?(evalfunc: DebugEvalCondition): void;\n runToFrameClock?(clock: number): void;\n stepOver?(): void;\n hasCustomStepOver?(): boolean; // true if stepOver() is not the generic instruction-level implementation\n restartAtPC?(pc: number): boolean;\n\n getOpcodeMetadata?(opcode: number, offset: number): OpcodeMetadata; //TODO\n getSP?(): number;\n getPC?(): number;\n getOriginPC?(): number;\n newCodeAnalyzer?(): CodeAnalyzer;\n\n getPlatformName?(): string;\n getMemoryMap?(): MemoryMap;\n\n setRecorder?(recorder: EmuRecorder): void;\n advance?(novideo?: boolean): number;\n advanceFrameClock?(trap: DebugCondition, step: number): number;\n showHelp?(): string;\n resize?(): void;\n\n getRasterScanline?(): number;\n getRasterLineClock?(): number;\n setBreakpoint?(id: string, cond: DebugCondition);\n clearBreakpoint?(id: string);\n hasBreakpoint?(id: string): boolean;\n getCPUState?(): CpuState;\n\n debugSymbols?: DebugSymbols;\n getDebugTree?(): {};\n\n startProbing?(): ProbeRecorder;\n stopProbing?(): void;\n\n isBlocked?(): boolean; // is blocked, halted, or waiting for input?\n\n readFile?(path: string): FileData;\n writeFile?(path: string, data: FileData): boolean;\n sourceFileFetch?: (path: string) => FileData;\n\n getDownloadFile?(): { extension: string, blob: Blob };\n getDebugSymbolFile?(): { extension: string, blob: Blob };\n}\n\nexport interface Preset {\n id: string;\n name: string;\n chapter?: number;\n title?: string;\n category?: string;\n}\n\nexport interface MemoryBus {\n read: (address: number) => number;\n write: (address: number, value: number) => void;\n contend?: (address: number, cycles: number) => number;\n isContended?: (address: number) => boolean;\n}\n\nexport type DebugCondition = () => boolean;\nexport type DebugEvalCondition = (c: CpuState) => boolean;\nexport type BreakpointCallback = (s: EmuState, msg?: string) => void;\n// for composite breakpoints w/ single debug function\nexport class BreakpointList {\n id2bp: { [id: string]: Breakpoint } = {};\n getDebugCondition(): DebugCondition {\n if (Object.keys(this.id2bp).length == 0) {\n return null; // no breakpoints\n } else {\n // evaluate all breakpoints\n return () => {\n var result = false;\n for (var id in this.id2bp)\n if (this.id2bp[id].cond())\n result = true;\n return result;\n };\n }\n }\n}\nexport interface Breakpoint {\n cond: DebugCondition;\n};\n\nexport interface EmuRecorder {\n frameRequested(): boolean;\n recordFrame(state: EmuState);\n}\n\n/////\n\nexport abstract class BasePlatform {\n recorder: EmuRecorder = null;\n debugSymbols: DebugSymbols;\n internalFiles: { [path: string]: FileData } = {};\n\n abstract loadState(state: EmuState): void;\n abstract saveState(): EmuState;\n abstract pause(): void;\n abstract resume(): void;\n abstract advance(novideo?: boolean): number;\n\n setRecorder(recorder: EmuRecorder): void {\n this.recorder = recorder;\n }\n updateRecorder() {\n // are we recording and do we need to save a frame?\n if (this.recorder && (this).isRunning() && this.recorder.frameRequested()) {\n this.recorder.recordFrame(this.saveState());\n }\n }\n inspect(sym: string): string {\n return inspectSymbol((this as any) as Platform, sym);\n }\n getDebugTree(): {} {\n var o: any = {};\n o.state = this.saveState();\n if (this.debugSymbols?.debuginfo) o.debuginfo = this.debugSymbols.debuginfo;\n return o;\n }\n readFile(path: string): FileData {\n return this.internalFiles[path];\n }\n writeFile(path: string, data: FileData): boolean {\n this.internalFiles[path] = data;\n return true;\n }\n}\n\nexport abstract class BaseDebugPlatform extends BasePlatform {\n onBreakpointHit: BreakpointCallback;\n debugCallback: DebugCondition;\n debugSavedState: EmuState = null;\n debugBreakState: EmuState = null;\n debugTargetClock: number = 0;\n debugClock: number = 0;\n breakpoints: BreakpointList = new BreakpointList();\n frameCount: number = 0;\n\n abstract getCPUState(): CpuState;\n\n // Some CPU cores save their program counter one byte before or after the\n // opcode they are on, so a raw PC lands on an operand or on the previous\n // instruction. debugPCDelta corrects it: getCPUState() and saveState()\n // report PC + delta, which is the address of the opcode, the same address\n // getPC() returns.\n debugPCDelta = 0;\n fixPC(c) { c.PC = (c.PC + this.debugPCDelta) & 0xffff; return c; }\n unfixPC(c) { c.PC = (c.PC - this.debugPCDelta) & 0xffff; return c; }\n\n // True if a breakpoint targets the effective PC (see EPC), which some\n // platforms use to fold a bank offset into the address. Those need the CPU\n // state to find, so they skip the cheap getPC() test in runEvalAtPC().\n debugUsesEPC(): boolean { return false; }\n\n setBreakpoint(id: string, cond: DebugCondition) {\n if (cond) {\n this.breakpoints.id2bp[id] = { cond: cond };\n this.restartDebugging();\n } else {\n this.clearBreakpoint(id);\n }\n }\n clearBreakpoint(id: string) {\n delete this.breakpoints.id2bp[id];\n }\n hasBreakpoint(id: string) {\n return this.breakpoints.id2bp[id] != null;\n }\n getDebugCallback(): DebugCondition {\n return this.breakpoints.getDebugCondition();\n }\n setupDebug(callback: BreakpointCallback): void {\n this.onBreakpointHit = callback;\n }\n clearDebug() {\n if (this.debugBreakState != null && this.debugSavedState != null) {\n this.loadState(this.debugSavedState);\n }\n this.debugSavedState = null;\n this.debugBreakState = null;\n this.debugTargetClock = -1;\n this.debugClock = 0;\n this.onBreakpointHit = null;\n this.clearBreakpoint('debug');\n this.frameCount = 0;\n }\n setDebugCondition(debugCond: DebugCondition) {\n this.setBreakpoint('debug', debugCond);\n }\n resetDebugging() {\n if (this.debugSavedState) {\n this.loadState(this.debugSavedState);\n } else {\n this.debugSavedState = this.saveState();\n }\n this.debugClock = 0;\n this.debugCallback = this.getDebugCallback();\n this.debugBreakState = null;\n }\n restartDebugging() {\n this.resetDebugging();\n this.resume();\n }\n preFrame() {\n // save state before frame, to record any inputs that happened pre-frame\n if (this.debugCallback && !this.debugBreakState) {\n // save state every frame and rewind debug clocks\n this.debugSavedState = this.saveState();\n this.debugTargetClock -= this.debugClock;\n this.debugClock = 0;\n }\n }\n postFrame() {\n // reload debug state at end of frame after breakpoint\n if (this.debugCallback && this.debugBreakState) {\n this.loadState(this.debugBreakState);\n }\n this.frameCount++;\n }\n pollControls() {\n }\n nextFrame(novideo: boolean): number {\n this.pollControls();\n this.updateRecorder();\n this.preFrame();\n var steps = this.advance(novideo);\n this.postFrame();\n return steps;\n }\n // default debugging\n abstract getSP(): number;\n abstract getPC(): number;\n abstract isStable(): boolean;\n\n evalDebugCondition() {\n if (this.debugCallback && !this.debugBreakState) {\n this.debugCallback();\n }\n }\n wasBreakpointHit(): boolean {\n return this.debugBreakState != null;\n }\n breakpointHit(targetClock: number, reason?: string) {\n console.log(this.debugTargetClock, targetClock, this.debugClock, this.isStable());\n this.debugTargetClock = targetClock;\n this.debugBreakState = this.saveState();\n console.log(\"Breakpoint at clk\", this.debugClock, \"PC\", this.debugBreakState.c.PC.toString(16));\n this.pause();\n if (this.onBreakpointHit) {\n this.onBreakpointHit(this.debugBreakState, reason);\n }\n }\n haltAndCatchFire(reason: string) {\n this.breakpointHit(this.debugClock, reason);\n }\n runEval(evalfunc: DebugEvalCondition) {\n this.setDebugCondition(() => {\n if (++this.debugClock >= this.debugTargetClock && this.isStable()) {\n var cpuState = this.getCPUState();\n if (evalfunc(cpuState)) {\n this.breakpointHit(this.debugClock);\n return true;\n } else {\n return false;\n }\n }\n });\n }\n runToPC(pc: number[]) {\n this.runEvalAtPC(new Map(pc.map((a) => [a, null])));\n }\n // Runs until a breakpoint is hit, which can be a whole frame away, so it\n // tests getPC() on its own rather than building a CPU state at every\n // instruction. The state is only wanted once an address matches, to run\n // that breakpoint's condition.\n runEvalAtPC(targets: Map) {\n this.debugTargetClock++;\n const useEPC = this.debugUsesEPC();\n this.setDebugCondition(() => {\n if (++this.debugClock < this.debugTargetClock || !this.isStable()) return;\n if (!useEPC && !targets.has(this.getPC())) return;\n const c = this.getCPUState();\n const epc = c.EPC != null ? c.EPC : c.PC;\n if (!targets.has(epc)) return;\n const cond = targets.get(epc);\n if (cond && !cond(c)) return;\n this.breakpointHit(this.debugClock);\n return true;\n });\n }\n runUntilReturn() {\n var SP0 = this.getSP();\n this.runEval((c: CpuState): boolean => {\n return c.SP > SP0; // TODO: check for RTS/RET opcode\n });\n }\n // step over one CPU instruction; if it is a subroutine call,\n // run at full speed until the instruction following it\n stepOver() {\n var p = (this);\n var pc = this.getPC();\n var d = null;\n var readfn = p.readAddress?.bind(p);\n if (readfn && p.disassemble) {\n d = p.disassemble(pc, readfn);\n }\n if (d && d.iscall) {\n // run until we return from the subroutine call\n var nextPC = pc + d.nbytes;\n this.debugTargetClock++;\n this.runEval((c) => c.PC == nextPC);\n } else {\n // not a call, just single-step\n this.step();\n }\n }\n hasCustomStepOver() { return false; }\n runToFrameClock(clock: number): void {\n this.restartDebugging();\n this.debugTargetClock = clock;\n this.runEval((): boolean => { return true; });\n }\n step() {\n this.runToFrameClock(this.debugClock + 1);\n }\n stepBack() {\n var prevState;\n var prevClock;\n var clock0 = this.debugTargetClock;\n this.restartDebugging();\n this.debugTargetClock = clock0 - 25; // TODO: depends on CPU\n this.runEval((c: CpuState): boolean => {\n if (this.debugClock < clock0) {\n prevState = this.saveState();\n prevClock = this.debugClock;\n return false;\n } else {\n if (prevState) {\n this.loadState(prevState);\n this.debugClock = prevClock;\n }\n return true;\n }\n });\n }\n runToVsync() {\n this.restartDebugging();\n var frame0 = this.frameCount;\n this.runEval((): boolean => {\n return this.frameCount > frame0;\n });\n }\n}\n\nexport function inspectSymbol(platform: Platform, sym: string): string {\n if (!platform.debugSymbols) return;\n var symmap = platform.debugSymbols.symbolmap;\n var addr2sym = platform.debugSymbols.addr2symbol;\n if (!symmap || !platform.readAddress) return null;\n var addr = symmap[\"_\" + sym] || symmap[sym]; // look for C or asm symbol\n if (!(typeof addr == 'number')) return null;\n var b = platform.readAddress(addr);\n // don't show 2 bytes if there's a symbol at the next address\n if (addr2sym && addr2sym[addr + 1] != null) {\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" (\" + b + \" decimal)\"; // unsigned\n } else {\n let b2 = platform.readAddress(addr + 1);\n let w = b | (b2 << 8);\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" $\" + hex(b2, 2) + \" (\" + ((w << 16) >> 16) + \" decimal)\"; // signed\n }\n}\n\n////// 6502\n\n// TODO: can merge w/ Z80?\nexport abstract class Base6502Platform extends BaseDebugPlatform {\n\n // the MOS6502 keeps its PC one byte past the opcode it fetched\n debugPCDelta = -1;\n getSP() { return this.getCPUState().SP };\n getPC() { return this.getCPUState().PC };\n isStable() { return !this.getCPUState()['T']; }\n abstract readAddress(addr: number): number;\n\n newCPU(membus: MemoryBus) {\n var cpu = new _MOS6502();\n cpu.connectBus(membus);\n return cpu;\n }\n\n getOpcodeMetadata(opcode, offset) {\n return getOpcodeMetadata_6502(opcode, offset);\n }\n\n getOriginPC(): number {\n return (this.readAddress(0xfffc) | (this.readAddress(0xfffd) << 8)) & 0xffff;\n }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getToolForFilename = getToolForFilename_6502;\n getDefaultExtensions() { return [\".c\", \".sdcc\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; };\n\n getDebugCategories() {\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n }\n }\n}\n\nexport function cpuStateToLongString_6502(c): string {\n function decodeFlags(c) {\n var s = \"\";\n s += c.N ? \" N\" : \" -\";\n s += c.V ? \" V\" : \" -\";\n s += c.D ? \" D\" : \" -\";\n s += c.Z ? \" Z\" : \" -\";\n s += c.C ? \" C\" : \" -\";\n s += c.I ? \" I\" : \" -\";\n return s;\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c) + \"\\n\"\n + \" A \" + hex(c.A) + \" \" + (c.R ? \"\" : \"BUSY\") + \"\\n\"\n + \" X \" + hex(c.X) + \"\\n\"\n + \" Y \" + hex(c.Y) + \" \" + \"SP \" + hex(c.SP) + \"\\n\";\n}\n\nvar OPMETA_6502 = {\n cycletime: [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4, 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0, 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4, 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 3, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ],\n extracycles: [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ],\n insnlengths: [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3, 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ],\n validinsns: [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ],\n}\n\nexport function getOpcodeMetadata_6502(opcode, address) {\n // TODO: more intelligent maximum cycles\n // TODO: must always be new object, b/c we might modify it\n return {\n opcode: opcode,\n minCycles: OPMETA_6502.cycletime[opcode],\n maxCycles: OPMETA_6502.cycletime[opcode] + OPMETA_6502.extracycles[opcode],\n insnlength: OPMETA_6502.insnlengths[opcode]\n };\n}\n\n////// Z80\n\nexport function cpuStateToLongString_Z80(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"S\", \"Z\", , \"H\", , \"V\", \"N\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF) + \" \" + (c.iff1 ? \"I\" : \"-\") + (c.iff2 ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \" IR \" + hex(c.IR, 4) + \"\\n\"\n + \"IX \" + hex(c.IX, 4) + \" IY \" + hex(c.IY, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport function cpuStateToLongString_SM83(c) {\n function decodeFlags(af) {\n return printFlags(af, [\"Z\", \"N\", \"H\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF >> 4) + \" \" + (c.ime ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport abstract class BaseZ80Platform extends BaseDebugPlatform {\n\n _cpu;\n waitCycles: number = 0;\n\n newCPU(membus: MemoryBus, iobus: MemoryBus) {\n this._cpu = new Z80();\n this._cpu.connectMemoryBus(membus);\n this._cpu.connectIOBus(iobus);\n return this._cpu;\n }\n\n getPC() { return this._cpu.getPC(); }\n getSP() { return this._cpu.getSP(); }\n isStable() { return true; }\n\n // TODO: refactor other parts into here\n runCPU(cpu, cycles: number): number {\n this._cpu = cpu; // TODO?\n this.waitCycles = 0; // TODO: needs to spill over betwenn calls\n if (this.wasBreakpointHit())\n return 0;\n var debugCond = this.getDebugCallback();\n var n = 0;\n this.waitCycles += cycles;\n while (this.waitCycles > 0) {\n if (debugCond && debugCond()) {\n debugCond = null;\n break;\n }\n var cyc = cpu.advanceInsn();\n n += cyc;\n this.waitCycles -= cyc;\n }\n return n;\n }\n\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".sdcc\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; };\n // TODO: Z80 opcode metadata\n //this.getOpcodeMetadata = function() { }\n\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n console.log(sp, start, end);\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n}\n\n////// 6809\n\nexport function cpuStateToLongString_6809(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"E\", \"F\", \"H\", \"I\", \"N\", \"Z\", \"V\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.CC) + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"DP \" + hex(c.DP, 2) + \"\\n\"\n + \" A \" + hex(c.A, 2) + \"\\n\"\n + \" B \" + hex(c.B, 2) + \"\\n\"\n + \" X \" + hex(c.X, 4) + \"\\n\"\n + \" Y \" + hex(c.Y, 4) + \"\\n\"\n + \" U \" + hex(c.U, 4) + \"\\n\"\n ;\n}\n\nexport abstract class Base6809Platform extends BaseZ80Platform {\n\n newCPU(membus: MemoryBus) {\n var cpu = Object.create(CPU6809());\n cpu.init(membus.write, membus.read, 0);\n return cpu;\n }\n\n cpuStateToLongString(c: CpuState) {\n return cpuStateToLongString_6809(c);\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; };\n //this.getOpcodeMetadata = function() { }\n getToolForFilename = getToolForFilename_6809;\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n default: return super.getDebugInfo(category, state);\n }\n }\n}\n\n\n//TODO: how to get stack_end?\nexport function dumpStackToString(platform: Platform, mem: Uint8Array | number[], start: number, end: number, sp: number, jsrop: number, bigendian?: boolean): string {\n var s = \"\";\n var nraw = 0;\n //s = dumpRAM(mem.slice(start,start+end+1), start, end-start+1);\n function read(addr) {\n if (addr < mem.length) return mem[addr];\n else return platform.readAddress(addr);\n }\n while (sp < end) {\n sp++;\n // see if there's a JSR on the stack here\n // TODO: make work with roms and memory maps\n var addr = read(sp) + read(sp + 1) * 256;\n if (bigendian) { addr = ((addr & 0xff) << 8) | ((addr & 0xff00) >> 8) }\n var jsrofs = jsrop == 0x20 ? -2 : -3; // 6502 vs Z80\n var opcode = read(addr + jsrofs); // might be out of bounds\n if (opcode == jsrop) { // JSR\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(addr, 4) + \" \" + lookupSymbol(platform, addr, true);\n sp++;\n nraw = 0;\n } else {\n if (nraw == 0)\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(read(sp)) + \" \";\n if (++nraw == 8) nraw = 0;\n }\n }\n return s + \"\\n\";\n}\n\n// TODO: slow, funky, uses global\nexport function lookupSymbol(platform: Platform, addr: number, extra: boolean) {\n var start = addr;\n var addr2symbol = platform.debugSymbols && platform.debugSymbols.addr2symbol;\n while (addr2symbol && addr >= 0) {\n var sym = addr2symbol[addr];\n if (sym) { // return first symbol we find\n var sym = addr2symbol[addr];\n return extra ? (sym + \" + $\" + hex(start - addr)) : sym;\n }\n if (!extra) break;\n addr--;\n }\n return \"\";\n}\n\n/// new Machine platform adapters\n\nexport interface Machine extends Bus, Resettable, FrameBased, AcceptsROM, HasCPU, SavesState, SavesInputState {\n}\n\nexport function hasVideo(arg: any): arg is VideoSource {\n return typeof arg.connectVideo === 'function';\n}\nexport function hasAudio(arg: any): arg is SampledAudioSource {\n return typeof arg.connectAudio === 'function';\n}\nexport function hasKeyInput(arg: any): arg is AcceptsKeyInput {\n return typeof arg.setKeyInput === 'function';\n}\nexport function hasJoyInput(arg: any): arg is AcceptsJoyInput {\n return typeof arg.setJoyInput === 'function';\n}\nexport function hasPaddleInput(arg: any): arg is AcceptsPaddleInput {\n return typeof arg.setPaddleInput === 'function';\n}\nexport function isRaster(arg: any): arg is RasterFrameBased {\n return typeof arg.getRasterY === 'function';\n}\nexport function hasProbe(arg: any): arg is Probeable {\n return typeof arg.connectProbe == 'function';\n}\nexport function hasBIOS(arg: any): arg is AcceptsBIOS {\n return typeof arg.loadBIOS == 'function';\n}\nexport function hasSerialIO(arg: any): arg is HasSerialIO {\n return typeof arg.connectSerialIO === 'function';\n}\n\nexport abstract class BaseMachinePlatform extends BaseDebugPlatform implements Platform {\n machine: T;\n mainElement: HTMLElement;\n timer: AnimationTimer;\n video: RasterVideo;\n audio: SampledAudio;\n poller: ControllerPoller;\n serialIOInterface: SerialIOInterface;\n serialVisualizer: SerialIOVisualizer;\n\n probeRecorder: ProbeRecorder;\n startProbing;\n stopProbing;\n\n abstract newMachine(): T;\n abstract getToolForFilename(s: string): string;\n abstract getDefaultExtensions(): string[];\n abstract getPresets(): Preset[];\n\n constructor(mainElement: HTMLElement) {\n super();\n this.mainElement = mainElement;\n }\n\n reset() {\n this.machine.reset();\n if (this.serialVisualizer != null) this.serialVisualizer.reset();\n }\n // The machine's CPU state is the core's own, so debugPCDelta corrects its PC\n // on the way out and restores it on the way in. The machine's cpu.getPC()\n // already names the opcode, so getPC() is left alone.\n loadState(s) {\n if (!this.debugPCDelta || !s.c) return this.machine.loadState(s);\n this.unfixPC(s.c);\n try { this.machine.loadState(s); } finally { this.fixPC(s.c); }\n }\n saveState() {\n const s = this.machine.saveState();\n if (this.debugPCDelta && s.c) this.fixPC(s.c);\n return s;\n }\n getSP() { return this.machine.cpu.getSP(); }\n getPC() { return this.machine.cpu.getPC(); }\n isStable() { return this.machine.cpu.isStable(); }\n getCPUState() { return this.fixPC(this.machine.cpu.saveState()); }\n loadControlsState(s) { this.machine.loadControlsState(s); }\n saveControlsState() { return this.machine.saveControlsState(); }\n\n async start() {\n this.machine = this.newMachine();\n const m = this.machine;\n // block on WASM loading\n if (m instanceof BaseWASMMachine) {\n await m.loadWASM();\n }\n var videoFrequency;\n if (hasVideo(m)) {\n var vp = m.getVideoParams();\n this.video = new RasterVideo(this.mainElement, vp.width, vp.height,\n {\n overscan: !!vp.overscan,\n rotate: vp.rotate | 0,\n aspect: vp.aspect\n });\n this.video.create();\n m.connectVideo(this.video.getFrameData());\n // TODO: support keyboard w/o video?\n if (hasKeyInput(m)) {\n this.video.setKeyboardEvents(m.setKeyInput.bind(m));\n this.poller = new ControllerPoller(m.setKeyInput.bind(m));\n }\n videoFrequency = vp.videoFrequency;\n }\n this.timer = new AnimationTimer(videoFrequency || 60, this.nextFrame.bind(this));\n if (hasAudio(m)) {\n var ap = m.getAudioParams();\n this.audio = new SampledAudio(ap.sampleRate);\n this.audio.start();\n m.connectAudio(this.audio);\n }\n if (hasPaddleInput(m)) {\n this.video.setupMouseEvents();\n }\n if (hasProbe(m)) {\n this.probeRecorder = new ProbeRecorder(m);\n this.startProbing = () => {\n m.connectProbe(this.probeRecorder);\n return this.probeRecorder;\n };\n this.stopProbing = () => {\n m.connectProbe(null);\n };\n }\n if (hasBIOS(m)) {\n this.loadBIOS = (title, data) => {\n m.loadBIOS(data, title);\n };\n }\n if (hasSerialIO(m)) {\n if (this.serialIOInterface == null) {\n this.serialVisualizer = new SerialIOVisualizer(this.mainElement, m);\n } else {\n m.connectSerialIO(this.serialIOInterface);\n }\n }\n }\n\n loadROM(title, data, origin?: number) {\n this.machine.loadROM(data, title, origin);\n this.reset();\n }\n\n loadBIOS: (title, data) => void; // only set if hasBIOS() is true\n\n pollControls() {\n this.poller && this.poller.poll();\n if (hasPaddleInput(this.machine)) {\n this.machine.setPaddleInput(0, this.video.paddle_x);\n this.machine.setPaddleInput(1, this.video.paddle_y);\n if (this.machine.setPaddleButton && this.video.paddle_buttons != null) {\n this.machine.setPaddleButton(0, this.video.paddle_buttons[0]);\n this.machine.setPaddleButton(1, this.video.paddle_buttons[1]);\n this.machine.setPaddleButton(2, this.video.paddle_buttons[2]);\n }\n }\n // TODO: put into interface\n if (this.machine['pollControls']) {\n this.machine['pollControls']();\n }\n }\n\n advance(novideo: boolean) {\n let trap = this.getDebugCallback();\n try {\n var steps = this.machine.advanceFrame(trap);\n return steps;\n } finally {\n // in case EmuHalt is thrown...\n if (!novideo && this.video) {\n this.video.updateFrame();\n this.updateVideoDebugger();\n }\n if (!novideo && this.serialVisualizer) {\n this.serialVisualizer.refresh();\n }\n }\n }\n\n updateVideoDebugger() {\n if (!this.isRunning() && isRaster(this.machine) && this.machine.getRasterCanvasPosition) {\n const { x, y } = this.machine.getRasterCanvasPosition();\n if (x >= 0 || y >= 0) {\n const ctx = this.video?.getContext();\n if (ctx) {\n drawCrosshair(ctx, x, y, 1);\n }\n }\n }\n }\n\n advanceFrameClock(trap, step) {\n if (!(step > 0)) return;\n if (this.machine instanceof BaseWASMMachine) {\n return this.machine.advanceFrameClock(trap, step);\n } else {\n return this.machine.advanceFrame(() => {\n return --step <= 0;\n });\n }\n }\n\n isRunning() {\n return this.timer && this.timer.isRunning();\n }\n\n resume() {\n this.timer.start();\n this.audio && this.audio.start();\n this.poller && this.poller.start();\n }\n\n pause() {\n this.timer.stop();\n this.audio && this.audio.stop();\n this.poller && this.poller.stop();\n }\n\n // so probe views stick around TODO: must be a better way?\n runToVsync() {\n this.restartDebugging();\n var flag = false;\n this.runEval((): boolean => {\n if (this.getRasterScanline() > 0) flag = true;\n else return flag;\n });\n }\n\n // TODO: reset target clock counter\n getRasterScanline() {\n return isRaster(this.machine) && this.machine.getRasterY ? this.machine.getRasterY() : -1;\n }\n getRasterLineClock() {\n return isRaster(this.machine) && this.machine.getRasterX ? this.machine.getRasterX() : -1;\n }\n\n readAddress(addr: number): number {\n return this.machine.read(addr);\n }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n }\n getDebugInfo(category: string, state: EmuState): string {\n return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n}\n\n// TODO: move debug info into CPU?\n\nexport abstract class Base6502MachinePlatform extends BaseMachinePlatform {\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getToolForFilename(fn) { return getToolForFilename_6502(fn); }\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n}\n\nexport abstract class BaseZ80MachinePlatform extends BaseMachinePlatform {\n\n //getOpcodeMetadata = getOpcodeMetadata_z80;\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n\n}\n\nexport abstract class Base6809MachinePlatform extends BaseMachinePlatform {\n\n getToolForFilename = getToolForFilename_6809;\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0x17, true);\n }\n default: return super.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n}\n\n///\n\nclass SerialIOVisualizer {\n\n textarea: HTMLTextAreaElement;\n //vlist: VirtualTextScroller;\n device: HasSerialIO;\n lastOutCount = -1;\n lastInCount = -1;\n\n constructor(parentElement: HTMLElement, device: HasSerialIO) {\n this.device = device;\n this.textarea = document.createElement(\"textarea\");\n this.textarea.classList.add('transcript');\n this.textarea.classList.add('transcript-style-2');\n this.textarea.style.display = 'none';\n parentElement.appendChild(this.textarea);\n /*\n this.vlist = new VirtualTextScroller(parentElement);\n this.vlist.create(parentElement, 1024, this.getMemoryLineAt.bind(this));\n this.vlist.maindiv.style.height = '8em';\n this.vlist.maindiv.style.overflow = 'clip';\n */\n }\n reset() {\n this.lastOutCount = 0;\n this.lastInCount = 0;\n this.textarea.style.display = 'none';\n }\n refresh() {\n var lastop = '';\n if (this.device.serialOut.length != this.lastOutCount) {\n var s = '';\n for (var ev of this.device.serialOut) {\n if (lastop != ev.op) {\n if (s != '') s += '\\n';\n if (ev.op === 'read') s += '<< ';\n else if (ev.op === 'write') s += '>> ';\n lastop = ev.op;\n }\n if (ev.value == 10) { s += '\\u21b5'; lastop = ''; }\n else { s += byteToASCII(ev.value); }\n }\n this.textarea.value = s;\n this.lastOutCount = this.device.serialOut.length;\n this.textarea.style.display = 'block';\n }\n }\n}\n"], + "mappings": "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EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,CAChE,EAEIE,EAAkB,CAClB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAA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,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,EACzhCC,GAAQ,IAAI,WAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,E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EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,EAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,EAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAA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,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI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AAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EA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AAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,WAAY,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,CACF,EAEO,SAASV,GAAuBF,EAAQa,EAAS,CAGtD,MAAO,CACL,OAAQb,EACR,UAAWY,GAAY,UAAUZ,CAAM,EACvC,UAAWY,GAAY,UAAUZ,CAAM,EAAIY,GAAY,YAAYZ,CAAM,EACzE,WAAYY,GAAY,YAAYZ,CAAM,CAC5C,CACF,CAIO,SAASc,GAAyBpD,EAAG,CAC1C,SAASgD,EAAYK,EAAO,CAC1B,OAAOC,GAAWD,EAAO,CAAC,IAAK,IAAK,CAAE,IAAK,CAAE,IAAK,IAAK,GAAG,EAAG,EAAI,CACnE,CACA,MAAO,MAAQvB,EAAI9B,EAAE,GAAI,CAAC,EAAI,KAAOgD,EAAYhD,EAAE,EAAE,EAAI,KAAOA,EAAE,KAAO,IAAM,MAAQA,EAAE,KAAO,IAAM,KAAO;AAAA,KACjG8B,EAAI9B,EAAE,GAAI,CAAC,EAAI,QAAU8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,KACxC8B,EAAI9B,EAAE,GAAI,CAAC,EAAI,QAAU8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,KACxC8B,EAAI9B,EAAE,GAAI,CAAC,EAAI,QAAU8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,KACxC8B,EAAI9B,EAAE,GAAI,CAAC,EAAI,QAAU8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,CAEtD,CAEO,SAASuD,GAA0BvD,EAAG,CAC3C,SAASgD,EAAYQ,EAAI,CACvB,OAAOF,GAAWE,EAAI,CAAC,IAAK,IAAK,IAAK,GAAG,EAAG,EAAI,CAClD,CACA,MAAO,MAAQ1B,EAAI9B,EAAE,GAAI,CAAC,EAAI,KAAOgD,EAAYhD,EAAE,IAAM,CAAC,EAAI,KAAOA,EAAE,IAAM,IAAM,KAAO;AAAA,KAC9E8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,KACf8B,EAAI9B,EAAE,GAAI,CAAC,EAAI,QAAU8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,KACxC8B,EAAI9B,EAAE,GAAI,CAAC,EAAI,QAAU8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,CAEtD,CAEO,IAAeyD,GAAf,cAAuC1D,EAAkB,CAAzD,kCAGL,gBAAqB,EAkCrB,wBAAqB2D,GAhCrB,OAAOvB,EAAmBwB,EAAkB,CAC1C,YAAK,KAAO,IAAIC,GAChB,KAAK,KAAK,iBAAiBzB,CAAM,EACjC,KAAK,KAAK,aAAawB,CAAK,EACrB,KAAK,IACd,CAEA,OAAQ,CAAE,OAAO,KAAK,KAAK,MAAM,CAAG,CACpC,OAAQ,CAAE,OAAO,KAAK,KAAK,MAAM,CAAG,CACpC,UAAW,CAAE,MAAO,EAAM,CAG1B,OAAOvB,EAAKyB,EAAwB,CAGlC,GAFA,KAAK,KAAOzB,EACZ,KAAK,WAAa,EACd,KAAK,iBAAiB,EACxB,MAAO,GACT,IAAIjC,EAAY,KAAK,iBAAiB,EAClC2D,EAAI,EAER,IADA,KAAK,YAAcD,EACZ,KAAK,WAAa,GAAG,CAC1B,GAAI1D,GAAaA,EAAU,EAAG,CAC5BA,EAAY,KACZ,KACF,CACA,IAAI4D,EAAM3B,EAAI,YAAY,EAC1B0B,GAAKC,EACL,KAAK,YAAcA,CACrB,CACA,OAAOD,CACT,CAGA,sBAAuB,CAAE,MAAO,CAAC,KAAM,QAAS,MAAO,KAAM,OAAQ,OAAQ,KAAM,MAAM,CAAG,CAI5F,oBAAqB,CACnB,MAAO,CAAC,MAAO,OAAO,CACxB,CACA,aAAanB,EAAkBC,EAAyB,CACtD,OAAQD,EAAU,CAChB,IAAK,MAAO,OAAOS,GAAyBR,EAAM,CAAC,EACnD,IAAK,QAAS,CACZ,IAAIoB,EAAMpB,EAAM,EAAE,GAAK,EAAK,MACxBqB,EAAQD,EAAK,MACbE,EAAMD,EAAQ,IAClB,OAAID,GAAM,IAAGA,EAAK,OAClB,QAAQ,IAAIA,EAAIC,EAAOC,CAAG,EACnBnB,GAAiC,KAAM,CAAC,EAAGkB,EAAOC,EAAKF,EAAI,GAAI,CACxE,CACF,CACF,CACA,YAAYtD,EAAY+B,EAA4C,CAClE,OAAO0B,GAAezD,EAAI+B,EAAK/B,CAAE,EAAG+B,EAAK/B,EAAK,CAAC,EAAG+B,EAAK/B,EAAK,CAAC,EAAG+B,EAAK/B,EAAK,CAAC,CAAC,CAC9E,CACF,EAIO,SAAS0D,GAA0BpE,EAAG,CAC3C,SAASgD,EAAYK,EAAO,CAC1B,OAAOC,GAAWD,EAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAG,EAAI,CACzE,CACA,MAAO,MAAQvB,EAAI9B,EAAE,GAAI,CAAC,EAAI,KAAOgD,EAAYhD,EAAE,EAAE,EAAI;AAAA,KAC7C8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,KACf8B,EAAI9B,EAAE,GAAI,CAAC,EAAI;AAAA,KACf8B,EAAI9B,EAAE,EAAG,CAAC,EAAI;AAAA,KACd8B,EAAI9B,EAAE,EAAG,CAAC,EAAI;AAAA,KACd8B,EAAI9B,EAAE,EAAG,CAAC,EAAI;AAAA,KACd8B,EAAI9B,EAAE,EAAG,CAAC,EAAI;AAAA,KACd8B,EAAI9B,EAAE,EAAG,CAAC,EAAI;AAAA,CAE5B,CAEO,IAAeqE,GAAf,cAAwCZ,EAAgB,CAAxD,kCAiBL,wBAAqBa,GAfrB,OAAOnC,EAAmB,CACxB,IAAIC,EAAM,OAAO,OAAOmC,GAAQ,CAAC,EACjC,OAAAnC,EAAI,KAAKD,EAAO,MAAOA,EAAO,KAAM,CAAC,EAC9BC,CACT,CAEA,qBAAqBpC,EAAa,CAChC,OAAOoE,GAA0BpE,CAAC,CACpC,CACA,YAAYU,EAAY+B,EAA4C,CAElE,OAAO,OAAO,OAAO8B,GAAQ,CAAC,EAAE,OAAO9B,EAAK/B,CAAE,EAAG+B,EAAK/B,EAAK,CAAC,EAAG+B,EAAK/B,EAAK,CAAC,EAAG+B,EAAK/B,EAAK,CAAC,EAAG+B,EAAK/B,EAAK,CAAC,EAAGA,CAAE,CAC7G,CACA,sBAAuB,CAAE,MAAO,CAAC,KAAM,SAAU,OAAO,CAAG,CAG3D,oBAAqB,CACnB,MAAO,CAAC,MAAO,OAAO,CACxB,CACA,aAAaiC,EAAkBC,EAAyB,CACtD,OAAQD,IACD,MAAcyB,GAA0BxB,EAAM,CAAC,EACpC,MAAM,aAAaD,EAAUC,CAAK,CAEtD,CACF,EAIO,SAASG,GAAkBtB,EAAoB+C,EAA4BP,EAAeC,EAAaF,EAAYS,EAAeC,EAA6B,CACpK,IAAIzB,EAAI,GACJ0B,EAAO,EAEX,SAASlC,EAAKb,EAAM,CAClB,OAAIA,EAAO4C,EAAI,OAAeA,EAAI5C,CAAI,EAC1BH,EAAS,YAAYG,CAAI,CACvC,CACA,KAAOoC,EAAKE,GAAK,CACfF,IAGA,IAAIpC,EAAOa,EAAKuB,CAAE,EAAIvB,EAAKuB,EAAK,CAAC,EAAI,IACjCU,IAAa9C,GAASA,EAAO,MAAS,GAAOA,EAAO,QAAW,GACnE,IAAIgD,EAASH,GAAS,GAAO,GAAK,GAC9BnC,EAASG,EAAKb,EAAOgD,CAAM,EAC3BtC,GAAUmC,GACZxB,GAAK;AAAA,GAAQnB,EAAIkC,CAAE,EAAI,KACvBf,GAAKnB,EAAIF,EAAM,CAAC,EAAI,IAAMiD,GAAapD,EAAUG,EAAM,EAAI,EAC3DoC,IACAW,EAAO,IAEHA,GAAQ,IACV1B,GAAK;AAAA,GAAQnB,EAAIkC,CAAE,EAAI,MACzBf,GAAKnB,EAAIW,EAAKuB,CAAE,CAAC,EAAI,IACjB,EAAEW,GAAQ,IAAGA,EAAO,GAE5B,CACA,OAAO1B,EAAI;AAAA,CACb,CAGO,SAAS4B,GAAapD,EAAoBG,EAAckD,EAAgB,CAG7E,QAFIb,EAAQrC,EACRmD,EAActD,EAAS,cAAgBA,EAAS,aAAa,YAC1DsD,GAAenD,GAAQ,GAAG,CAC/B,IAAInC,EAAMsF,EAAYnD,CAAI,EAC1B,GAAInC,EAAK,CACP,IAAIA,EAAMsF,EAAYnD,CAAI,EAC1B,OAAOkD,EAASrF,EAAM,OAASqC,EAAImC,EAAQrC,CAAI,EAAKnC,CACtD,CACA,GAAI,CAACqF,EAAO,MACZlD,GACF,CACA,MAAO,EACT,CAOO,SAASoD,GAAS7F,EAA8B,CACrD,OAAO,OAAOA,EAAI,cAAiB,UACrC,CACO,SAAS8F,GAAS9F,EAAqC,CAC5D,OAAO,OAAOA,EAAI,cAAiB,UACrC,CACO,SAAS+F,GAAY/F,EAAkC,CAC5D,OAAO,OAAOA,EAAI,aAAgB,UACpC,CAIO,SAASgG,GAAeC,EAAqC,CAClE,OAAO,OAAOA,EAAI,gBAAmB,UACvC,CACO,SAASC,GAASD,EAAmC,CAC1D,OAAO,OAAOA,EAAI,YAAe,UACnC,CACO,SAASE,GAASF,EAA4B,CACnD,OAAO,OAAOA,EAAI,cAAgB,UACpC,CACO,SAASG,GAAQH,EAA8B,CACpD,OAAO,OAAOA,EAAI,UAAY,UAChC,CACO,SAASI,GAAYJ,EAA8B,CACxD,OAAO,OAAOA,EAAI,iBAAoB,UACxC,CAEO,IAAeK,GAAf,cAA8DC,EAAsC,CAmBzG,YAAYC,EAA0B,CACpC,MAAM,EACN,KAAK,YAAcA,CACrB,CAEA,OAAQ,CACN,KAAK,QAAQ,MAAM,EACf,KAAK,kBAAoB,MAAM,KAAK,iBAAiB,MAAM,CACjE,CAIA,UAAUC,EAAG,CACX,GAAI,CAAC,KAAK,cAAgB,CAACA,EAAE,EAAG,OAAO,KAAK,QAAQ,UAAUA,CAAC,EAC/D,KAAK,QAAQA,EAAE,CAAC,EAChB,GAAI,CAAE,KAAK,QAAQ,UAAUA,CAAC,CAAG,QAAE,CAAU,KAAK,MAAMA,EAAE,CAAC,CAAG,CAChE,CACA,WAAY,CACV,IAAMA,EAAI,KAAK,QAAQ,UAAU,EACjC,OAAI,KAAK,cAAgBA,EAAE,GAAG,KAAK,MAAMA,EAAE,CAAC,EACrCA,CACT,CACA,OAAQ,CAAE,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAG,CAC3C,OAAQ,CAAE,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAG,CAC3C,UAAW,CAAE,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAG,CACjD,aAAc,CAAE,OAAO,KAAK,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,CAAG,CACjE,kBAAkBA,EAAG,CAAE,KAAK,QAAQ,kBAAkBA,CAAC,CAAG,CAC1D,mBAAoB,CAAE,OAAO,KAAK,QAAQ,kBAAkB,CAAG,CAE/D,MAAM,OAAQ,CACZ,KAAK,QAAU,KAAK,WAAW,EAC/B,IAAMC,EAAI,KAAK,QAEXA,aAAaC,IACf,MAAMD,EAAE,SAAS,EAEnB,IAAIE,EACJ,GAAIC,GAASH,CAAC,EAAG,CACf,IAAII,EAAKJ,EAAE,eAAe,EAC1B,KAAK,MAAQ,IAAIK,GAAY,KAAK,YAAaD,EAAG,MAAOA,EAAG,OAC1D,CACE,SAAU,CAAC,CAACA,EAAG,SACf,OAAQA,EAAG,OAAS,EACpB,OAAQA,EAAG,MACb,CAAC,EACH,KAAK,MAAM,OAAO,EAClBJ,EAAE,aAAa,KAAK,MAAM,aAAa,CAAC,EAEpCM,GAAYN,CAAC,IACf,KAAK,MAAM,kBAAkBA,EAAE,YAAY,KAAKA,CAAC,CAAC,EAClD,KAAK,OAAS,IAAIO,GAAiBP,EAAE,YAAY,KAAKA,CAAC,CAAC,GAE1DE,EAAiBE,EAAG,cACtB,CAEA,GADA,KAAK,MAAQ,IAAII,GAAeN,GAAkB,GAAI,KAAK,UAAU,KAAK,IAAI,CAAC,EAC3EO,GAAST,CAAC,EAAG,CACf,IAAIU,EAAKV,EAAE,eAAe,EAC1B,KAAK,MAAQ,IAAIW,GAAaD,EAAG,UAAU,EAC3C,KAAK,MAAM,MAAM,EACjBV,EAAE,aAAa,KAAK,KAAK,CAC3B,CACIV,GAAeU,CAAC,GAClB,KAAK,MAAM,iBAAiB,EAE1BP,GAASO,CAAC,IACZ,KAAK,cAAgB,IAAIY,GAAcZ,CAAC,EACxC,KAAK,aAAe,KAClBA,EAAE,aAAa,KAAK,aAAa,EAC1B,KAAK,eAEd,KAAK,YAAc,IAAM,CACvBA,EAAE,aAAa,IAAI,CACrB,GAEEN,GAAQM,CAAC,IACX,KAAK,SAAW,CAACa,EAAOC,IAAS,CAC/Bd,EAAE,SAASc,EAAMD,CAAK,CACxB,GAEElB,GAAYK,CAAC,IACX,KAAK,mBAAqB,KAC5B,KAAK,iBAAmB,IAAIe,GAAmB,KAAK,YAAaf,CAAC,EAElEA,EAAE,gBAAgB,KAAK,iBAAiB,EAG9C,CAEA,QAAQa,EAAOC,EAAME,EAAiB,CACpC,KAAK,QAAQ,QAAQF,EAAMD,EAAOG,CAAM,EACxC,KAAK,MAAM,CACb,CAIA,cAAe,CACb,KAAK,QAAU,KAAK,OAAO,KAAK,EAC5B1B,GAAe,KAAK,OAAO,IAC7B,KAAK,QAAQ,eAAe,EAAG,KAAK,MAAM,QAAQ,EAClD,KAAK,QAAQ,eAAe,EAAG,KAAK,MAAM,QAAQ,EAC9C,KAAK,QAAQ,iBAAmB,KAAK,MAAM,gBAAkB,OAC/D,KAAK,QAAQ,gBAAgB,EAAG,KAAK,MAAM,eAAe,CAAC,CAAC,EAC5D,KAAK,QAAQ,gBAAgB,EAAG,KAAK,MAAM,eAAe,CAAC,CAAC,EAC5D,KAAK,QAAQ,gBAAgB,EAAG,KAAK,MAAM,eAAe,CAAC,CAAC,IAI5D,KAAK,QAAQ,cACf,KAAK,QAAQ,aAAgB,CAEjC,CAEA,QAAQ2B,EAAkB,CACxB,IAAIC,EAAO,KAAK,iBAAiB,EACjC,GAAI,CACF,IAAIC,EAAQ,KAAK,QAAQ,aAAaD,CAAI,EAC1C,OAAOC,CACT,QAAE,CAEI,CAACF,GAAW,KAAK,QACnB,KAAK,MAAM,YAAY,EACvB,KAAK,oBAAoB,GAEvB,CAACA,GAAW,KAAK,kBACnB,KAAK,iBAAiB,QAAQ,CAElC,CACF,CAEA,qBAAsB,CAl7BxB,IAAAG,EAm7BI,GAAI,CAAC,KAAK,UAAU,GAAK5B,GAAS,KAAK,OAAO,GAAK,KAAK,QAAQ,wBAAyB,CACvF,GAAM,CAAE,EAAA6B,EAAG,EAAAC,CAAE,EAAI,KAAK,QAAQ,wBAAwB,EACtD,GAAID,GAAK,GAAKC,GAAK,EAAG,CACpB,IAAMC,GAAMH,EAAA,KAAK,QAAL,YAAAA,EAAY,aACpBG,GACFC,GAAcD,EAAKF,EAAGC,EAAG,CAAC,CAE9B,CACF,CACF,CAEA,kBAAkBJ,EAAMO,EAAM,CAC5B,GAAMA,EAAO,EACb,OAAI,KAAK,mBAAmBxB,GACnB,KAAK,QAAQ,kBAAkBiB,EAAMO,CAAI,EAEzC,KAAK,QAAQ,aAAa,IACxB,EAAEA,GAAQ,CAClB,CAEL,CAEA,WAAY,CACV,OAAO,KAAK,OAAS,KAAK,MAAM,UAAU,CAC5C,CAEA,QAAS,CACP,KAAK,MAAM,MAAM,EACjB,KAAK,OAAS,KAAK,MAAM,MAAM,EAC/B,KAAK,QAAU,KAAK,OAAO,MAAM,CACnC,CAEA,OAAQ,CACN,KAAK,MAAM,KAAK,EAChB,KAAK,OAAS,KAAK,MAAM,KAAK,EAC9B,KAAK,QAAU,KAAK,OAAO,KAAK,CAClC,CAGA,YAAa,CACX,KAAK,iBAAiB,EACtB,IAAIC,EAAO,GACX,KAAK,QAAQ,IAAe,CAC1B,GAAI,KAAK,kBAAkB,EAAI,EAAGA,EAAO,OACpC,QAAOA,CACd,CAAC,CACH,CAGA,mBAAoB,CAClB,OAAOlC,GAAS,KAAK,OAAO,GAAK,KAAK,QAAQ,WAAa,KAAK,QAAQ,WAAW,EAAI,EACzF,CACA,oBAAqB,CACnB,OAAOA,GAAS,KAAK,OAAO,GAAK,KAAK,QAAQ,WAAa,KAAK,QAAQ,WAAW,EAAI,EACzF,CAEA,YAAYmC,EAAsB,CAChC,OAAO,KAAK,QAAQ,KAAKA,CAAI,CAC/B,CAEA,oBAAqB,CACnB,GAAIC,GAAa,KAAK,OAAO,EAC3B,OAAO,KAAK,QAAQ,mBAAmB,CAC3C,CACA,aAAaC,EAAkBC,EAAyB,CACtD,OAAOF,GAAa,KAAK,OAAO,GAAK,KAAK,QAAQ,aAAaC,EAAUC,CAAK,CAChF,CACF,EAIsBC,GAAf,cAAkEnC,EAAuB,CAAzF,kCAEL,uBAAoBoC,GACpB,mBAAmBC,EAAI,CAAE,OAAOC,GAAwBD,CAAE,CAAG,CAC7D,sBAAuB,CAAE,MAAO,CAAC,KAAM,OAAQ,OAAQ,QAAS,MAAO,QAAS,QAAS,OAAQ,MAAM,CAAG,CAE1G,YAAYE,EAAYC,EAA4C,CAClE,OAAOC,GAAgBF,EAAIC,EAAKD,CAAE,EAAGC,EAAKD,EAAK,CAAC,EAAGC,EAAKD,EAAK,CAAC,CAAC,CACjE,CACA,oBAAqB,CACnB,OAAIP,GAAa,KAAK,OAAO,EACpB,KAAK,QAAQ,mBAAmB,EAEhC,CAAC,MAAO,QAAS,OAAO,CACnC,CACA,aAAaC,EAAkBC,EAAyB,CACtD,OAAQD,EAAU,CAChB,IAAK,MAAO,OAAOS,GAA0BR,EAAM,CAAC,EACpD,IAAK,QAAS,OAAOS,GAAQT,EAAM,GAAKA,EAAM,IAAK,EAAK,GAAK,EAC7D,IAAK,QAAS,OAAOU,GAAiC,KAAMV,EAAM,GAAKA,EAAM,IAAK,IAAO,IAAO,IAAQA,EAAM,EAAE,GAAI,EAAI,EACxH,QAAS,OAAOF,GAAa,KAAK,OAAO,GAAK,KAAK,QAAQ,aAAaC,EAAUC,CAAK,CACzF,CACF,CACF,EAEsBW,GAAf,cAAiE7C,EAAuB,CAAxF,kCAGL,wBAAqB8C,GACrB,sBAAuB,CAAE,MAAO,CAAC,KAAM,MAAO,KAAM,OAAQ,OAAQ,KAAM,MAAM,CAAG,CAEnF,oBAAqB,CACnB,OAAId,GAAa,KAAK,OAAO,EACpB,KAAK,QAAQ,mBAAmB,EAEhC,CAAC,MAAO,OAAO,CAC1B,CACA,aAAaC,EAAkBC,EAAyB,CACtD,OAAQD,EAAU,CAChB,IAAK,MAAO,OAAOc,GAAyBb,EAAM,CAAC,EACnD,IAAK,QAAS,CACZ,IAAIc,EAAMd,EAAM,EAAE,GAAK,EAAK,MACxBe,EAAQD,EAAK,MACbE,EAAMD,EAAQ,IAClB,OAAID,GAAM,IAAGA,EAAK,OACXJ,GAAiC,KAAM,CAAC,EAAGK,EAAOC,EAAKF,EAAI,GAAI,CACxE,CACA,QAAS,OAAOhB,GAAa,KAAK,OAAO,GAAK,KAAK,QAAQ,aAAaC,EAAUC,CAAK,CACzF,CACF,CACA,YAAYK,EAAYC,EAA4C,CAClE,OAAOW,GAAeZ,EAAIC,EAAKD,CAAE,EAAGC,EAAKD,EAAK,CAAC,EAAGC,EAAKD,EAAK,CAAC,EAAGC,EAAKD,EAAK,CAAC,CAAC,CAC9E,CAEF,EAEsBa,GAAf,cAAkEpD,EAAuB,CAAzF,kCAEL,wBAAqBqD,GACrB,sBAAuB,CAAE,MAAO,CAAC,KAAM,SAAU,OAAO,CAAG,CAE3D,oBAAqB,CACnB,OAAIrB,GAAa,KAAK,OAAO,EACpB,KAAK,QAAQ,mBAAmB,EAEhC,CAAC,MAAO,OAAO,CAC1B,CACA,aAAaC,EAAkBC,EAAyB,CACtD,OAAQD,EAAU,CAChB,IAAK,MAAO,OAAOqB,GAA0BpB,EAAM,CAAC,EACpD,IAAK,QAAS,CACZ,IAAIc,EAAMd,EAAM,EAAE,GAAK,EAAK,MACxBe,EAAQD,EAAK,MACbE,EAAMD,EAAQ,IAClB,OAAID,GAAM,IAAGA,EAAK,OACXJ,GAAiC,KAAM,CAAC,EAAGK,EAAOC,EAAKF,EAAI,GAAM,EAAI,CAC9E,CACA,QAAS,OAAO,MAAM,aAAaf,EAAUC,CAAK,CACpD,CACF,CACA,YAAYK,EAAYC,EAA4C,CAElE,OAAO,OAAO,OAAOe,GAAQ,CAAC,EAAE,OAAOf,EAAKD,CAAE,EAAGC,EAAKD,EAAK,CAAC,EAAGC,EAAKD,EAAK,CAAC,EAAGC,EAAKD,EAAK,CAAC,EAAGC,EAAKD,EAAK,CAAC,EAAGA,CAAE,CAC7G,CACF,EAIMpB,GAAN,KAAyB,CAQvB,YAAYqC,EAA4BC,EAAqB,CAH7D,kBAAe,GACf,iBAAc,GAGZ,KAAK,OAASA,EACd,KAAK,SAAW,SAAS,cAAc,UAAU,EACjD,KAAK,SAAS,UAAU,IAAI,YAAY,EACxC,KAAK,SAAS,UAAU,IAAI,oBAAoB,EAChD,KAAK,SAAS,MAAM,QAAU,OAC9BD,EAAc,YAAY,KAAK,QAAQ,CAOzC,CACA,OAAQ,CACN,KAAK,aAAe,EACpB,KAAK,YAAc,EACnB,KAAK,SAAS,MAAM,QAAU,MAChC,CACA,SAAU,CACR,IAAIE,EAAS,GACb,GAAI,KAAK,OAAO,UAAU,QAAU,KAAK,aAAc,CACrD,IAAIvD,EAAI,GACR,QAASwD,KAAM,KAAK,OAAO,UACrBD,GAAUC,EAAG,KACXxD,GAAK,KAAIA,GAAK;AAAA,GACdwD,EAAG,KAAO,OAAQxD,GAAK,MAClBwD,EAAG,KAAO,UAASxD,GAAK,OACjCuD,EAASC,EAAG,IAEVA,EAAG,OAAS,IAAMxD,GAAK,SAAUuD,EAAS,IACvCvD,GAAKyD,GAAYD,EAAG,KAAK,EAElC,KAAK,SAAS,MAAQxD,EACtB,KAAK,aAAe,KAAK,OAAO,UAAU,OAC1C,KAAK,SAAS,MAAM,QAAU,OAChC,CACF,CACF", "names": ["OPS_6502", "disassemble6502", "pc", "b0", "b1", "b2", "op", "s", "am", "isaddr", "offset", "hex", "FastZ80", "coreParameter", "core", "a", "b", "c", "d", "e", "h", "l", "a_prime", "b_prime", "c_prime", "d_prime", "e_prime", "h_prime", "l_prime", "ix", "iy", "i", "r", "sp", "pc", "flags", "flags_prime", "imode", "iff1", "iff2", "halted", "do_delayed_di", "do_delayed_ei", "cycle_counter", "getState", "get_flags_register", "get_flags_prime", "setState", "state", "set_flags_register", "set_flags_prime", "reset", "run_instruction", "doing_delayed_di", "doing_delayed_ei", "opcode", "decode_instruction", "retval", "interrupt", "non_maskable", "data", "push_word", "vector_address", "get_operand", "operand", "op_array", "do_add", "do_adc", "do_sub", "do_sbc", "do_and", "do_xor", "do_or", "do_cp", "func", "instructions", "cycle_counts", "get_signed_offset_byte", "value", "update_xy_flags", "result", "get_parity", "parity_bits", "pop_word", "do_conditional_absolute_jump", "condition", "do_conditional_relative_jump", "offset", "do_conditional_call", "do_conditional_return", "do_reset", "address", "temp", "do_inc", "do_dec", "do_hl_add", "hl", "do_hl_adc", "do_hl_sbc", "do_in", "port", "do_neg", "do_ldi", "read_value", "do_cpi", "temp_carry", "do_ini", "do_outi", "do_ldd", "do_cpd", "do_ind", "do_outd", "do_rlc", "do_rrc", "do_rl", "do_rr", "do_sla", "do_sra", "do_sll", "do_srl", "do_ix_add", "temp_s", "temp_z", "temp_p", "bit_number", "reg_code", "cycle_counts_cb", "dd_instructions", "cycle_counts_dd", "ed_instructions", "cycle_counts_ed", "hl_value", "temp1", "temp2", "ddcb_functions", "Z80", "v", "bus", "s", "MasterAudio", "AY38910_Audio", "master", "i", "val", "SN76489_Audio", "newPOKEYAudio", "count", "audio", "pokey", "POKEYDeviceChannel", "combinePolys", "a", "b", "arr", "n", "divideBy", "NOTPOLY5", "POLY4", "PURE", "VOL_ONLY", "VOLUME_MASK", "POLY9", "CH1_179", "CH3_179", "CH1_CH2", "CH3_CH4", "CH1_FILTER", "CH2_FILTER", "CLOCK_15", "DIV_64", "DIV_15", "POLY4_SIZE", "POLY5_SIZE", "POLY9_SIZE", "POLY17_SIZE", "CHAN1", "CHAN2", "CHAN3", "CHAN4", "CHIP1", "CHIP2", "CHIP3", "CHIP4", "SAMPLE", "FREQ_17_EXACT", "FREQ_17_APPROX", "bit1", "bit2", "bit4", "bit5", "bit9", "bit15", "bit31", "bit17", "bit17_5", "bit5_4", "wavetones", "div2", "div6", "div31", "div93", "bit15_4", "bit5_2", "bit5_6", "tiawavetones", "regs", "counters", "deltas", "volume", "audc", "waveforms", "buffer", "sampleRate", "clock", "baseDelta", "dirty", "length", "rate", "updateValues", "addr", "ctrl", "base", "div", "j", "k", "value", "s", "sample", "d", "v", "wav", "cnt", "on", "WorkerSoundChannel", "worker", "output", "pending", "pendingLength", "e", "buf", "l", "audioStreamFactory", "AUDIO_CHUNK_SAMPLES", "SampleAudio", "clockfreq", "self", "sfrac", "sinc", "accum", "buffer", "bufpos", "bufferlist", "ifill", "written", "read", "skippedBuffers", "lastSkipLog", "underruns", "fillHist", "collectStats", "baseSinc", "trim", "fillAvg", "lastTrimAdj", "FILL_TARGET", "FILL_ALPHA", "TRIM_GAIN", "MAX_TRIM", "TRIM_INTERVAL_MS", "MAXBUFFERS", "targetDepth", "mix", "ape", "lbuf", "m", "buf", "i", "clearBuffers", "createContext", "AudioContext", "ctx", "audioStreamFactory", "arrbuf", "value", "out", "now", "trimNow", "want", "count", "total", "weighted", "maxFill", "fill", "on", "SampledAudio", "sampleRate", "TssChannelAdapter", "chans", "oversample", "c", "sink", "l", "bufs", "ch", "ProbeRecorder", "m", "buflen", "newbuflen", "a", "src", "clocks", "address", "SP", "type", "value", "op", "count", "i", "NullProbe", "src", "BasicHeadlessMachine", "key", "code", "flags", "probe", "probing", "data", "title", "origin", "state", "c", "membus", "a", "val", "v", "iobus", "BasicMachine", "audio", "pixels", "BasicScanlineMachine", "trap", "endLineClock", "steps", "sl", "Z80_OPS", "Z80_OPS_ED", "Z80_OPS_CB", "disassembleZ80", "pc", "b0", "b1", "b2", "b3", "op", "n", "am", "bytes", "isaddr", "iscall", "ireg", "hex", "offset", "CPU6809", "ticks", "rA", "rB", "rX", "rY", "rU", "rS", "PC", "CC", "DP", "F_CARRY", "F_OVERFLOW", "F_ZERO", "F_NEGATIVE", "F_IRQMASK", "F_HALFCARRY", "F_FIRQMASK", "F_ENTIRE", "vecRESET", "vecNMI", "vecSWI", "vecIRQ", "vecFIRQ", "vecSWI2", "vecSWI3", "IRQs", "byteTo", "byteAt", "cycles", "cycles2", "flagsNZ", "setV8", "a", "b", "r", "setV16", "getD", "setD", "v", "PUSHB", "PUSHW", "PUSHBU", "PUSHWU", "PULLB", "PULLW", "PULLBU", "PULLWU", "PSHS", "ucTemp", "i", "PSHU", "PULS", "PULU", "getPBR", "ucPostByte", "setPBR", "TFREXG", "bExchange", "signed", "x", "signed16", "fetch", "fetch16", "v1", "v2", "ReadWord", "addr", "WriteWord", "PostByte", "pb", "preg", "xchg", "sTemp", "sByte", "flagsNZ16", "word", "oINC", "oDEC", "oSUB", "temp", "oSUB16", "oADD", "oADD16", "oADC", "oSBC", "oCMP", "oCMP16", "oNEG", "oLSR", "oASR", "oASL", "oROL", "oldc", "oROR", "oEOR", "oOR", "oAND", "oCOM", "dpadd", "step", "oldT", "oldPC", "opcode", "cf", "nhi", "nlo", "reset", "ds", "ds11", "ds10", "disasm", "c", "d", "pc", "toHexN", "n", "s", "toHex2", "toHex4", "rx", "ro", "j", "sx", "bytes", "mode", "mnemo", "ixr", "disp", "ind", "mod", "ofs8", "ofs16", "Ts", "Tt", "t", "bt", "ba", "tck", "reg", "value", "f", "fx", "_MOS6502", "self", "RDY", "T", "instruction", "aBus", "bus", "boo", "I", "fetchOpcodeAndDecodeInstruction", "PC", "RESET_VECTOR", "SP", "A", "X", "Y", "N", "V", "D", "Z", "C", "opcode", "data", "AD", "BA", "BALCrossed", "IA", "branchOffset", "branchOffsetCrossAdjust", "NMI_VECTOR", "IRQ_VECTOR", "rX", "rY", "bN", "bV", "bZ", "bC", "instructions", "fetchNextOpcode", "fetchOpcodeAndDiscard", "fetchBranchOffset", "fetchADL", "fetchADH", "fetchADLFromBA", "fetchADHFromBA", "fetchBAL", "fetchBAH", "fetchBALFromIA", "fetchBAHFromIA", "addXtoBAL", "low", "addYtoBAL", "add1toBAL", "add1toBAHifBALCrossed", "fetchIAL", "fetchIAH", "add1toIAL", "fetchDataFromImmediate", "fetchDataFromAD", "fetchDataFromBA", "writeDataToAD", "writeDataToBA", "addBranchOffsetToPCL", "oldLow", "newLow", "adjustPCHForBranchOffsetCross", "setZ", "val", "setN", "setV", "setC", "popFromStack", "peekFromStack", "pushToStack", "getStatusBits", "setStatusBits", "illegalOpcode", "op", "haltOpcode", "addr", "EmuHalt", "hex", "implied", "operation", "immediateRead", "zeroPageRead", "absoluteRead", "indirectXRead", "absoluteIndexedRead", "index", "addIndex", "zeroPageIndexedRead", "indirectYRead", "zeroPageWrite", "absoluteWrite", "indirectXWrite", "absoluteIndexedWrite", "zeroPageIndexedWrite", "indirectYWrite", "zeroPageReadModifyWrite", "absoluteReadModifyWrite", "zeroPageIndexedReadModifyWrite", "absoluteIndexedReadModifyWrite", "indirectXReadModifyWrite", "indirectYReadModifyWrite", "opcodes", "BRK", "ORA", "uKIL", "uSLO", "uNOP", "ASL", "PHP", "ASL_ACC", "uANC", "Bxx", "CLC", "JSR", "AND", "uRLA", "BIT", "ROL", "PLP", "ROL_ACC", "SEC", "RTI", "EOR", "uSRE", "LSR", "PHA", "LSR_ACC", "uASR", "JMP_ABS", "CLI", "RTS", "ADC", "uRRA", "ROR", "PLA", "ROR_ACC", "uARR", "JMP_IND", "SEI", "STA", "uSAX", "STY", "STX", "DEY", "TXA", "uANE", "uSHA", "TYA", "TXS", "uSHS", "uSHY", "uSHX", "LDY", "LDA", "LDX", "uLAX", "TAY", "TAX", "uLXA", "CLV", "TSX", "uLAS", "CPY", "CMP", "uDCP", "DEC", "INY", "DEX", "uSBX", "CLD", "CPX", "SBC", "uISB", "INC", "INX", "NOP", "SED", "newC", "addressing", "operand", "AL", "AH", "add", "par", "sub", "oldC", "comp", "newX", "IRQ", "NMI", "reg", "cond", "branchTaken", "state", "mes", "text", "cycletime", "extracycles", "insnlengths", "validinsns", "address", "MOS6502", "_MOS6502", "bus", "itype", "s", "op", "BaseWASMMachine", "prefix", "self", "wmod", "wasmResponse", "wasmBinary", "wasmCompiled", "wasmResult", "biosBinary", "biosResponse", "statesize", "ctrlstatesize", "cpustatesize", "sampbufsize", "rom", "EmuHalt", "srcArray", "address", "value", "pixels", "pixbuf", "state", "audio", "n", "i", "trap", "cpf", "NullProbe", "datalen", "dataaddr", "databuf", "probe", "DebugSymbols", "symbolmap", "debuginfo", "symbolsizes", "invertMap", "isDebuggable", "arg", "BreakpointList", "result", "id", "BasePlatform", "recorder", "sym", "inspectSymbol", "_a", "o", "path", "data", "BaseDebugPlatform", "c", "cond", "callback", "debugCond", "novideo", "steps", "targetClock", "reason", "evalfunc", "cpuState", "pc", "a", "targets", "useEPC", "epc", "SP0", "p", "d", "readfn", "nextPC", "clock", "prevState", "prevClock", "clock0", "frame0", "platform", "symmap", "addr2sym", "addr", "b", "hex", "b2", "w", "Base6502Platform", "getToolForFilename_6502", "membus", "cpu", "_MOS6502", "opcode", "offset", "getOpcodeMetadata_6502", "read", "disassemble6502", "category", "state", "cpuStateToLongString_6502", "dumpRAM", "dumpStackToString", "decodeFlags", "s", "OPMETA_6502", "address", "cpuStateToLongString_Z80", "flags", "printFlags", "cpuStateToLongString_SM83", "af", "BaseZ80Platform", "getToolForFilename_z80", "iobus", "Z80", "cycles", "n", "cyc", "sp", "start", "end", "disassembleZ80", "cpuStateToLongString_6809", "Base6809Platform", "getToolForFilename_6809", "CPU6809", "mem", "jsrop", "bigendian", "nraw", "jsrofs", "lookupSymbol", "extra", "addr2symbol", "hasVideo", "hasAudio", "hasKeyInput", "hasPaddleInput", "arg", "isRaster", "hasProbe", "hasBIOS", "hasSerialIO", "BaseMachinePlatform", "BaseDebugPlatform", "mainElement", "s", "m", "BaseWASMMachine", "videoFrequency", "hasVideo", "vp", "RasterVideo", "hasKeyInput", "ControllerPoller", "AnimationTimer", "hasAudio", "ap", "SampledAudio", "ProbeRecorder", "title", "data", "SerialIOVisualizer", "origin", "novideo", "trap", "steps", "_a", "x", "y", "ctx", "drawCrosshair", "step", "flag", "addr", "isDebuggable", "category", "state", "Base6502MachinePlatform", "getOpcodeMetadata_6502", "fn", "getToolForFilename_6502", "pc", "read", "disassemble6502", "cpuStateToLongString_6502", "dumpRAM", "dumpStackToString", "BaseZ80MachinePlatform", "getToolForFilename_z80", "cpuStateToLongString_Z80", "sp", "start", "end", "disassembleZ80", "Base6809MachinePlatform", "getToolForFilename_6809", "cpuStateToLongString_6809", "CPU6809", "parentElement", "device", "lastop", "ev", "byteToASCII"] } diff --git a/gen/chunk-FWTZO6HF.js b/gen/chunk-TP7C4K6K.js similarity index 99% rename from gen/chunk-FWTZO6HF.js rename to gen/chunk-TP7C4K6K.js index 1762b4c7..306c4353 100644 --- a/gen/chunk-FWTZO6HF.js +++ b/gen/chunk-TP7C4K6K.js @@ -1,4 +1,4 @@ -import{c as ie,k as he,o as ne,r as oe}from"./chunk-QYEDG265.js";import{_ as ae,a as A,g as w,u}from"./chunk-V6TNHL6H.js";var L=class{constructor(t,e,r){this.probe=new ne;this.ram=new Uint8Array(16384);this.registers=new Uint8Array(8);this.spriteBuffer=new Uint8Array(256);this.displayOn=!1;this.interruptsOn=!1;this.fb32=t,this.cru=e,this.enableFlicker=r,this.palette=[u(0,0,0),u(0,0,0),u(33,200,66),u(94,220,120),u(84,85,237),u(125,118,252),u(212,82,77),u(66,235,245),u(252,85,84),u(255,121,120),u(212,193,84),u(230,206,128),u(33,176,59),u(201,91,186),u(204,204,204),u(255,255,255)]}reset(){var t;this.ram.fill(0),this.registers.fill(0),this.addressRegister=0,this.statusRegister=0,this.prefetchByte=0,this.latch=!1,this.displayOn=!1,this.interruptsOn=!1,this.screenMode=0,this.bitmapMode=!1,this.textMode=!1,this.colorTable=0,this.nameTable=0,this.charPatternTable=0,this.spriteAttributeTable=0,this.spritePatternTable=0,this.colorTableMask=16383,this.patternTableMask=16383,this.ramMask=16383,this.fgColor=0,this.bgColor=0,this.flicker=this.enableFlicker,this.redrawRequired=!0,this.width=304,this.height=240}drawScanline(t){var e=this.fb32,r=this.width,s=t*r,i=this.screenMode,h=this.textMode,a=this.bitmapMode,n=h?240:256,b=192,o=r-n>>1,d=this.height-b>>1,p=this.fgColor,M=this.bgColor,l=this.ram,v=this.nameTable,V=this.colorTable,P=this.charPatternTable,G=this.colorTableMask,S=this.patternTableMask,ce=this.spriteAttributeTable,de=this.spritePatternTable,$=(this.registers[1]&2)!==0,H=this.registers[1]&1,Z=($?16:8)<<(H?1:0),j=this.flicker?4:32,J=this.palette,N=!1,Q=!1,Y=31,R,f,D,T,C,F,m;if(t>=d&&t208&&(k-=256),k++;var y=k+Z,U=-1;if(B<8||!a)c>=k&&c=k&&X=64&&c<128&&c>=k&&c>H,Me=de+(me<<3)+pe,E=0;E=0&&O>H,Te=l[Me+(re>=8?16:0)];(Te&128>>(re&7))!==0&&(W[O]===0?W[O]=ge+1:N=!0)}}}z++}I+=4}else ee=!0}z>4&&(Q=!0,Y=B)}var _=h?(c>>3)*40:c>>3<<5,x=c&7;for(R=0;R=o&&R>3)],F=l[V+(T>>3)],m=l[P+(T<<3)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 2:T=l[v+_+(g>>3)],C=((c&192)<<5)+(T<<3),F=l[V+(C&G)+x],m=l[P+(C&S)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 3:T=l[v+_+(g>>3)],x=(c&28)>>2,m=l[P+(T<<3)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 1:T=l[v+_+Math.floor(g/6)],m=l[P+(T<<3)+x],f=(m&128>>g%6)!==0?p:M;break;case 5:T=l[v+_+Math.floor(g/6)],C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(m&128>>g%6)!==0?p:M;break;case 6:T=l[v+_+(g>>3)],x=(c&28)>>2,C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 7:f=(g&4)===0?p:M;break}if(f===0&&(f=M),!h){var se=W[g]-1;se>0&&(f=se)}}else f=M;D=J[f],e[s++]=D}}else for(D=J[M],R=0;R>4,this.bgColor=this.registers[7]&15;break}}setVDPWriteCommand3(t){this.setVDPWriteRegister(t)}writeAddress(t){if(!this.latch)this.addressRegister=this.addressRegister&65280|t;else{switch((t&192)>>6){case 0:this.setReadAddress(t);break;case 1:this.setWriteAddress(t);break;case 2:this.setVDPWriteRegister(t);break;case 3:this.setVDPWriteCommand3(t);break}this.redrawRequired=!0}this.latch=!this.latch}updateMode(t,e){if(this.bitmapMode=(t&2)!==0,this.textMode=(e&16)!==0,this.bitmapMode)switch((e&24)>>3){case 0:this.screenMode=2;break;case 1:this.screenMode=6;break;case 2:this.screenMode=5;break;case 3:this.screenMode=7;break}else switch((e&24)>>3){case 0:this.screenMode=0;break;case 1:this.screenMode=3;break;case 2:this.screenMode=1;break;case 3:this.screenMode=7;break}this.bitmapMode?(this.colorTable=(this.registers[3]&128)<<6,this.charPatternTable=(this.registers[4]&4)<<11,this.updateTableMasks()):(this.colorTable=this.registers[3]<<6,this.charPatternTable=(this.registers[4]&7)<<11),this.nameTable=(this.registers[2]&15)<<10,this.spriteAttributeTable=(this.registers[5]&127)<<7,this.spritePatternTable=(this.registers[6]&7)<<11}updateTableMasks(){this.screenMode===2?(this.colorTableMask=(this.registers[3]&127)<<6|63,this.patternTableMask=(this.registers[4]&3)<<11|this.colorTableMask&2047):this.screenMode===5||this.screenMode===6?(this.colorTableMask=this.ramMask,this.patternTableMask=(this.registers[4]&3)<<11|2047):(this.colorTableMask=this.ramMask,this.patternTableMask=this.ramMask)}writeData(t){this.probe.logVRAMWrite(this.addressRegister,t),this.ram[this.addressRegister++]=t,this.prefetchByte=t,this.addressRegister&=this.ramMask,this.latch=!1,this.redrawRequired=!0}readStatus(){var t=this.statusRegister;return this.statusRegister=31,this.interruptsOn&&this.cru.setVDPInterrupt(!1),this.latch=!1,t}readData(){var t=this.prefetchByte;return this.prefetchByte=this.ram[this.addressRegister++],this.probe.logVRAMRead(this.addressRegister-1,this.prefetchByte),this.addressRegister&=this.ramMask,this.latch=!1,t}getRAM(){return this.ram}colorTableSize(){return this.screenMode===0?32:this.screenMode===2?Math.min(this.colorTableMask+1,6144):0}patternTableSize(){return this.bitmapMode?Math.min(this.patternTableMask+1,6144):2048}getDebugTables(){var t=[["Pattern Table",this.charPatternTable,this.patternTableSize()],["Name Table",this.nameTable,768],["Color Table",this.colorTable,this.colorTableSize()],["Sprite Patterns",this.spritePatternTable,2048],["Sprite Attributes",this.spriteAttributeTable,128]];return t}getRegsString(){for(var e="Registers:",r=0;r>1,d=this.height-b>>1,p=this.fgColor,M=this.bgColor,l=this.ram,v=this.nameTable,V=this.colorTable,P=this.charPatternTable,G=this.colorTableMask,S=this.patternTableMask,ce=this.spriteAttributeTable,de=this.spritePatternTable,$=(this.registers[1]&2)!==0,H=this.registers[1]&1,Z=($?16:8)<<(H?1:0),j=this.flicker?4:32,J=this.palette,N=!1,Q=!1,Y=31,R,f,D,T,C,F,m;if(t>=d&&t208&&(k-=256),k++;var y=k+Z,U=-1;if(B<8||!a)c>=k&&c=k&&X=64&&c<128&&c>=k&&c>H,Me=de+(me<<3)+pe,E=0;E=0&&O>H,Te=l[Me+(re>=8?16:0)];(Te&128>>(re&7))!==0&&(W[O]===0?W[O]=ge+1:N=!0)}}}z++}I+=4}else ee=!0}z>4&&(Q=!0,Y=B)}var _=h?(c>>3)*40:c>>3<<5,x=c&7;for(R=0;R=o&&R>3)],F=l[V+(T>>3)],m=l[P+(T<<3)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 2:T=l[v+_+(g>>3)],C=((c&192)<<5)+(T<<3),F=l[V+(C&G)+x],m=l[P+(C&S)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 3:T=l[v+_+(g>>3)],x=(c&28)>>2,m=l[P+(T<<3)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 1:T=l[v+_+Math.floor(g/6)],m=l[P+(T<<3)+x],f=(m&128>>g%6)!==0?p:M;break;case 5:T=l[v+_+Math.floor(g/6)],C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(m&128>>g%6)!==0?p:M;break;case 6:T=l[v+_+(g>>3)],x=(c&28)>>2,C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 7:f=(g&4)===0?p:M;break}if(f===0&&(f=M),!h){var se=W[g]-1;se>0&&(f=se)}}else f=M;D=J[f],e[s++]=D}}else for(D=J[M],R=0;R>4,this.bgColor=this.registers[7]&15;break}}setVDPWriteCommand3(t){this.setVDPWriteRegister(t)}writeAddress(t){if(!this.latch)this.addressRegister=this.addressRegister&65280|t;else{switch((t&192)>>6){case 0:this.setReadAddress(t);break;case 1:this.setWriteAddress(t);break;case 2:this.setVDPWriteRegister(t);break;case 3:this.setVDPWriteCommand3(t);break}this.redrawRequired=!0}this.latch=!this.latch}updateMode(t,e){if(this.bitmapMode=(t&2)!==0,this.textMode=(e&16)!==0,this.bitmapMode)switch((e&24)>>3){case 0:this.screenMode=2;break;case 1:this.screenMode=6;break;case 2:this.screenMode=5;break;case 3:this.screenMode=7;break}else switch((e&24)>>3){case 0:this.screenMode=0;break;case 1:this.screenMode=3;break;case 2:this.screenMode=1;break;case 3:this.screenMode=7;break}this.bitmapMode?(this.colorTable=(this.registers[3]&128)<<6,this.charPatternTable=(this.registers[4]&4)<<11,this.updateTableMasks()):(this.colorTable=this.registers[3]<<6,this.charPatternTable=(this.registers[4]&7)<<11),this.nameTable=(this.registers[2]&15)<<10,this.spriteAttributeTable=(this.registers[5]&127)<<7,this.spritePatternTable=(this.registers[6]&7)<<11}updateTableMasks(){this.screenMode===2?(this.colorTableMask=(this.registers[3]&127)<<6|63,this.patternTableMask=(this.registers[4]&3)<<11|this.colorTableMask&2047):this.screenMode===5||this.screenMode===6?(this.colorTableMask=this.ramMask,this.patternTableMask=(this.registers[4]&3)<<11|2047):(this.colorTableMask=this.ramMask,this.patternTableMask=this.ramMask)}writeData(t){this.probe.logVRAMWrite(this.addressRegister,t),this.ram[this.addressRegister++]=t,this.prefetchByte=t,this.addressRegister&=this.ramMask,this.latch=!1,this.redrawRequired=!0}readStatus(){var t=this.statusRegister;return this.statusRegister=31,this.interruptsOn&&this.cru.setVDPInterrupt(!1),this.latch=!1,t}readData(){var t=this.prefetchByte;return this.prefetchByte=this.ram[this.addressRegister++],this.probe.logVRAMRead(this.addressRegister-1,this.prefetchByte),this.addressRegister&=this.ramMask,this.latch=!1,t}getRAM(){return this.ram}colorTableSize(){return this.screenMode===0?32:this.screenMode===2?Math.min(this.colorTableMask+1,6144):0}patternTableSize(){return this.bitmapMode?Math.min(this.patternTableMask+1,6144):2048}getDebugTables(){var t=[["Pattern Table",this.charPatternTable,this.patternTableSize()],["Name Table",this.nameTable,768],["Color Table",this.colorTable,this.colorTableSize()],["Sprite Patterns",this.spritePatternTable,2048],["Sprite Attributes",this.spriteAttributeTable,128]];return t}getRegsString(){for(var e="Registers:",r=0;r0&&(e+=A(i[0],20)+": $"+w(i[1],4)+" - $"+w(i[1]+i[2]-1,4)+` `);return e+=A("Address Register",20)+": $"+w(this.addressRegister,4)+` @@ -8,4 +8,4 @@ import{c as ie,k as he,o as ne,r as oe}from"./chunk-QYEDG265.js";import{_ as ae, `,this.ramMask!=16383&&(e+=A("RAM Mask",20)+": $"+w(this.ramMask)+` `),e}hexView(t,e,r){for(var s="",i=null,h=t,a=0,n=0;n>2&3)*85,(e>>4&3)*85),this.prefetchByte=e,this.addressRegister&=this.ramMask,this.redrawRequired=!0}else{var s=this.addressRegister;super.writeData(e),this.writeTwiddled(s,e)}this.latch=!1}writeTwiddled(e,r){for(var s=e&16380,i=s*2,h=this.ram[s],a=this.ram[s+1],n=this.ram[s+2],b=this.ram[s+3],o=0;o<8;++o){var d=7-o,p=h>>>d&1|(a>>>d&1)<<1|(n>>>d&1)<<2|(b>>>d&1)<<3;this.vramUntwiddled[i+o]=p}}getState(){var e=super.getState();return e.cram=this.cram.slice(0),e}restoreState(e){super.restoreState(e),this.cram.set(e.cram)}drawScanline(e){this.screenMode==4?this.rasterize_line(e):super.drawScanline(e)}findSprites(e){var r=this.spriteAttributeTable,s=[],i=8,h;for(this.registers[1]&2&&(i=16),h=0;h<64;h++){var a=this.ram[r+h];if(a===208)break;if(a>=240&&(a-=256),e>=a&&e=8)){b=!0;var V=e-M[2],P=h+M[1]*32+V*4,G=P*2+l,S=this.vramUntwiddled[G];if(S!==0){if(o){this.statusRegister|=32;break}this.fb32[r+(s+a-this.registers[8]&255)]=this.cpalette[16+S],o=!0}}}!b&&d>1&&(a+=d-1)}}border_clear(e,r){e=e|0,r=r|0;let s=16+(this.registers[7]&15),i=this.cpalette[s];this.fb32.fill(i,e,e+r)}rasterize_line(e){e|=0;var r=this.registers,s=256,i=this.numVisibleLines,h=this.width-s>>1,a=this.height-i>>1;let n=(e+a)*this.width|0,b=n+h|0;if(!this.displayOn||e<0||e>=i)e=262-a&&this.border_clear((e-262+a)*this.width,this.width);else{var o=e+r[9];o>=224&&(o-=224);let d=this.findSprites(e),p=r[0]&64&&e<16?0:r[8],M=this.nameTable+(o>>>3)*64,l=o&7;this.rasterize_background_line(b,p,M,l),this.rasterize_sprites(e,b,p,d),this.rasterize_foreground_line(b,p,M,l),this.border_clear(n,h),this.border_clear(b+256,h),r[0]&32&&this.border_clear(b,8)}e==i&&(this.statusRegister|=128,this.interruptsOn&&this.cru.setVDPInterrupt(!0)),e<=i?this.lineCounter>0?this.lineCounter--:(this.lineCounter=this.registers[10],this.lineInterruptPending=!0):this.lineCounter=this.registers[10],this.lineInterruptPending&&this.registers[0]&16}getDebugTables(){if(this.screenMode==4){var e=[["Pattern Table",0,16384],["Name Table",this.nameTable,2048],["Sprite Attributes",this.spriteAttributeTable,256]];return e}else return super.getDebugTables()}},le=class extends K{constructor(){super(...arguments);this.cram=new Uint8Array(64);this.cram_latch=0}writeData(e){if(this.writeToCRAM){if(this.addressRegister&1){let r=this.cram_latch+(e<<8),s=u((r&15)*17,(r>>4&15)*17,(r>>8&15)*17),i=this.addressRegister&this.cram.length-1;this.cram[i-1]=this.cram_latch,this.cram[i]=e,this.cpalette[i>>1]=s,this.prefetchByte=e,this.addressRegister&=this.ramMask,this.redrawRequired=!0}else this.cram_latch=e;this.addressRegister++}else super.writeData(e);this.latch=!1}};var be=2,ue=class extends oe{constructor(){super(...arguments);this.cpuFrequency=3579545;this.canvasWidth=304;this.numTotalScanlines=262;this.numVisibleScanlines=240;this.cpuCyclesPerLine=this.cpuFrequency/(262*60);this.sampleRate=262*60*be;this.overscan=!0;this.cpu=new ie}getKeyboardFunction(){return null}init(e,r,s){this.connectCPUMemoryBus(e),this.connectCPUIOBus(r),this.handler=ae(this.inputs,this.getKeyboardMap(),this.getKeyboardFunction()),this.psg=s,this.audioadapter=s&&new he(s.psg,be,this.sampleRate)}connectVideo(e){super.connectVideo(e);var r={setVDPInterrupt:s=>{s&&this.vdpInterrupt()}};this.vdp=this.newVDP(this.pixels,r,!0)}connectProbe(e){super.connectProbe(e),this.vdp.probe=e||this.nullProbe}newVDP(e,r,s){return new L(e,r,s)}startScanline(){this.audio&&this.audioadapter&&this.audioadapter.generate(this.audio)}drawScanline(){this.vdp.drawScanline(this.scanline)}loadState(e){super.loadState(e),this.vdp.restoreState(e.vdp)}saveState(){var e=super.saveState();return e.vdp=this.vdp.getState(),e}reset(){super.reset(),this.vdp.reset(),this.psg.reset()}getDebugCategories(){return["CPU","Stack","VDP"]}getDebugInfo(e,r){if(e==="VDP")return this.vdpStateToLongString(r.vdp)}vdpStateToLongString(e){return this.vdp.getRegsString()}readVRAMAddress(e){return this.vdp.ram[e&16383]}};export{K as a,le as b,ue as c}; -//# sourceMappingURL=chunk-FWTZO6HF.js.map +//# sourceMappingURL=chunk-TP7C4K6K.js.map diff --git a/gen/chunk-FWTZO6HF.js.map b/gen/chunk-TP7C4K6K.js.map similarity index 100% rename from gen/chunk-FWTZO6HF.js.map rename to gen/chunk-TP7C4K6K.js.map diff --git a/gen/chunk-UACHXWHT.js b/gen/chunk-UACHXWHT.js deleted file mode 100644 index 6d1c31d4..00000000 --- a/gen/chunk-UACHXWHT.js +++ /dev/null @@ -1,2 +0,0 @@ -function r(e){return e.endsWith("-llvm.c")?"remote:llvm-mos":e.endsWith(".c")||e.endsWith(".h")?"cc65":e.endsWith(".s")||e.endsWith(".ca65")?"ca65":e.endsWith(".dasm")?"dasm":e.endsWith(".bb")?"bataribasic":e.endsWith(".acme")?"acme":e.endsWith(".xa")?"xa":e.endsWith(".wiz")?"wiz":e.endsWith(".ecs")?"ecs":e.endsWith(".cpp")||e.endsWith(".cc")||e.endsWith(".o64")?"oscar64":"dasm"}function s(e){return e.endsWith(".c")||e.endsWith(".h")?"sdcc":e.endsWith(".s")?"sdasz80":e.endsWith(".sgb")?"sdasgb":e.endsWith(".ns")?"naken":e.endsWith(".scc")?"sccz80":e.endsWith(".z")?"zmac":e.endsWith(".wiz")?"wiz":"zmac"}function o(e){return e.endsWith(".c")||e.endsWith(".h")?"cmoc":e.endsWith(".xasm")?"xasm6809":e.endsWith(".lwasm")?"lwasm":"cmoc"}function c(e){return e=e.toLowerCase(),e.endsWith(".vasm")?"vasmarm":e.endsWith(".armips")?"armips":"armtcc"}function a(e){return e.endsWith(".cc2600")?"cc2600":e.endsWith("-llvm.c")?"remote:llvm-mos":e.endsWith(".wiz")?"wiz":e.endsWith(".bb")||e.endsWith(".bas")?"bataribasic":e.endsWith(".ca65")?"ca65":e.endsWith(".acme")?"acme":e.endsWith(".c")?"cc65":e.endsWith(".ecs")?"ecs":"dasm"}function u(e){return e.endsWith(".cc7800")||e.endsWith(".c78")?"cc7800":r(e)}function l(e){return e.endsWith(".bas")||e.endsWith(".fb")||e.endsWith(".fbi")?"fastbasic":r(e)}function m(e){return e.endsWith(".lnk")?"merlin32":r(e)}function d(e){return e.endsWith(".nesasm")?"nesasm":r(e)}function g(e){return e.endsWith(".c")?"cc65":e.endsWith(".s")||e.endsWith(".ca65")?"ca65":"dasm"}function h(e){return e.endsWith(".asm")?"jsasm":e.endsWith(".ice")?"silice":"verilator"}function W(e){return e.endsWith(".c")?"smlrc":"yasm"}function f(e){return e.endsWith(".dg")?"dialog":"inform6"}function F(e){return"basic"}export{r as a,s as b,o as c,c as d,a as e,u as f,l as g,m as h,d as i,g as j,h as k,W as l,f as m,F as n}; -//# sourceMappingURL=chunk-UACHXWHT.js.map diff --git a/gen/chunk-UACHXWHT.js.map b/gen/chunk-UACHXWHT.js.map deleted file mode 100644 index 94ead40f..00000000 --- a/gen/chunk-UACHXWHT.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../src/common/toolselect.ts"], - "sourcesContent": ["\n// toolselect - which tool builds a file, by platform and filename.\n// The one table the IDE's platform objects, the CLI, and the VS Code\n// extension all use. Keep this module free of emulator imports so build-only\n// code can use it without pulling in CPU cores.\n\nimport { getBasePlatform, getRootBasePlatform } from \"./util\";\n\nexport type ToolSelector = (fn: string) => string;\n\n////// per architecture\n\nexport function getToolForFilename_6502(fn: string): string {\n if (fn.endsWith(\"-llvm.c\")) return \"remote:llvm-mos\";\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".h\")) return \"cc65\";\n if (fn.endsWith(\".s\")) return \"ca65\";\n if (fn.endsWith(\".ca65\")) return \"ca65\";\n if (fn.endsWith(\".dasm\")) return \"dasm\";\n if (fn.endsWith(\".bb\")) return \"bataribasic\";\n if (fn.endsWith(\".acme\")) return \"acme\";\n if (fn.endsWith(\".xa\")) return \"xa\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n if (fn.endsWith(\".ecs\")) return \"ecs\";\n if (fn.endsWith(\".cpp\")) return \"oscar64\";\n if (fn.endsWith(\".cc\")) return \"oscar64\";\n if (fn.endsWith(\".o64\")) return \"oscar64\";\n return \"dasm\"; // .a\n}\n\nexport function getToolForFilename_z80(fn: string): string {\n if (fn.endsWith(\".c\")) return \"sdcc\";\n if (fn.endsWith(\".h\")) return \"sdcc\";\n if (fn.endsWith(\".s\")) return \"sdasz80\";\n if (fn.endsWith(\".sgb\")) return \"sdasgb\";\n if (fn.endsWith(\".ns\")) return \"naken\";\n if (fn.endsWith(\".scc\")) return \"sccz80\";\n if (fn.endsWith(\".z\")) return \"zmac\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n return \"zmac\";\n}\n\nexport function getToolForFilename_6809(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cmoc\";\n if (fn.endsWith(\".h\")) return \"cmoc\";\n if (fn.endsWith(\".xasm\")) return \"xasm6809\";\n if (fn.endsWith(\".lwasm\")) return \"lwasm\";\n return \"cmoc\";\n}\n\nexport function getToolForFilename_arm32(fn: string): string {\n fn = fn.toLowerCase();\n if (fn.endsWith(\".vasm\")) return \"vasmarm\";\n if (fn.endsWith(\".armips\")) return \"armips\";\n return \"armtcc\";\n}\n\n////// per platform\n\nexport function getToolForFilename_vcs(fn: string): string {\n if (fn.endsWith(\".cc2600\")) return \"cc2600\";\n if (fn.endsWith(\"-llvm.c\")) return \"remote:llvm-mos\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n if (fn.endsWith(\".bb\") || fn.endsWith(\".bas\")) return \"bataribasic\";\n if (fn.endsWith(\".ca65\")) return \"ca65\";\n if (fn.endsWith(\".acme\")) return \"acme\";\n //if (fn.endsWith(\".inc\")) return \"ca65\";\n if (fn.endsWith(\".c\")) return \"cc65\";\n //if (fn.endsWith(\".h\")) return \"cc65\";\n if (fn.endsWith(\".ecs\")) return \"ecs\";\n return \"dasm\";\n}\n\nexport function getToolForFilename_atari7800(fn: string): string {\n if (fn.endsWith(\".cc7800\")) return \"cc7800\";\n if (fn.endsWith(\".c78\")) return \"cc7800\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_atari8(fn: string): string {\n if (fn.endsWith(\".bas\") || fn.endsWith(\".fb\") || fn.endsWith(\".fbi\")) return \"fastbasic\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_apple2(fn: string): string {\n if (fn.endsWith(\".lnk\")) return \"merlin32\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_nes(fn: string): string {\n //if (fn.endsWith(\".asm\")) return \"ca65\"; // .asm uses ca65\n if (fn.endsWith(\".nesasm\")) return \"nesasm\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_channelf(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".s\") || fn.endsWith(\".ca65\")) return \"ca65\";\n return \"dasm\";\n}\n\nexport function getToolForFilename_verilog(fn: string): string {\n if (fn.endsWith(\".asm\")) return \"jsasm\";\n if (fn.endsWith(\".ice\")) return \"silice\";\n return \"verilator\";\n}\n\nexport function getToolForFilename_x86(fn: string): string {\n if (fn.endsWith(\".c\")) return \"smlrc\";\n return \"yasm\";\n}\n\nexport function getToolForFilename_zmachine(fn: string): string {\n return fn.endsWith(\".dg\") ? \"dialog\" : \"inform6\";\n}\n\nexport function getToolForFilename_basic(fn: string): string {\n return \"basic\";\n}\n\n// Looked up by full platform id, then base id (no .suffix), then root id (no\n// -specialization), so e.g. williams-z80 can differ from williams.\nconst PLATFORM_TOOLS: { [platform: string]: ToolSelector } = {\n // 6502\n 'vcs': getToolForFilename_vcs,\n 'atari7800': getToolForFilename_atari7800,\n 'atari8': getToolForFilename_atari8,\n 'apple2': getToolForFilename_apple2,\n 'nes': getToolForFilename_nes,\n 'c64': getToolForFilename_6502,\n 'vic20': getToolForFilename_6502,\n 'kim1': getToolForFilename_6502,\n 'exidy': getToolForFilename_6502,\n 'devel': getToolForFilename_6502,\n 'pce': getToolForFilename_6502,\n 'vector': getToolForFilename_6502,\n // Z80 and friends\n 'vector-z80color': getToolForFilename_z80,\n 'williams-z80': getToolForFilename_z80,\n 'astrocade': getToolForFilename_z80,\n 'coleco': getToolForFilename_z80,\n 'cpc': getToolForFilename_z80,\n 'galaxian': getToolForFilename_z80,\n 'gb': getToolForFilename_z80,\n 'mcr': getToolForFilename_z80,\n 'msx': getToolForFilename_z80,\n 'mw8080bw': getToolForFilename_z80,\n 'pacman': getToolForFilename_z80,\n 'sms': getToolForFilename_z80,\n 'sound_konami': getToolForFilename_z80,\n 'sound_williams': getToolForFilename_z80,\n 'vicdual': getToolForFilename_z80,\n 'zx': getToolForFilename_z80,\n // 6809\n 'williams': getToolForFilename_6809,\n 'vectrex': getToolForFilename_6809,\n // other\n 'arm32': getToolForFilename_arm32,\n 'channelf': getToolForFilename_channelf,\n 'verilog': getToolForFilename_verilog,\n 'x86': getToolForFilename_x86,\n 'zmachine': getToolForFilename_zmachine,\n 'basic': getToolForFilename_basic,\n};\n\nexport function getToolSelector(platform: string): ToolSelector | undefined {\n return PLATFORM_TOOLS[platform]\n || PLATFORM_TOOLS[getBasePlatform(platform)]\n || PLATFORM_TOOLS[getRootBasePlatform(platform)];\n}\n\n/** The tool that builds `fn` on `platform`. Unknown platforms get the Z80 tools. */\nexport function getToolForPlatform(platform: string, fn: string): string {\n return (getToolSelector(platform) || getToolForFilename_z80)(fn);\n}\n"], - "mappings": "AAYO,SAASA,EAAwBC,EAAoB,CAC1D,OAAIA,EAAG,SAAS,SAAS,EAAU,kBAC/BA,EAAG,SAAS,IAAI,GAChBA,EAAG,SAAS,IAAI,EAAU,OAC1BA,EAAG,SAAS,IAAI,GAChBA,EAAG,SAAS,OAAO,EAAU,OAC7BA,EAAG,SAAS,OAAO,EAAU,OAC7BA,EAAG,SAAS,KAAK,EAAU,cAC3BA,EAAG,SAAS,OAAO,EAAU,OAC7BA,EAAG,SAAS,KAAK,EAAU,KAC3BA,EAAG,SAAS,MAAM,EAAU,MAC5BA,EAAG,SAAS,MAAM,EAAU,MAC5BA,EAAG,SAAS,MAAM,GAClBA,EAAG,SAAS,KAAK,GACjBA,EAAG,SAAS,MAAM,EAAU,UACzB,MACT,CAEO,SAASC,EAAuBD,EAAoB,CAEzD,OADIA,EAAG,SAAS,IAAI,GAChBA,EAAG,SAAS,IAAI,EAAU,OAC1BA,EAAG,SAAS,IAAI,EAAU,UAC1BA,EAAG,SAAS,MAAM,EAAU,SAC5BA,EAAG,SAAS,KAAK,EAAU,QAC3BA,EAAG,SAAS,MAAM,EAAU,SAC5BA,EAAG,SAAS,IAAI,EAAU,OAC1BA,EAAG,SAAS,MAAM,EAAU,MACzB,MACT,CAEO,SAASE,EAAwBF,EAAoB,CAE1D,OADIA,EAAG,SAAS,IAAI,GAChBA,EAAG,SAAS,IAAI,EAAU,OAC1BA,EAAG,SAAS,OAAO,EAAU,WAC7BA,EAAG,SAAS,QAAQ,EAAU,QAC3B,MACT,CAEO,SAASG,EAAyBH,EAAoB,CAE3D,OADAA,EAAKA,EAAG,YAAY,EAChBA,EAAG,SAAS,OAAO,EAAU,UAC7BA,EAAG,SAAS,SAAS,EAAU,SAC5B,QACT,CAIO,SAASI,EAAuBJ,EAAoB,CACzD,OAAIA,EAAG,SAAS,SAAS,EAAU,SAC/BA,EAAG,SAAS,SAAS,EAAU,kBAC/BA,EAAG,SAAS,MAAM,EAAU,MAC5BA,EAAG,SAAS,KAAK,GAAKA,EAAG,SAAS,MAAM,EAAU,cAClDA,EAAG,SAAS,OAAO,EAAU,OAC7BA,EAAG,SAAS,OAAO,EAAU,OAE7BA,EAAG,SAAS,IAAI,EAAU,OAE1BA,EAAG,SAAS,MAAM,EAAU,MACzB,MACT,CAEO,SAASK,EAA6BL,EAAoB,CAE/D,OADIA,EAAG,SAAS,SAAS,GACrBA,EAAG,SAAS,MAAM,EAAU,SACzBD,EAAwBC,CAAE,CACnC,CAEO,SAASM,EAA0BN,EAAoB,CAC5D,OAAIA,EAAG,SAAS,MAAM,GAAKA,EAAG,SAAS,KAAK,GAAKA,EAAG,SAAS,MAAM,EAAU,YACtED,EAAwBC,CAAE,CACnC,CAEO,SAASO,EAA0BP,EAAoB,CAC5D,OAAIA,EAAG,SAAS,MAAM,EAAU,WACzBD,EAAwBC,CAAE,CACnC,CAEO,SAASQ,EAAuBR,EAAoB,CAEzD,OAAIA,EAAG,SAAS,SAAS,EAAU,SAC5BD,EAAwBC,CAAE,CACnC,CAEO,SAASS,EAA4BT,EAAoB,CAC9D,OAAIA,EAAG,SAAS,IAAI,EAAU,OAC1BA,EAAG,SAAS,IAAI,GAAKA,EAAG,SAAS,OAAO,EAAU,OAC/C,MACT,CAEO,SAASU,EAA2BV,EAAoB,CAC7D,OAAIA,EAAG,SAAS,MAAM,EAAU,QAC5BA,EAAG,SAAS,MAAM,EAAU,SACzB,WACT,CAEO,SAASW,EAAuBX,EAAoB,CACzD,OAAIA,EAAG,SAAS,IAAI,EAAU,QACvB,MACT,CAEO,SAASY,EAA4BZ,EAAoB,CAC9D,OAAOA,EAAG,SAAS,KAAK,EAAI,SAAW,SACzC,CAEO,SAASa,EAAyBb,EAAoB,CAC3D,MAAO,OACT", - "names": ["getToolForFilename_6502", "fn", "getToolForFilename_z80", "getToolForFilename_6809", "getToolForFilename_arm32", "getToolForFilename_vcs", "getToolForFilename_atari7800", "getToolForFilename_atari8", "getToolForFilename_apple2", "getToolForFilename_nes", "getToolForFilename_channelf", "getToolForFilename_verilog", "getToolForFilename_x86", "getToolForFilename_zmachine", "getToolForFilename_basic"] -} diff --git a/gen/chunk-UXRCACYH.js b/gen/chunk-UXRCACYH.js new file mode 100644 index 00000000..f90cb46a --- /dev/null +++ b/gen/chunk-UXRCACYH.js @@ -0,0 +1,2 @@ +function r(e){return e.endsWith("-llvm.c")?"remote:llvm-mos":e.endsWith("-sdcc.c")||e.endsWith(".sdcc")?"sdcc":e.endsWith(".c")||e.endsWith(".h")?"cc65":e.endsWith(".s")||e.endsWith(".ca65")?"ca65":e.endsWith(".dasm")?"dasm":e.endsWith(".bb")?"bataribasic":e.endsWith(".acme")?"acme":e.endsWith(".xa")?"xa":e.endsWith(".wiz")?"wiz":e.endsWith(".ecs")?"ecs":e.endsWith(".cpp")||e.endsWith(".cc")||e.endsWith(".o64")?"oscar64":"dasm"}function s(e){return e.endsWith(".c")||e.endsWith(".sdcc")||e.endsWith(".h")?"sdcc":e.endsWith(".s")?"sdasz80":e.endsWith(".sgb")?"sdasgb":e.endsWith(".ns")?"naken":e.endsWith(".scc")?"sccz80":e.endsWith(".z")?"zmac":e.endsWith(".wiz")?"wiz":"zmac"}function c(e){return e.endsWith(".c")||e.endsWith(".h")?"cmoc":e.endsWith(".xasm")?"xasm6809":e.endsWith(".lwasm")?"lwasm":"cmoc"}function o(e){return e=e.toLowerCase(),e.endsWith(".vasm")?"vasmarm":e.endsWith(".armips")?"armips":"armtcc"}function a(e){return e.endsWith(".cc2600")?"cc2600":e.endsWith("-llvm.c")?"remote:llvm-mos":e.endsWith(".wiz")?"wiz":e.endsWith(".bb")||e.endsWith(".bas")?"bataribasic":e.endsWith(".ca65")?"ca65":e.endsWith(".acme")?"acme":e.endsWith(".c")?"cc65":e.endsWith(".ecs")?"ecs":"dasm"}function u(e){return e.endsWith(".cc7800")||e.endsWith(".c78")?"cc7800":r(e)}function d(e){return e.endsWith(".bas")||e.endsWith(".fb")||e.endsWith(".fbi")?"fastbasic":r(e)}function l(e){return e.endsWith(".lnk")?"merlin32":r(e)}function m(e){return e.endsWith(".nesasm")?"nesasm":r(e)}function g(e){return e.endsWith(".c")?"cc65":e.endsWith(".s")||e.endsWith(".ca65")?"ca65":"dasm"}function h(e){return e.endsWith(".asm")?"jsasm":e.endsWith(".ice")?"silice":"verilator"}function W(e){return e.endsWith(".c")?"smlrc":"yasm"}function F(e){return e.endsWith(".dg")?"dialog":"inform6"}function p(e){return"basic"}export{r as a,s as b,c,o as d,a as e,u as f,d as g,l as h,m as i,g as j,h as k,W as l,F as m,p as n}; +//# sourceMappingURL=chunk-UXRCACYH.js.map diff --git a/gen/chunk-UXRCACYH.js.map b/gen/chunk-UXRCACYH.js.map new file mode 100644 index 00000000..5512827b --- /dev/null +++ b/gen/chunk-UXRCACYH.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/common/toolselect.ts"], + "sourcesContent": ["\n// toolselect - which tool builds a file, by platform and filename.\n// The one table the IDE's platform objects, the CLI, and the VS Code\n// extension all use. Keep this module free of emulator imports so build-only\n// code can use it without pulling in CPU cores.\n\nimport { getBasePlatform, getRootBasePlatform } from \"./util\";\n\nexport type ToolSelector = (fn: string) => string;\n\n////// per architecture\n\nexport function getToolForFilename_6502(fn: string): string {\n if (fn.endsWith(\"-llvm.c\")) return \"remote:llvm-mos\";\n if (fn.endsWith(\"-sdcc.c\") || fn.endsWith(\".sdcc\")) return \"sdcc\"; // SDCC 4.x mos6502 backend\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".h\")) return \"cc65\";\n if (fn.endsWith(\".s\")) return \"ca65\";\n if (fn.endsWith(\".ca65\")) return \"ca65\";\n if (fn.endsWith(\".dasm\")) return \"dasm\";\n if (fn.endsWith(\".bb\")) return \"bataribasic\";\n if (fn.endsWith(\".acme\")) return \"acme\";\n if (fn.endsWith(\".xa\")) return \"xa\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n if (fn.endsWith(\".ecs\")) return \"ecs\";\n if (fn.endsWith(\".cpp\")) return \"oscar64\";\n if (fn.endsWith(\".cc\")) return \"oscar64\";\n if (fn.endsWith(\".o64\")) return \"oscar64\";\n return \"dasm\"; // .a\n}\n\nexport function getToolForFilename_z80(fn: string): string {\n if (fn.endsWith(\".c\") || fn.endsWith(\".sdcc\")) return \"sdcc\";\n if (fn.endsWith(\".h\")) return \"sdcc\";\n if (fn.endsWith(\".s\")) return \"sdasz80\";\n if (fn.endsWith(\".sgb\")) return \"sdasgb\";\n if (fn.endsWith(\".ns\")) return \"naken\";\n if (fn.endsWith(\".scc\")) return \"sccz80\";\n if (fn.endsWith(\".z\")) return \"zmac\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n return \"zmac\";\n}\n\nexport function getToolForFilename_6809(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cmoc\";\n if (fn.endsWith(\".h\")) return \"cmoc\";\n if (fn.endsWith(\".xasm\")) return \"xasm6809\";\n if (fn.endsWith(\".lwasm\")) return \"lwasm\";\n return \"cmoc\";\n}\n\nexport function getToolForFilename_arm32(fn: string): string {\n fn = fn.toLowerCase();\n if (fn.endsWith(\".vasm\")) return \"vasmarm\";\n if (fn.endsWith(\".armips\")) return \"armips\";\n return \"armtcc\";\n}\n\n////// per platform\n\nexport function getToolForFilename_vcs(fn: string): string {\n if (fn.endsWith(\".cc2600\")) return \"cc2600\";\n if (fn.endsWith(\"-llvm.c\")) return \"remote:llvm-mos\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n if (fn.endsWith(\".bb\") || fn.endsWith(\".bas\")) return \"bataribasic\";\n if (fn.endsWith(\".ca65\")) return \"ca65\";\n if (fn.endsWith(\".acme\")) return \"acme\";\n //if (fn.endsWith(\".inc\")) return \"ca65\";\n if (fn.endsWith(\".c\")) return \"cc65\";\n //if (fn.endsWith(\".h\")) return \"cc65\";\n if (fn.endsWith(\".ecs\")) return \"ecs\";\n return \"dasm\";\n}\n\nexport function getToolForFilename_atari7800(fn: string): string {\n if (fn.endsWith(\".cc7800\")) return \"cc7800\";\n if (fn.endsWith(\".c78\")) return \"cc7800\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_atari8(fn: string): string {\n if (fn.endsWith(\".bas\") || fn.endsWith(\".fb\") || fn.endsWith(\".fbi\")) return \"fastbasic\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_apple2(fn: string): string {\n if (fn.endsWith(\".lnk\")) return \"merlin32\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_nes(fn: string): string {\n //if (fn.endsWith(\".asm\")) return \"ca65\"; // .asm uses ca65\n if (fn.endsWith(\".nesasm\")) return \"nesasm\";\n return getToolForFilename_6502(fn);\n}\n\nexport function getToolForFilename_channelf(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".s\") || fn.endsWith(\".ca65\")) return \"ca65\";\n return \"dasm\";\n}\n\nexport function getToolForFilename_verilog(fn: string): string {\n if (fn.endsWith(\".asm\")) return \"jsasm\";\n if (fn.endsWith(\".ice\")) return \"silice\";\n return \"verilator\";\n}\n\nexport function getToolForFilename_x86(fn: string): string {\n if (fn.endsWith(\".c\")) return \"smlrc\";\n return \"yasm\";\n}\n\nexport function getToolForFilename_zmachine(fn: string): string {\n return fn.endsWith(\".dg\") ? \"dialog\" : \"inform6\";\n}\n\nexport function getToolForFilename_basic(fn: string): string {\n return \"basic\";\n}\n\n// Looked up by full platform id, then base id (no .suffix), then root id (no\n// -specialization), so e.g. williams-z80 can differ from williams.\nconst PLATFORM_TOOLS: { [platform: string]: ToolSelector } = {\n // 6502\n 'vcs': getToolForFilename_vcs,\n 'atari7800': getToolForFilename_atari7800,\n 'atari8': getToolForFilename_atari8,\n 'apple2': getToolForFilename_apple2,\n 'nes': getToolForFilename_nes,\n 'c64': getToolForFilename_6502,\n 'vic20': getToolForFilename_6502,\n 'kim1': getToolForFilename_6502,\n 'exidy': getToolForFilename_6502,\n 'devel': getToolForFilename_6502,\n 'pce': getToolForFilename_6502,\n 'vector': getToolForFilename_6502,\n // Z80 and friends\n 'vector-z80color': getToolForFilename_z80,\n 'williams-z80': getToolForFilename_z80,\n 'astrocade': getToolForFilename_z80,\n 'coleco': getToolForFilename_z80,\n 'cpc': getToolForFilename_z80,\n 'galaxian': getToolForFilename_z80,\n 'gb': getToolForFilename_z80,\n 'mcr': getToolForFilename_z80,\n 'msx': getToolForFilename_z80,\n 'mw8080bw': getToolForFilename_z80,\n 'pacman': getToolForFilename_z80,\n 'sms': getToolForFilename_z80,\n 'sound_konami': getToolForFilename_z80,\n 'sound_williams': getToolForFilename_z80,\n 'vicdual': getToolForFilename_z80,\n 'zx': getToolForFilename_z80,\n // 6809\n 'williams': getToolForFilename_6809,\n 'vectrex': getToolForFilename_6809,\n // other\n 'arm32': getToolForFilename_arm32,\n 'channelf': getToolForFilename_channelf,\n 'verilog': getToolForFilename_verilog,\n 'x86': getToolForFilename_x86,\n 'zmachine': getToolForFilename_zmachine,\n 'basic': getToolForFilename_basic,\n};\n\nexport function getToolSelector(platform: string): ToolSelector | undefined {\n return PLATFORM_TOOLS[platform]\n || PLATFORM_TOOLS[getBasePlatform(platform)]\n || PLATFORM_TOOLS[getRootBasePlatform(platform)];\n}\n\n/** The tool that builds `fn` on `platform`. Unknown platforms get the Z80 tools. */\nexport function getToolForPlatform(platform: string, fn: string): string {\n return (getToolSelector(platform) || getToolForFilename_z80)(fn);\n}\n"], + "mappings": "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", + "names": ["getToolForFilename_6502", "fn", "getToolForFilename_z80", "getToolForFilename_6809", "getToolForFilename_arm32", "getToolForFilename_vcs", "getToolForFilename_atari7800", "getToolForFilename_atari8", "getToolForFilename_apple2", "getToolForFilename_nes", "getToolForFilename_channelf", "getToolForFilename_verilog", "getToolForFilename_x86", "getToolForFilename_zmachine", "getToolForFilename_basic"] +} diff --git a/gen/chunk-XPT2MIFH.js b/gen/chunk-XRDUJUI5.js similarity index 73% rename from gen/chunk-XPT2MIFH.js rename to gen/chunk-XRDUJUI5.js index e8c6f944..33b04c3a 100644 --- a/gen/chunk-XPT2MIFH.js +++ b/gen/chunk-XRDUJUI5.js @@ -1,2 +1,2 @@ -import{N as b,O as w}from"./chunk-V6TNHL6H.js";import{e as E}from"./chunk-N7W4C4V2.js";var y=E((d,v)=>{(function(l,e){typeof define=="function"&&define.amd?define([],e):typeof d!="undefined"?e():(e(),l.FileSaver={})})(d,function(){"use strict";function l(t,r){return typeof r=="undefined"?r={autoBom:!1}:typeof r!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function e(t,r,c){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){h(a.response,r,c)},a.onerror=function(){console.error("could not download file")},a.send()}function o(t){var r=new XMLHttpRequest;r.open("HEAD",t,!1);try{r.send()}catch(c){}return 200<=r.status&&299>=r.status}function i(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(c){var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}}var n=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,u=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),h=n.saveAs||(typeof window!="object"||window!==n?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(t,r,c){var a=n.URL||n.webkitURL,s=document.createElement("a");r=r||t.name||"download",s.download=r,s.rel="noopener",typeof t=="string"?(s.href=t,s.origin===location.origin?i(s):o(s.href)?e(t,r,c):i(s,s.target="_blank")):(s.href=a.createObjectURL(t),setTimeout(function(){a.revokeObjectURL(s.href)},4e4),setTimeout(function(){i(s)},0))}:"msSaveOrOpenBlob"in navigator?function(t,r,c){if(r=r||t.name||"download",typeof t!="string")navigator.msSaveOrOpenBlob(l(t,c),r);else if(o(t))e(t,r,c);else{var a=document.createElement("a");a.href=t,a.target="_blank",setTimeout(function(){i(a)})}}:function(t,r,c,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),typeof t=="string")return e(t,r,c);var s=t.type==="application/octet-stream",C=/constructor/i.test(n.HTMLElement)||n.safari,S=/CriOS\/[\d]+/.test(navigator.userAgent);if((S||s&&C||u)&&typeof FileReader!="undefined"){var p=new FileReader;p.onloadend=function(){var m=p.result;m=S?m:m.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=m:location=m,a=null},p.readAsDataURL(t)}else{var k=n.URL||n.webkitURL,f=k.createObjectURL(t);a?a.location=f:location.href=f,a=null,setTimeout(function(){k.revokeObjectURL(f)},4e4)}});n.saveAs=h.saveAs=h,typeof v!="undefined"&&(v.exports=h)})});var g=class{constructor(e){this.checkpointInterval=10;this.maxCheckpoints=300;this.reset(),this.platform=e}reset(){this.checkpoints=[],this.framerecs=[],this.frameCount=0,this.lastSeekFrame=0,this.lastSeekStep=0,this.lastStepCount=0,this.callbackStateChanged&&this.callbackStateChanged()}frameRequested(){var e={controls:this.platform.saveControlsState(),seed:b()},o=!1;return this.lastSeekFramethis.maxCheckpoints&&(this.checkpoints.shift(),this.framerecs=this.framerecs.slice(this.checkpointInterval),this.lastSeekFrame-=this.checkpointInterval,this.frameCount-=this.checkpointInterval,this.callbackStateChanged&&this.callbackStateChanged())}getStateAtOrBefore(e){if(e<=0&&this.checkpoints.length>0)return{frame:0,state:this.checkpoints[0]};var o=Math.floor(e/this.checkpointInterval),i=o0&&this.platform.advanceFrameClock&&(o=this.platform.advanceFrameClock(null,o)),this.lastSeekFrame=e,this.lastSeekStep=o,this.lastStepCount=u,e}else return-1}loadControls(e){this.platform.loadControlsState&&this.platform.loadControlsState(this.framerecs[e].controls),w(this.framerecs[e].seed)}getLastCheckpoint(){return this.checkpoints.length&&this.checkpoints[this.checkpoints.length-1]}};function R(l){switch(l){case"apple2":return import("./apple2-RMS6MFCB.js");case"arm32":return import("./arm32-BPVZ6WEV.js");case"astrocade":return import("./astrocade-TDMFEDW6.js");case"atari7800":return import("./atari7800-5OD4EMMG.js");case"atari8":return import("./atari8-Z33KTU3I.js");case"basic":return import("./basic-IHKFPLSJ.js");case"c64":return import("./c64-7RF3PPMK.js");case"channelf":return import("./channelf-RAJ3RCG5.js");case"coleco":return import("./coleco-DHZHDQNM.js");case"cpc":return import("./cpc-C72IO2CP.js");case"devel":return import("./devel-Q7EA5VXM.js");case"exidy":return import("./exidy-L6KVY44A.js");case"galaxian":return import("./galaxian-CJMJ6QQE.js");case"gb":return import("./gb-PP6J5B4N.js");case"gameboy":return import("./gb-PP6J5B4N.js");case"kim1":return import("./kim1-B54DQ2TK.js");case"mcr":return import("./mcr-2DMHCXT5.js");case"msx":return import("./msx-IHIZHVAU.js");case"mw8080bw":return import("./mw8080bw-BKLOGFXB.js");case"nes":return import("./nes-EMVG76ED.js");case"pacman":return import("./pacman-RAYBJORX.js");case"pce":return import("./pce-QHW3U4S4.js");case"sms":return import("./sms-7XSKW2G3.js");case"sound_konami":return import("./sound_konami-JDSIX6TM.js");case"sound_williams":return import("./sound_williams-J2ISZQKY.js");case"vcs":return import("./vcs-ZFFA57FB.js");case"vector":return import("./vector-7WQM5SM7.js");case"vectrex":return import("./vectrex-HDKEOCCF.js");case"verilog":return import("./verilog-VXICCON2.js");case"vic20":return import("./vic20-XM3TBZSE.js");case"vicdual":return import("./vicdual-757EWAKZ.js");case"williams":return import("./williams-KRJBEQUA.js");case"x86":return import("./x86-TVB5Q6PB.js");case"zmachine":return import("./zmachine-6DG2RLTC.js");case"zx":return import("./zx-VPQKW5AP.js");default:throw new Error(`Platform not recognized: '${l}'`)}}export{g as a,R as b,y as c}; -//# sourceMappingURL=chunk-XPT2MIFH.js.map +import{N as b,O as w}from"./chunk-V6TNHL6H.js";import{e as E}from"./chunk-N7W4C4V2.js";var y=E((d,v)=>{(function(l,e){typeof define=="function"&&define.amd?define([],e):typeof d!="undefined"?e():(e(),l.FileSaver={})})(d,function(){"use strict";function l(t,r){return typeof r=="undefined"?r={autoBom:!1}:typeof r!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function e(t,r,c){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){h(a.response,r,c)},a.onerror=function(){console.error("could not download file")},a.send()}function o(t){var r=new XMLHttpRequest;r.open("HEAD",t,!1);try{r.send()}catch(c){}return 200<=r.status&&299>=r.status}function i(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(c){var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}}var n=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,u=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),h=n.saveAs||(typeof window!="object"||window!==n?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(t,r,c){var a=n.URL||n.webkitURL,s=document.createElement("a");r=r||t.name||"download",s.download=r,s.rel="noopener",typeof t=="string"?(s.href=t,s.origin===location.origin?i(s):o(s.href)?e(t,r,c):i(s,s.target="_blank")):(s.href=a.createObjectURL(t),setTimeout(function(){a.revokeObjectURL(s.href)},4e4),setTimeout(function(){i(s)},0))}:"msSaveOrOpenBlob"in navigator?function(t,r,c){if(r=r||t.name||"download",typeof t!="string")navigator.msSaveOrOpenBlob(l(t,c),r);else if(o(t))e(t,r,c);else{var a=document.createElement("a");a.href=t,a.target="_blank",setTimeout(function(){i(a)})}}:function(t,r,c,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),typeof t=="string")return e(t,r,c);var s=t.type==="application/octet-stream",C=/constructor/i.test(n.HTMLElement)||n.safari,S=/CriOS\/[\d]+/.test(navigator.userAgent);if((S||s&&C||u)&&typeof FileReader!="undefined"){var p=new FileReader;p.onloadend=function(){var m=p.result;m=S?m:m.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=m:location=m,a=null},p.readAsDataURL(t)}else{var k=n.URL||n.webkitURL,f=k.createObjectURL(t);a?a.location=f:location.href=f,a=null,setTimeout(function(){k.revokeObjectURL(f)},4e4)}});n.saveAs=h.saveAs=h,typeof v!="undefined"&&(v.exports=h)})});var g=class{constructor(e){this.checkpointInterval=10;this.maxCheckpoints=300;this.reset(),this.platform=e}reset(){this.checkpoints=[],this.framerecs=[],this.frameCount=0,this.lastSeekFrame=0,this.lastSeekStep=0,this.lastStepCount=0,this.callbackStateChanged&&this.callbackStateChanged()}frameRequested(){var e={controls:this.platform.saveControlsState(),seed:b()},o=!1;return this.lastSeekFramethis.maxCheckpoints&&(this.checkpoints.shift(),this.framerecs=this.framerecs.slice(this.checkpointInterval),this.lastSeekFrame-=this.checkpointInterval,this.frameCount-=this.checkpointInterval,this.callbackStateChanged&&this.callbackStateChanged())}getStateAtOrBefore(e){if(e<=0&&this.checkpoints.length>0)return{frame:0,state:this.checkpoints[0]};var o=Math.floor(e/this.checkpointInterval),i=o0&&this.platform.advanceFrameClock&&(o=this.platform.advanceFrameClock(null,o)),this.lastSeekFrame=e,this.lastSeekStep=o,this.lastStepCount=u,e}else return-1}loadControls(e){this.platform.loadControlsState&&this.platform.loadControlsState(this.framerecs[e].controls),w(this.framerecs[e].seed)}getLastCheckpoint(){return this.checkpoints.length&&this.checkpoints[this.checkpoints.length-1]}};function R(l){switch(l){case"apple2":return import("./apple2-XAUBDC5F.js");case"arm32":return import("./arm32-6HDX2P75.js");case"astrocade":return import("./astrocade-S4VJAMLF.js");case"atari7800":return import("./atari7800-V3WYZERI.js");case"atari8":return import("./atari8-MAPQMH2S.js");case"basic":return import("./basic-6QVJSRQT.js");case"c64":return import("./c64-EUV3UE4H.js");case"channelf":return import("./channelf-ZQADDMQO.js");case"coleco":return import("./coleco-3KDKKITT.js");case"cpc":return import("./cpc-POSTORN7.js");case"devel":return import("./devel-UW7ZZSEK.js");case"exidy":return import("./exidy-RMOHPADZ.js");case"galaxian":return import("./galaxian-OHSHF73Y.js");case"gb":return import("./gb-DUD4LPKZ.js");case"gameboy":return import("./gb-DUD4LPKZ.js");case"kim1":return import("./kim1-AEIR7MHF.js");case"mcr":return import("./mcr-6CI7LYHO.js");case"msx":return import("./msx-SD6GVBPB.js");case"mw8080bw":return import("./mw8080bw-KVH4PEGP.js");case"nes":return import("./nes-G3Q7YZ23.js");case"pacman":return import("./pacman-L2UNSITI.js");case"pce":return import("./pce-GU673WGG.js");case"sms":return import("./sms-QJAREAJY.js");case"sound_konami":return import("./sound_konami-SZIVTBKX.js");case"sound_williams":return import("./sound_williams-5MCUOTIL.js");case"vcs":return import("./vcs-34OPJPU2.js");case"vector":return import("./vector-AYSJMYFJ.js");case"vectrex":return import("./vectrex-25OH6YZM.js");case"verilog":return import("./verilog-T5AK3OI3.js");case"vic20":return import("./vic20-4QHSSOTM.js");case"vicdual":return import("./vicdual-C3DWRCZD.js");case"williams":return import("./williams-GTYM4HB6.js");case"x86":return import("./x86-NUWJFW7Y.js");case"zmachine":return import("./zmachine-WKMQIEWB.js");case"zx":return import("./zx-XRJ7OP3W.js");default:throw new Error(`Platform not recognized: '${l}'`)}}export{g as a,R as b,y as c}; +//# sourceMappingURL=chunk-XRDUJUI5.js.map diff --git a/gen/chunk-XPT2MIFH.js.map b/gen/chunk-XRDUJUI5.js.map similarity index 100% rename from gen/chunk-XPT2MIFH.js.map rename to gen/chunk-XRDUJUI5.js.map diff --git a/gen/coleco-DHZHDQNM.js b/gen/coleco-3KDKKITT.js similarity index 95% rename from gen/coleco-DHZHDQNM.js rename to gen/coleco-3KDKKITT.js index 98150c48..4cf0bebb 100644 --- a/gen/coleco-DHZHDQNM.js +++ b/gen/coleco-3KDKKITT.js @@ -1,4 +1,4 @@ -import{c as h}from"./chunk-FWTZO6HF.js";import{b as m}from"./chunk-TANFDIIN.js";import{H as M,d as D,f as E}from"./chunk-QYEDG265.js";import{b as n}from"./chunk-UACHXWHT.js";import{L as r,Z as e,aa as f,da as g,l as a,m as c}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var x=f([[e.UP,0,1],[e.DOWN,0,4],[e.LEFT,0,8],[e.RIGHT,0,2],[e.A,0,64],[e.B,1,64],[e.GP_A,0,64],[e.GP_B,1,64],[e.P2_UP,2,1],[e.P2_DOWN,2,4],[e.P2_LEFT,2,8],[e.P2_RIGHT,2,2],[e.P2_A,2,64],[e.P2_B,3,64]]),t=class extends h{constructor(){super();this.defaultROMSize=32768;this.ram=new Uint8Array(1024);this.read=g([[0,8191,8191,A=>this.bios?this.bios[A]:0],[24576,32767,1023,A=>this.ram[A]],[32768,65535,32767,A=>this.rom?this.rom[A]:0]]);this.write=g([[24576,32767,1023,(A,B)=>{this.ram[A]=B}]]);this.init(this,this.newIOBus(),new E(new D)),this.bios=new a().decode(c(atob(I)))}getKeyboardMap(){return x}vdpInterrupt(){this.probe.logInterrupt(0),this.cpu.NMI()}newIOBus(){return{read:A=>{switch(A&=255,A){case 252:return this.inputs[this.keypadMode?1:0]^255;case 255:return this.inputs[this.keypadMode?3:2]^255}return A>=160&&A<=191?A&1?this.vdp.readStatus():this.vdp.readData():0},write:(A,B)=>{switch(A&=255,B&=255,A>>4){case 8:case 9:this.keypadMode=!0;break;case 12:case 13:this.keypadMode=!1;break;case 10:case 11:return A&1?this.vdp.writeAddress(B):this.vdp.writeData(B);case 15:this.psg.setData(B);break}}}}loadState(A){super.loadState(A),this.keypadMode=A.kpm}saveState(){var A=super.saveState();return A.kpm=this.keypadMode,A}reset(){super.reset(),this.keypadMode=!1}},I=` +import{c as h}from"./chunk-TP7C4K6K.js";import{b as m}from"./chunk-ENVHSJV6.js";import{H as M,d as D,f as E}from"./chunk-RWTUUV4L.js";import{b as n}from"./chunk-UXRCACYH.js";import{L as r,Z as e,aa as f,da as g,l as a,m as c}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var x=f([[e.UP,0,1],[e.DOWN,0,4],[e.LEFT,0,8],[e.RIGHT,0,2],[e.A,0,64],[e.B,1,64],[e.GP_A,0,64],[e.GP_B,1,64],[e.P2_UP,2,1],[e.P2_DOWN,2,4],[e.P2_LEFT,2,8],[e.P2_RIGHT,2,2],[e.P2_A,2,64],[e.P2_B,3,64]]),t=class extends h{constructor(){super();this.defaultROMSize=32768;this.ram=new Uint8Array(1024);this.read=g([[0,8191,8191,A=>this.bios?this.bios[A]:0],[24576,32767,1023,A=>this.ram[A]],[32768,65535,32767,A=>this.rom?this.rom[A]:0]]);this.write=g([[24576,32767,1023,(A,B)=>{this.ram[A]=B}]]);this.init(this,this.newIOBus(),new E(new D)),this.bios=new a().decode(c(atob(I)))}getKeyboardMap(){return x}vdpInterrupt(){this.probe.logInterrupt(0),this.cpu.NMI()}newIOBus(){return{read:A=>{switch(A&=255,A){case 252:return this.inputs[this.keypadMode?1:0]^255;case 255:return this.inputs[this.keypadMode?3:2]^255}return A>=160&&A<=191?A&1?this.vdp.readStatus():this.vdp.readData():0},write:(A,B)=>{switch(A&=255,B&=255,A>>4){case 8:case 9:this.keypadMode=!0;break;case 12:case 13:this.keypadMode=!1;break;case 10:case 11:return A&1?this.vdp.writeAddress(B):this.vdp.writeData(B);case 15:this.psg.setData(B);break}}}}loadState(A){super.loadState(A),this.keypadMode=A.kpm}saveState(){var A=super.saveState();return A.kpm=this.keypadMode,A}reset(){super.reset(),this.keypadMode=!1}},I=` TFpHAAAgAAAAB7djQcnHAQEDBgcx/3MYawAAAMMMgAehB+EPB+USB+UVB+UYB+UbB+UeB+QHHAZm IYA8igUCBYIAKgCAff5VIAl8/qogBCoKgOnHAwkfgICAAAMFT6CgB4LgByEH4WDAYMBABlggQIAg B+HAwOCgYAMGKweBQAYxBphAQEAG+KBABnAGEuAGUAabB+QA4AflBkggIAYyB+FgoKCgwAZdwAY5 @@ -34,4 +34,4 @@ PANDTwNjYHAGWShQAwKHOBA4A8LZA0IIeAaZOEREKChsADBAIBA4BqkoA4KfA0KIVFQDIvg4QANi FwAGaQNjr3gHIwZYEAAGEEAwCDBABgkHoTAIBlEIFANIAlAgBiAAfAdhAwJ3B0IGfwMDjgPmiAcB A8SRHAYnBihQAwK9BwFgEAODTQPjNXgDAmgHHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8H HwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBwM=`;var Q=[{id:"text.c",name:"Text Mode"},{id:"hello.c",name:"Scrolling Text"},{id:"text32.c",name:"32-Column Color Text"},{id:"stars.c",name:"Scrolling Starfield"},{id:"cursorsmooth.c",name:"Moving Cursor"},{id:"simplemusic.c",name:"Simple Music"},{id:"musicplayer.c",name:"Multivoice Music"},{id:"mode2bitmap.c",name:"Mode 2 Bitmap"},{id:"mode2compressed.c",name:"Mode 2 Bitmap (LZG)"},{id:"lines.c",name:"Mode 2 Lines"},{id:"multicolor.c",name:"Multicolor Mode"},{id:"siegegame.c",name:"Siege Game"},{id:"shoot.c",name:"Solarian Game"},{id:"climber.c",name:"Climber Game"}],o=class extends M{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Cartridge Header",start:32768,size:256,type:"rom"}]}}}newMachine(){return new t}getPresets(){return Q}readAddress(A){return this.machine.read(A)}readVRAMAddress(A){return this.machine.readVRAMAddress(A)}showHelp(){return"https://8bitworkshop.com/docs/platforms/coleco/"}},i=class extends m{constructor(){super(...arguments);this.getToolForFilename=n}start(){this.startModule(this.mainElement,{jsfile:"mame8bitws.js",cfgfile:"coleco.cfg",biosfile:"coleco/313 10031-4005 73108a.u2",driver:"coleco",width:280*2,height:432,romfn:"/emulator/cart.rom",romsize:32768,preInit:function(A){}})}loadROM(A,B){this.loadROMFile(B),this.loadRegion(":coleco_cart:rom",B)}getPresets(){return Q}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}};r["coleco.mame"]=i;r.coleco=o;export{Q as ColecoVision_PRESETS}; -//# sourceMappingURL=coleco-DHZHDQNM.js.map +//# sourceMappingURL=coleco-3KDKKITT.js.map diff --git a/gen/coleco-DHZHDQNM.js.map b/gen/coleco-3KDKKITT.js.map similarity index 100% rename from gen/coleco-DHZHDQNM.js.map rename to gen/coleco-3KDKKITT.js.map diff --git a/gen/common/baseplatform.js b/gen/common/baseplatform.js index ca3b6008..0562ce32 100644 --- a/gen/common/baseplatform.js +++ b/gen/common/baseplatform.js @@ -386,7 +386,7 @@ class Base6502Platform extends BaseDebugPlatform { disassemble(pc, read) { return (0, disasm6502_1.disassemble6502)(pc, read(pc), read(pc + 1), read(pc + 2)); } - getDefaultExtensions() { return [".c", ".cpp", ".o64", ".acme", ".xa", ".ca65", ".dasm", ".ecs", ".wiz"]; } + getDefaultExtensions() { return [".c", ".sdcc", ".cpp", ".o64", ".acme", ".xa", ".ca65", ".dasm", ".ecs", ".wiz"]; } ; getDebugCategories() { return ['CPU', 'ZPRAM', 'Stack']; @@ -495,7 +495,7 @@ class BaseZ80Platform extends BaseDebugPlatform { } return n; } - getDefaultExtensions() { return [".c", ".ns", ".s", ".scc", ".sgb", ".z", ".wiz"]; } + getDefaultExtensions() { return [".c", ".sdcc", ".ns", ".s", ".scc", ".sgb", ".z", ".wiz"]; } ; // TODO: Z80 opcode metadata //this.getOpcodeMetadata = function() { } diff --git a/gen/common/baseplatform.js.map b/gen/common/baseplatform.js.map index 3dd90539..83bc906e 100644 --- a/gen/common/baseplatform.js.map +++ b/gen/common/baseplatform.js.map @@ -1 +1 @@ -{"version":3,"file":"baseplatform.js","sourceRoot":"","sources":["../../src/common/baseplatform.ts"],"names":[],"mappings":"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C,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC/vB;IACD,WAAW,EAAE;QACX,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC/vB;IACD,WAAW,EAAE;QACX,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC/vB;IACD,UAAU,EAAE;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EA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"} \ No newline at end of file +{"version":3,"file":"baseplatform.js","sourceRoot":"","sources":["../../src/common/baseplatform.ts"],"names":[],"mappings":"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C,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC/vB;IACD,WAAW,EAAE;QACX,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC/vB;IACD,WAAW,EAAE;QACX,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC/vB;IACD,UAAU,EAAE;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KAC/vB;CACF,CAAA;AAED,SAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO;IACpD,wCAAwC;IACxC,0DAA0D;IAC1D,OAAO;QACL,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;QACxC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC;QAC1E,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,UAAU;AAEV,SAAgB,wBAAwB,CAAC,CAAC;IACxC,SAAS,WAAW,CAAC,KAAK;QACxB,OAAO,IAAA,iBAAU,EAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,AAAD,EAAG,GAAG,EAAE,AAAD,EAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;UAC7G,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;UACpD,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;UACpD,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;UACpD,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CACrD;AACL,CAAC;AAED,SAAgB,yBAAyB,CAAC,CAAC;IACzC,SAAS,WAAW,CAAC,EAAE;QACrB,OAAO,IAAA,iBAAU,EAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;UAC1F,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;UAC3B,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;UACpD,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CACrD;AACL,CAAC;AAED,MAAsB,eAAgB,SAAQ,iBAAiB;IAA/D;;QAGE,eAAU,GAAW,CAAC,CAAC;QAkCvB,uBAAkB,GAAG,mCAAsB,CAAC;IAwB9C,CAAC;IAxDC,MAAM,CAAC,MAAiB,EAAE,KAAgB;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,cAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrC,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAE3B,uCAAuC;IACvC,MAAM,CAAC,GAAG,EAAE,MAAc;QACxB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,0CAA0C;QAC/D,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,CAAC,CAAC;QACX,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,SAAS,IAAI,SAAS,EAAE,EAAE,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;YACD,IAAI,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAC5B,CAAC,IAAI,GAAG,CAAC;YACT,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;QACzB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAGD,oBAAoB,KAAK,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC;IAC9F,4BAA4B;IAC5B,yCAAyC;IAEzC,kBAAkB;QAChB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,YAAY,CAAC,QAAgB,EAAE,KAAe;QAC5C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK,CAAC,CAAC,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;gBACnC,IAAI,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC;gBACxB,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;gBACvB,IAAI,EAAE,IAAI,CAAC;oBAAE,EAAE,GAAG,OAAO,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC5B,OAAO,iBAAiB,CAAgB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IACD,WAAW,CAAC,EAAU,EAAE,IAA8B;QACpD,OAAO,IAAA,0BAAc,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;CACF;AA7DD,0CA6DC;AAED,WAAW;AAEX,SAAgB,yBAAyB,CAAC,CAAC;IACzC,SAAS,WAAW,CAAC,KAAK;QACxB,OAAO,IAAA,iBAAU,EAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;UACzD,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;UAC3B,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI;UAC3B,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;UAC1B,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;UAC1B,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;UAC1B,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;UAC1B,KAAK,GAAG,IAAA,UAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAC3B;AACL,CAAC;AAED,MAAsB,gBAAiB,SAAQ,eAAe;IAA9D;;QAgBE,yCAAyC;QACzC,uBAAkB,GAAG,oCAAuB,CAAC;IAU/C,CAAC;IAzBC,MAAM,CAAC,MAAiB;QACtB,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,eAAO,GAAE,CAAC,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,oBAAoB,CAAC,CAAW;QAC9B,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,WAAW,CAAC,EAAU,EAAE,IAA8B;QACpD,6BAA6B;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAA,eAAO,GAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,oBAAoB,KAAK,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC;IAG7D,kBAAkB;QAChB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,YAAY,CAAC,QAAgB,EAAE,KAAe;QAC5C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK,CAAC,CAAC,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AA3BD,4CA2BC;AAGD,6BAA6B;AAC7B,SAAgB,iBAAiB,CAAC,QAAkB,EAAE,GAA0B,EAAE,KAAa,EAAE,GAAW,EAAE,EAAU,EAAE,KAAa,EAAE,SAAmB;IAC1J,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,gEAAgE;IAChE,SAAS,IAAI,CAAC,IAAI;QAChB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;;YACnC,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC;QAChB,EAAE,EAAE,CAAC;QACL,yCAAyC;QACzC,4CAA4C;QAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACzC,IAAI,SAAS,EAAE,CAAC;YAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QAAC,CAAC;QACvE,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;QACpD,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,yBAAyB;QAC3D,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,MAAM;YAC3B,CAAC,IAAI,KAAK,GAAG,IAAA,UAAG,EAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YAC5B,CAAC,IAAI,IAAA,UAAG,EAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,EAAE,EAAE,CAAC;YACL,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,IAAI,CAAC;gBACX,CAAC,IAAI,KAAK,GAAG,IAAA,UAAG,EAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YAC9B,CAAC,IAAI,IAAA,UAAG,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;YACzB,IAAI,EAAE,IAAI,IAAI,CAAC;gBAAE,IAAI,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC;AAClB,CAAC;AAED,iCAAiC;AACjC,SAAgB,YAAY,CAAC,QAAkB,EAAE,IAAY,EAAE,KAAc;IAC3E,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,WAAW,GAAG,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC;IAC7E,OAAO,WAAW,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,EAAE,CAAC,CAAC,8BAA8B;YACvC,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,IAAA,UAAG,EAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,MAAM;QAClB,IAAI,EAAE,CAAC;IACT,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAOD,SAAgB,QAAQ,CAAC,GAAQ;IAC/B,OAAO,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC;AAChD,CAAC;AACD,SAAgB,QAAQ,CAAC,GAAQ;IAC/B,OAAO,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC;AAChD,CAAC;AACD,SAAgB,WAAW,CAAC,GAAQ;IAClC,OAAO,OAAO,GAAG,CAAC,WAAW,KAAK,UAAU,CAAC;AAC/C,CAAC;AACD,SAAgB,WAAW,CAAC,GAAQ;IAClC,OAAO,OAAO,GAAG,CAAC,WAAW,KAAK,UAAU,CAAC;AAC/C,CAAC;AACD,SAAgB,cAAc,CAAC,GAAQ;IACrC,OAAO,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,CAAC;AAClD,CAAC;AACD,SAAgB,QAAQ,CAAC,GAAQ;IAC/B,OAAO,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;AAC9C,CAAC;AACD,SAAgB,QAAQ,CAAC,GAAQ;IAC/B,OAAO,OAAO,GAAG,CAAC,YAAY,IAAI,UAAU,CAAC;AAC/C,CAAC;AACD,SAAgB,OAAO,CAAC,GAAQ;IAC9B,OAAO,OAAO,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC;AAC3C,CAAC;AACD,SAAgB,WAAW,CAAC,GAAQ;IAClC,OAAO,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,CAAC;AACnD,CAAC;AAED,MAAsB,mBAAuC,SAAQ,iBAAiB;IAmBpF,YAAY,WAAwB;QAClC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;YAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,6EAA6E;IAC7E,0EAA0E;IAC1E,sDAAsD;IACtD,SAAS,CAAC,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACjE,CAAC;IACD,SAAS;QACP,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;IACD,KAAK,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5C,KAAK,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5C,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClD,WAAW,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,iBAAiB,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAEhE,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,wBAAwB;QACxB,IAAI,CAAC,YAAY,8BAAe,EAAE,CAAC;YACjC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,cAAc,CAAC;QACnB,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,IAAI,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,EAChE;gBACE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ;gBACvB,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC;gBACrB,MAAM,EAAE,EAAE,CAAC,MAAM;aAClB,CAAC,CAAC;YACL,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;YAC1C,oCAAoC;YACpC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAc,CAAC,cAAc,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,IAAI,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QACD,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAa,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE;gBACvB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC,CAAC;YACF,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE;gBACtB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC9B,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAe;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAID,YAAY;QACV,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBACtE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,2BAA2B;QAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAgB;QACtB,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,+BAA+B;YAC/B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;YACxF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,MAAA,IAAI,CAAC,KAAK,0CAAE,UAAU,EAAE,CAAC;gBACrC,IAAI,GAAG,EAAE,CAAC;oBACR,IAAA,mBAAa,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,IAAI,EAAE,IAAI;QAC1B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAAE,OAAO;QACxB,IAAI,IAAI,CAAC,OAAO,YAAY,8BAAe,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE;gBACpC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,0DAA0D;IAC1D,UAAU;QACR,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,GAAY,EAAE;YACzB,IAAI,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC;;gBACzC,OAAO,IAAI,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,iBAAiB;QACf,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,kBAAkB;QAChB,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,kBAAkB;QAChB,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAC7C,CAAC;IACD,YAAY,CAAC,QAAgB,EAAE,KAAe;QAC5C,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClF,CAAC;CACF;AAxND,kDAwNC;AAED,kCAAkC;AAElC,MAAsB,uBAA2C,SAAQ,mBAAsB;IAA/F;;QAEE,sBAAiB,GAAG,sBAAsB,CAAC;IAqB7C,CAAC;IApBC,kBAAkB,CAAC,EAAE,IAAI,OAAO,IAAA,oCAAuB,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,oBAAoB,KAAK,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAE3G,WAAW,CAAC,EAAU,EAAE,IAA8B;QACpD,OAAO,IAAA,4BAAe,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,kBAAkB;QAChB,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;;YAEzC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,YAAY,CAAC,QAAgB,EAAE,KAAe;QAC5C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK,CAAC,CAAC,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtD,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,aAAO,EAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/D,KAAK,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAgB,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1H,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF;AAvBD,0DAuBC;AAED,MAAsB,sBAA0C,SAAQ,mBAAsB;IAA9F;;QAEE,gDAAgD;QAChD,uBAAkB,GAAG,mCAAsB,CAAC;IA0B9C,CAAC;IAzBC,oBAAoB,KAAK,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEpF,kBAAkB;QAChB,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;;YAEzC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,YAAY,CAAC,QAAgB,EAAE,KAAe;QAC5C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK,CAAC,CAAC,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;gBACnC,IAAI,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC;gBACxB,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;gBACvB,IAAI,EAAE,IAAI,CAAC;oBAAE,EAAE,GAAG,OAAO,CAAC;gBAC1B,OAAO,iBAAiB,CAAgB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,WAAW,CAAC,EAAU,EAAE,IAA8B;QACpD,OAAO,IAAA,0BAAc,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;CAEF;AA7BD,wDA6BC;AAED,MAAsB,uBAA2C,SAAQ,mBAAsB;IAA/F;;QAEE,uBAAkB,GAAG,oCAAuB,CAAC;IA0B/C,CAAC;IAzBC,oBAAoB,KAAK,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE5D,kBAAkB;QAChB,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;;YAEzC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,YAAY,CAAC,QAAgB,EAAE,KAAe;QAC5C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK,CAAC,CAAC,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;gBACnC,IAAI,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC;gBACxB,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;gBACvB,IAAI,EAAE,IAAI,CAAC;oBAAE,EAAE,GAAG,OAAO,CAAC;gBAC1B,OAAO,iBAAiB,CAAgB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,WAAW,CAAC,EAAU,EAAE,IAA8B;QACpD,6BAA6B;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAA,eAAO,GAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,CAAC;CACF;AA5BD,0DA4BC;AAED,GAAG;AAEH,MAAM,kBAAkB;IAQtB,YAAY,aAA0B,EAAE,MAAmB;QAH3D,iBAAY,GAAG,CAAC,CAAC,CAAC;QAClB,gBAAW,GAAG,CAAC,CAAC,CAAC;QAGf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACrC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC;;;;;UAKE;IACJ,CAAC;IACD,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACvC,CAAC;IACD,OAAO;QACL,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpB,IAAI,CAAC,IAAI,EAAE;wBAAE,CAAC,IAAI,IAAI,CAAC;oBACvB,IAAI,EAAE,CAAC,EAAE,KAAK,MAAM;wBAAE,CAAC,IAAI,KAAK,CAAC;yBAC5B,IAAI,EAAE,CAAC,EAAE,KAAK,OAAO;wBAAE,CAAC,IAAI,KAAK,CAAC;oBACvC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;gBACjB,CAAC;gBACD,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;oBAAC,CAAC,IAAI,QAAQ,CAAC;oBAAC,MAAM,GAAG,EAAE,CAAC;gBAAC,CAAC;qBAC9C,CAAC;oBAAC,CAAC,IAAI,IAAA,kBAAW,EAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACxC,CAAC;IACH,CAAC;CACF"} \ No newline at end of file diff --git a/gen/common/emucore.js b/gen/common/emucore.js index 54ce4867..596d811b 100644 --- a/gen/common/emucore.js +++ b/gen/common/emucore.js @@ -448,6 +448,11 @@ class EmuCore { /** Frames per second the platform's timer asked for (60 if unknown). */ get frameRate() { return this.video ? this.video.frameRate : 60; } saveState() { return this.platform.saveState ? this.platform.saveState() : null; } + /** Text a platform's program has sent to a serial port, or null if it has none. */ + getSerialOutput() { + const p = this.platform; + return typeof p.getSerialOutput === 'function' ? p.getSerialOutput() : null; + } getDebugInfo() { const state = this.saveState(); const p = this.platform; diff --git a/gen/common/emucore.js.map b/gen/common/emucore.js.map index 59ee4b1b..4343fb3d 100644 --- a/gen/common/emucore.js.map +++ b/gen/common/emucore.js.map @@ -1 +1 @@ -{"version":3,"file":"emucore.js","sourceRoot":"","sources":["../../src/common/emucore.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"emucore.js","sourceRoot":"","sources":["../../src/common/emucore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gen/common/toolmeta.js b/gen/common/toolmeta.js index 46e80f02..77576266 100644 --- a/gen/common/toolmeta.js +++ b/gen/common/toolmeta.js @@ -23,7 +23,7 @@ * (unless noWorkerBuild) and vice versa. */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.TOOL_META = exports.DIALOG_INCLUDE_PATTERNS = exports.ECS_INCLUDE_PATTERNS = exports.WIZ_INCLUDE_PATTERNS = exports.ACME_INCLUDE_PATTERNS = exports.USE_ASM_INCLUDE_PATTERNS = exports.SYSTEM_INCLUDE_PATTERNS = exports.VERILOG_INCLUDE_PATTERNS = exports.SHARED_LINK_PATTERNS = exports.OSCAR64_INCLUDE_PATTERNS = exports.DASM_INCLUDE_PATTERNS = exports.SHARED_INCLUDE_PATTERNS = void 0; +exports.TOOL_META = exports.SDCC_DEFAULT_VERSION = exports.DIALOG_INCLUDE_PATTERNS = exports.ECS_INCLUDE_PATTERNS = exports.WIZ_INCLUDE_PATTERNS = exports.ACME_INCLUDE_PATTERNS = exports.USE_ASM_INCLUDE_PATTERNS = exports.SYSTEM_INCLUDE_PATTERNS = exports.VERILOG_INCLUDE_PATTERNS = exports.SHARED_LINK_PATTERNS = exports.OSCAR64_INCLUDE_PATTERNS = exports.DASM_INCLUDE_PATTERNS = exports.SHARED_INCLUDE_PATTERNS = void 0; exports.getSystemIncludePatterns = getSystemIncludePatterns; exports.getToolMeta = getToolMeta; exports.getPlatformToolHelpURL = getPlatformToolHelpURL; @@ -130,6 +130,29 @@ const TOOL_PLATFORM_HELPURL = { lynx: 'https://cc65.github.io/doc/lynx.html', }, }; +/** + * Which SDCC a program gets unless it says `//#tooldef c sdcc=3|4`. To make + * 4.x the default, change this to 4: nothing else needs editing. + * 3 = 3.6.5, Emscripten, preloadFS 'sdcc' (builds several times faster) + * 4 = 4.x, WASI, sdcc-fs.zip (smaller code) + */ +exports.SDCC_DEFAULT_VERSION = 3; +/** + * 'default' lists both filesystems; the one for SDCC_DEFAULT_VERSION leads + * (getSharedFileSystemName prefers preloadFS). Platforms whose prebuilt + * libraries were compiled by SDCC 3.x (libcv, gb.lib, cpctelera) have only + * preloadFS: 4.x's default calling convention, sdcccall(1), can't call them. + */ +const SDCC_FS = { + 'default': exports.SDCC_DEFAULT_VERSION === 3 + ? { preloadFS: 'sdcc', wasiFSZip: 'sdcc-fs.zip' } + : { wasiFSZip: 'sdcc-fs.zip' }, + 'coleco': { preloadFS: 'sdcc' }, + 'msx-libcv': { preloadFS: 'sdcc' }, + 'sms': { preloadFS: 'sdcc' }, + 'gb': { preloadFS: 'sdcc' }, + 'cpc': { preloadFS: 'sdcc' }, +}; const CC65_WASIFS = { 'apple2': { wasiFSZip: 'cc65-fs-apple2.zip' }, 'c64': { wasiFSZip: 'cc65-fs-c64.zip' }, @@ -233,25 +256,25 @@ exports.TOOL_META = { // ---- SDCC toolchain (z80) ---- sdcc: { id: 'sdcc', name: 'SDCC', kind: 'compiler', arch: 'z80', - extensions: ['.c', '.h'], - includeDirs: ['/include'], + extensions: ['.c', '.h', '.sdcc'], + includeDirs: ['/share/sdcc/include', '/include'], editorStyle: 'text/x-csrc', helpURL: 'http://sdcc.sourceforge.net/doc/sdccman.pdf', - wasmModule: 'sdcc', - version: '3.6.5', + wasmModule: 'sdcc4', + version: exports.SDCC_DEFAULT_VERSION === 3 ? '3.6.5' : '4.6.0', defineFlag: '-D', defineInline: true, - platforms: { default: { preloadFS: 'sdcc' } }, + platforms: SDCC_FS, includePatterns: exports.SHARED_INCLUDE_PATTERNS, linkPatterns: exports.SHARED_LINK_PATTERNS, }, sdasz80: { id: 'sdasz80', name: 'sdasz80', kind: 'assembler', arch: 'z80', extensions: ['.s'], - includeDirs: ['/include'], + includeDirs: ['/share/sdcc/include', '/include'], editorStyle: 'z80', - wasmModule: 'sdasz80', + wasmModule: 'sdasz80-4', version: '02.00', - platforms: { default: { preloadFS: 'sdcc' } }, + platforms: SDCC_FS, includePatterns: exports.SHARED_INCLUDE_PATTERNS, linkPatterns: exports.SHARED_LINK_PATTERNS, }, @@ -268,7 +291,23 @@ exports.TOOL_META = { sdldz80: { id: 'sdldz80', name: 'sdldz80', kind: 'linker', arch: 'z80', extensions: [], - wasmModule: 'sdldz80', + wasmModule: 'sdld4', + version: '03.00', + linkSymbolFlag: '-g', linkSymbolInline: false, + }, + // SDCC 4.x mos6502 backend (compile with `-sdcc.c`); sdld6808 is the + // 6502 personality of the sdld4 binary + sdas6500: { + id: 'sdas6500', name: 'sdas6500', kind: 'assembler', arch: '6502', + extensions: [], + wasmModule: 'sdas6500', + version: '02.00', + platforms: SDCC_FS, + }, + sdld6808: { + id: 'sdld6808', name: 'sdld6808', kind: 'linker', arch: '6502', + extensions: [], + wasmModule: 'sdld4', version: '03.00', linkSymbolFlag: '-g', linkSymbolInline: false, }, diff --git a/gen/common/toolmeta.js.map b/gen/common/toolmeta.js.map index 311cffc3..1572552a 100644 --- a/gen/common/toolmeta.js.map +++ b/gen/common/toolmeta.js.map @@ -1 +1 @@ -{"version":3,"file":"toolmeta.js","sourceRoot":"","sources":["../../src/common/toolmeta.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"toolmeta.js","sourceRoot":"","sources":["../../src/common/toolmeta.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gen/common/toolselect.js b/gen/common/toolselect.js index 3302beeb..64b45394 100644 --- a/gen/common/toolselect.js +++ b/gen/common/toolselect.js @@ -25,6 +25,8 @@ const util_1 = require("./util"); function getToolForFilename_6502(fn) { if (fn.endsWith("-llvm.c")) return "remote:llvm-mos"; + if (fn.endsWith("-sdcc.c") || fn.endsWith(".sdcc")) + return "sdcc"; // SDCC 4.x mos6502 backend if (fn.endsWith(".c")) return "cc65"; if (fn.endsWith(".h")) @@ -54,7 +56,7 @@ function getToolForFilename_6502(fn) { return "dasm"; // .a } function getToolForFilename_z80(fn) { - if (fn.endsWith(".c")) + if (fn.endsWith(".c") || fn.endsWith(".sdcc")) return "sdcc"; if (fn.endsWith(".h")) return "sdcc"; diff --git a/gen/common/toolselect.js.map b/gen/common/toolselect.js.map index 6051e29e..4c11c6eb 100644 --- a/gen/common/toolselect.js.map +++ b/gen/common/toolselect.js.map @@ -1 +1 @@ -{"version":3,"file":"toolselect.js","sourceRoot":"","sources":["../../src/common/toolselect.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"toolselect.js","sourceRoot":"","sources":["../../src/common/toolselect.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gen/common/wasi/wasishim.js b/gen/common/wasi/wasishim.js index be18e084..6818c264 100644 --- a/gen/common/wasi/wasishim.js +++ b/gen/common/wasi/wasishim.js @@ -350,6 +350,20 @@ class WASIMemoryFilesystem { return WASIErrors.ISDIR; return this.files.delete(name) ? WASIErrors.SUCCESS : WASIErrors.NOENT; } + // Rename a file within this (writable) layer, replacing any file at newName. + renameFile(oldName, newName) { + oldName = normalizeWASIPath(oldName); + newName = normalizeWASIPath(newName); + if (this.dirs.has(oldName) || this.dirs.has(newName)) + return WASIErrors.ISDIR; + const file = this.files.get(oldName); + if (!file) + return WASIErrors.NOENT; + this.files.delete(oldName); + file.name = newName; + this.files.set(newName, file); + return WASIErrors.SUCCESS; + } removeDirectory(name) { name = normalizeWASIPath(name); if (name === '/') @@ -771,6 +785,18 @@ class WASIRunner { debug("path_unlink_file", dir + "", path); return this.fs.removeFile(path); } + path_rename(old_dirfd, old_path_ptr, old_path_len, new_dirfd, new_path_ptr, new_path_len) { + const olddir = this.fds[old_dirfd]; + const newdir = this.fds[new_dirfd]; + if (olddir == null || newdir == null) + return WASIErrors.BADF; + if (olddir.type !== FDType.DIRECTORY || newdir.type !== FDType.DIRECTORY) + return WASIErrors.NOTDIR; + const oldpath = olddir.name + '/' + this.peekUTF8(old_path_ptr, old_path_len); + const newpath = newdir.name + '/' + this.peekUTF8(new_path_ptr, new_path_len); + debug("path_rename", oldpath, newpath); + return this.fs.renameFile(oldpath, newpath); + } path_remove_directory(dirfd, path_ptr, path_len) { const dir = this.fds[dirfd]; if (dir == null) @@ -821,6 +847,7 @@ class WASIRunner { path_readlink: this.path_readlink.bind(this), path_unlink_file: this.path_unlink_file.bind(this), path_remove_directory: this.path_remove_directory.bind(this), + path_rename: this.path_rename.bind(this), path_create_directory: this.path_create_directory.bind(this), clock_time_get: this.clock_time_get.bind(this), fd_fdstat_set_flags() { warning("TODO: fd_fdstat_set_flags"); return WASIErrors.NOTSUP; }, diff --git a/gen/common/wasi/wasishim.js.map b/gen/common/wasi/wasishim.js.map index 9c3e88b6..4e210266 100644 --- a/gen/common/wasi/wasishim.js.map +++ b/gen/common/wasi/wasishim.js.map @@ -1 +1 @@ -{"version":3,"file":"wasishim.js","sourceRoot":"","sources":["../../../src/common/wasi/wasishim.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"wasishim.js","sourceRoot":"","sources":["../../../src/common/wasi/wasishim.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gen/cpc-C72IO2CP.js b/gen/cpc-POSTORN7.js similarity index 94% rename from gen/cpc-C72IO2CP.js rename to gen/cpc-POSTORN7.js index 4159d312..da563160 100644 --- a/gen/cpc-C72IO2CP.js +++ b/gen/cpc-POSTORN7.js @@ -1,2 +1,2 @@ -import{H as d,s as p}from"./chunk-QYEDG265.js";import"./chunk-UACHXWHT.js";import{L as n}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=class extends p{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=224;this.joymask0=0;this.runaddr=16384}loadROM(t){let s=new Uint8Array(t.length+m.length);s.set(m,0),s[24]=t.length&255,s[25]=t.length>>8,s[26]=this.runaddr&255,s[27]=this.runaddr>>8,s.set(t,m.length),super.loadROM(s)}reset(){if(super.reset(),this.exports.machine_exec(this.sys,1e6),this.romptr&&this.romlen){this.exports.machine_load_rom(this.sys,this.romptr,this.romlen);for(var t=0;t<1e5&&this.getPC()!=this.runaddr;t++)this.exports.machine_tick(this.sys)}}advanceFrame(t){var s=this.getRasterY(),r=Math.floor((this.numTotalScanlines-s)*(4e6/50)/this.numTotalScanlines),e=this.probe!=null;return e&&this.exports.machine_reset_probe_buffer(),r=super.advanceFrameClock(t,r),e&&this.copyProbeData(),r}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getRasterCanvasPosition(){return{x:-1,y:this.getRasterY()-14}}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,s=t[9]+(t[8]<<8),r=t[10]+(t[11]<<8),e=t[12]+(t[13]<<8),a=t[14]+(t[15]<<8),x=t[24]+(t[25]<<8),f=t[26]+(t[27]<<8),u=t[28]+(t[29]<<8),h=t[34]+(t[35]<<8),_=t[36]+(t[37]<<8);return{PC:h,SP:x,AF:s,BC:a,DE:e,HL:r,IX:u,IY:f,IR:_,o:this.readConst(h)}}saveState(){return this.exports.machine_save_state(this.sys,this.stateptr),{c:this.getCPUState(),state:this.statearr.slice(0),joymask0:this.joymask0}}loadState(t){this.statearr.set(t.state),this.exports.machine_load_state(this.sys,this.stateptr),this.joymask0=t.joymask0|0}getVideoParams(){return{width:768,height:272,overscan:!0,videoFrequency:50,aspect:1.3}}setKeyInput(t,s,r){if(!(t==16||t==17||t==18||t==224)){var e=0,a=0;t==37&&(t=8,e=4),t==38&&(t=11,e=1),t==39&&(t=9,e=8),t==40&&(t=10,e=2),t==32&&(e=16),t==65&&(t=65,a=4),t==87&&(t=87,a=1),t==68&&(t=68,a=8),t==83&&(t=83,a=2),t==69&&(a=16),t==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),r&1?(this.exports.machine_key_down(this.sys,t),this.joymask0|=e):r&64&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~e)}}};var g=[{id:"easy_stdio_boxes.c",name:"Standard I/O",category:"C"},{id:"easy_mode_strings.c",name:"Video Modes"},{id:"easy_random.c",name:"Random Numbers"},{id:"easy_sprites.c",name:"Keyboard + Sprites"},{id:"medium_scrolling.c",name:"Scrolling Text"},{id:"siegegame.c",name:"Siege Game"},{id:"music.c",name:"Music Player"},{id:"hello.asm",name:"Hello World",category:"Assembly"}],v={main:[{name:"BIOS",start:0,size:16384,type:"rom"},{name:"Screen RAM",start:49152,size:16384,type:"ram"}]},i=class extends d{newMachine(){return new o("cpc")}getPresets(){return g}readAddress(c){return this.machine.readConst(c)}getMemoryMap(){return v}showHelp(){return"https://8bitworkshop.com/docs/platforms/cpc/"}};n["cpc.6128"]=i;n["cpc.464"]=i;n["cpc.kcc"]=i; -//# sourceMappingURL=cpc-C72IO2CP.js.map +import{H as d,s as p}from"./chunk-RWTUUV4L.js";import"./chunk-UXRCACYH.js";import{L as n}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=class extends p{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=224;this.joymask0=0;this.runaddr=16384}loadROM(t){let s=new Uint8Array(t.length+m.length);s.set(m,0),s[24]=t.length&255,s[25]=t.length>>8,s[26]=this.runaddr&255,s[27]=this.runaddr>>8,s.set(t,m.length),super.loadROM(s)}reset(){if(super.reset(),this.exports.machine_exec(this.sys,1e6),this.romptr&&this.romlen){this.exports.machine_load_rom(this.sys,this.romptr,this.romlen);for(var t=0;t<1e5&&this.getPC()!=this.runaddr;t++)this.exports.machine_tick(this.sys)}}advanceFrame(t){var s=this.getRasterY(),r=Math.floor((this.numTotalScanlines-s)*(4e6/50)/this.numTotalScanlines),e=this.probe!=null;return e&&this.exports.machine_reset_probe_buffer(),r=super.advanceFrameClock(t,r),e&&this.copyProbeData(),r}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getRasterCanvasPosition(){return{x:-1,y:this.getRasterY()-14}}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,s=t[9]+(t[8]<<8),r=t[10]+(t[11]<<8),e=t[12]+(t[13]<<8),a=t[14]+(t[15]<<8),x=t[24]+(t[25]<<8),f=t[26]+(t[27]<<8),u=t[28]+(t[29]<<8),h=t[34]+(t[35]<<8),_=t[36]+(t[37]<<8);return{PC:h,SP:x,AF:s,BC:a,DE:e,HL:r,IX:u,IY:f,IR:_,o:this.readConst(h)}}saveState(){return this.exports.machine_save_state(this.sys,this.stateptr),{c:this.getCPUState(),state:this.statearr.slice(0),joymask0:this.joymask0}}loadState(t){this.statearr.set(t.state),this.exports.machine_load_state(this.sys,this.stateptr),this.joymask0=t.joymask0|0}getVideoParams(){return{width:768,height:272,overscan:!0,videoFrequency:50,aspect:1.3}}setKeyInput(t,s,r){if(!(t==16||t==17||t==18||t==224)){var e=0,a=0;t==37&&(t=8,e=4),t==38&&(t=11,e=1),t==39&&(t=9,e=8),t==40&&(t=10,e=2),t==32&&(e=16),t==65&&(t=65,a=4),t==87&&(t=87,a=1),t==68&&(t=68,a=8),t==83&&(t=83,a=2),t==69&&(a=16),t==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),r&1?(this.exports.machine_key_down(this.sys,t),this.joymask0|=e):r&64&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~e)}}};var g=[{id:"easy_stdio_boxes.c",name:"Standard I/O",category:"C"},{id:"easy_mode_strings.c",name:"Video Modes"},{id:"easy_random.c",name:"Random Numbers"},{id:"easy_sprites.c",name:"Keyboard + Sprites"},{id:"medium_scrolling.c",name:"Scrolling Text"},{id:"siegegame.c",name:"Siege Game"},{id:"music.c",name:"Music Player"},{id:"hello.asm",name:"Hello World",category:"Assembly"}],v={main:[{name:"BIOS",start:0,size:16384,type:"rom"},{name:"Screen RAM",start:49152,size:16384,type:"ram"}]},i=class extends d{newMachine(){return new o("cpc")}getPresets(){return g}readAddress(c){return this.machine.readConst(c)}getMemoryMap(){return v}showHelp(){return"https://8bitworkshop.com/docs/platforms/cpc/"}};n["cpc.6128"]=i;n["cpc.464"]=i;n["cpc.kcc"]=i; +//# sourceMappingURL=cpc-POSTORN7.js.map diff --git a/gen/cpc-C72IO2CP.js.map b/gen/cpc-POSTORN7.js.map similarity index 100% rename from gen/cpc-C72IO2CP.js.map rename to gen/cpc-POSTORN7.js.map diff --git a/gen/devel-Q7EA5VXM.js b/gen/devel-Q7EA5VXM.js deleted file mode 100644 index 057a2625..00000000 --- a/gen/devel-Q7EA5VXM.js +++ /dev/null @@ -1,2 +0,0 @@ -import{G as x,m as p,p as m}from"./chunk-QYEDG265.js";import{a as y}from"./chunk-3FIVEUG2.js";import"./chunk-UACHXWHT.js";import{D as d,L as f,W as c,da as a,n as h}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var n=31,s=class extends m{constructor(){super();this.cpuFrequency=1e6;this.defaultROMSize=32768;this.cpu=new p;this.ram=new Uint8Array(16384);this.read=a([[0,16383,16383,e=>this.ram[e]],[16384,16384,65535,e=>this.serial.byteAvailable()?128:0],[16385,16385,65535,e=>this.serial.recvByte()],[16386,16386,65535,e=>this.serial.clearToSend()?128:0],[32768,65535,32767,e=>this.rom&&this.rom[e]]]);this.write=a([[0,16383,16383,(e,r)=>{this.ram[e]=r}],[16387,16387,65535,(e,r)=>this.serial.sendByte(r)],[16399,16399,65535,(e,r)=>{this.inputs[n]=1}]]);this.connectCPUMemoryBus(this)}connectSerialIO(e){this.serial=e}readConst(e){return this.read(e)}advanceFrame(e){for(var r=0;r').appendTo(t);$('

Serial Output

').appendTo(e);var r=$('
').appendTo(e);this.div=r[0]}start(){this.tty=new y(this.div,!1)}reset(){this.tty.clear()}saveState(){return this.tty.saveState()}loadState(t){this.tty.loadState(t)}};function v(i){return i==10?"":i<32?String.fromCharCode(i+9216):String.fromCharCode(i)}var u=class{constructor(){this.bufferedRead=!0;this.cyclesPerByte=1e6/(57600/8);this.maxOutputBytes=4096}clearToSend(){return this.outputBytes.lengththis.inputIndex}recvByte(){var t=this.readIndex();this.inputIndex=t;var e=(this.inputBytes&&this.inputBytes[t])|0;return this.viewer.tty.addtext(v(e),18),e==10&&this.viewer.tty.newline(),e}readIndex(){return this.bufferedRead?this.inputIndex+1:Math.floor(this.clk/this.cyclesPerByte)}reset(){this.inputIndex=-1,this.clk=0,this.outputBytes=[],this.bufin=""}advance(t){this.clk+=t}saveState(){return{clk:this.clk,idx:this.inputIndex,out:this.outputBytes.slice()}}loadState(t){this.clk=t.clk,this.inputIndex=t.idx,this.outputBytes=t.out.slice()}},o=class extends x{constructor(e){super(e);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"ROM",start:32768,size:32768,type:"rom"}]}};this.serview=new l(e)}async start(){super.start(),this.serial=new u,this.serial.viewer=this.serview,this.serview.start(),this.machine.connectSerialIO(this.serial)}reset(){this.serial.inputBytes=d(this.internalFiles["serialin.dat"]),super.reset(),this.serview.reset()}isBlocked(){return this.machine.isHalted()}advance(e){return this.isBlocked()?(this.internalFiles["serialout.dat"]=h(this.serial.outputBytes),c(),0):super.advance(e)}saveState(){var e=super.saveState();return e.serial=this.serial.saveState(),e.serview=this.serview.saveState(),e}loadState(e){super.loadState(e),this.serial.loadState(e.serial),this.serview.loadState(e.serview)}newMachine(){return new s}getPresets(){return S}readAddress(e){return this.machine.readConst(e)}};f["devel-6502"]=o;export{u as SerialTestHarness}; -//# sourceMappingURL=devel-Q7EA5VXM.js.map diff --git a/gen/devel-Q7EA5VXM.js.map b/gen/devel-Q7EA5VXM.js.map deleted file mode 100644 index 41c7c3c4..00000000 --- a/gen/devel-Q7EA5VXM.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../src/machine/devel.ts", "../src/platform/devel.ts"], - "sourcesContent": ["\nimport { MOS6502 } from \"../common/cpu/MOS6502\";\nimport { BasicHeadlessMachine, HasSerialIO, SerialIOInterface } from \"../common/devices\";\nimport { padBytes, newAddressDecoder } from \"../common/emu\"; // TODO\n\nconst INPUT_HALTED = 31;\n\nexport class Devel6502 extends BasicHeadlessMachine implements HasSerialIO {\n\n cpuFrequency = 1000000;\n defaultROMSize = 0x8000;\n \n cpu = new MOS6502();\n ram = new Uint8Array(0x4000);\n rom : Uint8Array;\n serial : SerialIOInterface;\n\n constructor() {\n super();\n this.connectCPUMemoryBus(this);\n }\n \n connectSerialIO(serial: SerialIOInterface) {\n this.serial = serial;\n }\n\n read = newAddressDecoder([\n [0x0000, 0x3fff, 0x3fff, (a) => { return this.ram[a]; }],\n [0x4000, 0x4000, 0xffff, (a) => { return this.serial.byteAvailable() ? 0x80 : 0 }],\n [0x4001, 0x4001, 0xffff, (a) => { return this.serial.recvByte() }],\n [0x4002, 0x4002, 0xffff, (a) => { return this.serial.clearToSend() ? 0x80 : 0 }],\n [0x8000, 0xffff, 0x7fff, (a) => { return this.rom && this.rom[a]; }],\n ]);\n \n write = newAddressDecoder([\n [0x0000, 0x3fff, 0x3fff, (a,v) => { this.ram[a] = v; }],\n [0x4003, 0x4003, 0xffff, (a,v) => { return this.serial.sendByte(v) }],\n [0x400f, 0x400f, 0xffff, (a,v) => { this.inputs[INPUT_HALTED] = 1; }],\n ]);\n \n readConst(a:number) : number {\n return this.read(a);\n }\n\n advanceFrame(trap) : number {\n var clock = 0;\n while (clock < this.cpuFrequency/60) {\n if (trap && trap()) break;\n clock += this.advanceCPU();\n }\n return clock;\n }\n\n advanceCPU() {\n if (this.isHalted()) return 1;\n var n = super.advanceCPU();\n if (this.serial) this.serial.advance(n);\n return n;\n }\n\n reset() {\n this.inputs[INPUT_HALTED] = 0;\n super.reset();\n if (this.serial) this.serial.reset();\n }\n\n isHalted() { return this.inputs[INPUT_HALTED] != 0; }\n}\n\n", "\nimport { Platform } from \"../common/baseplatform\";\nimport { EmuHalt, PLATFORMS, haltEmulation } from \"../common/emu\";\nimport { Devel6502 } from \"../machine/devel\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { SerialIOInterface } from \"../common/devices\";\nimport { byteArrayToString, convertDataToUint8Array } from \"../common/util\";\nimport { TeleType } from \"../common/teletype\";\n\nvar DEVEL_6502_PRESETS = [\n {id:'hello.dasm', name:'Hello World (ASM)'},\n];\n\nclass SerialInOutViewer {\n div : HTMLElement;\n tty : TeleType;\n \n constructor(div: HTMLElement) {\n div.style.overflowY = 'auto';\n var gameport = $('
').appendTo(div);\n $('

Serial Output

').appendTo(gameport);\n var windowport = $('
').appendTo(gameport);\n this.div = windowport[0];\n }\n start() {\n this.tty = new TeleType(this.div, false);\n //this.tty.ncols = 40;\n }\n reset() {\n this.tty.clear();\n }\n saveState() {\n return this.tty.saveState();\n }\n loadState(state) {\n this.tty.loadState(state);\n }\n}\n\nfunction byteToASCII(b: number) : string {\n if (b == 10) return '';\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport class SerialTestHarness implements SerialIOInterface {\n\n viewer : SerialInOutViewer;\n bufferedRead : boolean = true;\n cyclesPerByte = 1000000/(57600/8); // 138.88888 cycles\n maxOutputBytes = 4096;\n inputBytes : Uint8Array;\n\n outputBytes : number[];\n inputIndex : number;\n clk : number;\n bufin : string;\n\n clearToSend(): boolean {\n return this.outputBytes.length < this.maxOutputBytes;\n }\n sendByte(b: number) {\n if (this.clearToSend()) {\n this.outputBytes.push(b);\n this.viewer.tty.addtext(byteToASCII(b), 2|32);\n if (b == 10) this.viewer.tty.newline();\n if (!this.clearToSend()) {\n this.viewer.tty.newline();\n this.viewer.tty.addtext(\"\u26A0\uFE0F OUTPUT BUFFER FULL \u26A0\uFE0F\", 4);\n }\n }\n }\n byteAvailable(): boolean {\n return this.readIndex() > this.inputIndex;\n }\n recvByte(): number {\n var index = this.readIndex();\n this.inputIndex = index;\n var b = (this.inputBytes && this.inputBytes[index]) | 0;\n //this.bufin += byteToASCII(b);\n this.viewer.tty.addtext(byteToASCII(b), 2|16);\n if (b == 10) this.viewer.tty.newline();\n return b;\n }\n readIndex(): number {\n return this.bufferedRead ? (this.inputIndex+1) : Math.floor(this.clk / this.cyclesPerByte);\n }\n\n reset() {\n this.inputIndex = -1;\n this.clk = 0;\n this.outputBytes = [];\n this.bufin = '';\n }\n\n advance(clocks: number) {\n this.clk += clocks;\n }\n\n saveState() {\n return {\n clk: this.clk,\n idx: this.inputIndex,\n out: this.outputBytes.slice()\n }\n }\n loadState(state) {\n this.clk = state.clk;\n this.inputIndex = state.idx;\n this.outputBytes = state.out.slice();\n }\n}\n\nclass Devel6502Platform extends Base6502MachinePlatform implements Platform {\n\n serial : SerialTestHarness;\n serview : SerialInOutViewer;\n\n constructor(mainElement: HTMLElement) {\n super(mainElement);\n this.serview = new SerialInOutViewer(mainElement);\n }\n\n async start() {\n super.start();\n this.serial = new SerialTestHarness();\n this.serial.viewer = this.serview;\n this.serview.start();\n this.machine.connectSerialIO(this.serial);\n }\n\n reset() {\n this.serial.inputBytes = convertDataToUint8Array(this.internalFiles['serialin.dat']);\n super.reset();\n this.serview.reset();\n }\n\n isBlocked() {\n return this.machine.isHalted();\n }\n\n advance(novideo: boolean) {\n if (this.isBlocked()) {\n this.internalFiles['serialout.dat'] = byteArrayToString(this.serial.outputBytes);\n haltEmulation();\n return 0;\n }\n return super.advance(novideo);\n }\n\n saveState() {\n var state : any = super.saveState();\n state.serial = this.serial.saveState();\n state.serview = this.serview.saveState();\n return state;\n }\n\n loadState(state) {\n super.loadState(state);\n this.serial.loadState(state.serial);\n this.serview.loadState(state.serview);\n // TODO: reload tty UI\n }\n\n newMachine() { return new Devel6502(); }\n getPresets() { return DEVEL_6502_PRESETS; }\n readAddress(a) { return this.machine.readConst(a); }\n\n getMemoryMap = function() { return { main:[\n {name:'RAM', start:0x0000,size:0x4000,type:'ram'},\n {name:'ROM', start:0x8000,size:0x8000,type:'rom'},\n ] } };\n}\n\n///\n\nPLATFORMS['devel-6502'] = Devel6502Platform;\n"], - "mappings": "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", - "names": ["INPUT_HALTED", "Devel6502", "BasicHeadlessMachine", "MOS6502", "newAddressDecoder", "a", "v", "serial", "trap", "clock", "n", "DEVEL_6502_PRESETS", "SerialInOutViewer", "div", "gameport", "windowport", "TeleType", "state", "byteToASCII", "b", "SerialTestHarness", "index", "clocks", "Devel6502Platform", "Base6502MachinePlatform", "mainElement", "convertDataToUint8Array", "novideo", "byteArrayToString", "haltEmulation", "Devel6502", "a", "PLATFORMS"] -} diff --git a/gen/devel-UW7ZZSEK.js b/gen/devel-UW7ZZSEK.js new file mode 100644 index 00000000..0a6728e9 --- /dev/null +++ b/gen/devel-UW7ZZSEK.js @@ -0,0 +1,2 @@ +import{G as y,m,p as v}from"./chunk-RWTUUV4L.js";import{a as x}from"./chunk-3FIVEUG2.js";import"./chunk-UXRCACYH.js";import{D as f,L as c,W as p,da as n,n as a}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var l=31,s=class extends v{constructor(){super();this.cpuFrequency=1e6;this.defaultROMSize=32768;this.cpu=new m;this.ram=new Uint8Array(16384);this.read=n([[0,16383,16383,e=>this.ram[e]],[16384,16384,65535,e=>this.serial.byteAvailable()?128:0],[16385,16385,65535,e=>this.serial.recvByte()],[16386,16386,65535,e=>this.serial.clearToSend()?128:0],[32768,65535,32767,e=>this.rom&&this.rom[e]]]);this.write=n([[0,16383,16383,(e,r)=>{this.ram[e]=r}],[16387,16387,65535,(e,r)=>this.serial.sendByte(r)],[16399,16399,65535,(e,r)=>{this.inputs[l]=1}]]);this.connectCPUMemoryBus(this)}connectSerialIO(e){this.serial=e}readConst(e){return this.read(e)}advanceFrame(e){for(var r=0;r').appendTo(t);$('

Serial Output

').appendTo(e);var r=$('
').appendTo(e);this.div=r[0]}start(){this.tty=new x(this.div,!1)}reset(){this.tty.clear()}saveState(){return this.tty.saveState()}loadState(t){this.tty.loadState(t)}};function S(i){return i==10?"":i<32?String.fromCharCode(i+9216):String.fromCharCode(i)}var d=class{constructor(){this.bufferedRead=!0;this.cyclesPerByte=1e6/(57600/8);this.maxOutputBytes=4096}clearToSend(){return this.outputBytes.lengththis.inputIndex}recvByte(){var t=this.readIndex();this.inputIndex=t;var e=(this.inputBytes&&this.inputBytes[t])|0;return this.viewer.tty.addtext(S(e),18),e==10&&this.viewer.tty.newline(),e}readIndex(){return this.bufferedRead?this.inputIndex+1:Math.floor(this.clk/this.cyclesPerByte)}reset(){this.inputIndex=-1,this.clk=0,this.outputBytes=[],this.bufin=""}advance(t){this.clk+=t}saveState(){return{clk:this.clk,idx:this.inputIndex,out:this.outputBytes.slice()}}loadState(t){this.clk=t.clk,this.inputIndex=t.idx,this.outputBytes=t.out.slice()}},h=class extends y{constructor(e){super(e);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"ROM",start:32768,size:32768,type:"rom"}]}};this.serview=e?new u(e):new o}async start(){super.start(),this.serial=new d,this.serial.viewer=this.serview,this.serview.start(),this.machine.connectSerialIO(this.serial)}reset(){this.serial.inputBytes=f(this.internalFiles["serialin.dat"]),super.reset(),this.serview.reset()}isBlocked(){return this.machine.isHalted()}advance(e){return this.isBlocked()?(this.internalFiles["serialout.dat"]=a(this.serial.outputBytes),p(),0):super.advance(e)}saveState(){var e=super.saveState();return e.serial=this.serial.saveState(),e.serview=this.serview.saveState(),e}loadState(e){super.loadState(e),this.serial.loadState(e.serial),this.serview.loadState(e.serview)}getSerialOutput(){return a(this.serial.outputBytes)}newMachine(){return new s}getPresets(){return w}readAddress(e){return this.machine.readConst(e)}};c["devel-6502"]=h;export{d as SerialTestHarness}; +//# sourceMappingURL=devel-UW7ZZSEK.js.map diff --git a/gen/devel-UW7ZZSEK.js.map b/gen/devel-UW7ZZSEK.js.map new file mode 100644 index 00000000..24257da4 --- /dev/null +++ b/gen/devel-UW7ZZSEK.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/machine/devel.ts", "../src/platform/devel.ts"], + "sourcesContent": ["\nimport { MOS6502 } from \"../common/cpu/MOS6502\";\nimport { BasicHeadlessMachine, HasSerialIO, SerialIOInterface } from \"../common/devices\";\nimport { padBytes, newAddressDecoder } from \"../common/emu\"; // TODO\n\nconst INPUT_HALTED = 31;\n\nexport class Devel6502 extends BasicHeadlessMachine implements HasSerialIO {\n\n cpuFrequency = 1000000;\n defaultROMSize = 0x8000;\n \n cpu = new MOS6502();\n ram = new Uint8Array(0x4000);\n rom : Uint8Array;\n serial : SerialIOInterface;\n\n constructor() {\n super();\n this.connectCPUMemoryBus(this);\n }\n \n connectSerialIO(serial: SerialIOInterface) {\n this.serial = serial;\n }\n\n read = newAddressDecoder([\n [0x0000, 0x3fff, 0x3fff, (a) => { return this.ram[a]; }],\n [0x4000, 0x4000, 0xffff, (a) => { return this.serial.byteAvailable() ? 0x80 : 0 }],\n [0x4001, 0x4001, 0xffff, (a) => { return this.serial.recvByte() }],\n [0x4002, 0x4002, 0xffff, (a) => { return this.serial.clearToSend() ? 0x80 : 0 }],\n [0x8000, 0xffff, 0x7fff, (a) => { return this.rom && this.rom[a]; }],\n ]);\n \n write = newAddressDecoder([\n [0x0000, 0x3fff, 0x3fff, (a,v) => { this.ram[a] = v; }],\n [0x4003, 0x4003, 0xffff, (a,v) => { return this.serial.sendByte(v) }],\n [0x400f, 0x400f, 0xffff, (a,v) => { this.inputs[INPUT_HALTED] = 1; }],\n ]);\n \n readConst(a:number) : number {\n return this.read(a);\n }\n\n advanceFrame(trap) : number {\n var clock = 0;\n while (clock < this.cpuFrequency/60) {\n if (trap && trap()) break;\n clock += this.advanceCPU();\n }\n return clock;\n }\n\n advanceCPU() {\n if (this.isHalted()) return 1;\n var n = super.advanceCPU();\n if (this.serial) this.serial.advance(n);\n return n;\n }\n\n reset() {\n this.inputs[INPUT_HALTED] = 0;\n super.reset();\n if (this.serial) this.serial.reset();\n }\n\n isHalted() { return this.inputs[INPUT_HALTED] != 0; }\n}\n\n", "\nimport { Platform } from \"../common/baseplatform\";\nimport { EmuHalt, PLATFORMS, haltEmulation } from \"../common/emu\";\nimport { Devel6502 } from \"../machine/devel\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { SerialIOInterface } from \"../common/devices\";\nimport { byteArrayToString, convertDataToUint8Array } from \"../common/util\";\nimport { TeleType } from \"../common/teletype\";\n\nvar DEVEL_6502_PRESETS = [\n {id:'hello.dasm', name:'Hello World (ASM)'},\n {id:'hello-sdcc.c', name:'Hello World (SDCC C)'},\n];\n\n/** What the serial harness draws on: the TeleType viewer, or nothing (headless). */\ninterface SerialViewer {\n tty : { addtext(s: string, flags: number): void, newline(): void, clear(): void,\n saveState(): any, loadState(state: any): void };\n start(): void;\n reset(): void;\n saveState(): any;\n loadState(state: any): void;\n}\n\n/** For the CLI and tests, which have no DOM: the output is kept by the harness. */\nclass HeadlessSerialViewer implements SerialViewer {\n tty = { addtext() {}, newline() {}, clear() {}, saveState() { return {}; }, loadState() {} };\n start() {}\n reset() {}\n saveState() { return {}; }\n loadState() {}\n}\n\nclass SerialInOutViewer implements SerialViewer {\n div : HTMLElement;\n tty : TeleType;\n \n constructor(div: HTMLElement) {\n div.style.overflowY = 'auto';\n var gameport = $('
').appendTo(div);\n $('

Serial Output

').appendTo(gameport);\n var windowport = $('
').appendTo(gameport);\n this.div = windowport[0];\n }\n start() {\n this.tty = new TeleType(this.div, false);\n //this.tty.ncols = 40;\n }\n reset() {\n this.tty.clear();\n }\n saveState() {\n return this.tty.saveState();\n }\n loadState(state) {\n this.tty.loadState(state);\n }\n}\n\nfunction byteToASCII(b: number) : string {\n if (b == 10) return '';\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport class SerialTestHarness implements SerialIOInterface {\n\n viewer : SerialViewer;\n bufferedRead : boolean = true;\n cyclesPerByte = 1000000/(57600/8); // 138.88888 cycles\n maxOutputBytes = 4096;\n inputBytes : Uint8Array;\n\n outputBytes : number[];\n inputIndex : number;\n clk : number;\n bufin : string;\n\n clearToSend(): boolean {\n return this.outputBytes.length < this.maxOutputBytes;\n }\n sendByte(b: number) {\n if (this.clearToSend()) {\n this.outputBytes.push(b);\n this.viewer.tty.addtext(byteToASCII(b), 2|32);\n if (b == 10) this.viewer.tty.newline();\n if (!this.clearToSend()) {\n this.viewer.tty.newline();\n this.viewer.tty.addtext(\"\u26A0\uFE0F OUTPUT BUFFER FULL \u26A0\uFE0F\", 4);\n }\n }\n }\n byteAvailable(): boolean {\n return this.readIndex() > this.inputIndex;\n }\n recvByte(): number {\n var index = this.readIndex();\n this.inputIndex = index;\n var b = (this.inputBytes && this.inputBytes[index]) | 0;\n //this.bufin += byteToASCII(b);\n this.viewer.tty.addtext(byteToASCII(b), 2|16);\n if (b == 10) this.viewer.tty.newline();\n return b;\n }\n readIndex(): number {\n return this.bufferedRead ? (this.inputIndex+1) : Math.floor(this.clk / this.cyclesPerByte);\n }\n\n reset() {\n this.inputIndex = -1;\n this.clk = 0;\n this.outputBytes = [];\n this.bufin = '';\n }\n\n advance(clocks: number) {\n this.clk += clocks;\n }\n\n saveState() {\n return {\n clk: this.clk,\n idx: this.inputIndex,\n out: this.outputBytes.slice()\n }\n }\n loadState(state) {\n this.clk = state.clk;\n this.inputIndex = state.idx;\n this.outputBytes = state.out.slice();\n }\n}\n\nclass Devel6502Platform extends Base6502MachinePlatform implements Platform {\n\n serial : SerialTestHarness;\n serview : SerialViewer;\n\n constructor(mainElement: HTMLElement) {\n super(mainElement);\n // no element: running headless (the 8bws CLI)\n this.serview = mainElement ? new SerialInOutViewer(mainElement) : new HeadlessSerialViewer();\n }\n\n async start() {\n super.start();\n this.serial = new SerialTestHarness();\n this.serial.viewer = this.serview;\n this.serview.start();\n this.machine.connectSerialIO(this.serial);\n }\n\n reset() {\n this.serial.inputBytes = convertDataToUint8Array(this.internalFiles['serialin.dat']);\n super.reset();\n this.serview.reset();\n }\n\n isBlocked() {\n return this.machine.isHalted();\n }\n\n advance(novideo: boolean) {\n if (this.isBlocked()) {\n this.internalFiles['serialout.dat'] = byteArrayToString(this.serial.outputBytes);\n haltEmulation();\n return 0;\n }\n return super.advance(novideo);\n }\n\n saveState() {\n var state : any = super.saveState();\n state.serial = this.serial.saveState();\n state.serview = this.serview.saveState();\n return state;\n }\n\n loadState(state) {\n super.loadState(state);\n this.serial.loadState(state.serial);\n this.serview.loadState(state.serview);\n // TODO: reload tty UI\n }\n\n /** Everything the program has sent to the serial port (for the CLI's `serial` command). */\n getSerialOutput() { return byteArrayToString(this.serial.outputBytes); }\n\n newMachine() { return new Devel6502(); }\n getPresets() { return DEVEL_6502_PRESETS; }\n readAddress(a) { return this.machine.readConst(a); }\n\n getMemoryMap = function() { return { main:[\n {name:'RAM', start:0x0000,size:0x4000,type:'ram'},\n {name:'ROM', start:0x8000,size:0x8000,type:'rom'},\n ] } };\n}\n\n///\n\nPLATFORMS['devel-6502'] = Devel6502Platform;\n"], + "mappings": "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", + "names": ["INPUT_HALTED", "Devel6502", "BasicHeadlessMachine", "MOS6502", "newAddressDecoder", "a", "v", "serial", "trap", "clock", "n", "DEVEL_6502_PRESETS", "HeadlessSerialViewer", "SerialInOutViewer", "div", "gameport", "windowport", "TeleType", "state", "byteToASCII", "b", "SerialTestHarness", "index", "clocks", "Devel6502Platform", "Base6502MachinePlatform", "mainElement", "convertDataToUint8Array", "novideo", "byteArrayToString", "haltEmulation", "Devel6502", "a", "PLATFORMS"] +} diff --git a/gen/embedui.js b/gen/embedui.js index c4522af0..2af8b5d0 100644 --- a/gen/embedui.js +++ b/gen/embedui.js @@ -1,2 +1,2 @@ -import{b as v,c as P}from"./chunk-XPT2MIFH.js";import{B as p,F as w,L as c,l as u,m,z as g}from"./chunk-V6TNHL6H.js";import{g as I}from"./chunk-N7W4C4V2.js";var k=I(P()),i,a,l,h=(function(e){if(!e||e.length==0)return{};for(var r={},t=0;t{var o=R()[0];if(!o){alert("Could not find canvas element to record video!");return}var n=0;o.style&&o.style.transform&&(o.style.transform.indexOf("rotate(-90deg)")>=0?n=-1:o.style.transform.indexOf("rotate(90deg)")>=0&&(n=1));var s=new GIF({workerScript:"gif.js/dist/gif.worker.js",workers:4,quality:10,rotate:n});s.on("finished",function(C){console.log("finished encoding GIF"),t(C)}),e=e||100+(Math.random()*256&3),r=r||100+(Math.random()*256&15);var f=0;console.log("Recording video",o);var d=()=>{f++>r?(console.log("Rendering video"),s.render()):(s.addFrame(o,{delay:e,copy:!0}),setTimeout(d,e))};d()})}async function S(e){if(!c[i])throw Error("Invalid platform '"+i+"'.");a=new c[i]($("#emuscreen")[0]),await a.start(),e.rec&&R().on("focus",()=>{a.resume()});var r=e.n||"Game",t,o=e.url,n=e.r;if(o)return console.log(o),g(o,f=>{y(r,f)},"arraybuffer"),!0;if(n){var s=m(atob(n));t=new u().decode(s)}return M(),y(r,t),!0}async function b(e){if(e.data&&(e=e.data),i=e.p,!i)throw new Error("No platform variable!");try{var r=await v(p(i));console.log("starting platform",i),await S(e)}catch(t){console.log(t),alert('Platform "'+i+'" not supported.')}}function F(){x(),h.p&&b(h)}window.addEventListener("message",O,!1);function O(e){if(e.data){var r=e.data.cmd;if(r=="start"&&!a)b(e);else if(r=="reset")a.reset(),l.reset();else if(r=="getReplay"){var t={frameCount:l.frameCount,checkpoints:l.checkpoints,framerecs:l.framerecs,checkpointInterval:l.checkpointInterval,maxCheckpoints:l.maxCheckpoints};e.source.postMessage({ack:r,replay:t},e.origin)}else if(r=="watchState"){var o=new Function("platform","state",e.data.fn);l.callbackNewCheckpoint=n=>{e.source.postMessage({ack:r,state:o(a,n)},e.origin)}}else r=="recordVideo"?E(e.data.intervalMsec,e.data.maxFrames,function(n){e.data.filename&&(0,k.saveAs)(n,e.data.filename),e.source.postMessage({ack:r,gif:n},e.origin)}):console.log("Unknown data.cmd: "+r)}}self===top&&(document.body.style.backgroundColor="#555");F();export{a as platform,i as platform_id,F as startEmbed,l as stateRecorder}; +import{b as v,c as P}from"./chunk-XRDUJUI5.js";import{B as p,F as w,L as c,l as u,m,z as g}from"./chunk-V6TNHL6H.js";import{g as I}from"./chunk-N7W4C4V2.js";var k=I(P()),i,a,l,h=(function(e){if(!e||e.length==0)return{};for(var r={},t=0;t{var o=R()[0];if(!o){alert("Could not find canvas element to record video!");return}var n=0;o.style&&o.style.transform&&(o.style.transform.indexOf("rotate(-90deg)")>=0?n=-1:o.style.transform.indexOf("rotate(90deg)")>=0&&(n=1));var s=new GIF({workerScript:"gif.js/dist/gif.worker.js",workers:4,quality:10,rotate:n});s.on("finished",function(C){console.log("finished encoding GIF"),t(C)}),e=e||100+(Math.random()*256&3),r=r||100+(Math.random()*256&15);var f=0;console.log("Recording video",o);var d=()=>{f++>r?(console.log("Rendering video"),s.render()):(s.addFrame(o,{delay:e,copy:!0}),setTimeout(d,e))};d()})}async function S(e){if(!c[i])throw Error("Invalid platform '"+i+"'.");a=new c[i]($("#emuscreen")[0]),await a.start(),e.rec&&R().on("focus",()=>{a.resume()});var r=e.n||"Game",t,o=e.url,n=e.r;if(o)return console.log(o),g(o,f=>{y(r,f)},"arraybuffer"),!0;if(n){var s=m(atob(n));t=new u().decode(s)}return M(),y(r,t),!0}async function b(e){if(e.data&&(e=e.data),i=e.p,!i)throw new Error("No platform variable!");try{var r=await v(p(i));console.log("starting platform",i),await S(e)}catch(t){console.log(t),alert('Platform "'+i+'" not supported.')}}function F(){x(),h.p&&b(h)}window.addEventListener("message",O,!1);function O(e){if(e.data){var r=e.data.cmd;if(r=="start"&&!a)b(e);else if(r=="reset")a.reset(),l.reset();else if(r=="getReplay"){var t={frameCount:l.frameCount,checkpoints:l.checkpoints,framerecs:l.framerecs,checkpointInterval:l.checkpointInterval,maxCheckpoints:l.maxCheckpoints};e.source.postMessage({ack:r,replay:t},e.origin)}else if(r=="watchState"){var o=new Function("platform","state",e.data.fn);l.callbackNewCheckpoint=n=>{e.source.postMessage({ack:r,state:o(a,n)},e.origin)}}else r=="recordVideo"?E(e.data.intervalMsec,e.data.maxFrames,function(n){e.data.filename&&(0,k.saveAs)(n,e.data.filename),e.source.postMessage({ack:r,gif:n},e.origin)}):console.log("Unknown data.cmd: "+r)}}self===top&&(document.body.style.backgroundColor="#555");F();export{a as platform,i as platform_id,F as startEmbed,l as stateRecorder}; //# sourceMappingURL=embedui.js.map diff --git a/gen/exidy-L6KVY44A.js b/gen/exidy-RMOHPADZ.js similarity index 97% rename from gen/exidy-L6KVY44A.js rename to gen/exidy-RMOHPADZ.js index a08c9ce1..2cfe301c 100644 --- a/gen/exidy-L6KVY44A.js +++ b/gen/exidy-RMOHPADZ.js @@ -1,2 +1,2 @@ -import{G,m as S,r as k}from"./chunk-QYEDG265.js";import"./chunk-UACHXWHT.js";import{L as P,Z as c,_ as v,aa as R,da as C}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var T=R([[c.START,1,-1],[c.RIGHT,1,-4],[c.LEFT,1,-8],[c.A,1,-16],[c.UP,1,-32],[c.DOWN,1,-64],[c.SELECT,1,-128]]);var U={collision_mask:4,collision_invert:4,scrnbase:16384,charbase:18432};var b=class extends k{constructor(){super();this.cpuFrequency=705562;this.sampleRate=894886;this.numVisibleScanlines=256;this.numTotalScanlines=262;this.cpuCyclesPerLine=42;this.canvasWidth=256;this.defaultROMSize=45056;this.cpu=new S;this.ram=new Uint8Array(28672);this.color_latch=[84,238,107];this.palette=[4278190080,4278190335,4294901760,4294902015,4278255360,4278255615,4294967040,4294967295];this.inputs=new Uint8Array(4);this.keyMap=T;this.handler=v(this.inputs,this.keyMap);this.scrnbase=16384;this.charbase=18432;this.collision_mask=0;this.collision_invert=0;this.current_collision=0;this.pia_regs=new Uint8Array(4);this.bus={read:C([[0,1023,0,t=>this.ram[t]],[4096,16383,0,t=>this.rom[t-4096]],[16384,20479,0,t=>this.ram[t]],[20736,20991,3,t=>t==3?this.int_latch():this.inputs[t]],[20992,21007,3,t=>this.readPIA(t)],[24576,28671,0,t=>this.ram[t]],[32768,65535,0,t=>this.rom[t-32768]]]),write:C([[0,1023,0,(t,e)=>{this.ram[t]=e}],[16384,20479,0,(t,e)=>{this.ram[t]=e}],[20480,20737,0,(t,e)=>{this.ram[t]=e}],[20992,21007,3,(t,e)=>{this.writePIA(t,e)}],[21008,21010,3,(t,e)=>{this.setColorLatch(t,e)}],[24576,28671,0,(t,e)=>{this.ram[t]=e}]])};this.connectCPUMemoryBus(this),this.updatePalette(),this.inputs[0]=234,this.inputs[1]=255}configure(t){this.collision_mask=t.collision_mask,this.collision_invert=t.collision_invert,this.scrnbase=t.scrnbase,this.charbase=t.charbase}loadROM(t){if(super.loadROM(t),t.length==11616)this.rom.set(t.slice(10240,12288),32768),this.rom.set(t.slice(9984,10240),32512),this.rom.set(t.slice(0,10240),2048),this.scrnbase=16384,this.charbase=18432;else if(t.length==14336)this.rom.set(t.slice(13312,14336),32768),this.rom.set(t.slice(12032,12288),32512),this.scrnbase=16384,this.charbase=18432;else if(t.length==32768)this.rom.set(t.slice(30720,32768),32768),this.rom.set(t.slice(0,24576),8192),this.scrnbase=16384,this.charbase=24576;else if(t.length==45056)this.configure(U);else if(t.length!=45056)throw new Error("Warning: ROM size not recognized: "+t.length);let e=32768;this.sprite_gfx=this.rom.subarray(e,e+2048)}read(t){return this.bus.read(t)}readConst(t){return t==20739?this.inputs[3]:this.bus.read(t)}write(t,e){this.bus.write(t,e)}readPIA(t){return this.pia_regs[t&3]}writePIA(t,e){this.pia_regs[t&3]=e}int_latch(){let t=this.inputs[3];t|=this.inputs[1]&128?0:64;let e=this.current_collision^this.collision_invert;return e&=this.collision_mask,t|=e,this.inputs[3]=128,t}checkCollisionM1CHAR(){let t=this.ram[20480],e=this.ram[20544],r=236-t-4,i=244-e-4,a=this.ram[20737];if(a&128&&!(a&16)&&this.collision_mask!=0)return!1;let l=a&32?1:0,o=((this.ram[20736]&15)+16*l)*32;for(let s=0;s<16;s++){let x=i+s;if(x<0||x>=256)continue;let d=x>>3,y=x&7,M=this.sprite_gfx[o+s],m=this.sprite_gfx[o+s+16];for(let n=0;n<16;n++){let _=n<8?M:m,p=n<8?128>>n:128>>n-8;if(!(_&p))continue;let h=r+n;if(h<0||h>=256)continue;let u=h>>3,g=this.ram[this.scrnbase+d*32+u];if(this.ram[this.charbase+g*8+y]&128>>(h&7))return!0}}return!1}checkCollisionM1M2(){let t=236-this.ram[20480]-4,e=244-this.ram[20544]-4,r=236-this.ram[20608]-4,i=244-this.ram[20672]-4;if(t+16<=r||r+16<=t||e+16<=i||i+16<=e)return!1;let a=this.ram[20737],l=a&32?1:0,f=((this.ram[20736]&15)+16*l)*32,o=a&64?1:0,s=((this.ram[20736]>>4)+32+16*o)*32,x=Math.max(t,r),d=Math.min(t+16,r+16),y=Math.max(e,i),M=Math.min(e+16,i+16);for(let m=y;m>h:128>>h-8,I=u<8?this.sprite_gfx[s+_]:this.sprite_gfx[s+_+16],z=u<8?128>>u:128>>u-8;if(g&E&&I&z)return!0}}return!1}updatePalette(){this.set_1_color(0,0),this.set_1_color(1,7),this.set_1_color(2,0),this.set_1_color(3,6),this.set_1_color(4,4),this.set_1_color(5,3),this.set_1_color(6,2),this.set_1_color(7,1)}set_1_color(t,e){let r=this.color_latch[0]&1<=0&&l<16){l=15-l;let f=this.scanline*this.canvasWidth,o=this.sprite_gfx[r+l];for(let s=0;s<8;s++)if(o&128>>s){let x=a+s;x>=0&&x<256&&(this.pixels[f+x]=this.palette[i])}o=this.sprite_gfx[r+l+16];for(let s=0;s<8;s++)if(o&128>>s){let x=a+s+8;x>=0&&x<256&&(this.pixels[f+x]=this.palette[i])}}}drawSprite1(){let t=this.ram[20737];if(t&128&&!(t&16)&&this.collision_mask!=0)return;let e=this.ram[20480],r=this.ram[20544],i=t&32?1:0,a=(this.ram[20736]&15)+16*i;this.drawSprite(e,r,a*32,1)}drawSprite2(){let t=this.ram[20737];if(t&64&&this.collision_mask!=0)return;let e=this.ram[20608],r=this.ram[20672],i=t&64?1:0,a=(this.ram[20736]>>4)+0+16*i;this.drawSprite(e,r,a*32,3)}startScanline(){}drawScanline(){let t=this.scanline,e=t>>3,r=t*this.canvasWidth;for(let i=0;i<256;i++){let a=i>>3,l=this.ram[this.scrnbase+e*32+a],f=4+(l>>6&3),s=this.ram[this.charbase+l*8+(t&7)]&128>>(i&7)?f:0;this.pixels[r+i]=this.palette[s]}this.drawSprite2(),this.drawSprite1()}postFrame(){this.current_collision=0,this.collision_mask&4&&this.checkCollisionM1CHAR()&&(this.current_collision|=4),this.collision_mask&16&&this.checkCollisionM1M2()&&(this.current_collision|=16),this.inputs[3]&=127,this.cpu.IRQ()}getVideoParams(){return{width:256,height:256,aspect:6/5}}};var F=[4278190080,4278190335,4278255360,4278255615,4294901760,4294902015,4294967040,4294967295];var L=[{id:"minimal.c",name:"Minimal Example",category:"C"}],w=class extends G{newMachine(){return new b}getPresets(){return L}readAddress(A){return this.machine.readConst(A)}getMemoryMap(){return{main:[{name:"RAM",start:0,size:1024,type:"ram"},{name:"Sprite I/O",start:20480,size:256,type:"io"},{name:"I/O",start:20736,size:3,type:"io"},{name:"PIA 6821",start:20992,size:15,type:"io"},{name:"Color Latches",start:21008,size:3,type:"io"},{name:"Screen RAM",start:16384,size:1024,type:"ram"},{name:"Character RAM",start:18432,size:2048,type:"ram"},{name:"Program ROM",start:32768,size:32768,type:"rom"}]}}};P.exidy=w; -//# sourceMappingURL=exidy-L6KVY44A.js.map +import{G,m as S,r as k}from"./chunk-RWTUUV4L.js";import"./chunk-UXRCACYH.js";import{L as P,Z as c,_ as v,aa as R,da as C}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var T=R([[c.START,1,-1],[c.RIGHT,1,-4],[c.LEFT,1,-8],[c.A,1,-16],[c.UP,1,-32],[c.DOWN,1,-64],[c.SELECT,1,-128]]);var U={collision_mask:4,collision_invert:4,scrnbase:16384,charbase:18432};var b=class extends k{constructor(){super();this.cpuFrequency=705562;this.sampleRate=894886;this.numVisibleScanlines=256;this.numTotalScanlines=262;this.cpuCyclesPerLine=42;this.canvasWidth=256;this.defaultROMSize=45056;this.cpu=new S;this.ram=new Uint8Array(28672);this.color_latch=[84,238,107];this.palette=[4278190080,4278190335,4294901760,4294902015,4278255360,4278255615,4294967040,4294967295];this.inputs=new Uint8Array(4);this.keyMap=T;this.handler=v(this.inputs,this.keyMap);this.scrnbase=16384;this.charbase=18432;this.collision_mask=0;this.collision_invert=0;this.current_collision=0;this.pia_regs=new Uint8Array(4);this.bus={read:C([[0,1023,0,t=>this.ram[t]],[4096,16383,0,t=>this.rom[t-4096]],[16384,20479,0,t=>this.ram[t]],[20736,20991,3,t=>t==3?this.int_latch():this.inputs[t]],[20992,21007,3,t=>this.readPIA(t)],[24576,28671,0,t=>this.ram[t]],[32768,65535,0,t=>this.rom[t-32768]]]),write:C([[0,1023,0,(t,e)=>{this.ram[t]=e}],[16384,20479,0,(t,e)=>{this.ram[t]=e}],[20480,20737,0,(t,e)=>{this.ram[t]=e}],[20992,21007,3,(t,e)=>{this.writePIA(t,e)}],[21008,21010,3,(t,e)=>{this.setColorLatch(t,e)}],[24576,28671,0,(t,e)=>{this.ram[t]=e}]])};this.connectCPUMemoryBus(this),this.updatePalette(),this.inputs[0]=234,this.inputs[1]=255}configure(t){this.collision_mask=t.collision_mask,this.collision_invert=t.collision_invert,this.scrnbase=t.scrnbase,this.charbase=t.charbase}loadROM(t){if(super.loadROM(t),t.length==11616)this.rom.set(t.slice(10240,12288),32768),this.rom.set(t.slice(9984,10240),32512),this.rom.set(t.slice(0,10240),2048),this.scrnbase=16384,this.charbase=18432;else if(t.length==14336)this.rom.set(t.slice(13312,14336),32768),this.rom.set(t.slice(12032,12288),32512),this.scrnbase=16384,this.charbase=18432;else if(t.length==32768)this.rom.set(t.slice(30720,32768),32768),this.rom.set(t.slice(0,24576),8192),this.scrnbase=16384,this.charbase=24576;else if(t.length==45056)this.configure(U);else if(t.length!=45056)throw new Error("Warning: ROM size not recognized: "+t.length);let e=32768;this.sprite_gfx=this.rom.subarray(e,e+2048)}read(t){return this.bus.read(t)}readConst(t){return t==20739?this.inputs[3]:this.bus.read(t)}write(t,e){this.bus.write(t,e)}readPIA(t){return this.pia_regs[t&3]}writePIA(t,e){this.pia_regs[t&3]=e}int_latch(){let t=this.inputs[3];t|=this.inputs[1]&128?0:64;let e=this.current_collision^this.collision_invert;return e&=this.collision_mask,t|=e,this.inputs[3]=128,t}checkCollisionM1CHAR(){let t=this.ram[20480],e=this.ram[20544],r=236-t-4,i=244-e-4,a=this.ram[20737];if(a&128&&!(a&16)&&this.collision_mask!=0)return!1;let l=a&32?1:0,o=((this.ram[20736]&15)+16*l)*32;for(let s=0;s<16;s++){let x=i+s;if(x<0||x>=256)continue;let d=x>>3,y=x&7,M=this.sprite_gfx[o+s],m=this.sprite_gfx[o+s+16];for(let n=0;n<16;n++){let _=n<8?M:m,p=n<8?128>>n:128>>n-8;if(!(_&p))continue;let h=r+n;if(h<0||h>=256)continue;let u=h>>3,g=this.ram[this.scrnbase+d*32+u];if(this.ram[this.charbase+g*8+y]&128>>(h&7))return!0}}return!1}checkCollisionM1M2(){let t=236-this.ram[20480]-4,e=244-this.ram[20544]-4,r=236-this.ram[20608]-4,i=244-this.ram[20672]-4;if(t+16<=r||r+16<=t||e+16<=i||i+16<=e)return!1;let a=this.ram[20737],l=a&32?1:0,f=((this.ram[20736]&15)+16*l)*32,o=a&64?1:0,s=((this.ram[20736]>>4)+32+16*o)*32,x=Math.max(t,r),d=Math.min(t+16,r+16),y=Math.max(e,i),M=Math.min(e+16,i+16);for(let m=y;m>h:128>>h-8,I=u<8?this.sprite_gfx[s+_]:this.sprite_gfx[s+_+16],z=u<8?128>>u:128>>u-8;if(g&E&&I&z)return!0}}return!1}updatePalette(){this.set_1_color(0,0),this.set_1_color(1,7),this.set_1_color(2,0),this.set_1_color(3,6),this.set_1_color(4,4),this.set_1_color(5,3),this.set_1_color(6,2),this.set_1_color(7,1)}set_1_color(t,e){let r=this.color_latch[0]&1<=0&&l<16){l=15-l;let f=this.scanline*this.canvasWidth,o=this.sprite_gfx[r+l];for(let s=0;s<8;s++)if(o&128>>s){let x=a+s;x>=0&&x<256&&(this.pixels[f+x]=this.palette[i])}o=this.sprite_gfx[r+l+16];for(let s=0;s<8;s++)if(o&128>>s){let x=a+s+8;x>=0&&x<256&&(this.pixels[f+x]=this.palette[i])}}}drawSprite1(){let t=this.ram[20737];if(t&128&&!(t&16)&&this.collision_mask!=0)return;let e=this.ram[20480],r=this.ram[20544],i=t&32?1:0,a=(this.ram[20736]&15)+16*i;this.drawSprite(e,r,a*32,1)}drawSprite2(){let t=this.ram[20737];if(t&64&&this.collision_mask!=0)return;let e=this.ram[20608],r=this.ram[20672],i=t&64?1:0,a=(this.ram[20736]>>4)+0+16*i;this.drawSprite(e,r,a*32,3)}startScanline(){}drawScanline(){let t=this.scanline,e=t>>3,r=t*this.canvasWidth;for(let i=0;i<256;i++){let a=i>>3,l=this.ram[this.scrnbase+e*32+a],f=4+(l>>6&3),s=this.ram[this.charbase+l*8+(t&7)]&128>>(i&7)?f:0;this.pixels[r+i]=this.palette[s]}this.drawSprite2(),this.drawSprite1()}postFrame(){this.current_collision=0,this.collision_mask&4&&this.checkCollisionM1CHAR()&&(this.current_collision|=4),this.collision_mask&16&&this.checkCollisionM1M2()&&(this.current_collision|=16),this.inputs[3]&=127,this.cpu.IRQ()}getVideoParams(){return{width:256,height:256,aspect:6/5}}};var F=[4278190080,4278190335,4278255360,4278255615,4294901760,4294902015,4294967040,4294967295];var L=[{id:"minimal.c",name:"Minimal Example",category:"C"}],w=class extends G{newMachine(){return new b}getPresets(){return L}readAddress(A){return this.machine.readConst(A)}getMemoryMap(){return{main:[{name:"RAM",start:0,size:1024,type:"ram"},{name:"Sprite I/O",start:20480,size:256,type:"io"},{name:"I/O",start:20736,size:3,type:"io"},{name:"PIA 6821",start:20992,size:15,type:"io"},{name:"Color Latches",start:21008,size:3,type:"io"},{name:"Screen RAM",start:16384,size:1024,type:"ram"},{name:"Character RAM",start:18432,size:2048,type:"ram"},{name:"Program ROM",start:32768,size:32768,type:"rom"}]}}};P.exidy=w; +//# sourceMappingURL=exidy-RMOHPADZ.js.map diff --git a/gen/exidy-L6KVY44A.js.map b/gen/exidy-RMOHPADZ.js.map similarity index 100% rename from gen/exidy-L6KVY44A.js.map rename to gen/exidy-RMOHPADZ.js.map diff --git a/gen/galaxian-CJMJ6QQE.js b/gen/galaxian-OHSHF73Y.js similarity index 97% rename from gen/galaxian-CJMJ6QQE.js rename to gen/galaxian-OHSHF73Y.js index 39b48933..d933452c 100644 --- a/gen/galaxian-CJMJ6QQE.js +++ b/gen/galaxian-OHSHF73Y.js @@ -1,2 +1,2 @@ -import{H as Q,c as z,d as X,e as L,k as j,r as J}from"./chunk-QYEDG265.js";import"./chunk-UACHXWHT.js";import{L as B,M as N,U as Y,Z as s,_ as q,aa as F,ca as Z,da as _}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var o0=F([[s.A,0,16],[s.LEFT,0,4],[s.RIGHT,0,8],[s.P2_A,1,16],[s.P2_LEFT,1,4],[s.P2_RIGHT,1,8],[s.SELECT,0,1],[s.START,1,1],[s.VK_2,1,2]]),h0=F([[s.UP,0,-1],[s.B,0,-2],[s.VK_7,0,-4],[s.A,0,-8],[s.RIGHT,0,-16],[s.LEFT,0,-32],[s.VK_6,0,-64],[s.SELECT,0,-128],[s.START,1,-128],[s.VK_2,1,-64],[s.DOWN,2,-64]]),u0=[33,71,151,8448,18176,38656,5308416,11403264],c0=function(n,b,t,e,f){var u=f.gfxBase||10240;this.missileWidth=f.missileWidth||4,this.missileOffset=f.missileOffset||0,this.showOffscreenObjects=!1,this.frameCounter=0,this.starsEnabled=0;for(var k=[],T=0;T<256;T++)k[T]=N();this.advanceFrame=function(){this.frameCounter=this.frameCounter+1&255},this.drawScanline=function(c,x){var l=x*264;if(!this.showOffscreenObjects&&(x<16||x>=240)){for(var r=0;r<264;r++)c[l+r]=4278190080;return}for(var a=l,C=0;C<32;C++)for(var I=C,s0=t[I*2],a0=t[I*2+1],D=x+s0&255,i0=D>>3<<5,o=D&7,n0=b[i0+I],A=(a0&7)<<2,m=u+(n0<<3)+o,d=n[m],v=n[m+2048],r=0;r<8;r++){var h=128>>r,p=A+(d&h?1:0)+(v&h?2:0);c[a]=e[p],a++}for(var w=7;w>=0;w--){var y=(w<<2)+64,f0=t[y],P=240-(f0-(w<3?1:0)),o=x-P;if(o>=0&&o<16){var O=t[y+3]+1;if(O==0&&!this.showOffscreenObjects)continue;var E=t[y+1],K=E&64;E&128&&(o=15-o),E&=63;var A=(t[y+2]&7)<<2,m=u+(E<<5)+(o<8?o:o+8);a=l+O;for(var d=n[m],v=n[m+2048],r=0;r<8;r++){var h=128>>r,p=(d&h?1:0)+(v&h?2:0);p&&(c[K?a+15-r:a+r]=e[A+p])}for(var d=n[m+8],v=n[m+2056],r=0;r<8;r++){var h=128>>r,p=(d&h?1:0)+(v&h?2:0);p&&(c[K?a+7-r:a+r+8]=e[A+p])}}}for(var G=255,W=255,i=0;i<8;i++){var P=t[96+(i<<2)+1];(P+x-(i<3?1:0)&255)==255&&(i!=7?G=i:W=i)}for(var r=0;r<2;r++)if(i=r?W:G,i!=255)for(var O=255-t[96+(i<<2)+3],a=l+O-this.missileOffset,x0=i==7?4294967040:4294967295,H=0;Hthis.rom?this.rom[t]:null],[16384,18431,1023,t=>this.ram[t]],[20480,22527,1023,t=>this.vram[t]],[22528,24575,255,t=>this.oram[t]],[24576,24576,0,t=>this.inputs[0]],[26624,26624,0,t=>this.inputs[1]],[28672,28672,0,t=>this.inputs[2]],[30720,30720,0,t=>{this.watchdog_counter=M}]]);this.write=_([[16384,18431,1023,(t,e)=>{this.ram[t]=e}],[20480,22527,1023,(t,e)=>{this.vram[t]=e}],[22528,24575,255,(t,e)=>{this.oram[t]=e}],[28673,28673,0,(t,e)=>{this.interruptEnabled=e&1}],[28676,28676,0,(t,e)=>{this.gfx.starsEnabled=e&1}]]);var t=new X;this.psg1=new L(t),this.psg2=new L(t),this.audioadapter=new j([this.psg1.psg,this.psg2.psg],$,this.sampleRate),this.init()}init(){this.rom=new Uint8Array(this.defaultROMSize),this.palette=new Uint32Array(new ArrayBuffer(128)),this.gfx=new c0(this.rom,this.vram,this.oram,this.palette,this.options),this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.inputs.set(this.defaultInputs),this.handler=q(this.inputs,this.keyMap)}readConst(t){return t<28672?this.read(t):null}newIOBus(){return{read:t=>0,write:(t,e)=>{t&1&&this.psg1.selectRegister(e&15),t&2&&this.psg1.setData(e),t&4&&this.psg2.selectRegister(e&15),t&8&&this.psg2.setData(e)}}}reset(){super.reset(),this.psg1.reset(),this.psg2.reset(),this.watchdog_counter=M}startScanline(){this.audio&&this.audioadapter&&this.audioadapter.generate(this.audio)}drawScanline(){this.gfx.drawScanline(this.pixels,this.scanline)}advanceFrame(t){var e=super.advanceFrame(t);if(this.gfx.advanceFrame(),!this.gfx.showOffscreenObjects)for(var f=0;f<264;f++)this.pixels.fill(4278190080,256+f*264,264+f*264);if(this.watchdog_counter--<=0)throw new Y("WATCHDOG FIRED");return this.interruptEnabled&&this.cpu.NMI(),e}loadROM(t){this.rom.set(Z(t,this.defaultROMSize));for(var e=0;e<32;e++){var f=this.rom[this.palBase+e];this.palette[e]=4278190080;for(var u=0;u<8;u++)1<this.rom[t]],[16384,18431,2047,t=>this.ram[t]],[18432,20479,1023,t=>this.vram[t]],[20480,24575,255,t=>this.oram[t]],[28672,28672,0,t=>{this.watchdog_counter=M}],[30720,30720,0,t=>{this.watchdog_counter=M}],[33024,33024,0,t=>this.inputs[0]],[33025,33025,0,t=>this.inputs[1]],[33026,33026,0,t=>this.inputs[2]|this.scramble_protection_alt_r()],[33282,33282,0,t=>this.m_protection_result],[37120,37120,0,t=>this.inputs[0]],[37121,37121,0,t=>this.inputs[1]],[37122,37122,0,t=>this.inputs[2]|this.scramble_protection_alt_r()],[37394,37394,0,t=>this.m_protection_result]]);this.write=_([[16384,18431,2047,(t,e)=>{this.ram[t]=e}],[18432,20479,1023,(t,e)=>{this.vram[t]=e}],[20480,24575,255,(t,e)=>{this.oram[t]=e}],[26625,26625,0,(t,e)=>{this.interruptEnabled=e&1}],[26626,26626,0,(t,e)=>{}],[26627,26627,0,(t,e)=>{}],[26628,26628,0,(t,e)=>{this.gfx.starsEnabled=e&1}],[26632,26632,0,(t,e)=>{this.gfx.missileWidth=e}],[26633,26633,0,(t,e)=>{this.gfx.missileOffset=e}],[33282,33282,0,this.scramble_protection_w.bind(this)]]);this.m_protection_state=0;this.m_protection_result=0;this.init()}scramble_protection_w(t,e){switch(this.m_protection_state=this.m_protection_state<<4|e&15,this.m_protection_state&4095){case 3849:this.m_protection_result=255;break;case 2633:this.m_protection_result=191;break;case 793:this.m_protection_result=79;break;case 1481:this.m_protection_result=111;break;case 582:this.m_protection_result^=128;break;case 2911:this.m_protection_result=111;break}}scramble_protection_alt_r(){var t=this.m_protection_result>>7&1;return t<<5|(t^1)<<7}};var v0=[{id:"gfxtest.c",name:"Graphics Test"},{id:"shoot2.c",name:"Solarian Game"}],R=class extends Q{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Video RAM",start:20480,size:1024,type:"ram"},{name:"Sprite RAM",start:22528,size:256,type:"ram"},{name:"I/O Registers",start:24576,size:8192,type:"io"}]}}}newMachine(){return new g}getPresets(){return[]}readAddress(t){return this.machine.readConst(t)}readVRAMAddress(t){return t<2048?this.machine.vram[t]:this.machine.oram[t-2048]}showHelp(){return"https://8bitworkshop.com/docs/platforms/arcade/index.html#galaxian-scramble"}},U=class extends R{newMachine(){return new S}getPresets(){return v0}};B.galaxian=R;B["galaxian-scramble"]=U; -//# sourceMappingURL=galaxian-CJMJ6QQE.js.map +import{H as Q,c as z,d as X,e as L,k as j,r as J}from"./chunk-RWTUUV4L.js";import"./chunk-UXRCACYH.js";import{L as B,M as N,U as Y,Z as s,_ as q,aa as F,ca as Z,da as _}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var o0=F([[s.A,0,16],[s.LEFT,0,4],[s.RIGHT,0,8],[s.P2_A,1,16],[s.P2_LEFT,1,4],[s.P2_RIGHT,1,8],[s.SELECT,0,1],[s.START,1,1],[s.VK_2,1,2]]),h0=F([[s.UP,0,-1],[s.B,0,-2],[s.VK_7,0,-4],[s.A,0,-8],[s.RIGHT,0,-16],[s.LEFT,0,-32],[s.VK_6,0,-64],[s.SELECT,0,-128],[s.START,1,-128],[s.VK_2,1,-64],[s.DOWN,2,-64]]),u0=[33,71,151,8448,18176,38656,5308416,11403264],c0=function(n,b,t,e,f){var u=f.gfxBase||10240;this.missileWidth=f.missileWidth||4,this.missileOffset=f.missileOffset||0,this.showOffscreenObjects=!1,this.frameCounter=0,this.starsEnabled=0;for(var k=[],T=0;T<256;T++)k[T]=N();this.advanceFrame=function(){this.frameCounter=this.frameCounter+1&255},this.drawScanline=function(c,x){var l=x*264;if(!this.showOffscreenObjects&&(x<16||x>=240)){for(var r=0;r<264;r++)c[l+r]=4278190080;return}for(var a=l,C=0;C<32;C++)for(var I=C,s0=t[I*2],a0=t[I*2+1],D=x+s0&255,i0=D>>3<<5,o=D&7,n0=b[i0+I],A=(a0&7)<<2,m=u+(n0<<3)+o,d=n[m],v=n[m+2048],r=0;r<8;r++){var h=128>>r,p=A+(d&h?1:0)+(v&h?2:0);c[a]=e[p],a++}for(var w=7;w>=0;w--){var y=(w<<2)+64,f0=t[y],P=240-(f0-(w<3?1:0)),o=x-P;if(o>=0&&o<16){var O=t[y+3]+1;if(O==0&&!this.showOffscreenObjects)continue;var E=t[y+1],K=E&64;E&128&&(o=15-o),E&=63;var A=(t[y+2]&7)<<2,m=u+(E<<5)+(o<8?o:o+8);a=l+O;for(var d=n[m],v=n[m+2048],r=0;r<8;r++){var h=128>>r,p=(d&h?1:0)+(v&h?2:0);p&&(c[K?a+15-r:a+r]=e[A+p])}for(var d=n[m+8],v=n[m+2056],r=0;r<8;r++){var h=128>>r,p=(d&h?1:0)+(v&h?2:0);p&&(c[K?a+7-r:a+r+8]=e[A+p])}}}for(var G=255,W=255,i=0;i<8;i++){var P=t[96+(i<<2)+1];(P+x-(i<3?1:0)&255)==255&&(i!=7?G=i:W=i)}for(var r=0;r<2;r++)if(i=r?W:G,i!=255)for(var O=255-t[96+(i<<2)+3],a=l+O-this.missileOffset,x0=i==7?4294967040:4294967295,H=0;Hthis.rom?this.rom[t]:null],[16384,18431,1023,t=>this.ram[t]],[20480,22527,1023,t=>this.vram[t]],[22528,24575,255,t=>this.oram[t]],[24576,24576,0,t=>this.inputs[0]],[26624,26624,0,t=>this.inputs[1]],[28672,28672,0,t=>this.inputs[2]],[30720,30720,0,t=>{this.watchdog_counter=M}]]);this.write=_([[16384,18431,1023,(t,e)=>{this.ram[t]=e}],[20480,22527,1023,(t,e)=>{this.vram[t]=e}],[22528,24575,255,(t,e)=>{this.oram[t]=e}],[28673,28673,0,(t,e)=>{this.interruptEnabled=e&1}],[28676,28676,0,(t,e)=>{this.gfx.starsEnabled=e&1}]]);var t=new X;this.psg1=new L(t),this.psg2=new L(t),this.audioadapter=new j([this.psg1.psg,this.psg2.psg],$,this.sampleRate),this.init()}init(){this.rom=new Uint8Array(this.defaultROMSize),this.palette=new Uint32Array(new ArrayBuffer(128)),this.gfx=new c0(this.rom,this.vram,this.oram,this.palette,this.options),this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.inputs.set(this.defaultInputs),this.handler=q(this.inputs,this.keyMap)}readConst(t){return t<28672?this.read(t):null}newIOBus(){return{read:t=>0,write:(t,e)=>{t&1&&this.psg1.selectRegister(e&15),t&2&&this.psg1.setData(e),t&4&&this.psg2.selectRegister(e&15),t&8&&this.psg2.setData(e)}}}reset(){super.reset(),this.psg1.reset(),this.psg2.reset(),this.watchdog_counter=M}startScanline(){this.audio&&this.audioadapter&&this.audioadapter.generate(this.audio)}drawScanline(){this.gfx.drawScanline(this.pixels,this.scanline)}advanceFrame(t){var e=super.advanceFrame(t);if(this.gfx.advanceFrame(),!this.gfx.showOffscreenObjects)for(var f=0;f<264;f++)this.pixels.fill(4278190080,256+f*264,264+f*264);if(this.watchdog_counter--<=0)throw new Y("WATCHDOG FIRED");return this.interruptEnabled&&this.cpu.NMI(),e}loadROM(t){this.rom.set(Z(t,this.defaultROMSize));for(var e=0;e<32;e++){var f=this.rom[this.palBase+e];this.palette[e]=4278190080;for(var u=0;u<8;u++)1<this.rom[t]],[16384,18431,2047,t=>this.ram[t]],[18432,20479,1023,t=>this.vram[t]],[20480,24575,255,t=>this.oram[t]],[28672,28672,0,t=>{this.watchdog_counter=M}],[30720,30720,0,t=>{this.watchdog_counter=M}],[33024,33024,0,t=>this.inputs[0]],[33025,33025,0,t=>this.inputs[1]],[33026,33026,0,t=>this.inputs[2]|this.scramble_protection_alt_r()],[33282,33282,0,t=>this.m_protection_result],[37120,37120,0,t=>this.inputs[0]],[37121,37121,0,t=>this.inputs[1]],[37122,37122,0,t=>this.inputs[2]|this.scramble_protection_alt_r()],[37394,37394,0,t=>this.m_protection_result]]);this.write=_([[16384,18431,2047,(t,e)=>{this.ram[t]=e}],[18432,20479,1023,(t,e)=>{this.vram[t]=e}],[20480,24575,255,(t,e)=>{this.oram[t]=e}],[26625,26625,0,(t,e)=>{this.interruptEnabled=e&1}],[26626,26626,0,(t,e)=>{}],[26627,26627,0,(t,e)=>{}],[26628,26628,0,(t,e)=>{this.gfx.starsEnabled=e&1}],[26632,26632,0,(t,e)=>{this.gfx.missileWidth=e}],[26633,26633,0,(t,e)=>{this.gfx.missileOffset=e}],[33282,33282,0,this.scramble_protection_w.bind(this)]]);this.m_protection_state=0;this.m_protection_result=0;this.init()}scramble_protection_w(t,e){switch(this.m_protection_state=this.m_protection_state<<4|e&15,this.m_protection_state&4095){case 3849:this.m_protection_result=255;break;case 2633:this.m_protection_result=191;break;case 793:this.m_protection_result=79;break;case 1481:this.m_protection_result=111;break;case 582:this.m_protection_result^=128;break;case 2911:this.m_protection_result=111;break}}scramble_protection_alt_r(){var t=this.m_protection_result>>7&1;return t<<5|(t^1)<<7}};var v0=[{id:"gfxtest.c",name:"Graphics Test"},{id:"shoot2.c",name:"Solarian Game"}],R=class extends Q{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Video RAM",start:20480,size:1024,type:"ram"},{name:"Sprite RAM",start:22528,size:256,type:"ram"},{name:"I/O Registers",start:24576,size:8192,type:"io"}]}}}newMachine(){return new g}getPresets(){return[]}readAddress(t){return this.machine.readConst(t)}readVRAMAddress(t){return t<2048?this.machine.vram[t]:this.machine.oram[t-2048]}showHelp(){return"https://8bitworkshop.com/docs/platforms/arcade/index.html#galaxian-scramble"}},U=class extends R{newMachine(){return new S}getPresets(){return v0}};B.galaxian=R;B["galaxian-scramble"]=U; +//# sourceMappingURL=galaxian-OHSHF73Y.js.map diff --git a/gen/galaxian-CJMJ6QQE.js.map b/gen/galaxian-OHSHF73Y.js.map similarity index 100% rename from gen/galaxian-CJMJ6QQE.js.map rename to gen/galaxian-OHSHF73Y.js.map diff --git a/gen/gb-PP6J5B4N.js b/gen/gb-DUD4LPKZ.js similarity index 99% rename from gen/gb-PP6J5B4N.js rename to gen/gb-DUD4LPKZ.js index b70ea9e3..2cee3f2c 100644 --- a/gen/gb-PP6J5B4N.js +++ b/gen/gb-DUD4LPKZ.js @@ -1,4 +1,4 @@ -import{a as L,b as Q}from"./chunk-BPKA7VND.js";import{B as Y,E as J,F as $,r as K,u as U}from"./chunk-QYEDG265.js";import{b as Z}from"./chunk-UACHXWHT.js";import{L as W,U as O,Z as g,_ as z,aa as N,da as j,g as l}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var m=class m{constructor(){this.A=0;this.F=0;this.B=0;this.C=0;this.D=0;this.E=0;this.H=0;this.L=0;this.SP=65534;this.PC=256;this.ime=!1;this.imeDelay=!1;this.halted=!1;this.interruptFlags=0;this.cyclesPerInsn=0;this.o=0;this.stable=!0}connectMemoryBus(t){this.bus=t}reset(){this.A=1,this.F=176,this.B=0,this.C=19,this.D=0,this.E=216,this.H=1,this.L=77,this.SP=65534,this.PC=256,this.ime=!1,this.imeDelay=!1,this.halted=!1,this.interruptFlags=0}interrupt(t){this.interruptFlags|=t}getPC(){return this.PC}getSP(){return this.SP}isStable(){return this.stable}saveState(){return{PC:this.PC,SP:this.SP,AF:this.A<<8|this.F,BC:this.B<<8|this.C,DE:this.D<<8|this.E,HL:this.H<<8|this.L,o:this.o,ime:this.ime?1:0,halted:this.halted,interrupt:this.interruptFlags}}loadState(t){this.PC=t.PC,this.SP=t.SP,this.A=t.AF>>8&255,this.F=t.AF&240,this.B=t.BC>>8&255,this.C=t.BC&255,this.D=t.DE>>8&255,this.E=t.DE&255,this.H=t.HL>>8&255,this.L=t.HL&255,this.o=t.o,this.ime=!!t.ime,this.halted=t.halted,this.interruptFlags=t.interrupt}getAF(){return this.A<<8|this.F&240}getBC(){return this.B<<8|this.C}getDE(){return this.D<<8|this.E}getHL(){return this.H<<8|this.L}setAF(t){this.A=t>>8&255,this.F=t&240}setBC(t){this.B=t>>8&255,this.C=t&255}setDE(t){this.D=t>>8&255,this.E=t&255}setHL(t){this.H=t>>8&255,this.L=t&255}read(t){return this.bus.read(t&65535)}write(t,e){this.bus.write(t&65535,e&255)}readWord(t){return this.read(t)|this.read(t+1)<<8}writeWord(t,e){this.write(t,e&255),this.write(t+1,e>>8&255)}fetchByte(){var t=this.read(this.PC);return this.PC=this.PC+1&65535,t}fetchWord(){var t=this.fetchByte(),e=this.fetchByte();return e<<8|t}fetchSignedByte(){var t=this.fetchByte();return t<128?t:t-256}pushWord(t){this.SP=this.SP-1&65535,this.write(this.SP,t>>8&255),this.SP=this.SP-1&65535,this.write(this.SP,t&255)}popWord(){var t=this.read(this.SP);this.SP=this.SP+1&65535;var e=this.read(this.SP);return this.SP=this.SP+1&65535,e<<8|t}getZ(){return!!(this.F&m.FLAG_Z)}getN(){return!!(this.F&m.FLAG_N)}getH(){return!!(this.F&m.FLAG_H)}getC(){return!!(this.F&m.FLAG_C)}setZ(t){t?this.F|=m.FLAG_Z:this.F&=~m.FLAG_Z}setN(t){t?this.F|=m.FLAG_N:this.F&=~m.FLAG_N}setH(t){t?this.F|=m.FLAG_H:this.F&=~m.FLAG_H}setC(t){t?this.F|=m.FLAG_C:this.F&=~m.FLAG_C}setFlags(t,e,s,i){this.F=(t?m.FLAG_Z:0)|(e?m.FLAG_N:0)|(s?m.FLAG_H:0)|(i?m.FLAG_C:0)}getReg(t){switch(t){case 0:return this.B;case 1:return this.C;case 2:return this.D;case 3:return this.E;case 4:return this.H;case 5:return this.L;case 6:return this.read(this.getHL());case 7:return this.A}return 0}setReg(t,e){switch(e&=255,t){case 0:this.B=e;break;case 1:this.C=e;break;case 2:this.D=e;break;case 3:this.E=e;break;case 4:this.H=e;break;case 5:this.L=e;break;case 6:this.write(this.getHL(),e);break;case 7:this.A=e;break}}getReg16(t){switch(t){case 0:return this.getBC();case 1:return this.getDE();case 2:return this.getHL();case 3:return this.SP}return 0}setReg16(t,e){switch(e&=65535,t){case 0:this.setBC(e);break;case 1:this.setDE(e);break;case 2:this.setHL(e);break;case 3:this.SP=e;break}}getReg16AF(t){switch(t){case 0:return this.getBC();case 1:return this.getDE();case 2:return this.getHL();case 3:return this.getAF()}return 0}setReg16AF(t,e){switch(e&=65535,t){case 0:this.setBC(e);break;case 1:this.setDE(e);break;case 2:this.setHL(e);break;case 3:this.setAF(e);break}}checkCondition(t){switch(t){case 0:return!this.getZ();case 1:return this.getZ();case 2:return!this.getC();case 3:return this.getC()}return!1}addA(t){var e=this.A+t;this.setFlags((e&255)===0,!1,(this.A&15)+(t&15)>15,e>255),this.A=e&255}adcA(t){var e=this.getC()?1:0,s=this.A+t+e;this.setFlags((s&255)===0,!1,(this.A&15)+(t&15)+e>15,s>255),this.A=s&255}subA(t){var e=this.A-t;this.setFlags((e&255)===0,!0,(this.A&15)<(t&15),e<0),this.A=e&255}sbcA(t){var e=this.getC()?1:0,s=this.A-t-e;this.setFlags((s&255)===0,!0,(this.A&15)<(t&15)+e,s<0),this.A=s&255}andA(t){this.A&=t,this.setFlags(this.A===0,!1,!0,!1)}xorA(t){this.A^=t,this.A&=255,this.setFlags(this.A===0,!1,!1,!1)}orA(t){this.A|=t,this.A&=255,this.setFlags(this.A===0,!1,!1,!1)}cpA(t){var e=this.A-t;this.setFlags((e&255)===0,!0,(this.A&15)<(t&15),e<0)}aluOp(t,e){switch(t){case 0:this.addA(e);break;case 1:this.adcA(e);break;case 2:this.subA(e);break;case 3:this.sbcA(e);break;case 4:this.andA(e);break;case 5:this.xorA(e);break;case 6:this.orA(e);break;case 7:this.cpA(e);break}}inc8(t){var e=t+1&255;return this.setZ(e===0),this.setN(!1),this.setH((t&15)===15),e}dec8(t){var e=t-1&255;return this.setZ(e===0),this.setN(!0),this.setH((t&15)===0),e}addHL(t){var e=this.getHL(),s=e+t;this.setN(!1),this.setH((e&4095)+(t&4095)>4095),this.setC(s>65535),this.setHL(s&65535)}daa(){var t=this.A;this.getN()?(this.getC()&&(t-=96),this.getH()&&(t-=6)):((this.getC()||t>153)&&(t+=96,this.setC(!0)),(this.getH()||(t&15)>9)&&(t+=6)),t&=255,this.setZ(t===0),this.setH(!1),this.A=t}cbOp(t){var e=t>>3&31,s=t&7,i=this.getReg(s),h=s===6?4:2,r;if(t<64){switch(e){case 0:r=(i<<1|i>>7)&255,this.setFlags(r===0,!1,!1,!!(i&128));break;case 1:r=(i>>1|i<<7)&255,this.setFlags(r===0,!1,!1,!!(i&1));break;case 2:r=(i<<1|(this.getC()?1:0))&255,this.setFlags(r===0,!1,!1,!!(i&128));break;case 3:r=(i>>1|(this.getC()?128:0))&255,this.setFlags(r===0,!1,!1,!!(i&1));break;case 4:r=i<<1&255,this.setFlags(r===0,!1,!1,!!(i&128));break;case 5:r=(i>>1|i&128)&255,this.setFlags(r===0,!1,!1,!!(i&1));break;case 6:r=(i&15)<<4|(i&240)>>4,this.setFlags(r===0,!1,!1,!1);break;case 7:r=i>>1&255,this.setFlags(r===0,!1,!1,!!(i&1));break;default:r=i}this.setReg(s,r),s===6&&(h=4)}else if(t<128){var a=t>>3&7;this.setZ(!(i&1<>3&7;this.setReg(s,i&~(1<>3&7;this.setReg(s,i|1<0)return t;if(this.halted)return 1;this.stable=!0;var e=this.fetchByte();this.o=e,this.stable=!1;var s=this.executeOpcode(e);return this.stable=!0,s}executeOpcode(t){var e=t>>6&3,s=t>>3&7,i=t&7,h=s>>1&3,r=s&1;switch(e){case 0:return this.execX0(s,i,h,r,t);case 1:return i===6&&s===6?(this.halted=!0,1):(this.setReg(s,this.getReg(i)),s===6||i===6?2:1);case 2:return this.aluOp(s,this.getReg(i)),i===6?2:1;case 3:return this.execX3(s,i,h,r,t)}return 1}execX0(t,e,s,i,h){switch(e){case 0:switch(t){case 0:return 1;case 1:var r=this.fetchWord();return this.writeWord(r,this.SP),5;case 2:return this.PC=this.PC+1&65535,1;case 3:var a=this.fetchSignedByte();return this.PC=this.PC+a&65535,3;case 4:case 5:case 6:case 7:var a=this.fetchSignedByte();return this.checkCondition(t-4)?(this.PC=this.PC+a&65535,3):2}break;case 1:return i===0?(this.setReg16(s,this.fetchWord()),3):(this.addHL(this.getReg16(s)),2);case 2:if(i===0)switch(s){case 0:return this.write(this.getBC(),this.A),2;case 1:return this.write(this.getDE(),this.A),2;case 2:return this.write(this.getHL(),this.A),this.setHL(this.getHL()+1&65535),2;case 3:return this.write(this.getHL(),this.A),this.setHL(this.getHL()-1&65535),2}else switch(s){case 0:return this.A=this.read(this.getBC()),2;case 1:return this.A=this.read(this.getDE()),2;case 2:return this.A=this.read(this.getHL()),this.setHL(this.getHL()+1&65535),2;case 3:return this.A=this.read(this.getHL()),this.setHL(this.getHL()-1&65535),2}break;case 3:return i===0?(this.setReg16(s,this.getReg16(s)+1&65535),2):(this.setReg16(s,this.getReg16(s)-1&65535),2);case 4:return this.setReg(t,this.inc8(this.getReg(t))),t===6?3:1;case 5:return this.setReg(t,this.dec8(this.getReg(t))),t===6?3:1;case 6:return this.setReg(t,this.fetchByte()),t===6?3:2;case 7:switch(t){case 0:var c=this.A>>7&1;return this.A=(this.A<<1|c)&255,this.setFlags(!1,!1,!1,!!c),1;case 1:var o=this.A&1;return this.A=(this.A>>1|o<<7)&255,this.setFlags(!1,!1,!1,!!o),1;case 2:var c=this.A>>7&1;return this.A=(this.A<<1|(this.getC()?1:0))&255,this.setFlags(!1,!1,!1,!!c),1;case 3:var o=this.A&1;return this.A=(this.A>>1|(this.getC()?128:0))&255,this.setFlags(!1,!1,!1,!!o),1;case 4:return this.daa(),1;case 5:return this.A=~this.A&255,this.setN(!0),this.setH(!0),1;case 6:return this.setN(!1),this.setH(!1),this.setC(!0),1;case 7:return this.setN(!1),this.setH(!1),this.setC(!this.getC()),1}break}return 1}execX3(t,e,s,i,h){switch(e){case 0:switch(t){case 0:case 1:case 2:case 3:return this.checkCondition(t)?(this.PC=this.popWord(),5):2;case 4:var r=this.fetchByte();return this.write(65280+r,this.A),3;case 5:var a=this.fetchSignedByte(),c=this.SP+a&65535;return this.setFlags(!1,!1,(this.SP&15)+(a&15)>15,(this.SP&255)+(a&255)>255),this.SP=c,4;case 6:var r=this.fetchByte();return this.A=this.read(65280+r),3;case 7:var a=this.fetchSignedByte(),c=this.SP+a&65535;return this.setFlags(!1,!1,(this.SP&15)+(a&15)>15,(this.SP&255)+(a&255)>255),this.setHL(c),3}break;case 1:if(i===0)return this.setReg16AF(s,this.popWord()),3;switch(s){case 0:return this.PC=this.popWord(),4;case 1:return this.PC=this.popWord(),this.ime=!0,4;case 2:return this.PC=this.getHL(),1;case 3:return this.SP=this.getHL(),2}break;case 2:switch(t){case 0:case 1:case 2:case 3:var o=this.fetchWord();return this.checkCondition(t)?(this.PC=o,4):3;case 4:return this.write(65280+this.C,this.A),2;case 5:return this.write(this.fetchWord(),this.A),4;case 6:return this.A=this.read(65280+this.C),2;case 7:return this.A=this.read(this.fetchWord()),4}break;case 3:switch(t){case 0:return this.PC=this.fetchWord(),4;case 1:var n=this.fetchByte();return 2+this.cbOp(n);case 6:return this.ime=!1,this.imeDelay=!1,1;case 7:return this.imeDelay=!0,1;default:return 1}case 4:switch(t){case 0:case 1:case 2:case 3:var o=this.fetchWord();return this.checkCondition(t)?(this.pushWord(this.PC),this.PC=o,6):3;default:return 1}case 5:if(i===0)return this.pushWord(this.getReg16AF(s)),4;if(s===0){var o=this.fetchWord();return this.pushWord(this.PC),this.PC=o,6}return 1;case 6:return this.aluOp(t,this.fetchByte()),2;case 7:return this.pushWord(this.PC),this.PC=t*8,4}return 1}};m.FLAG_Z=128,m.FLAG_N=64,m.FLAG_H=32,m.FLAG_C=16;var D=m;function he(M,t){var e=M&31,s=(M>>5|(t&3)<<3)&31,i=t>>2&31,h=e*527+23>>6,r=s*527+23>>6,a=i*527+23>>6;return 4278190080|a<<16|r<<8|h}var X=new Uint8Array([255,127,181,86,74,41,0,0]),re=N([[g.RIGHT,0,1],[g.LEFT,0,2],[g.UP,0,4],[g.DOWN,0,8],[g.A,0,16],[g.B,0,32],[g.GP_A,0,16],[g.GP_B,0,32],[g.SELECT,0,64],[g.START,0,128]]),ee=[[0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,1],[1,0,0,0,0,1,1,1],[0,1,1,1,1,1,1,0]],x=new Uint8Array(48);x[0]=128,x[1]=63,x[2]=0,x[3]=255,x[4]=191,x[5]=255,x[6]=63,x[7]=0,x[8]=255,x[9]=191,x[10]=127,x[11]=255,x[12]=159,x[13]=255,x[14]=191,x[15]=255,x[16]=255,x[17]=0,x[18]=0,x[19]=191,x[20]=0,x[21]=0,x[22]=112;var G=class{constructor(){this.enabled=!1;this.nr50=0;this.nr51=0;this.ch1_enabled=!1;this.ch1_dacEnabled=!1;this.ch1_duty=0;this.ch1_dutyPos=0;this.ch1_lengthCounter=0;this.ch1_lengthEnabled=!1;this.ch1_volume=0;this.ch1_envInitVol=0;this.ch1_envDir=0;this.ch1_envPeriod=0;this.ch1_envTimer=0;this.ch1_freq=0;this.ch1_freqTimer=0;this.ch1_sweepPeriod=0;this.ch1_sweepDir=0;this.ch1_sweepShift=0;this.ch1_sweepTimer=0;this.ch1_sweepEnabled=!1;this.ch1_sweepShadow=0;this.ch2_enabled=!1;this.ch2_dacEnabled=!1;this.ch2_duty=0;this.ch2_dutyPos=0;this.ch2_lengthCounter=0;this.ch2_lengthEnabled=!1;this.ch2_volume=0;this.ch2_envInitVol=0;this.ch2_envDir=0;this.ch2_envPeriod=0;this.ch2_envTimer=0;this.ch2_freq=0;this.ch2_freqTimer=0;this.ch3_enabled=!1;this.ch3_dacEnabled=!1;this.ch3_lengthCounter=0;this.ch3_lengthEnabled=!1;this.ch3_volume=0;this.ch3_freq=0;this.ch3_freqTimer=0;this.ch3_samplePos=0;this.ch3_sampleBuffer=0;this.waveRAM=new Uint8Array(16);this.ch4_enabled=!1;this.ch4_dacEnabled=!1;this.ch4_lengthCounter=0;this.ch4_lengthEnabled=!1;this.ch4_volume=0;this.ch4_envInitVol=0;this.ch4_envDir=0;this.ch4_envPeriod=0;this.ch4_envTimer=0;this.ch4_clockShift=0;this.ch4_widthMode=0;this.ch4_divisor=0;this.ch4_freqTimer=0;this.ch4_lfsr=32767;this.frameSeqTimer=0;this.frameSeqStep=0;this.regs=new Uint8Array(48)}reset(){this.enabled=!1,this.nr50=0,this.nr51=0,this.ch1_enabled=!1,this.ch1_dacEnabled=!1,this.ch1_duty=0,this.ch1_dutyPos=0,this.ch1_lengthCounter=0,this.ch1_lengthEnabled=!1,this.ch1_volume=0,this.ch1_envInitVol=0,this.ch1_envDir=0,this.ch1_envPeriod=0,this.ch1_envTimer=0,this.ch1_freq=0,this.ch1_freqTimer=0,this.ch1_sweepPeriod=0,this.ch1_sweepDir=0,this.ch1_sweepShift=0,this.ch1_sweepTimer=0,this.ch1_sweepEnabled=!1,this.ch1_sweepShadow=0,this.ch2_enabled=!1,this.ch2_dacEnabled=!1,this.ch2_duty=0,this.ch2_dutyPos=0,this.ch2_lengthCounter=0,this.ch2_lengthEnabled=!1,this.ch2_volume=0,this.ch2_envInitVol=0,this.ch2_envDir=0,this.ch2_envPeriod=0,this.ch2_envTimer=0,this.ch2_freq=0,this.ch2_freqTimer=0,this.ch3_enabled=!1,this.ch3_dacEnabled=!1,this.ch3_lengthCounter=0,this.ch3_lengthEnabled=!1,this.ch3_volume=0,this.ch3_freq=0,this.ch3_freqTimer=0,this.ch3_samplePos=0,this.ch3_sampleBuffer=0,this.waveRAM.fill(0),this.ch4_enabled=!1,this.ch4_dacEnabled=!1,this.ch4_lengthCounter=0,this.ch4_lengthEnabled=!1,this.ch4_volume=0,this.ch4_envInitVol=0,this.ch4_envDir=0,this.ch4_envPeriod=0,this.ch4_envTimer=0,this.ch4_clockShift=0,this.ch4_widthMode=0,this.ch4_divisor=0,this.ch4_freqTimer=0,this.ch4_lfsr=32767,this.frameSeqTimer=0,this.frameSeqStep=0,this.regs.fill(0)}readRegister(t){if(t>=48&&t<=63)return this.ch3_enabled?this.waveRAM[this.ch3_samplePos>>1]:this.waveRAM[t-48];if(t===38){var e=(this.enabled?128:0)|(this.ch1_enabled?1:0)|(this.ch2_enabled?2:0)|(this.ch3_enabled?4:0)|(this.ch4_enabled?8:0);return e|112}if(!this.enabled)return 255;var s=t-16;return this.regs[s]|x[s]}writeRegister(t,e){if(t>=48&&t<=63){this.waveRAM[t-48]=e;return}if(t===38){var s=this.enabled;if(this.enabled=!!(e&128),s&&!this.enabled){for(var i=16;i<=37;i++)this.writeRegister(i,0);this.ch1_enabled=!1,this.ch2_enabled=!1,this.ch3_enabled=!1,this.ch4_enabled=!1}!s&&this.enabled&&(this.frameSeqTimer=0,this.frameSeqStep=0);return}if(this.enabled){var h=t-16;switch(this.regs[h]=e,t){case 16:this.ch1_sweepPeriod=e>>4&7,this.ch1_sweepDir=e>>3&1,this.ch1_sweepShift=e&7;break;case 17:this.ch1_duty=e>>6&3,this.ch1_lengthCounter=64-(e&63);break;case 18:this.ch1_envInitVol=e>>4&15,this.ch1_envDir=e>>3&1,this.ch1_envPeriod=e&7,this.ch1_dacEnabled=(e&248)!==0,this.ch1_dacEnabled||(this.ch1_enabled=!1);break;case 19:this.ch1_freq=this.ch1_freq&1792|e;break;case 20:this.ch1_freq=this.ch1_freq&255|(e&7)<<8,this.ch1_lengthEnabled=!!(e&64),e&128&&this.triggerChannel1();break;case 22:this.ch2_duty=e>>6&3,this.ch2_lengthCounter=64-(e&63);break;case 23:this.ch2_envInitVol=e>>4&15,this.ch2_envDir=e>>3&1,this.ch2_envPeriod=e&7,this.ch2_dacEnabled=(e&248)!==0,this.ch2_dacEnabled||(this.ch2_enabled=!1);break;case 24:this.ch2_freq=this.ch2_freq&1792|e;break;case 25:this.ch2_freq=this.ch2_freq&255|(e&7)<<8,this.ch2_lengthEnabled=!!(e&64),e&128&&this.triggerChannel2();break;case 26:this.ch3_dacEnabled=!!(e&128),this.ch3_dacEnabled||(this.ch3_enabled=!1);break;case 27:this.ch3_lengthCounter=256-e;break;case 28:this.ch3_volume=e>>5&3;break;case 29:this.ch3_freq=this.ch3_freq&1792|e;break;case 30:this.ch3_freq=this.ch3_freq&255|(e&7)<<8,this.ch3_lengthEnabled=!!(e&64),e&128&&this.triggerChannel3();break;case 32:this.ch4_lengthCounter=64-(e&63);break;case 33:this.ch4_envInitVol=e>>4&15,this.ch4_envDir=e>>3&1,this.ch4_envPeriod=e&7,this.ch4_dacEnabled=(e&248)!==0,this.ch4_dacEnabled||(this.ch4_enabled=!1);break;case 34:this.ch4_clockShift=e>>4&15,this.ch4_widthMode=e>>3&1,this.ch4_divisor=e&7;break;case 35:this.ch4_lengthEnabled=!!(e&64),e&128&&this.triggerChannel4();break;case 36:this.nr50=e;break;case 37:this.nr51=e;break}}}triggerChannel1(){this.ch1_dacEnabled&&(this.ch1_enabled=!0),this.ch1_lengthCounter===0&&(this.ch1_lengthCounter=64),this.ch1_freqTimer=(2048-this.ch1_freq)*4,this.ch1_volume=this.ch1_envInitVol,this.ch1_envTimer=this.ch1_envPeriod||8,this.ch1_sweepShadow=this.ch1_freq,this.ch1_sweepTimer=this.ch1_sweepPeriod||8,this.ch1_sweepEnabled=this.ch1_sweepPeriod>0||this.ch1_sweepShift>0,this.ch1_sweepShift>0&&this.calcSweepFreq()}triggerChannel2(){this.ch2_dacEnabled&&(this.ch2_enabled=!0),this.ch2_lengthCounter===0&&(this.ch2_lengthCounter=64),this.ch2_freqTimer=(2048-this.ch2_freq)*4,this.ch2_volume=this.ch2_envInitVol,this.ch2_envTimer=this.ch2_envPeriod||8}triggerChannel3(){this.ch3_dacEnabled&&(this.ch3_enabled=!0),this.ch3_lengthCounter===0&&(this.ch3_lengthCounter=256),this.ch3_freqTimer=(2048-this.ch3_freq)*2,this.ch3_samplePos=0}triggerChannel4(){this.ch4_dacEnabled&&(this.ch4_enabled=!0),this.ch4_lengthCounter===0&&(this.ch4_lengthCounter=64);var t=this.ch4_divisor===0?8:this.ch4_divisor*16;this.ch4_freqTimer=t<>this.ch1_sweepShift;return this.ch1_sweepDir?t=this.ch1_sweepShadow-t:t=this.ch1_sweepShadow+t,t>2047&&(this.ch1_enabled=!1),t}clock(t){if(this.enabled)for(var e=0;e=8192&&(this.frameSeqTimer=0,this.clockFrameSequencer()),this.ch1_enabled&&(this.ch1_freqTimer--,this.ch1_freqTimer<=0&&(this.ch1_freqTimer=(2048-this.ch1_freq)*4,this.ch1_dutyPos=this.ch1_dutyPos+1&7)),this.ch2_enabled&&(this.ch2_freqTimer--,this.ch2_freqTimer<=0&&(this.ch2_freqTimer=(2048-this.ch2_freq)*4,this.ch2_dutyPos=this.ch2_dutyPos+1&7)),this.ch3_enabled&&(this.ch3_freqTimer--,this.ch3_freqTimer<=0)){this.ch3_freqTimer=(2048-this.ch3_freq)*2,this.ch3_samplePos=this.ch3_samplePos+1&31;var s=this.waveRAM[this.ch3_samplePos>>1];this.ch3_sampleBuffer=this.ch3_samplePos&1?s&15:s>>4}if(this.ch4_enabled&&(this.ch4_freqTimer--,this.ch4_freqTimer<=0)){var i=this.ch4_divisor===0?8:this.ch4_divisor*16;this.ch4_freqTimer=i<>1&1;this.ch4_lfsr=this.ch4_lfsr>>1|h<<14,this.ch4_widthMode&&(this.ch4_lfsr=this.ch4_lfsr&-65|h<<6)}}}clockFrameSequencer(){(this.frameSeqStep&1)===0&&this.clockLengthCounters(),(this.frameSeqStep===2||this.frameSeqStep===6)&&this.clockSweep(),this.frameSeqStep===7&&this.clockEnvelopes(),this.frameSeqStep=this.frameSeqStep+1&7}clockLengthCounters(){this.ch1_lengthEnabled&&this.ch1_lengthCounter>0&&(this.ch1_lengthCounter--,this.ch1_lengthCounter===0&&(this.ch1_enabled=!1)),this.ch2_lengthEnabled&&this.ch2_lengthCounter>0&&(this.ch2_lengthCounter--,this.ch2_lengthCounter===0&&(this.ch2_enabled=!1)),this.ch3_lengthEnabled&&this.ch3_lengthCounter>0&&(this.ch3_lengthCounter--,this.ch3_lengthCounter===0&&(this.ch3_enabled=!1)),this.ch4_lengthEnabled&&this.ch4_lengthCounter>0&&(this.ch4_lengthCounter--,this.ch4_lengthCounter===0&&(this.ch4_enabled=!1))}clockSweep(){if(this.ch1_sweepEnabled&&(this.ch1_sweepTimer--,this.ch1_sweepTimer<=0&&(this.ch1_sweepTimer=this.ch1_sweepPeriod||8,this.ch1_sweepPeriod>0))){var t=this.calcSweepFreq();t<=2047&&this.ch1_sweepShift>0&&(this.ch1_sweepShadow=t,this.ch1_freq=t,this.calcSweepFreq())}}clockEnvelopes(){this.ch1_envPeriod>0&&(this.ch1_envTimer--,this.ch1_envTimer<=0&&(this.ch1_envTimer=this.ch1_envPeriod||8,this.ch1_envDir&&this.ch1_volume<15?this.ch1_volume++:!this.ch1_envDir&&this.ch1_volume>0&&this.ch1_volume--)),this.ch2_envPeriod>0&&(this.ch2_envTimer--,this.ch2_envTimer<=0&&(this.ch2_envTimer=this.ch2_envPeriod||8,this.ch2_envDir&&this.ch2_volume<15?this.ch2_volume++:!this.ch2_envDir&&this.ch2_volume>0&&this.ch2_volume--)),this.ch4_envPeriod>0&&(this.ch4_envTimer--,this.ch4_envTimer<=0&&(this.ch4_envTimer=this.ch4_envPeriod||8,this.ch4_envDir&&this.ch4_volume<15?this.ch4_volume++:!this.ch4_envDir&&this.ch4_volume>0&&this.ch4_volume--))}getSample(){if(!this.enabled)return 0;var t=0,e=0,s=0,i=0;if(this.ch1_enabled&&this.ch1_dacEnabled&&(t=ee[this.ch1_duty][this.ch1_dutyPos]?this.ch1_volume:0),this.ch2_enabled&&this.ch2_dacEnabled&&(e=ee[this.ch2_duty][this.ch2_dutyPos]?this.ch2_volume:0),this.ch3_enabled&&this.ch3_dacEnabled){var h=this.ch3_sampleBuffer;switch(this.ch3_volume){case 0:h=0;break;case 1:break;case 2:h>>=1;break;case 3:h>>=2;break}s=h}this.ch4_enabled&&this.ch4_dacEnabled&&(i=this.ch4_lfsr&1?0:this.ch4_volume);var r=t/7.5-1,a=e/7.5-1,c=s/7.5-1,o=i/7.5-1,n=0,u=0;this.nr51&16&&(n+=r),this.nr51&32&&(n+=a),this.nr51&64&&(n+=c),this.nr51&128&&(n+=o),this.nr51&1&&(u+=r),this.nr51&2&&(u+=a),this.nr51&4&&(u+=c),this.nr51&8&&(u+=o);var w=(this.nr50>>4&7)+1,f=(this.nr50&7)+1;return n*=w/8,u*=f/8,(n+u)/8}saveState(){return{enabled:this.enabled,nr50:this.nr50,nr51:this.nr51,ch1_enabled:this.ch1_enabled,ch1_dacEnabled:this.ch1_dacEnabled,ch1_duty:this.ch1_duty,ch1_dutyPos:this.ch1_dutyPos,ch1_lengthCounter:this.ch1_lengthCounter,ch1_lengthEnabled:this.ch1_lengthEnabled,ch1_volume:this.ch1_volume,ch1_envInitVol:this.ch1_envInitVol,ch1_envDir:this.ch1_envDir,ch1_envPeriod:this.ch1_envPeriod,ch1_envTimer:this.ch1_envTimer,ch1_freq:this.ch1_freq,ch1_freqTimer:this.ch1_freqTimer,ch1_sweepPeriod:this.ch1_sweepPeriod,ch1_sweepDir:this.ch1_sweepDir,ch1_sweepShift:this.ch1_sweepShift,ch1_sweepTimer:this.ch1_sweepTimer,ch1_sweepEnabled:this.ch1_sweepEnabled,ch1_sweepShadow:this.ch1_sweepShadow,ch2_enabled:this.ch2_enabled,ch2_dacEnabled:this.ch2_dacEnabled,ch2_duty:this.ch2_duty,ch2_dutyPos:this.ch2_dutyPos,ch2_lengthCounter:this.ch2_lengthCounter,ch2_lengthEnabled:this.ch2_lengthEnabled,ch2_volume:this.ch2_volume,ch2_envInitVol:this.ch2_envInitVol,ch2_envDir:this.ch2_envDir,ch2_envPeriod:this.ch2_envPeriod,ch2_envTimer:this.ch2_envTimer,ch2_freq:this.ch2_freq,ch2_freqTimer:this.ch2_freqTimer,ch3_enabled:this.ch3_enabled,ch3_dacEnabled:this.ch3_dacEnabled,ch3_lengthCounter:this.ch3_lengthCounter,ch3_lengthEnabled:this.ch3_lengthEnabled,ch3_volume:this.ch3_volume,ch3_freq:this.ch3_freq,ch3_freqTimer:this.ch3_freqTimer,ch3_samplePos:this.ch3_samplePos,ch3_sampleBuffer:this.ch3_sampleBuffer,waveRAM:this.waveRAM.slice(0),ch4_enabled:this.ch4_enabled,ch4_dacEnabled:this.ch4_dacEnabled,ch4_lengthCounter:this.ch4_lengthCounter,ch4_lengthEnabled:this.ch4_lengthEnabled,ch4_volume:this.ch4_volume,ch4_envInitVol:this.ch4_envInitVol,ch4_envDir:this.ch4_envDir,ch4_envPeriod:this.ch4_envPeriod,ch4_envTimer:this.ch4_envTimer,ch4_clockShift:this.ch4_clockShift,ch4_widthMode:this.ch4_widthMode,ch4_divisor:this.ch4_divisor,ch4_freqTimer:this.ch4_freqTimer,ch4_lfsr:this.ch4_lfsr,frameSeqTimer:this.frameSeqTimer,frameSeqStep:this.frameSeqStep,regs:this.regs.slice(0)}}loadState(t){this.enabled=t.enabled,this.nr50=t.nr50,this.nr51=t.nr51,this.ch1_enabled=t.ch1_enabled,this.ch1_dacEnabled=t.ch1_dacEnabled,this.ch1_duty=t.ch1_duty,this.ch1_dutyPos=t.ch1_dutyPos,this.ch1_lengthCounter=t.ch1_lengthCounter,this.ch1_lengthEnabled=t.ch1_lengthEnabled,this.ch1_volume=t.ch1_volume,this.ch1_envInitVol=t.ch1_envInitVol,this.ch1_envDir=t.ch1_envDir,this.ch1_envPeriod=t.ch1_envPeriod,this.ch1_envTimer=t.ch1_envTimer,this.ch1_freq=t.ch1_freq,this.ch1_freqTimer=t.ch1_freqTimer,this.ch1_sweepPeriod=t.ch1_sweepPeriod,this.ch1_sweepDir=t.ch1_sweepDir,this.ch1_sweepShift=t.ch1_sweepShift,this.ch1_sweepTimer=t.ch1_sweepTimer,this.ch1_sweepEnabled=t.ch1_sweepEnabled,this.ch1_sweepShadow=t.ch1_sweepShadow,this.ch2_enabled=t.ch2_enabled,this.ch2_dacEnabled=t.ch2_dacEnabled,this.ch2_duty=t.ch2_duty,this.ch2_dutyPos=t.ch2_dutyPos,this.ch2_lengthCounter=t.ch2_lengthCounter,this.ch2_lengthEnabled=t.ch2_lengthEnabled,this.ch2_volume=t.ch2_volume,this.ch2_envInitVol=t.ch2_envInitVol,this.ch2_envDir=t.ch2_envDir,this.ch2_envPeriod=t.ch2_envPeriod,this.ch2_envTimer=t.ch2_envTimer,this.ch2_freq=t.ch2_freq,this.ch2_freqTimer=t.ch2_freqTimer,this.ch3_enabled=t.ch3_enabled,this.ch3_dacEnabled=t.ch3_dacEnabled,this.ch3_lengthCounter=t.ch3_lengthCounter,this.ch3_lengthEnabled=t.ch3_lengthEnabled,this.ch3_volume=t.ch3_volume,this.ch3_freq=t.ch3_freq,this.ch3_freqTimer=t.ch3_freqTimer,this.ch3_samplePos=t.ch3_samplePos,this.ch3_sampleBuffer=t.ch3_sampleBuffer,t.waveRAM&&this.waveRAM.set(t.waveRAM),this.ch4_enabled=t.ch4_enabled,this.ch4_dacEnabled=t.ch4_dacEnabled,this.ch4_lengthCounter=t.ch4_lengthCounter,this.ch4_lengthEnabled=t.ch4_lengthEnabled,this.ch4_volume=t.ch4_volume,this.ch4_envInitVol=t.ch4_envInitVol,this.ch4_envDir=t.ch4_envDir,this.ch4_envPeriod=t.ch4_envPeriod,this.ch4_envTimer=t.ch4_envTimer,this.ch4_clockShift=t.ch4_clockShift,this.ch4_widthMode=t.ch4_widthMode,this.ch4_divisor=t.ch4_divisor,this.ch4_freqTimer=t.ch4_freqTimer,this.ch4_lfsr=t.ch4_lfsr,this.frameSeqTimer=t.frameSeqTimer,this.frameSeqStep=t.frameSeqStep,t.regs&&this.regs.set(t.regs)}},T=class extends K{constructor(){super();this.cpuFrequency=4194304;this.canvasWidth=160;this.numVisibleScanlines=144;this.numTotalScanlines=154;this.cpuCyclesPerLine=456;this.sampleRate=9240*4;this.overscan=!1;this.defaultROMSize=32768;this.aspectRatio=10/9;this.cpu=new D;this.ram=new Uint8Array(8192);this.vram=new Uint8Array(8192);this.oam=new Uint8Array(160);this.hram=new Uint8Array(128);this.extram=new Uint8Array(8192);this.cgbMode=!1;this.forceColor=!1;this.vramBank1=new Uint8Array(8192);this.vramBankSelect=0;this.wramBanks=new Uint8Array(28672);this.wramBankSelect=1;this.bgCRAM=new Uint8Array(64);this.objCRAM=new Uint8Array(64);this.bgCRAMIndex=0;this.bgCRAMAutoInc=!1;this.objCRAMIndex=0;this.objCRAMAutoInc=!1;this.doubleSpeed=!1;this.speedSwitchArmed=!1;this.hdmaSrc=0;this.hdmaDst=0;this.hdmaLength=255;this.hdmaActive=!1;this.hdmaHblank=!1;this.joyp=207;this.sb=0;this.sc=0;this.divCounter=0;this.tima=0;this.tma=0;this.tac=0;this.iflag=0;this.ie=0;this.lcdc=145;this.stat=0;this.scy=0;this.scx=0;this.ly=0;this.lyc=0;this.dma=0;this.bgp=252;this.obp0=255;this.obp1=255;this.wy=0;this.wx=0;this.apu=new G;this.apuCycleAccum=0;this.ppuMode=0;this.ppuDot=0;this.windowLine=0;this.mbcType=0;this.romBank=1;this.ramBank=0;this.ramEnabled=!1;this.mbcMode=0;this.romBankMask=31;this.hasRTC=!1;this.rtcRegisterSelect=-1;this.rtcLatchLast=0;this.rtcSec=0;this.rtcMin=0;this.rtcHour=0;this.rtcDay=0;this.rtcHalt=!1;this.rtcCarry=!1;this.rtcLatched=new Uint8Array(5);this.rtcLastSync=0;this.read=j([[0,16383,16383,e=>this.rom?this.rom[e]:255],[16384,32767,16383,e=>this.readBankedROM(e)],[32768,40959,8191,e=>this.readVRAM(e)],[40960,49151,8191,e=>this.readExtRAM(e)],[49152,53247,4095,e=>this.ram[e]],[53248,57343,4095,e=>this.readWRAMBank(e)],[57344,61439,4095,e=>this.ram[e]],[61440,65023,4095,e=>this.readWRAMBank(e)],[65024,65183,255,e=>this.oam[e]],[65184,65279,255,e=>255],[65280,65407,127,e=>this.readIO(e)],[65408,65534,127,e=>this.hram[e]],[65535,65535,0,e=>this.ie]]);this.write=j([[0,8191,8191,(e,s)=>{this.writeMBC(e,s)}],[8192,16383,8191,(e,s)=>{this.writeMBC(8192+e,s)}],[16384,24575,8191,(e,s)=>{this.writeMBC(16384+e,s)}],[24576,32767,8191,(e,s)=>{this.writeMBC(24576+e,s)}],[32768,40959,8191,(e,s)=>{this.writeVRAM(e,s)}],[40960,49151,8191,(e,s)=>{this.writeExtRAM(e,s)}],[49152,53247,4095,(e,s)=>{this.ram[e]=s}],[53248,57343,4095,(e,s)=>{this.writeWRAMBank(e,s)}],[57344,61439,4095,(e,s)=>{this.ram[e]=s}],[61440,65023,4095,(e,s)=>{this.writeWRAMBank(e,s)}],[65024,65183,255,(e,s)=>{this.oam[e]=s}],[65184,65279,255,(e,s)=>{}],[65280,65407,127,(e,s)=>{this.writeIO(e,s)}],[65408,65534,127,(e,s)=>{this.hram[e]=s}],[65535,65535,0,(e,s)=>{this.ie=s}]]);this.timerSubCycles=0;this.bgPriorityLine=new Uint8Array(160);this.bgAttrPriLine=new Uint8Array(160);this.handler=z(this.inputs,this.getKeyboardMap()),this.connectCPUMemoryBus(this)}getKeyboardMap(){return re}now(){return Date.now()}syncRTC(){if(!this.hasRTC||this.rtcHalt){this.rtcLastSync=this.now();return}var e=Math.floor((this.now()-this.rtcLastSync)/1e3);if(!(e<=0)){this.rtcLastSync+=e*1e3;var s=this.rtcSec+e;this.rtcSec=s%60,s=this.rtcMin+Math.floor(s/60),this.rtcMin=s%60,s=this.rtcHour+Math.floor(s/60),this.rtcHour=s%24;var i=this.rtcDay+Math.floor(s/24);i>511&&(this.rtcCarry=!0,i&=511),this.rtcDay=i}}latchRTC(){this.syncRTC(),this.rtcLatched[0]=this.rtcSec,this.rtcLatched[1]=this.rtcMin,this.rtcLatched[2]=this.rtcHour,this.rtcLatched[3]=this.rtcDay&255,this.rtcLatched[4]=this.rtcDay>>8&1|(this.rtcHalt?64:0)|(this.rtcCarry?128:0)}resetRTC(){var e=new Date(this.now());this.rtcSec=e.getSeconds(),this.rtcMin=e.getMinutes(),this.rtcHour=e.getHours(),this.rtcDay=0,this.rtcHalt=!1,this.rtcCarry=!1,this.rtcRegisterSelect=-1,this.rtcLatchLast=0,this.rtcLastSync=this.now(),this.latchRTC()}readVRAM(e){return this.cgbMode&&this.vramBankSelect?this.vramBank1[e]:this.vram[e]}writeVRAM(e,s){this.cgbMode&&this.vramBankSelect?this.vramBank1[e]=s:this.vram[e]=s}readWRAMBank(e){return!this.cgbMode||this.wramBankSelect<=1?this.ram[4096+e]:this.wramBanks[(this.wramBankSelect-1)*4096+e]}writeWRAMBank(e,s){!this.cgbMode||this.wramBankSelect<=1?this.ram[4096+e]=s:this.wramBanks[(this.wramBankSelect-1)*4096+e]=s}readBankedROM(e){if(!this.rom)return 255;var s=this.romBank;this.mbcType===0&&(s=1);var i=e+s*16384;return i=8&&s<=12?this.rtcRegisterSelect=s:(this.rtcRegisterSelect=-1,this.ramBank=s&3):this.mbcMode===0?(this.romBank=this.romBank&31|(s&3)<<5,this.romBank&=this.romBankMask):this.ramBank=s&3:(this.mbcType===1?this.mbcMode=s&1:this.mbcType===3&&this.rtcLatchLast===0&&s===1&&this.latchRTC(),this.rtcLatchLast=s)}}writeMBC5(e,s){e<8192?this.ramEnabled=(s&15)===10:e<12288?(this.romBank=this.romBank&256|s,this.romBank&=this.romBankMask):e<16384?(this.romBank=this.romBank&255|(s&1)<<8,this.romBank&=this.romBankMask):e<24576&&(this.ramBank=s&15)}readExtRAM(e){if(this.hasRTC&&this.rtcRegisterSelect>=0)return this.syncRTC(),this.rtcLatched[this.rtcRegisterSelect-8];if(!this.ramEnabled&&this.mbcType>0)return 255;var s=e+this.ramBank*8192;return s=0)&&!(!this.ramEnabled&&this.mbcType>0)){var i=e+this.ramBank*8192;i>8&255;case 5:return this.tima;case 6:return this.tma;case 7:return this.tac|248;case 15:return this.iflag|224;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:return this.apu.readRegister(e);case 64:return this.lcdc;case 65:return this.stat|128;case 66:return this.scy;case 67:return this.scx;case 68:return this.ly;case 69:return this.lyc;case 70:return this.dma;case 71:return this.bgp;case 72:return this.obp0;case 73:return this.obp1;case 74:return this.wy;case 75:return this.wx;case 77:return this.cgbMode?(this.doubleSpeed?128:0)|(this.speedSwitchArmed?1:0)|126:255;case 79:return this.cgbMode?this.vramBankSelect|254:255;case 85:return this.cgbMode?this.hdmaLength:255;case 104:return this.cgbMode?this.bgCRAMIndex|(this.bgCRAMAutoInc?128:0):255;case 105:return this.cgbMode?this.bgCRAM[this.bgCRAMIndex&63]:255;case 106:return this.cgbMode?this.objCRAMIndex|(this.objCRAMAutoInc?128:0):255;case 107:return this.cgbMode?this.objCRAM[this.objCRAMIndex&63]:255;case 112:return this.cgbMode?this.wramBankSelect:255;default:return 255}}writeIO(e,s){switch(e){case 0:this.joyp=s;break;case 1:this.sb=s;break;case 2:this.sc=s;break;case 4:this.divCounter=0;break;case 5:this.tima=s;break;case 6:this.tma=s;break;case 7:this.tac=s&7;break;case 15:this.iflag=s&31;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:this.apu.writeRegister(e,s);break;case 64:this.lcdc=s,s&128||(this.ly=0,this.ppuMode=0,this.ppuDot=0,this.stat=this.stat&252);break;case 65:this.stat=this.stat&7|s&120;break;case 66:this.scy=s;break;case 67:this.scx=s;break;case 68:break;case 69:this.lyc=s;break;case 70:this.dmaTransfer(s);break;case 71:this.bgp=s;break;case 72:this.obp0=s;break;case 73:this.obp1=s;break;case 74:this.wy=s;break;case 75:this.wx=s;break;case 77:this.cgbMode&&(this.speedSwitchArmed=!!(s&1));break;case 79:this.cgbMode&&(this.vramBankSelect=s&1);break;case 81:this.cgbMode&&(this.hdmaSrc=this.hdmaSrc&255|s<<8);break;case 82:this.cgbMode&&(this.hdmaSrc=this.hdmaSrc&65280|s&240);break;case 83:this.cgbMode&&(this.hdmaDst=this.hdmaDst&255|(s&31)<<8);break;case 84:this.cgbMode&&(this.hdmaDst=this.hdmaDst&65280|s&240);break;case 85:this.cgbMode&&this.startHDMA(s);break;case 104:this.cgbMode&&(this.bgCRAMIndex=s&63,this.bgCRAMAutoInc=!!(s&128));break;case 105:this.cgbMode&&(this.bgCRAM[this.bgCRAMIndex&63]=s,this.bgCRAMAutoInc&&(this.bgCRAMIndex=this.bgCRAMIndex+1&63));break;case 106:this.cgbMode&&(this.objCRAMIndex=s&63,this.objCRAMAutoInc=!!(s&128));break;case 107:this.cgbMode&&(this.objCRAM[this.objCRAMIndex&63]=s,this.objCRAMAutoInc&&(this.objCRAMIndex=this.objCRAMIndex+1&63));break;case 112:this.cgbMode&&(this.wramBankSelect=s&7,this.wramBankSelect===0&&(this.wramBankSelect=1));break}}readJoypad(){var e=this.joyp|15;return this.joyp&16||(e&=~(this.inputs[0]&15)),this.joyp&32||(e&=~(this.inputs[0]>>4&15)),e|192}dmaTransfer(e){this.dma=e;for(var s=e<<8,i=0;i<160;i++)this.oam[i]=this.read(s+i)}startHDMA(e){if(this.hdmaActive&&!(e&128)){this.hdmaActive=!1,this.hdmaLength=e|128;return}var s=((e&127)+1)*16;e&128?(this.hdmaActive=!0,this.hdmaHblank=!0,this.hdmaLength=e&127):(this.performHDMABlock(s),this.hdmaLength=255)}performHDMABlock(e){for(var s=this.hdmaSrc&65520,i=this.hdmaDst&8176,h=0;h255&&(this.tima=this.tma,this.iflag|=4)}}syncInterrupts(){var e=this.iflag&this.ie&31;this.cpu.interruptFlags=e}syncInterruptsBack(){var e=this.iflag&this.ie&31&~this.cpu.interruptFlags;this.iflag&=~e}advanceCPU(){this.syncInterrupts();var e=this.cpu.interruptFlags,s=this.cpu,i=1,h=!1;this.cpu.isStable()&&(this.probe.logExecute(this.cpu.getPC(),this.cpu.getSP()),this.cgbMode&&this.speedSwitchArmed&&!this.cpu.halted&&this.read(this.cpu.getPC())===16&&(h=!0)),i=s.advanceInsn(1);var r=i*4;this.probe.logClocks(r);var a=this.doubleSpeed?i*2:r;if(h&&this.performSpeedSwitch(),this.cpu.interruptFlags!==e&&(this.probe.logInterrupt(e&~this.cpu.interruptFlags),this.syncInterruptsBack()),this.updateTimerCycles(a),this.updatePPUMode(a),this.apu.clock(a),this.audio){this.apuCycleAccum+=a;for(var c=114;this.apuCycleAccum>=c;)this.apuCycleAccum-=c,this.audio.feedSample(this.apu.getSample(),1)}return a}updatePPUMode(e){if(!(this.scanline>=144)){this.ppuDot+=e;var s=this.ppuMode;this.ppuDot<80?this.ppuMode=2:this.ppuDot<252?this.ppuMode=3:this.ppuMode=0,this.ppuMode!==s&&(this.stat=this.stat&252|this.ppuMode&3,this.ppuMode===0&&this.stat&8?(this.iflag|=2,this.cgbMode&&this.tickHDMA()):this.ppuMode===2&&this.stat&32&&(this.iflag|=2))}}updateTimerCycles(e){if(this.divCounter=this.divCounter+e&65535,!!(this.tac&4)){var s;switch(this.tac&3){case 0:s=1024;break;case 1:s=16;break;case 2:s=64;break;case 3:s=256;break;default:s=1024}for(this.timerSubCycles+=e;this.timerSubCycles>=s;)this.timerSubCycles-=s,this.tima=this.tima+1&255,this.tima===0&&(this.tima=this.tma,this.iflag|=4)}}startScanline(){this.ly=this.scanline,this.ppuDot=0,this.scanline<144?this.ppuMode=2:(this.ppuMode=1,this.scanline===144&&(this.iflag|=1,this.stat&16&&(this.iflag|=2))),this.ly===this.lyc?(this.stat|=4,this.stat&64&&(this.iflag|=2)):this.stat&=-5,this.stat=this.stat&252|this.ppuMode&3}drawScanline(){if(this.lcdc&128&&!(this.scanline>=144)){var e=this.scanline*160;if(this.lcdc&1||this.cgbMode)this.drawBGLine(e);else for(var s=0;s<160;s++)this.pixels[e+s]=L[0],this.bgPriorityLine[s]=0,this.bgAttrPriLine[s]=0;this.lcdc&32&&this.scanline>=this.wy&&this.drawWindowLine(e),this.lcdc&2&&this.drawSpriteLine(e)}}getPaletteColor(e,s){var i=e>>s*2&3;return L[i]}getCGBColor(e,s,i){var h=s*8+i*2;return he(e[h],e[h+1])}drawBGLine(e){for(var s=this.lcdc&8?7168:6144,i=!(this.lcdc&16),h=this.scanline+this.scy&255,r=h>>3&31,a=h&7,c=0;c<160;c++){var o=c+this.scx&255,n=o>>3&31,u=7-(o&7),w=s+r*32+n,f=this.vram[w],d;if(i?d=4096+(f<<24>>24)*16:d=f*16,this.cgbMode){var v=this.vramBank1[w],p=v&7,C=v&8?1:0,S=!!(v&32),y=!!(v&64),P=!!(v&128),B=y?7-a:a,R=S?o&7:u,_=C?this.vramBank1:this.vram,b=_[d+B*2],A=_[d+B*2+1],F=(A>>R&1)<<1|b>>R&1;this.bgPriorityLine[c]=F,this.bgAttrPriLine[c]=P?1:0,this.pixels[e+c]=this.getCGBColor(this.bgCRAM,p,F)}else{var b=this.vram[d+a*2],A=this.vram[d+a*2+1],F=(A>>u&1)<<1|b>>u&1;this.bgPriorityLine[c]=F,this.bgAttrPriLine[c]=0,this.pixels[e+c]=this.getPaletteColor(this.bgp,F)}}}drawWindowLine(e){var s=this.wx-7;if(!(s>=160)){for(var i=this.lcdc&64?7168:6144,h=!(this.lcdc&16),r=this.windowLine,a=r>>3&31,c=r&7,o=!1,n=Math.max(0,s);n<160;n++){var u=n-s,w=u>>3&31,f=7-(u&7),d=i+a*32+w,v=this.vram[d],p;if(h?p=4096+(v<<24>>24)*16:p=v*16,this.cgbMode){var C=this.vramBank1[d],S=C&7,y=C&8?1:0,P=!!(C&32),B=!!(C&64),R=!!(C&128),_=B?7-c:c,b=P?u&7:f,A=y?this.vramBank1:this.vram,F=A[p+_*2],E=A[p+_*2+1],k=(E>>b&1)<<1|F>>b&1;this.bgPriorityLine[n]=k,this.bgAttrPriLine[n]=R?1:0,this.pixels[e+n]=this.getCGBColor(this.bgCRAM,S,k)}else{var F=this.vram[p+c*2],E=this.vram[p+c*2+1],k=(E>>f&1)<<1|F>>f&1;this.bgPriorityLine[n]=k,this.bgAttrPriLine[n]=0,this.pixels[e+n]=this.getPaletteColor(this.bgp,k)}o=!0}o&&this.windowLine++}}drawSpriteLine(e){for(var s=this.lcdc&4?16:8,i=0,h=[],r=0;r<40&&i<10;r++){var a=this.oam[r*4]-16,c=this.oam[r*4+1]-8;this.scanline>=a&&this.scanlineH.x!==I.x?H.x-I.x:H.index-I.index);for(var o=h.length-1;o>=0;o--){var n=h[o].index,u=this.oam[n*4]-16,w=this.oam[n*4+1]-8,f=this.oam[n*4+2],d=this.oam[n*4+3],v=!!(d&32),p=!!(d&64),C=!!(d&128);s===16&&(f&=254);var S=this.scanline-u;p&&(S=s-1-S);for(var y=f*16+S*2,P=this.cgbMode&&d&8?this.vramBank1:this.vram,B=P[y],R=P[y+1],_=0;_<8;_++){var b=w+_;if(!(b<0||b>=160)){var A=v?_:7-_,F=(R>>A&1)<<1|B>>A&1;if(F!==0)if(this.cgbMode){var E=this.lcdc&1;if(E&&(this.bgAttrPriLine[b]&&this.bgPriorityLine[b]!==0||C&&this.bgPriorityLine[b]!==0))continue;var k=d&7;this.pixels[e+b]=this.getCGBColor(this.objCRAM,k,F)}else{if(C){var se=this.pixels[e+b];if(se!==L[this.bgp&3])continue}var ie=d&16?this.obp1:this.obp0;this.pixels[e+b]=this.getPaletteColor(ie,F)}}}}}loadROM(e,s){if(e.length>327){var i=e[327];switch(i){case 0:this.mbcType=0;break;case 1:case 2:case 3:this.mbcType=1;break;case 15:case 16:case 17:case 18:case 19:this.mbcType=3;break;case 25:case 26:case 27:case 28:case 29:case 30:this.mbcType=5;break;default:console.log(`Unhandled cartridge type 0x${i.toString(16)} @ 0x147, treating as MBC5`),this.mbcType=5;break}this.hasRTC=i===15||i===16}else throw new O("ROM not long enough for header");if(e.length>323){var h=e[323];this.cgbMode=this.forceColor||h===128||h===192}this.rom=new Uint8Array(Math.max(e.length,32768)),this.rom.set(e);var r=Math.max(2,this.rom.length>>14);switch(this.romBankMask=r-1,e[329]){case 0:break;case 1:this.extram=new Uint8Array(2048);break;case 2:this.extram=new Uint8Array(8192);break;case 3:this.extram=new Uint8Array(32768);break;case 4:this.extram=new Uint8Array(131072);break;case 5:this.extram=new Uint8Array(65536);break;default:console.log(`Invalid RAM size code @ 0x149: ${e[329]}`);break}this.reset()}reset(){super.reset(),this.ram.fill(0),this.vram.fill(0),this.oam.fill(0),this.hram.fill(0),this.iflag=0,this.ie=0,this.lcdc=145,this.stat=0,this.scy=0,this.scx=0,this.ly=0,this.lyc=0,this.bgp=252,this.obp0=255,this.obp1=255,this.wy=0,this.wx=0,this.joyp=207,this.divCounter=0,this.tima=0,this.tma=0,this.tac=0,this.ppuMode=0,this.ppuDot=0,this.windowLine=0,this.romBank=1,this.ramBank=0,this.ramEnabled=!1,this.mbcMode=0,this.timerSubCycles=0,this.apuCycleAccum=0,this.apu.reset(),this.vramBank1.fill(0),this.vramBankSelect=0,this.wramBanks.fill(0),this.wramBankSelect=1;for(var e=0;e<8;e++)this.bgCRAM.set(X,e*8),this.objCRAM.set(X,e*8);this.bgCRAMIndex=0,this.bgCRAMAutoInc=!1,this.objCRAMIndex=0,this.objCRAMAutoInc=!1,this.doubleSpeed=!1,this.speedSwitchArmed=!1,this.hdmaSrc=0,this.hdmaDst=0,this.hdmaLength=255,this.hdmaActive=!1,this.hdmaHblank=!1,this.cgbMode&&(this.cpu.A=17),this.hasRTC?this.resetRTC():(this.rtcRegisterSelect=-1,this.rtcLatchLast=0)}preFrame(){this.windowLine=0}readVRAMAddress(e){return this.cgbMode&&e>=8192?this.vramBank1[e&8191]:this.vram[e&8191]}saveState(){var e=super.saveState();return e.vram=this.vram.slice(0),e.oam=this.oam.slice(0),e.hram=this.hram.slice(0),e.extram=this.extram.slice(0),e.io={joyp:this.joyp,sb:this.sb,sc:this.sc,divCounter:this.divCounter,tima:this.tima,tma:this.tma,tac:this.tac,iflag:this.iflag,ie:this.ie,lcdc:this.lcdc,stat:this.stat,scy:this.scy,scx:this.scx,ly:this.ly,lyc:this.lyc,dma:this.dma,bgp:this.bgp,obp0:this.obp0,obp1:this.obp1,wy:this.wy,wx:this.wx,ppuMode:this.ppuMode,ppuDot:this.ppuDot,windowLine:this.windowLine,romBank:this.romBank,ramBank:this.ramBank,ramEnabled:this.ramEnabled,mbcMode:this.mbcMode,timerSubCycles:this.timerSubCycles},e.apu=this.apu.saveState(),e.apuCycleAccum=this.apuCycleAccum,e.rtc={hasRTC:this.hasRTC,sec:this.rtcSec,min:this.rtcMin,hour:this.rtcHour,day:this.rtcDay,halt:this.rtcHalt,carry:this.rtcCarry,registerSelect:this.rtcRegisterSelect,latchLast:this.rtcLatchLast,latched:this.rtcLatched.slice(0),lastSync:this.rtcLastSync},this.cgbMode&&(e.cgb={vramBank1:this.vramBank1.slice(0),vramBankSelect:this.vramBankSelect,wramBanks:this.wramBanks.slice(0),wramBankSelect:this.wramBankSelect,bgCRAM:this.bgCRAM.slice(0),objCRAM:this.objCRAM.slice(0),bgCRAMIndex:this.bgCRAMIndex,bgCRAMAutoInc:this.bgCRAMAutoInc,objCRAMIndex:this.objCRAMIndex,objCRAMAutoInc:this.objCRAMAutoInc,doubleSpeed:this.doubleSpeed,speedSwitchArmed:this.speedSwitchArmed,hdmaSrc:this.hdmaSrc,hdmaDst:this.hdmaDst,hdmaLength:this.hdmaLength,hdmaActive:this.hdmaActive,hdmaHblank:this.hdmaHblank}),e}loadState(e){super.loadState(e),this.vram.set(e.vram),this.oam.set(e.oam),this.hram.set(e.hram),e.extram&&this.extram.set(e.extram);var s=e.io;if(this.joyp=s.joyp,this.sb=s.sb,this.sc=s.sc,this.divCounter=s.divCounter,this.tima=s.tima,this.tma=s.tma,this.tac=s.tac,this.iflag=s.iflag,this.ie=s.ie,this.lcdc=s.lcdc,this.stat=s.stat,this.scy=s.scy,this.scx=s.scx,this.ly=s.ly,this.lyc=s.lyc,this.dma=s.dma,this.bgp=s.bgp,this.obp0=s.obp0,this.obp1=s.obp1,this.wy=s.wy,this.wx=s.wx,this.ppuMode=s.ppuMode,this.ppuDot=s.ppuDot,this.windowLine=s.windowLine,this.romBank=s.romBank,this.ramBank=s.ramBank,this.ramEnabled=s.ramEnabled,this.mbcMode=s.mbcMode,this.timerSubCycles=s.timerSubCycles,e.apu&&this.apu.loadState(e.apu),this.apuCycleAccum=e.apuCycleAccum||0,e.rtc){var i=e.rtc;this.hasRTC=i.hasRTC,this.rtcSec=i.sec,this.rtcMin=i.min,this.rtcHour=i.hour,this.rtcDay=i.day,this.rtcHalt=i.halt,this.rtcCarry=i.carry,this.rtcRegisterSelect=i.registerSelect,this.rtcLatchLast=i.latchLast,i.latched&&this.rtcLatched.set(i.latched),this.rtcLastSync=i.lastSync}if(e.cgb){var h=e.cgb;this.vramBank1.set(h.vramBank1),this.vramBankSelect=h.vramBankSelect,this.wramBanks.set(h.wramBanks),this.wramBankSelect=h.wramBankSelect,this.bgCRAM.set(h.bgCRAM),this.objCRAM.set(h.objCRAM),this.bgCRAMIndex=h.bgCRAMIndex,this.bgCRAMAutoInc=h.bgCRAMAutoInc,this.objCRAMIndex=h.objCRAMIndex,this.objCRAMAutoInc=h.objCRAMAutoInc,this.doubleSpeed=h.doubleSpeed,this.speedSwitchArmed=h.speedSwitchArmed,this.hdmaSrc=h.hdmaSrc,this.hdmaDst=h.hdmaDst,this.hdmaLength=h.hdmaLength,this.hdmaActive=h.hdmaActive,this.hdmaHblank=h.hdmaHblank}}getDebugCategories(){return["CPU","Stack","PPU"]}getDebugInfo(e,s){if(e==="PPU"){var i="LCDC "+l(this.lcdc,2)+" STAT "+l(this.stat,2)+` +import{a as L,b as Q}from"./chunk-BPKA7VND.js";import{B as Y,E as J,F as $,r as K,u as U}from"./chunk-RWTUUV4L.js";import{b as Z}from"./chunk-UXRCACYH.js";import{L as W,U as O,Z as g,_ as z,aa as N,da as j,g as l}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var m=class m{constructor(){this.A=0;this.F=0;this.B=0;this.C=0;this.D=0;this.E=0;this.H=0;this.L=0;this.SP=65534;this.PC=256;this.ime=!1;this.imeDelay=!1;this.halted=!1;this.interruptFlags=0;this.cyclesPerInsn=0;this.o=0;this.stable=!0}connectMemoryBus(t){this.bus=t}reset(){this.A=1,this.F=176,this.B=0,this.C=19,this.D=0,this.E=216,this.H=1,this.L=77,this.SP=65534,this.PC=256,this.ime=!1,this.imeDelay=!1,this.halted=!1,this.interruptFlags=0}interrupt(t){this.interruptFlags|=t}getPC(){return this.PC}getSP(){return this.SP}isStable(){return this.stable}saveState(){return{PC:this.PC,SP:this.SP,AF:this.A<<8|this.F,BC:this.B<<8|this.C,DE:this.D<<8|this.E,HL:this.H<<8|this.L,o:this.o,ime:this.ime?1:0,halted:this.halted,interrupt:this.interruptFlags}}loadState(t){this.PC=t.PC,this.SP=t.SP,this.A=t.AF>>8&255,this.F=t.AF&240,this.B=t.BC>>8&255,this.C=t.BC&255,this.D=t.DE>>8&255,this.E=t.DE&255,this.H=t.HL>>8&255,this.L=t.HL&255,this.o=t.o,this.ime=!!t.ime,this.halted=t.halted,this.interruptFlags=t.interrupt}getAF(){return this.A<<8|this.F&240}getBC(){return this.B<<8|this.C}getDE(){return this.D<<8|this.E}getHL(){return this.H<<8|this.L}setAF(t){this.A=t>>8&255,this.F=t&240}setBC(t){this.B=t>>8&255,this.C=t&255}setDE(t){this.D=t>>8&255,this.E=t&255}setHL(t){this.H=t>>8&255,this.L=t&255}read(t){return this.bus.read(t&65535)}write(t,e){this.bus.write(t&65535,e&255)}readWord(t){return this.read(t)|this.read(t+1)<<8}writeWord(t,e){this.write(t,e&255),this.write(t+1,e>>8&255)}fetchByte(){var t=this.read(this.PC);return this.PC=this.PC+1&65535,t}fetchWord(){var t=this.fetchByte(),e=this.fetchByte();return e<<8|t}fetchSignedByte(){var t=this.fetchByte();return t<128?t:t-256}pushWord(t){this.SP=this.SP-1&65535,this.write(this.SP,t>>8&255),this.SP=this.SP-1&65535,this.write(this.SP,t&255)}popWord(){var t=this.read(this.SP);this.SP=this.SP+1&65535;var e=this.read(this.SP);return this.SP=this.SP+1&65535,e<<8|t}getZ(){return!!(this.F&m.FLAG_Z)}getN(){return!!(this.F&m.FLAG_N)}getH(){return!!(this.F&m.FLAG_H)}getC(){return!!(this.F&m.FLAG_C)}setZ(t){t?this.F|=m.FLAG_Z:this.F&=~m.FLAG_Z}setN(t){t?this.F|=m.FLAG_N:this.F&=~m.FLAG_N}setH(t){t?this.F|=m.FLAG_H:this.F&=~m.FLAG_H}setC(t){t?this.F|=m.FLAG_C:this.F&=~m.FLAG_C}setFlags(t,e,s,i){this.F=(t?m.FLAG_Z:0)|(e?m.FLAG_N:0)|(s?m.FLAG_H:0)|(i?m.FLAG_C:0)}getReg(t){switch(t){case 0:return this.B;case 1:return this.C;case 2:return this.D;case 3:return this.E;case 4:return this.H;case 5:return this.L;case 6:return this.read(this.getHL());case 7:return this.A}return 0}setReg(t,e){switch(e&=255,t){case 0:this.B=e;break;case 1:this.C=e;break;case 2:this.D=e;break;case 3:this.E=e;break;case 4:this.H=e;break;case 5:this.L=e;break;case 6:this.write(this.getHL(),e);break;case 7:this.A=e;break}}getReg16(t){switch(t){case 0:return this.getBC();case 1:return this.getDE();case 2:return this.getHL();case 3:return this.SP}return 0}setReg16(t,e){switch(e&=65535,t){case 0:this.setBC(e);break;case 1:this.setDE(e);break;case 2:this.setHL(e);break;case 3:this.SP=e;break}}getReg16AF(t){switch(t){case 0:return this.getBC();case 1:return this.getDE();case 2:return this.getHL();case 3:return this.getAF()}return 0}setReg16AF(t,e){switch(e&=65535,t){case 0:this.setBC(e);break;case 1:this.setDE(e);break;case 2:this.setHL(e);break;case 3:this.setAF(e);break}}checkCondition(t){switch(t){case 0:return!this.getZ();case 1:return this.getZ();case 2:return!this.getC();case 3:return this.getC()}return!1}addA(t){var e=this.A+t;this.setFlags((e&255)===0,!1,(this.A&15)+(t&15)>15,e>255),this.A=e&255}adcA(t){var e=this.getC()?1:0,s=this.A+t+e;this.setFlags((s&255)===0,!1,(this.A&15)+(t&15)+e>15,s>255),this.A=s&255}subA(t){var e=this.A-t;this.setFlags((e&255)===0,!0,(this.A&15)<(t&15),e<0),this.A=e&255}sbcA(t){var e=this.getC()?1:0,s=this.A-t-e;this.setFlags((s&255)===0,!0,(this.A&15)<(t&15)+e,s<0),this.A=s&255}andA(t){this.A&=t,this.setFlags(this.A===0,!1,!0,!1)}xorA(t){this.A^=t,this.A&=255,this.setFlags(this.A===0,!1,!1,!1)}orA(t){this.A|=t,this.A&=255,this.setFlags(this.A===0,!1,!1,!1)}cpA(t){var e=this.A-t;this.setFlags((e&255)===0,!0,(this.A&15)<(t&15),e<0)}aluOp(t,e){switch(t){case 0:this.addA(e);break;case 1:this.adcA(e);break;case 2:this.subA(e);break;case 3:this.sbcA(e);break;case 4:this.andA(e);break;case 5:this.xorA(e);break;case 6:this.orA(e);break;case 7:this.cpA(e);break}}inc8(t){var e=t+1&255;return this.setZ(e===0),this.setN(!1),this.setH((t&15)===15),e}dec8(t){var e=t-1&255;return this.setZ(e===0),this.setN(!0),this.setH((t&15)===0),e}addHL(t){var e=this.getHL(),s=e+t;this.setN(!1),this.setH((e&4095)+(t&4095)>4095),this.setC(s>65535),this.setHL(s&65535)}daa(){var t=this.A;this.getN()?(this.getC()&&(t-=96),this.getH()&&(t-=6)):((this.getC()||t>153)&&(t+=96,this.setC(!0)),(this.getH()||(t&15)>9)&&(t+=6)),t&=255,this.setZ(t===0),this.setH(!1),this.A=t}cbOp(t){var e=t>>3&31,s=t&7,i=this.getReg(s),h=s===6?4:2,r;if(t<64){switch(e){case 0:r=(i<<1|i>>7)&255,this.setFlags(r===0,!1,!1,!!(i&128));break;case 1:r=(i>>1|i<<7)&255,this.setFlags(r===0,!1,!1,!!(i&1));break;case 2:r=(i<<1|(this.getC()?1:0))&255,this.setFlags(r===0,!1,!1,!!(i&128));break;case 3:r=(i>>1|(this.getC()?128:0))&255,this.setFlags(r===0,!1,!1,!!(i&1));break;case 4:r=i<<1&255,this.setFlags(r===0,!1,!1,!!(i&128));break;case 5:r=(i>>1|i&128)&255,this.setFlags(r===0,!1,!1,!!(i&1));break;case 6:r=(i&15)<<4|(i&240)>>4,this.setFlags(r===0,!1,!1,!1);break;case 7:r=i>>1&255,this.setFlags(r===0,!1,!1,!!(i&1));break;default:r=i}this.setReg(s,r),s===6&&(h=4)}else if(t<128){var a=t>>3&7;this.setZ(!(i&1<>3&7;this.setReg(s,i&~(1<>3&7;this.setReg(s,i|1<0)return t;if(this.halted)return 1;this.stable=!0;var e=this.fetchByte();this.o=e,this.stable=!1;var s=this.executeOpcode(e);return this.stable=!0,s}executeOpcode(t){var e=t>>6&3,s=t>>3&7,i=t&7,h=s>>1&3,r=s&1;switch(e){case 0:return this.execX0(s,i,h,r,t);case 1:return i===6&&s===6?(this.halted=!0,1):(this.setReg(s,this.getReg(i)),s===6||i===6?2:1);case 2:return this.aluOp(s,this.getReg(i)),i===6?2:1;case 3:return this.execX3(s,i,h,r,t)}return 1}execX0(t,e,s,i,h){switch(e){case 0:switch(t){case 0:return 1;case 1:var r=this.fetchWord();return this.writeWord(r,this.SP),5;case 2:return this.PC=this.PC+1&65535,1;case 3:var a=this.fetchSignedByte();return this.PC=this.PC+a&65535,3;case 4:case 5:case 6:case 7:var a=this.fetchSignedByte();return this.checkCondition(t-4)?(this.PC=this.PC+a&65535,3):2}break;case 1:return i===0?(this.setReg16(s,this.fetchWord()),3):(this.addHL(this.getReg16(s)),2);case 2:if(i===0)switch(s){case 0:return this.write(this.getBC(),this.A),2;case 1:return this.write(this.getDE(),this.A),2;case 2:return this.write(this.getHL(),this.A),this.setHL(this.getHL()+1&65535),2;case 3:return this.write(this.getHL(),this.A),this.setHL(this.getHL()-1&65535),2}else switch(s){case 0:return this.A=this.read(this.getBC()),2;case 1:return this.A=this.read(this.getDE()),2;case 2:return this.A=this.read(this.getHL()),this.setHL(this.getHL()+1&65535),2;case 3:return this.A=this.read(this.getHL()),this.setHL(this.getHL()-1&65535),2}break;case 3:return i===0?(this.setReg16(s,this.getReg16(s)+1&65535),2):(this.setReg16(s,this.getReg16(s)-1&65535),2);case 4:return this.setReg(t,this.inc8(this.getReg(t))),t===6?3:1;case 5:return this.setReg(t,this.dec8(this.getReg(t))),t===6?3:1;case 6:return this.setReg(t,this.fetchByte()),t===6?3:2;case 7:switch(t){case 0:var c=this.A>>7&1;return this.A=(this.A<<1|c)&255,this.setFlags(!1,!1,!1,!!c),1;case 1:var o=this.A&1;return this.A=(this.A>>1|o<<7)&255,this.setFlags(!1,!1,!1,!!o),1;case 2:var c=this.A>>7&1;return this.A=(this.A<<1|(this.getC()?1:0))&255,this.setFlags(!1,!1,!1,!!c),1;case 3:var o=this.A&1;return this.A=(this.A>>1|(this.getC()?128:0))&255,this.setFlags(!1,!1,!1,!!o),1;case 4:return this.daa(),1;case 5:return this.A=~this.A&255,this.setN(!0),this.setH(!0),1;case 6:return this.setN(!1),this.setH(!1),this.setC(!0),1;case 7:return this.setN(!1),this.setH(!1),this.setC(!this.getC()),1}break}return 1}execX3(t,e,s,i,h){switch(e){case 0:switch(t){case 0:case 1:case 2:case 3:return this.checkCondition(t)?(this.PC=this.popWord(),5):2;case 4:var r=this.fetchByte();return this.write(65280+r,this.A),3;case 5:var a=this.fetchSignedByte(),c=this.SP+a&65535;return this.setFlags(!1,!1,(this.SP&15)+(a&15)>15,(this.SP&255)+(a&255)>255),this.SP=c,4;case 6:var r=this.fetchByte();return this.A=this.read(65280+r),3;case 7:var a=this.fetchSignedByte(),c=this.SP+a&65535;return this.setFlags(!1,!1,(this.SP&15)+(a&15)>15,(this.SP&255)+(a&255)>255),this.setHL(c),3}break;case 1:if(i===0)return this.setReg16AF(s,this.popWord()),3;switch(s){case 0:return this.PC=this.popWord(),4;case 1:return this.PC=this.popWord(),this.ime=!0,4;case 2:return this.PC=this.getHL(),1;case 3:return this.SP=this.getHL(),2}break;case 2:switch(t){case 0:case 1:case 2:case 3:var o=this.fetchWord();return this.checkCondition(t)?(this.PC=o,4):3;case 4:return this.write(65280+this.C,this.A),2;case 5:return this.write(this.fetchWord(),this.A),4;case 6:return this.A=this.read(65280+this.C),2;case 7:return this.A=this.read(this.fetchWord()),4}break;case 3:switch(t){case 0:return this.PC=this.fetchWord(),4;case 1:var n=this.fetchByte();return 2+this.cbOp(n);case 6:return this.ime=!1,this.imeDelay=!1,1;case 7:return this.imeDelay=!0,1;default:return 1}case 4:switch(t){case 0:case 1:case 2:case 3:var o=this.fetchWord();return this.checkCondition(t)?(this.pushWord(this.PC),this.PC=o,6):3;default:return 1}case 5:if(i===0)return this.pushWord(this.getReg16AF(s)),4;if(s===0){var o=this.fetchWord();return this.pushWord(this.PC),this.PC=o,6}return 1;case 6:return this.aluOp(t,this.fetchByte()),2;case 7:return this.pushWord(this.PC),this.PC=t*8,4}return 1}};m.FLAG_Z=128,m.FLAG_N=64,m.FLAG_H=32,m.FLAG_C=16;var D=m;function he(M,t){var e=M&31,s=(M>>5|(t&3)<<3)&31,i=t>>2&31,h=e*527+23>>6,r=s*527+23>>6,a=i*527+23>>6;return 4278190080|a<<16|r<<8|h}var X=new Uint8Array([255,127,181,86,74,41,0,0]),re=N([[g.RIGHT,0,1],[g.LEFT,0,2],[g.UP,0,4],[g.DOWN,0,8],[g.A,0,16],[g.B,0,32],[g.GP_A,0,16],[g.GP_B,0,32],[g.SELECT,0,64],[g.START,0,128]]),ee=[[0,0,0,0,0,0,0,1],[1,0,0,0,0,0,0,1],[1,0,0,0,0,1,1,1],[0,1,1,1,1,1,1,0]],x=new Uint8Array(48);x[0]=128,x[1]=63,x[2]=0,x[3]=255,x[4]=191,x[5]=255,x[6]=63,x[7]=0,x[8]=255,x[9]=191,x[10]=127,x[11]=255,x[12]=159,x[13]=255,x[14]=191,x[15]=255,x[16]=255,x[17]=0,x[18]=0,x[19]=191,x[20]=0,x[21]=0,x[22]=112;var G=class{constructor(){this.enabled=!1;this.nr50=0;this.nr51=0;this.ch1_enabled=!1;this.ch1_dacEnabled=!1;this.ch1_duty=0;this.ch1_dutyPos=0;this.ch1_lengthCounter=0;this.ch1_lengthEnabled=!1;this.ch1_volume=0;this.ch1_envInitVol=0;this.ch1_envDir=0;this.ch1_envPeriod=0;this.ch1_envTimer=0;this.ch1_freq=0;this.ch1_freqTimer=0;this.ch1_sweepPeriod=0;this.ch1_sweepDir=0;this.ch1_sweepShift=0;this.ch1_sweepTimer=0;this.ch1_sweepEnabled=!1;this.ch1_sweepShadow=0;this.ch2_enabled=!1;this.ch2_dacEnabled=!1;this.ch2_duty=0;this.ch2_dutyPos=0;this.ch2_lengthCounter=0;this.ch2_lengthEnabled=!1;this.ch2_volume=0;this.ch2_envInitVol=0;this.ch2_envDir=0;this.ch2_envPeriod=0;this.ch2_envTimer=0;this.ch2_freq=0;this.ch2_freqTimer=0;this.ch3_enabled=!1;this.ch3_dacEnabled=!1;this.ch3_lengthCounter=0;this.ch3_lengthEnabled=!1;this.ch3_volume=0;this.ch3_freq=0;this.ch3_freqTimer=0;this.ch3_samplePos=0;this.ch3_sampleBuffer=0;this.waveRAM=new Uint8Array(16);this.ch4_enabled=!1;this.ch4_dacEnabled=!1;this.ch4_lengthCounter=0;this.ch4_lengthEnabled=!1;this.ch4_volume=0;this.ch4_envInitVol=0;this.ch4_envDir=0;this.ch4_envPeriod=0;this.ch4_envTimer=0;this.ch4_clockShift=0;this.ch4_widthMode=0;this.ch4_divisor=0;this.ch4_freqTimer=0;this.ch4_lfsr=32767;this.frameSeqTimer=0;this.frameSeqStep=0;this.regs=new Uint8Array(48)}reset(){this.enabled=!1,this.nr50=0,this.nr51=0,this.ch1_enabled=!1,this.ch1_dacEnabled=!1,this.ch1_duty=0,this.ch1_dutyPos=0,this.ch1_lengthCounter=0,this.ch1_lengthEnabled=!1,this.ch1_volume=0,this.ch1_envInitVol=0,this.ch1_envDir=0,this.ch1_envPeriod=0,this.ch1_envTimer=0,this.ch1_freq=0,this.ch1_freqTimer=0,this.ch1_sweepPeriod=0,this.ch1_sweepDir=0,this.ch1_sweepShift=0,this.ch1_sweepTimer=0,this.ch1_sweepEnabled=!1,this.ch1_sweepShadow=0,this.ch2_enabled=!1,this.ch2_dacEnabled=!1,this.ch2_duty=0,this.ch2_dutyPos=0,this.ch2_lengthCounter=0,this.ch2_lengthEnabled=!1,this.ch2_volume=0,this.ch2_envInitVol=0,this.ch2_envDir=0,this.ch2_envPeriod=0,this.ch2_envTimer=0,this.ch2_freq=0,this.ch2_freqTimer=0,this.ch3_enabled=!1,this.ch3_dacEnabled=!1,this.ch3_lengthCounter=0,this.ch3_lengthEnabled=!1,this.ch3_volume=0,this.ch3_freq=0,this.ch3_freqTimer=0,this.ch3_samplePos=0,this.ch3_sampleBuffer=0,this.waveRAM.fill(0),this.ch4_enabled=!1,this.ch4_dacEnabled=!1,this.ch4_lengthCounter=0,this.ch4_lengthEnabled=!1,this.ch4_volume=0,this.ch4_envInitVol=0,this.ch4_envDir=0,this.ch4_envPeriod=0,this.ch4_envTimer=0,this.ch4_clockShift=0,this.ch4_widthMode=0,this.ch4_divisor=0,this.ch4_freqTimer=0,this.ch4_lfsr=32767,this.frameSeqTimer=0,this.frameSeqStep=0,this.regs.fill(0)}readRegister(t){if(t>=48&&t<=63)return this.ch3_enabled?this.waveRAM[this.ch3_samplePos>>1]:this.waveRAM[t-48];if(t===38){var e=(this.enabled?128:0)|(this.ch1_enabled?1:0)|(this.ch2_enabled?2:0)|(this.ch3_enabled?4:0)|(this.ch4_enabled?8:0);return e|112}if(!this.enabled)return 255;var s=t-16;return this.regs[s]|x[s]}writeRegister(t,e){if(t>=48&&t<=63){this.waveRAM[t-48]=e;return}if(t===38){var s=this.enabled;if(this.enabled=!!(e&128),s&&!this.enabled){for(var i=16;i<=37;i++)this.writeRegister(i,0);this.ch1_enabled=!1,this.ch2_enabled=!1,this.ch3_enabled=!1,this.ch4_enabled=!1}!s&&this.enabled&&(this.frameSeqTimer=0,this.frameSeqStep=0);return}if(this.enabled){var h=t-16;switch(this.regs[h]=e,t){case 16:this.ch1_sweepPeriod=e>>4&7,this.ch1_sweepDir=e>>3&1,this.ch1_sweepShift=e&7;break;case 17:this.ch1_duty=e>>6&3,this.ch1_lengthCounter=64-(e&63);break;case 18:this.ch1_envInitVol=e>>4&15,this.ch1_envDir=e>>3&1,this.ch1_envPeriod=e&7,this.ch1_dacEnabled=(e&248)!==0,this.ch1_dacEnabled||(this.ch1_enabled=!1);break;case 19:this.ch1_freq=this.ch1_freq&1792|e;break;case 20:this.ch1_freq=this.ch1_freq&255|(e&7)<<8,this.ch1_lengthEnabled=!!(e&64),e&128&&this.triggerChannel1();break;case 22:this.ch2_duty=e>>6&3,this.ch2_lengthCounter=64-(e&63);break;case 23:this.ch2_envInitVol=e>>4&15,this.ch2_envDir=e>>3&1,this.ch2_envPeriod=e&7,this.ch2_dacEnabled=(e&248)!==0,this.ch2_dacEnabled||(this.ch2_enabled=!1);break;case 24:this.ch2_freq=this.ch2_freq&1792|e;break;case 25:this.ch2_freq=this.ch2_freq&255|(e&7)<<8,this.ch2_lengthEnabled=!!(e&64),e&128&&this.triggerChannel2();break;case 26:this.ch3_dacEnabled=!!(e&128),this.ch3_dacEnabled||(this.ch3_enabled=!1);break;case 27:this.ch3_lengthCounter=256-e;break;case 28:this.ch3_volume=e>>5&3;break;case 29:this.ch3_freq=this.ch3_freq&1792|e;break;case 30:this.ch3_freq=this.ch3_freq&255|(e&7)<<8,this.ch3_lengthEnabled=!!(e&64),e&128&&this.triggerChannel3();break;case 32:this.ch4_lengthCounter=64-(e&63);break;case 33:this.ch4_envInitVol=e>>4&15,this.ch4_envDir=e>>3&1,this.ch4_envPeriod=e&7,this.ch4_dacEnabled=(e&248)!==0,this.ch4_dacEnabled||(this.ch4_enabled=!1);break;case 34:this.ch4_clockShift=e>>4&15,this.ch4_widthMode=e>>3&1,this.ch4_divisor=e&7;break;case 35:this.ch4_lengthEnabled=!!(e&64),e&128&&this.triggerChannel4();break;case 36:this.nr50=e;break;case 37:this.nr51=e;break}}}triggerChannel1(){this.ch1_dacEnabled&&(this.ch1_enabled=!0),this.ch1_lengthCounter===0&&(this.ch1_lengthCounter=64),this.ch1_freqTimer=(2048-this.ch1_freq)*4,this.ch1_volume=this.ch1_envInitVol,this.ch1_envTimer=this.ch1_envPeriod||8,this.ch1_sweepShadow=this.ch1_freq,this.ch1_sweepTimer=this.ch1_sweepPeriod||8,this.ch1_sweepEnabled=this.ch1_sweepPeriod>0||this.ch1_sweepShift>0,this.ch1_sweepShift>0&&this.calcSweepFreq()}triggerChannel2(){this.ch2_dacEnabled&&(this.ch2_enabled=!0),this.ch2_lengthCounter===0&&(this.ch2_lengthCounter=64),this.ch2_freqTimer=(2048-this.ch2_freq)*4,this.ch2_volume=this.ch2_envInitVol,this.ch2_envTimer=this.ch2_envPeriod||8}triggerChannel3(){this.ch3_dacEnabled&&(this.ch3_enabled=!0),this.ch3_lengthCounter===0&&(this.ch3_lengthCounter=256),this.ch3_freqTimer=(2048-this.ch3_freq)*2,this.ch3_samplePos=0}triggerChannel4(){this.ch4_dacEnabled&&(this.ch4_enabled=!0),this.ch4_lengthCounter===0&&(this.ch4_lengthCounter=64);var t=this.ch4_divisor===0?8:this.ch4_divisor*16;this.ch4_freqTimer=t<>this.ch1_sweepShift;return this.ch1_sweepDir?t=this.ch1_sweepShadow-t:t=this.ch1_sweepShadow+t,t>2047&&(this.ch1_enabled=!1),t}clock(t){if(this.enabled)for(var e=0;e=8192&&(this.frameSeqTimer=0,this.clockFrameSequencer()),this.ch1_enabled&&(this.ch1_freqTimer--,this.ch1_freqTimer<=0&&(this.ch1_freqTimer=(2048-this.ch1_freq)*4,this.ch1_dutyPos=this.ch1_dutyPos+1&7)),this.ch2_enabled&&(this.ch2_freqTimer--,this.ch2_freqTimer<=0&&(this.ch2_freqTimer=(2048-this.ch2_freq)*4,this.ch2_dutyPos=this.ch2_dutyPos+1&7)),this.ch3_enabled&&(this.ch3_freqTimer--,this.ch3_freqTimer<=0)){this.ch3_freqTimer=(2048-this.ch3_freq)*2,this.ch3_samplePos=this.ch3_samplePos+1&31;var s=this.waveRAM[this.ch3_samplePos>>1];this.ch3_sampleBuffer=this.ch3_samplePos&1?s&15:s>>4}if(this.ch4_enabled&&(this.ch4_freqTimer--,this.ch4_freqTimer<=0)){var i=this.ch4_divisor===0?8:this.ch4_divisor*16;this.ch4_freqTimer=i<>1&1;this.ch4_lfsr=this.ch4_lfsr>>1|h<<14,this.ch4_widthMode&&(this.ch4_lfsr=this.ch4_lfsr&-65|h<<6)}}}clockFrameSequencer(){(this.frameSeqStep&1)===0&&this.clockLengthCounters(),(this.frameSeqStep===2||this.frameSeqStep===6)&&this.clockSweep(),this.frameSeqStep===7&&this.clockEnvelopes(),this.frameSeqStep=this.frameSeqStep+1&7}clockLengthCounters(){this.ch1_lengthEnabled&&this.ch1_lengthCounter>0&&(this.ch1_lengthCounter--,this.ch1_lengthCounter===0&&(this.ch1_enabled=!1)),this.ch2_lengthEnabled&&this.ch2_lengthCounter>0&&(this.ch2_lengthCounter--,this.ch2_lengthCounter===0&&(this.ch2_enabled=!1)),this.ch3_lengthEnabled&&this.ch3_lengthCounter>0&&(this.ch3_lengthCounter--,this.ch3_lengthCounter===0&&(this.ch3_enabled=!1)),this.ch4_lengthEnabled&&this.ch4_lengthCounter>0&&(this.ch4_lengthCounter--,this.ch4_lengthCounter===0&&(this.ch4_enabled=!1))}clockSweep(){if(this.ch1_sweepEnabled&&(this.ch1_sweepTimer--,this.ch1_sweepTimer<=0&&(this.ch1_sweepTimer=this.ch1_sweepPeriod||8,this.ch1_sweepPeriod>0))){var t=this.calcSweepFreq();t<=2047&&this.ch1_sweepShift>0&&(this.ch1_sweepShadow=t,this.ch1_freq=t,this.calcSweepFreq())}}clockEnvelopes(){this.ch1_envPeriod>0&&(this.ch1_envTimer--,this.ch1_envTimer<=0&&(this.ch1_envTimer=this.ch1_envPeriod||8,this.ch1_envDir&&this.ch1_volume<15?this.ch1_volume++:!this.ch1_envDir&&this.ch1_volume>0&&this.ch1_volume--)),this.ch2_envPeriod>0&&(this.ch2_envTimer--,this.ch2_envTimer<=0&&(this.ch2_envTimer=this.ch2_envPeriod||8,this.ch2_envDir&&this.ch2_volume<15?this.ch2_volume++:!this.ch2_envDir&&this.ch2_volume>0&&this.ch2_volume--)),this.ch4_envPeriod>0&&(this.ch4_envTimer--,this.ch4_envTimer<=0&&(this.ch4_envTimer=this.ch4_envPeriod||8,this.ch4_envDir&&this.ch4_volume<15?this.ch4_volume++:!this.ch4_envDir&&this.ch4_volume>0&&this.ch4_volume--))}getSample(){if(!this.enabled)return 0;var t=0,e=0,s=0,i=0;if(this.ch1_enabled&&this.ch1_dacEnabled&&(t=ee[this.ch1_duty][this.ch1_dutyPos]?this.ch1_volume:0),this.ch2_enabled&&this.ch2_dacEnabled&&(e=ee[this.ch2_duty][this.ch2_dutyPos]?this.ch2_volume:0),this.ch3_enabled&&this.ch3_dacEnabled){var h=this.ch3_sampleBuffer;switch(this.ch3_volume){case 0:h=0;break;case 1:break;case 2:h>>=1;break;case 3:h>>=2;break}s=h}this.ch4_enabled&&this.ch4_dacEnabled&&(i=this.ch4_lfsr&1?0:this.ch4_volume);var r=t/7.5-1,a=e/7.5-1,c=s/7.5-1,o=i/7.5-1,n=0,u=0;this.nr51&16&&(n+=r),this.nr51&32&&(n+=a),this.nr51&64&&(n+=c),this.nr51&128&&(n+=o),this.nr51&1&&(u+=r),this.nr51&2&&(u+=a),this.nr51&4&&(u+=c),this.nr51&8&&(u+=o);var w=(this.nr50>>4&7)+1,f=(this.nr50&7)+1;return n*=w/8,u*=f/8,(n+u)/8}saveState(){return{enabled:this.enabled,nr50:this.nr50,nr51:this.nr51,ch1_enabled:this.ch1_enabled,ch1_dacEnabled:this.ch1_dacEnabled,ch1_duty:this.ch1_duty,ch1_dutyPos:this.ch1_dutyPos,ch1_lengthCounter:this.ch1_lengthCounter,ch1_lengthEnabled:this.ch1_lengthEnabled,ch1_volume:this.ch1_volume,ch1_envInitVol:this.ch1_envInitVol,ch1_envDir:this.ch1_envDir,ch1_envPeriod:this.ch1_envPeriod,ch1_envTimer:this.ch1_envTimer,ch1_freq:this.ch1_freq,ch1_freqTimer:this.ch1_freqTimer,ch1_sweepPeriod:this.ch1_sweepPeriod,ch1_sweepDir:this.ch1_sweepDir,ch1_sweepShift:this.ch1_sweepShift,ch1_sweepTimer:this.ch1_sweepTimer,ch1_sweepEnabled:this.ch1_sweepEnabled,ch1_sweepShadow:this.ch1_sweepShadow,ch2_enabled:this.ch2_enabled,ch2_dacEnabled:this.ch2_dacEnabled,ch2_duty:this.ch2_duty,ch2_dutyPos:this.ch2_dutyPos,ch2_lengthCounter:this.ch2_lengthCounter,ch2_lengthEnabled:this.ch2_lengthEnabled,ch2_volume:this.ch2_volume,ch2_envInitVol:this.ch2_envInitVol,ch2_envDir:this.ch2_envDir,ch2_envPeriod:this.ch2_envPeriod,ch2_envTimer:this.ch2_envTimer,ch2_freq:this.ch2_freq,ch2_freqTimer:this.ch2_freqTimer,ch3_enabled:this.ch3_enabled,ch3_dacEnabled:this.ch3_dacEnabled,ch3_lengthCounter:this.ch3_lengthCounter,ch3_lengthEnabled:this.ch3_lengthEnabled,ch3_volume:this.ch3_volume,ch3_freq:this.ch3_freq,ch3_freqTimer:this.ch3_freqTimer,ch3_samplePos:this.ch3_samplePos,ch3_sampleBuffer:this.ch3_sampleBuffer,waveRAM:this.waveRAM.slice(0),ch4_enabled:this.ch4_enabled,ch4_dacEnabled:this.ch4_dacEnabled,ch4_lengthCounter:this.ch4_lengthCounter,ch4_lengthEnabled:this.ch4_lengthEnabled,ch4_volume:this.ch4_volume,ch4_envInitVol:this.ch4_envInitVol,ch4_envDir:this.ch4_envDir,ch4_envPeriod:this.ch4_envPeriod,ch4_envTimer:this.ch4_envTimer,ch4_clockShift:this.ch4_clockShift,ch4_widthMode:this.ch4_widthMode,ch4_divisor:this.ch4_divisor,ch4_freqTimer:this.ch4_freqTimer,ch4_lfsr:this.ch4_lfsr,frameSeqTimer:this.frameSeqTimer,frameSeqStep:this.frameSeqStep,regs:this.regs.slice(0)}}loadState(t){this.enabled=t.enabled,this.nr50=t.nr50,this.nr51=t.nr51,this.ch1_enabled=t.ch1_enabled,this.ch1_dacEnabled=t.ch1_dacEnabled,this.ch1_duty=t.ch1_duty,this.ch1_dutyPos=t.ch1_dutyPos,this.ch1_lengthCounter=t.ch1_lengthCounter,this.ch1_lengthEnabled=t.ch1_lengthEnabled,this.ch1_volume=t.ch1_volume,this.ch1_envInitVol=t.ch1_envInitVol,this.ch1_envDir=t.ch1_envDir,this.ch1_envPeriod=t.ch1_envPeriod,this.ch1_envTimer=t.ch1_envTimer,this.ch1_freq=t.ch1_freq,this.ch1_freqTimer=t.ch1_freqTimer,this.ch1_sweepPeriod=t.ch1_sweepPeriod,this.ch1_sweepDir=t.ch1_sweepDir,this.ch1_sweepShift=t.ch1_sweepShift,this.ch1_sweepTimer=t.ch1_sweepTimer,this.ch1_sweepEnabled=t.ch1_sweepEnabled,this.ch1_sweepShadow=t.ch1_sweepShadow,this.ch2_enabled=t.ch2_enabled,this.ch2_dacEnabled=t.ch2_dacEnabled,this.ch2_duty=t.ch2_duty,this.ch2_dutyPos=t.ch2_dutyPos,this.ch2_lengthCounter=t.ch2_lengthCounter,this.ch2_lengthEnabled=t.ch2_lengthEnabled,this.ch2_volume=t.ch2_volume,this.ch2_envInitVol=t.ch2_envInitVol,this.ch2_envDir=t.ch2_envDir,this.ch2_envPeriod=t.ch2_envPeriod,this.ch2_envTimer=t.ch2_envTimer,this.ch2_freq=t.ch2_freq,this.ch2_freqTimer=t.ch2_freqTimer,this.ch3_enabled=t.ch3_enabled,this.ch3_dacEnabled=t.ch3_dacEnabled,this.ch3_lengthCounter=t.ch3_lengthCounter,this.ch3_lengthEnabled=t.ch3_lengthEnabled,this.ch3_volume=t.ch3_volume,this.ch3_freq=t.ch3_freq,this.ch3_freqTimer=t.ch3_freqTimer,this.ch3_samplePos=t.ch3_samplePos,this.ch3_sampleBuffer=t.ch3_sampleBuffer,t.waveRAM&&this.waveRAM.set(t.waveRAM),this.ch4_enabled=t.ch4_enabled,this.ch4_dacEnabled=t.ch4_dacEnabled,this.ch4_lengthCounter=t.ch4_lengthCounter,this.ch4_lengthEnabled=t.ch4_lengthEnabled,this.ch4_volume=t.ch4_volume,this.ch4_envInitVol=t.ch4_envInitVol,this.ch4_envDir=t.ch4_envDir,this.ch4_envPeriod=t.ch4_envPeriod,this.ch4_envTimer=t.ch4_envTimer,this.ch4_clockShift=t.ch4_clockShift,this.ch4_widthMode=t.ch4_widthMode,this.ch4_divisor=t.ch4_divisor,this.ch4_freqTimer=t.ch4_freqTimer,this.ch4_lfsr=t.ch4_lfsr,this.frameSeqTimer=t.frameSeqTimer,this.frameSeqStep=t.frameSeqStep,t.regs&&this.regs.set(t.regs)}},T=class extends K{constructor(){super();this.cpuFrequency=4194304;this.canvasWidth=160;this.numVisibleScanlines=144;this.numTotalScanlines=154;this.cpuCyclesPerLine=456;this.sampleRate=9240*4;this.overscan=!1;this.defaultROMSize=32768;this.aspectRatio=10/9;this.cpu=new D;this.ram=new Uint8Array(8192);this.vram=new Uint8Array(8192);this.oam=new Uint8Array(160);this.hram=new Uint8Array(128);this.extram=new Uint8Array(8192);this.cgbMode=!1;this.forceColor=!1;this.vramBank1=new Uint8Array(8192);this.vramBankSelect=0;this.wramBanks=new Uint8Array(28672);this.wramBankSelect=1;this.bgCRAM=new Uint8Array(64);this.objCRAM=new Uint8Array(64);this.bgCRAMIndex=0;this.bgCRAMAutoInc=!1;this.objCRAMIndex=0;this.objCRAMAutoInc=!1;this.doubleSpeed=!1;this.speedSwitchArmed=!1;this.hdmaSrc=0;this.hdmaDst=0;this.hdmaLength=255;this.hdmaActive=!1;this.hdmaHblank=!1;this.joyp=207;this.sb=0;this.sc=0;this.divCounter=0;this.tima=0;this.tma=0;this.tac=0;this.iflag=0;this.ie=0;this.lcdc=145;this.stat=0;this.scy=0;this.scx=0;this.ly=0;this.lyc=0;this.dma=0;this.bgp=252;this.obp0=255;this.obp1=255;this.wy=0;this.wx=0;this.apu=new G;this.apuCycleAccum=0;this.ppuMode=0;this.ppuDot=0;this.windowLine=0;this.mbcType=0;this.romBank=1;this.ramBank=0;this.ramEnabled=!1;this.mbcMode=0;this.romBankMask=31;this.hasRTC=!1;this.rtcRegisterSelect=-1;this.rtcLatchLast=0;this.rtcSec=0;this.rtcMin=0;this.rtcHour=0;this.rtcDay=0;this.rtcHalt=!1;this.rtcCarry=!1;this.rtcLatched=new Uint8Array(5);this.rtcLastSync=0;this.read=j([[0,16383,16383,e=>this.rom?this.rom[e]:255],[16384,32767,16383,e=>this.readBankedROM(e)],[32768,40959,8191,e=>this.readVRAM(e)],[40960,49151,8191,e=>this.readExtRAM(e)],[49152,53247,4095,e=>this.ram[e]],[53248,57343,4095,e=>this.readWRAMBank(e)],[57344,61439,4095,e=>this.ram[e]],[61440,65023,4095,e=>this.readWRAMBank(e)],[65024,65183,255,e=>this.oam[e]],[65184,65279,255,e=>255],[65280,65407,127,e=>this.readIO(e)],[65408,65534,127,e=>this.hram[e]],[65535,65535,0,e=>this.ie]]);this.write=j([[0,8191,8191,(e,s)=>{this.writeMBC(e,s)}],[8192,16383,8191,(e,s)=>{this.writeMBC(8192+e,s)}],[16384,24575,8191,(e,s)=>{this.writeMBC(16384+e,s)}],[24576,32767,8191,(e,s)=>{this.writeMBC(24576+e,s)}],[32768,40959,8191,(e,s)=>{this.writeVRAM(e,s)}],[40960,49151,8191,(e,s)=>{this.writeExtRAM(e,s)}],[49152,53247,4095,(e,s)=>{this.ram[e]=s}],[53248,57343,4095,(e,s)=>{this.writeWRAMBank(e,s)}],[57344,61439,4095,(e,s)=>{this.ram[e]=s}],[61440,65023,4095,(e,s)=>{this.writeWRAMBank(e,s)}],[65024,65183,255,(e,s)=>{this.oam[e]=s}],[65184,65279,255,(e,s)=>{}],[65280,65407,127,(e,s)=>{this.writeIO(e,s)}],[65408,65534,127,(e,s)=>{this.hram[e]=s}],[65535,65535,0,(e,s)=>{this.ie=s}]]);this.timerSubCycles=0;this.bgPriorityLine=new Uint8Array(160);this.bgAttrPriLine=new Uint8Array(160);this.handler=z(this.inputs,this.getKeyboardMap()),this.connectCPUMemoryBus(this)}getKeyboardMap(){return re}now(){return Date.now()}syncRTC(){if(!this.hasRTC||this.rtcHalt){this.rtcLastSync=this.now();return}var e=Math.floor((this.now()-this.rtcLastSync)/1e3);if(!(e<=0)){this.rtcLastSync+=e*1e3;var s=this.rtcSec+e;this.rtcSec=s%60,s=this.rtcMin+Math.floor(s/60),this.rtcMin=s%60,s=this.rtcHour+Math.floor(s/60),this.rtcHour=s%24;var i=this.rtcDay+Math.floor(s/24);i>511&&(this.rtcCarry=!0,i&=511),this.rtcDay=i}}latchRTC(){this.syncRTC(),this.rtcLatched[0]=this.rtcSec,this.rtcLatched[1]=this.rtcMin,this.rtcLatched[2]=this.rtcHour,this.rtcLatched[3]=this.rtcDay&255,this.rtcLatched[4]=this.rtcDay>>8&1|(this.rtcHalt?64:0)|(this.rtcCarry?128:0)}resetRTC(){var e=new Date(this.now());this.rtcSec=e.getSeconds(),this.rtcMin=e.getMinutes(),this.rtcHour=e.getHours(),this.rtcDay=0,this.rtcHalt=!1,this.rtcCarry=!1,this.rtcRegisterSelect=-1,this.rtcLatchLast=0,this.rtcLastSync=this.now(),this.latchRTC()}readVRAM(e){return this.cgbMode&&this.vramBankSelect?this.vramBank1[e]:this.vram[e]}writeVRAM(e,s){this.cgbMode&&this.vramBankSelect?this.vramBank1[e]=s:this.vram[e]=s}readWRAMBank(e){return!this.cgbMode||this.wramBankSelect<=1?this.ram[4096+e]:this.wramBanks[(this.wramBankSelect-1)*4096+e]}writeWRAMBank(e,s){!this.cgbMode||this.wramBankSelect<=1?this.ram[4096+e]=s:this.wramBanks[(this.wramBankSelect-1)*4096+e]=s}readBankedROM(e){if(!this.rom)return 255;var s=this.romBank;this.mbcType===0&&(s=1);var i=e+s*16384;return i=8&&s<=12?this.rtcRegisterSelect=s:(this.rtcRegisterSelect=-1,this.ramBank=s&3):this.mbcMode===0?(this.romBank=this.romBank&31|(s&3)<<5,this.romBank&=this.romBankMask):this.ramBank=s&3:(this.mbcType===1?this.mbcMode=s&1:this.mbcType===3&&this.rtcLatchLast===0&&s===1&&this.latchRTC(),this.rtcLatchLast=s)}}writeMBC5(e,s){e<8192?this.ramEnabled=(s&15)===10:e<12288?(this.romBank=this.romBank&256|s,this.romBank&=this.romBankMask):e<16384?(this.romBank=this.romBank&255|(s&1)<<8,this.romBank&=this.romBankMask):e<24576&&(this.ramBank=s&15)}readExtRAM(e){if(this.hasRTC&&this.rtcRegisterSelect>=0)return this.syncRTC(),this.rtcLatched[this.rtcRegisterSelect-8];if(!this.ramEnabled&&this.mbcType>0)return 255;var s=e+this.ramBank*8192;return s=0)&&!(!this.ramEnabled&&this.mbcType>0)){var i=e+this.ramBank*8192;i>8&255;case 5:return this.tima;case 6:return this.tma;case 7:return this.tac|248;case 15:return this.iflag|224;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:return this.apu.readRegister(e);case 64:return this.lcdc;case 65:return this.stat|128;case 66:return this.scy;case 67:return this.scx;case 68:return this.ly;case 69:return this.lyc;case 70:return this.dma;case 71:return this.bgp;case 72:return this.obp0;case 73:return this.obp1;case 74:return this.wy;case 75:return this.wx;case 77:return this.cgbMode?(this.doubleSpeed?128:0)|(this.speedSwitchArmed?1:0)|126:255;case 79:return this.cgbMode?this.vramBankSelect|254:255;case 85:return this.cgbMode?this.hdmaLength:255;case 104:return this.cgbMode?this.bgCRAMIndex|(this.bgCRAMAutoInc?128:0):255;case 105:return this.cgbMode?this.bgCRAM[this.bgCRAMIndex&63]:255;case 106:return this.cgbMode?this.objCRAMIndex|(this.objCRAMAutoInc?128:0):255;case 107:return this.cgbMode?this.objCRAM[this.objCRAMIndex&63]:255;case 112:return this.cgbMode?this.wramBankSelect:255;default:return 255}}writeIO(e,s){switch(e){case 0:this.joyp=s;break;case 1:this.sb=s;break;case 2:this.sc=s;break;case 4:this.divCounter=0;break;case 5:this.tima=s;break;case 6:this.tma=s;break;case 7:this.tac=s&7;break;case 15:this.iflag=s&31;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:this.apu.writeRegister(e,s);break;case 64:this.lcdc=s,s&128||(this.ly=0,this.ppuMode=0,this.ppuDot=0,this.stat=this.stat&252);break;case 65:this.stat=this.stat&7|s&120;break;case 66:this.scy=s;break;case 67:this.scx=s;break;case 68:break;case 69:this.lyc=s;break;case 70:this.dmaTransfer(s);break;case 71:this.bgp=s;break;case 72:this.obp0=s;break;case 73:this.obp1=s;break;case 74:this.wy=s;break;case 75:this.wx=s;break;case 77:this.cgbMode&&(this.speedSwitchArmed=!!(s&1));break;case 79:this.cgbMode&&(this.vramBankSelect=s&1);break;case 81:this.cgbMode&&(this.hdmaSrc=this.hdmaSrc&255|s<<8);break;case 82:this.cgbMode&&(this.hdmaSrc=this.hdmaSrc&65280|s&240);break;case 83:this.cgbMode&&(this.hdmaDst=this.hdmaDst&255|(s&31)<<8);break;case 84:this.cgbMode&&(this.hdmaDst=this.hdmaDst&65280|s&240);break;case 85:this.cgbMode&&this.startHDMA(s);break;case 104:this.cgbMode&&(this.bgCRAMIndex=s&63,this.bgCRAMAutoInc=!!(s&128));break;case 105:this.cgbMode&&(this.bgCRAM[this.bgCRAMIndex&63]=s,this.bgCRAMAutoInc&&(this.bgCRAMIndex=this.bgCRAMIndex+1&63));break;case 106:this.cgbMode&&(this.objCRAMIndex=s&63,this.objCRAMAutoInc=!!(s&128));break;case 107:this.cgbMode&&(this.objCRAM[this.objCRAMIndex&63]=s,this.objCRAMAutoInc&&(this.objCRAMIndex=this.objCRAMIndex+1&63));break;case 112:this.cgbMode&&(this.wramBankSelect=s&7,this.wramBankSelect===0&&(this.wramBankSelect=1));break}}readJoypad(){var e=this.joyp|15;return this.joyp&16||(e&=~(this.inputs[0]&15)),this.joyp&32||(e&=~(this.inputs[0]>>4&15)),e|192}dmaTransfer(e){this.dma=e;for(var s=e<<8,i=0;i<160;i++)this.oam[i]=this.read(s+i)}startHDMA(e){if(this.hdmaActive&&!(e&128)){this.hdmaActive=!1,this.hdmaLength=e|128;return}var s=((e&127)+1)*16;e&128?(this.hdmaActive=!0,this.hdmaHblank=!0,this.hdmaLength=e&127):(this.performHDMABlock(s),this.hdmaLength=255)}performHDMABlock(e){for(var s=this.hdmaSrc&65520,i=this.hdmaDst&8176,h=0;h255&&(this.tima=this.tma,this.iflag|=4)}}syncInterrupts(){var e=this.iflag&this.ie&31;this.cpu.interruptFlags=e}syncInterruptsBack(){var e=this.iflag&this.ie&31&~this.cpu.interruptFlags;this.iflag&=~e}advanceCPU(){this.syncInterrupts();var e=this.cpu.interruptFlags,s=this.cpu,i=1,h=!1;this.cpu.isStable()&&(this.probe.logExecute(this.cpu.getPC(),this.cpu.getSP()),this.cgbMode&&this.speedSwitchArmed&&!this.cpu.halted&&this.read(this.cpu.getPC())===16&&(h=!0)),i=s.advanceInsn(1);var r=i*4;this.probe.logClocks(r);var a=this.doubleSpeed?i*2:r;if(h&&this.performSpeedSwitch(),this.cpu.interruptFlags!==e&&(this.probe.logInterrupt(e&~this.cpu.interruptFlags),this.syncInterruptsBack()),this.updateTimerCycles(a),this.updatePPUMode(a),this.apu.clock(a),this.audio){this.apuCycleAccum+=a;for(var c=114;this.apuCycleAccum>=c;)this.apuCycleAccum-=c,this.audio.feedSample(this.apu.getSample(),1)}return a}updatePPUMode(e){if(!(this.scanline>=144)){this.ppuDot+=e;var s=this.ppuMode;this.ppuDot<80?this.ppuMode=2:this.ppuDot<252?this.ppuMode=3:this.ppuMode=0,this.ppuMode!==s&&(this.stat=this.stat&252|this.ppuMode&3,this.ppuMode===0&&this.stat&8?(this.iflag|=2,this.cgbMode&&this.tickHDMA()):this.ppuMode===2&&this.stat&32&&(this.iflag|=2))}}updateTimerCycles(e){if(this.divCounter=this.divCounter+e&65535,!!(this.tac&4)){var s;switch(this.tac&3){case 0:s=1024;break;case 1:s=16;break;case 2:s=64;break;case 3:s=256;break;default:s=1024}for(this.timerSubCycles+=e;this.timerSubCycles>=s;)this.timerSubCycles-=s,this.tima=this.tima+1&255,this.tima===0&&(this.tima=this.tma,this.iflag|=4)}}startScanline(){this.ly=this.scanline,this.ppuDot=0,this.scanline<144?this.ppuMode=2:(this.ppuMode=1,this.scanline===144&&(this.iflag|=1,this.stat&16&&(this.iflag|=2))),this.ly===this.lyc?(this.stat|=4,this.stat&64&&(this.iflag|=2)):this.stat&=-5,this.stat=this.stat&252|this.ppuMode&3}drawScanline(){if(this.lcdc&128&&!(this.scanline>=144)){var e=this.scanline*160;if(this.lcdc&1||this.cgbMode)this.drawBGLine(e);else for(var s=0;s<160;s++)this.pixels[e+s]=L[0],this.bgPriorityLine[s]=0,this.bgAttrPriLine[s]=0;this.lcdc&32&&this.scanline>=this.wy&&this.drawWindowLine(e),this.lcdc&2&&this.drawSpriteLine(e)}}getPaletteColor(e,s){var i=e>>s*2&3;return L[i]}getCGBColor(e,s,i){var h=s*8+i*2;return he(e[h],e[h+1])}drawBGLine(e){for(var s=this.lcdc&8?7168:6144,i=!(this.lcdc&16),h=this.scanline+this.scy&255,r=h>>3&31,a=h&7,c=0;c<160;c++){var o=c+this.scx&255,n=o>>3&31,u=7-(o&7),w=s+r*32+n,f=this.vram[w],d;if(i?d=4096+(f<<24>>24)*16:d=f*16,this.cgbMode){var v=this.vramBank1[w],p=v&7,C=v&8?1:0,S=!!(v&32),y=!!(v&64),P=!!(v&128),B=y?7-a:a,R=S?o&7:u,_=C?this.vramBank1:this.vram,b=_[d+B*2],A=_[d+B*2+1],F=(A>>R&1)<<1|b>>R&1;this.bgPriorityLine[c]=F,this.bgAttrPriLine[c]=P?1:0,this.pixels[e+c]=this.getCGBColor(this.bgCRAM,p,F)}else{var b=this.vram[d+a*2],A=this.vram[d+a*2+1],F=(A>>u&1)<<1|b>>u&1;this.bgPriorityLine[c]=F,this.bgAttrPriLine[c]=0,this.pixels[e+c]=this.getPaletteColor(this.bgp,F)}}}drawWindowLine(e){var s=this.wx-7;if(!(s>=160)){for(var i=this.lcdc&64?7168:6144,h=!(this.lcdc&16),r=this.windowLine,a=r>>3&31,c=r&7,o=!1,n=Math.max(0,s);n<160;n++){var u=n-s,w=u>>3&31,f=7-(u&7),d=i+a*32+w,v=this.vram[d],p;if(h?p=4096+(v<<24>>24)*16:p=v*16,this.cgbMode){var C=this.vramBank1[d],S=C&7,y=C&8?1:0,P=!!(C&32),B=!!(C&64),R=!!(C&128),_=B?7-c:c,b=P?u&7:f,A=y?this.vramBank1:this.vram,F=A[p+_*2],E=A[p+_*2+1],k=(E>>b&1)<<1|F>>b&1;this.bgPriorityLine[n]=k,this.bgAttrPriLine[n]=R?1:0,this.pixels[e+n]=this.getCGBColor(this.bgCRAM,S,k)}else{var F=this.vram[p+c*2],E=this.vram[p+c*2+1],k=(E>>f&1)<<1|F>>f&1;this.bgPriorityLine[n]=k,this.bgAttrPriLine[n]=0,this.pixels[e+n]=this.getPaletteColor(this.bgp,k)}o=!0}o&&this.windowLine++}}drawSpriteLine(e){for(var s=this.lcdc&4?16:8,i=0,h=[],r=0;r<40&&i<10;r++){var a=this.oam[r*4]-16,c=this.oam[r*4+1]-8;this.scanline>=a&&this.scanlineH.x!==I.x?H.x-I.x:H.index-I.index);for(var o=h.length-1;o>=0;o--){var n=h[o].index,u=this.oam[n*4]-16,w=this.oam[n*4+1]-8,f=this.oam[n*4+2],d=this.oam[n*4+3],v=!!(d&32),p=!!(d&64),C=!!(d&128);s===16&&(f&=254);var S=this.scanline-u;p&&(S=s-1-S);for(var y=f*16+S*2,P=this.cgbMode&&d&8?this.vramBank1:this.vram,B=P[y],R=P[y+1],_=0;_<8;_++){var b=w+_;if(!(b<0||b>=160)){var A=v?_:7-_,F=(R>>A&1)<<1|B>>A&1;if(F!==0)if(this.cgbMode){var E=this.lcdc&1;if(E&&(this.bgAttrPriLine[b]&&this.bgPriorityLine[b]!==0||C&&this.bgPriorityLine[b]!==0))continue;var k=d&7;this.pixels[e+b]=this.getCGBColor(this.objCRAM,k,F)}else{if(C){var se=this.pixels[e+b];if(se!==L[this.bgp&3])continue}var ie=d&16?this.obp1:this.obp0;this.pixels[e+b]=this.getPaletteColor(ie,F)}}}}}loadROM(e,s){if(e.length>327){var i=e[327];switch(i){case 0:this.mbcType=0;break;case 1:case 2:case 3:this.mbcType=1;break;case 15:case 16:case 17:case 18:case 19:this.mbcType=3;break;case 25:case 26:case 27:case 28:case 29:case 30:this.mbcType=5;break;default:console.log(`Unhandled cartridge type 0x${i.toString(16)} @ 0x147, treating as MBC5`),this.mbcType=5;break}this.hasRTC=i===15||i===16}else throw new O("ROM not long enough for header");if(e.length>323){var h=e[323];this.cgbMode=this.forceColor||h===128||h===192}this.rom=new Uint8Array(Math.max(e.length,32768)),this.rom.set(e);var r=Math.max(2,this.rom.length>>14);switch(this.romBankMask=r-1,e[329]){case 0:break;case 1:this.extram=new Uint8Array(2048);break;case 2:this.extram=new Uint8Array(8192);break;case 3:this.extram=new Uint8Array(32768);break;case 4:this.extram=new Uint8Array(131072);break;case 5:this.extram=new Uint8Array(65536);break;default:console.log(`Invalid RAM size code @ 0x149: ${e[329]}`);break}this.reset()}reset(){super.reset(),this.ram.fill(0),this.vram.fill(0),this.oam.fill(0),this.hram.fill(0),this.iflag=0,this.ie=0,this.lcdc=145,this.stat=0,this.scy=0,this.scx=0,this.ly=0,this.lyc=0,this.bgp=252,this.obp0=255,this.obp1=255,this.wy=0,this.wx=0,this.joyp=207,this.divCounter=0,this.tima=0,this.tma=0,this.tac=0,this.ppuMode=0,this.ppuDot=0,this.windowLine=0,this.romBank=1,this.ramBank=0,this.ramEnabled=!1,this.mbcMode=0,this.timerSubCycles=0,this.apuCycleAccum=0,this.apu.reset(),this.vramBank1.fill(0),this.vramBankSelect=0,this.wramBanks.fill(0),this.wramBankSelect=1;for(var e=0;e<8;e++)this.bgCRAM.set(X,e*8),this.objCRAM.set(X,e*8);this.bgCRAMIndex=0,this.bgCRAMAutoInc=!1,this.objCRAMIndex=0,this.objCRAMAutoInc=!1,this.doubleSpeed=!1,this.speedSwitchArmed=!1,this.hdmaSrc=0,this.hdmaDst=0,this.hdmaLength=255,this.hdmaActive=!1,this.hdmaHblank=!1,this.cgbMode&&(this.cpu.A=17),this.hasRTC?this.resetRTC():(this.rtcRegisterSelect=-1,this.rtcLatchLast=0)}preFrame(){this.windowLine=0}readVRAMAddress(e){return this.cgbMode&&e>=8192?this.vramBank1[e&8191]:this.vram[e&8191]}saveState(){var e=super.saveState();return e.vram=this.vram.slice(0),e.oam=this.oam.slice(0),e.hram=this.hram.slice(0),e.extram=this.extram.slice(0),e.io={joyp:this.joyp,sb:this.sb,sc:this.sc,divCounter:this.divCounter,tima:this.tima,tma:this.tma,tac:this.tac,iflag:this.iflag,ie:this.ie,lcdc:this.lcdc,stat:this.stat,scy:this.scy,scx:this.scx,ly:this.ly,lyc:this.lyc,dma:this.dma,bgp:this.bgp,obp0:this.obp0,obp1:this.obp1,wy:this.wy,wx:this.wx,ppuMode:this.ppuMode,ppuDot:this.ppuDot,windowLine:this.windowLine,romBank:this.romBank,ramBank:this.ramBank,ramEnabled:this.ramEnabled,mbcMode:this.mbcMode,timerSubCycles:this.timerSubCycles},e.apu=this.apu.saveState(),e.apuCycleAccum=this.apuCycleAccum,e.rtc={hasRTC:this.hasRTC,sec:this.rtcSec,min:this.rtcMin,hour:this.rtcHour,day:this.rtcDay,halt:this.rtcHalt,carry:this.rtcCarry,registerSelect:this.rtcRegisterSelect,latchLast:this.rtcLatchLast,latched:this.rtcLatched.slice(0),lastSync:this.rtcLastSync},this.cgbMode&&(e.cgb={vramBank1:this.vramBank1.slice(0),vramBankSelect:this.vramBankSelect,wramBanks:this.wramBanks.slice(0),wramBankSelect:this.wramBankSelect,bgCRAM:this.bgCRAM.slice(0),objCRAM:this.objCRAM.slice(0),bgCRAMIndex:this.bgCRAMIndex,bgCRAMAutoInc:this.bgCRAMAutoInc,objCRAMIndex:this.objCRAMIndex,objCRAMAutoInc:this.objCRAMAutoInc,doubleSpeed:this.doubleSpeed,speedSwitchArmed:this.speedSwitchArmed,hdmaSrc:this.hdmaSrc,hdmaDst:this.hdmaDst,hdmaLength:this.hdmaLength,hdmaActive:this.hdmaActive,hdmaHblank:this.hdmaHblank}),e}loadState(e){super.loadState(e),this.vram.set(e.vram),this.oam.set(e.oam),this.hram.set(e.hram),e.extram&&this.extram.set(e.extram);var s=e.io;if(this.joyp=s.joyp,this.sb=s.sb,this.sc=s.sc,this.divCounter=s.divCounter,this.tima=s.tima,this.tma=s.tma,this.tac=s.tac,this.iflag=s.iflag,this.ie=s.ie,this.lcdc=s.lcdc,this.stat=s.stat,this.scy=s.scy,this.scx=s.scx,this.ly=s.ly,this.lyc=s.lyc,this.dma=s.dma,this.bgp=s.bgp,this.obp0=s.obp0,this.obp1=s.obp1,this.wy=s.wy,this.wx=s.wx,this.ppuMode=s.ppuMode,this.ppuDot=s.ppuDot,this.windowLine=s.windowLine,this.romBank=s.romBank,this.ramBank=s.ramBank,this.ramEnabled=s.ramEnabled,this.mbcMode=s.mbcMode,this.timerSubCycles=s.timerSubCycles,e.apu&&this.apu.loadState(e.apu),this.apuCycleAccum=e.apuCycleAccum||0,e.rtc){var i=e.rtc;this.hasRTC=i.hasRTC,this.rtcSec=i.sec,this.rtcMin=i.min,this.rtcHour=i.hour,this.rtcDay=i.day,this.rtcHalt=i.halt,this.rtcCarry=i.carry,this.rtcRegisterSelect=i.registerSelect,this.rtcLatchLast=i.latchLast,i.latched&&this.rtcLatched.set(i.latched),this.rtcLastSync=i.lastSync}if(e.cgb){var h=e.cgb;this.vramBank1.set(h.vramBank1),this.vramBankSelect=h.vramBankSelect,this.wramBanks.set(h.wramBanks),this.wramBankSelect=h.wramBankSelect,this.bgCRAM.set(h.bgCRAM),this.objCRAM.set(h.objCRAM),this.bgCRAMIndex=h.bgCRAMIndex,this.bgCRAMAutoInc=h.bgCRAMAutoInc,this.objCRAMIndex=h.objCRAMIndex,this.objCRAMAutoInc=h.objCRAMAutoInc,this.doubleSpeed=h.doubleSpeed,this.speedSwitchArmed=h.speedSwitchArmed,this.hdmaSrc=h.hdmaSrc,this.hdmaDst=h.hdmaDst,this.hdmaLength=h.hdmaLength,this.hdmaActive=h.hdmaActive,this.hdmaHblank=h.hdmaHblank}}getDebugCategories(){return["CPU","Stack","PPU"]}getDebugInfo(e,s){if(e==="PPU"){var i="LCDC "+l(this.lcdc,2)+" STAT "+l(this.stat,2)+` LY `+l(this.ly,2)+" LYC "+l(this.lyc,2)+` SCX `+l(this.scx,2)+" SCY "+l(this.scy,2)+` WX `+l(this.wx,2)+" WY "+l(this.wy,2)+` @@ -14,4 +14,4 @@ SPD `+(this.doubleSpeed?"2x":"1x")+` `),this.hasRTC&&(this.syncRTC(),i+=`--- RTC --- `+l(this.rtcHour,2)+":"+l(this.rtcMin,2)+":"+l(this.rtcSec,2)+" day "+this.rtcDay+(this.rtcHalt?" HALT":"")+(this.rtcCarry?" CARRY":"")+` `),i}}};var te=[{id:"hello.c",name:"Hello World",category:"C"},{id:"typewriter.c",name:"Typewriter Text"},{id:"testdrawing.c",name:"Drawing Routines"},{id:"joypad.c",name:"Joypad Input"},{id:"testphys.c",name:"Sprite Movement"},{id:"sprites.c",name:"Multiple Sprites"},{id:"metasprites.c",name:"Metasprites"},{id:"paint.c",name:"Paint Program"},{id:"scroll.c",name:"Scrolling"},{id:"large_map.c",name:"Large Scrolling Map"},{id:"window.c",name:"Window Status Bar"},{id:"galaxy.c",name:"Window + Sprites"},{id:"raster.c",name:"STAT/LYC Raster Effects"},{id:"interrupts.c",name:"VBlank + Timer Interrupts"},{id:"vram.c",name:"VRAM/OAM Access"},{id:"gbc.c",name:"Game Boy Color"},{id:"gbdecompress.c",name:"Decompression"},{id:"music.c",name:"Music Player"},{id:"clock.c",name:"MBC3 Real-Time Clock"},{id:"banking.c",name:"ROM Bank Switching"},{id:"siegegame.c",name:"Siege Game",category:"Games"},{id:"climber.c",name:"Climber Game"},{id:"chase.c",name:"Shiru's Chase Game"},{id:"pakupaku.c",name:"Paku Paku"},{id:"hello.sgb",name:"Hello World (ASM)",category:"Assembler"},{id:"main.wiz",name:"Snake Game (Wiz)"}],q=class extends ${constructor(){super(...arguments);this.getToolForFilename=Z;this.lcdPersistence=.5}newMachine(){return new T}getPresets(){return te}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}readAddress(e){return this.machine.read(e)}readVRAMAddress(e){return this.machine.readVRAMAddress(e)}async start(){var e;if(await super.start(),typeof HTMLCanvasElement!="undefined"&&((e=this.video)==null?void 0:e.canvas)instanceof HTMLCanvasElement){let s=this.video.updateFrame.bind(this.video);this.video.updateFrame=(...i)=>{this.applyLCDPersistence(),s(...i)}}}applyLCDPersistence(){if(!(this.lcdPersistence>0)||this.machine.cgbMode){this.lcdPrevFrame=null;return}let e=this.video.getFrameData(),s=this.lcdPrevFrame;if(!s||s.length!=e.length){this.lcdPrevFrame=new Uint32Array(e);return}let i=Math.round(this.lcdPersistence*256),h=256-i;for(let r=0;r>8,n=(c>>8&255)*i+(a>>8&255)*h>>8,u=(c>>16&255)*i+(a>>16&255)*h>>8;s[r]=e[r]=4278190080|u<<16|n<<8|o}}getOriginPC(){return 256}getROMExtension(){return".gb"}getMemoryMap(){return{main:[{name:"ROM Bank 0",start:0,size:16384,type:"rom"},{name:"ROM Bank 1+",start:16384,size:16384,type:"rom"},{name:"Video RAM",start:32768,size:8192,type:"ram"},{name:"External RAM",start:40960,size:8192,type:"ram"},{name:"Work RAM",start:49152,size:8192,type:"ram"},{name:"OAM",start:65024,size:160,type:"ram"},{name:"I/O Registers",start:65280,size:128,type:"io"},{name:"High RAM",start:65408,size:127,type:"ram"}]}}getDebugCategories(){return U(this.machine)?this.machine.getDebugCategories():["CPU","Stack","PPU"]}getDebugInfo(e,s){switch(e){case"CPU":return Y(s.c);case"Stack":{var i=s.c.SP-1&65535,h=i&65280,r=h+255;return i==0&&(i=65536),J(this,[],h,r,i,205)}default:return U(this.machine)&&this.machine.getDebugInfo(e,s)}}disassemble(e,s){return Q(e,s(e),s(e+1),s(e+2))}showHelp(){return"https://8bitworkshop.com/docs/platforms/gameboy/"}},V=class extends q{constructor(){super(...arguments);this.lcdPersistence=0}newMachine(){var e=new T;return e}getPresets(){return te}getROMExtension(){return".gbc"}getMemoryMap(){return{main:[{name:"ROM Bank 0",start:0,size:16384,type:"rom"},{name:"ROM Bank 1+",start:16384,size:16384,type:"rom"},{name:"Video RAM B0",start:32768,size:8192,type:"ram"},{name:"External RAM",start:40960,size:8192,type:"ram"},{name:"Work RAM 0",start:49152,size:4096,type:"ram"},{name:"Work RAM 1-7",start:53248,size:4096,type:"ram"},{name:"OAM",start:65024,size:160,type:"ram"},{name:"I/O Registers",start:65280,size:128,type:"io"},{name:"High RAM",start:65408,size:127,type:"ram"}]}}showHelp(){return"https://8bitworkshop.com/docs/platforms/gameboy/"}};W.gb=q;W["gb.color"]=V; -//# sourceMappingURL=gb-PP6J5B4N.js.map +//# sourceMappingURL=gb-DUD4LPKZ.js.map diff --git a/gen/gb-PP6J5B4N.js.map b/gen/gb-DUD4LPKZ.js.map similarity index 100% rename from gen/gb-PP6J5B4N.js.map rename to gen/gb-DUD4LPKZ.js.map diff --git a/gen/kim1-B54DQ2TK.js b/gen/kim1-AEIR7MHF.js similarity index 96% rename from gen/kim1-B54DQ2TK.js rename to gen/kim1-AEIR7MHF.js index eb261dc5..783e2d5f 100644 --- a/gen/kim1-B54DQ2TK.js +++ b/gen/kim1-AEIR7MHF.js @@ -1,2 +1,2 @@ -import{G as y,m as l,p as V}from"./chunk-QYEDG265.js";import"./chunk-UACHXWHT.js";import{L as p,Z as e,ca as F,da as f,g as h,l as I,m as x}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var B=[e.VK_DELETE,e.VK_ENTER,e.VK_RIGHT,e.VK_F7,e.VK_F1,e.VK_F3,e.VK_F5,e.VK_DOWN,e.VK_3,e.VK_W,e.VK_A,e.VK_4,e.VK_Z,e.VK_S,e.VK_E,e.VK_SHIFT,e.VK_5,e.VK_R,e.VK_D,e.VK_6,e.VK_C,e.VK_F,e.VK_T,e.VK_X,e.VK_7,e.VK_Y,e.VK_G,e.VK_8,e.VK_B,e.VK_H,e.VK_U,e.VK_V,e.VK_9,e.VK_I,e.VK_J,e.VK_0,e.VK_M,e.VK_K,e.VK_O,e.VK_N,null,e.VK_P,e.VK_L,e.VK_MINUS,e.VK_PERIOD,null,null,e.VK_COMMA,null,null,e.VK_SEMICOLON,e.VK_HOME,e.VK_SHIFT,e.VK_EQUALS,e.VK_TILDE,e.VK_SLASH,e.VK_1,e.VK_LEFT,e.VK_CONTROL,e.VK_2,e.VK_SPACE,e.VK_ALT,e.VK_Q,null],A=0,a=class{constructor(){this.regs=new Uint8Array(16);this.ina=0;this.inb=0}read(o){return this.regs[o]}write(o,r){this.regs[o]=r}input_a(){return this.ina&~this.regs[1]}input_b(){return this.inb&~this.regs[1]}output_a(){return this.regs[0]^255|this.regs[1]}output_b(){return this.regs[2]^255|this.regs[3]}},g=class extends V{constructor(){super();this.cpuFrequency=1e6;this.defaultROMSize=4096;this.cpu=new l;this.ram=new Uint8Array(6144);this.rriot1=new a;this.rriot2=new a;this.digits=[];this.read=f([[5888,5951,15,r=>this.readIO_1(r)],[5952,6015,15,r=>this.readIO_2(r)],[0,6143,8191,r=>this.ram[r]],[6144,8191,2047,r=>this.bios[r]]],{gmask:8191});this.write=f([[5888,5951,15,(r,t)=>this.writeIO_1(r,t)],[5952,6015,15,(r,t)=>this.writeIO_2(r,t)],[0,6143,8191,(r,t)=>{this.ram[r]=t}]],{gmask:8191});this.bios=new I().decode(x(atob(O))),this.connectCPUMemoryBus(this)}readConst(r){return this.read(r)}readIO_1(r){return this.rriot1.read(r)}writeIO_1(r,t){this.rriot1.write(r,t)}readIO_2(r){switch(r&15){case 0:let t=0;for(let i=0;i<8;i++)(this.rriot2.regs[0]&1<>3,u=s&7;i&1?this.inputs[A+K]|=1<this.readIO_1(r)],[5952,6015,15,r=>this.readIO_2(r)],[0,6143,8191,r=>this.ram[r]],[6144,8191,2047,r=>this.bios[r]]],{gmask:8191});this.write=f([[5888,5951,15,(r,t)=>this.writeIO_1(r,t)],[5952,6015,15,(r,t)=>this.writeIO_2(r,t)],[0,6143,8191,(r,t)=>{this.ram[r]=t}]],{gmask:8191});this.bios=new I().decode(x(atob(O))),this.connectCPUMemoryBus(this)}readConst(r){return this.read(r)}readIO_1(r){return this.rriot1.read(r)}writeIO_1(r,t){this.rriot1.write(r,t)}readIO_2(r){switch(r&15){case 0:let t=0;for(let i=0;i<8;i++)(this.rriot2.regs[0]&1<>3,u=s&7;i&1?this.inputs[A+K]|=1<>1}var nt=V([[s.SELECT,0,1],[s.START,0,4],[s.VK_2,0,8],[s.UP,1,1],[s.DOWN,1,2],[s.LEFT,1,4],[s.RIGHT,1,8],[s.A,1,16],[s.B,1,32],[s.P2_UP,2,1],[s.P2_DOWN,2,2],[s.P2_LEFT,2,4],[s.P2_RIGHT,2,8],[s.P2_A,2,16],[s.P2_B,2,32]]);var k=57344,q=k,y=16384,lt=q+y,Q=32768,ot=16384,pt=k+y+Q+ot,A=class extends D{constructor(){super();this.cpuFrequency=W;this.canvasWidth=T;this.numVisibleScanlines=Z;this.numTotalScanlines=g;this.cpuCyclesPerLine=it;this.defaultROMSize=pt;this.sampleRate=K*g*2;this.cpu=new v;this.ram=new Uint8Array(2048);this.sprram=new Uint8Array(512);this.vram=new Uint8Array(2048);this.palram=new Uint8Array(128);this.palette=new Uint32Array(64);this.interruptEnabled=!1;this.watchdog_counter=O;this.ctcVector=0;this.read=w([[0,57343,65535,t=>this.rom?this.rom[t]:0],[57344,59391,2047,t=>this.ram[t]],[59392,61439,511,t=>this.sprram[t]],[61440,63487,2047,t=>this.vram[t]],[63488,65535,127,t=>this.palram[t]]]);this.write=w([[57344,59391,2047,(t,e)=>{this.ram[t]=e}],[59392,61439,511,(t,e)=>{this.sprram[t]=e}],[61440,63487,2047,(t,e)=>{this.vram[t]=e}],[63488,65535,127,(t,e)=>{this.palram[t]=e,this.updatePalette(t)}]]);var t=new Y;this.psg1=new P(t),this.psg2=new P(t),this.audioadapter=new z([this.psg1.psg,this.psg2.psg],2,this.sampleRate),this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.inputs.set([0,0,0,255,255]),this.handler=N(this.inputs,nt)}readConst(t){return this.read(t)}newIOBus(){return{read:t=>(t&=255,t<=4?this.inputs[t]:t>=8&&t<=15?this.inputs[3]:(t>=240&&t<=243,0)),write:(t,e)=>{t&=255,t==224&&(this.watchdog_counter=O),t>=240&&t<=243&&((t&3)==0&&!(e&1)||(e&1)==0&&(this.ctcVector=e&248)),t>=0&&t<=7}}}updatePalette(t){let e=t>>1;if(e>=64)return;let r=this.palram[e*2+1],n=E(r>>6&3),i=E(r&7),a=E(r>>3&7),o=(this.palram[e*2]&1)<<2;n=E(o|r>>6&3),this.palette[e]=4278190080|a<<16|i<<8|n}drawScanline(){let t=this.scanline;if(t>=Z)return;let e=t*T;if((t&1)==0){t>>=1;let r=Math.floor(t/C),n=t%C;if(r>4&3,F=(l&4)!=0,m=(l&8)!=0?15-n:n,u=i*C*2;this.drawTileLine(e+u,x,m,h,F)}}this.drawSpriteScanline(t,e)}drawTileLine(t,e,r,n,i){let a=q,o=y/2,x=e*32+(r<8,r),h=this.rom[a+x]||0,F=this.rom[a+o+x]||0,d=n*4;for(let m=0;m<8;m++){let u=7-m,p=i?14-m*2:m*2,b=h>>u&1|(F>>u&1)<<1;this.pixels[t+p]=this.pixels[t+p+512]=this.pixels[t+p+1]=this.pixels[t+p+513]=this.palette[d+b]}}drawSpriteScanline(t,e){let r=lt,n=Q/4;for(let i=31;i>=0;i--){let a=i*4,o=this.sprram[a]-2&255;o=496-o;let l=this.sprram[a+1],x=this.sprram[a+2]|(l&8?256:0),h=this.sprram[a+3]-3&511,F=(l&16)!=0,d=(l&32)!=0,u=16+(l&3)*16,p=t-o;if(p<0||p>=32)continue;let b=d?31-p:p,J=x*128+b;for(let f=0;f<4;f++){let M=J+f*32,$=this.rom[r+M]||0,tt=this.rom[r+n+M]||0,et=this.rom[r+n*2+M]||0,rt=this.rom[r+n*3+M]||0;for(let _=0;_<8;_++){let S=7-_,L=$>>S&1|(tt>>S&1)<<1|(et>>S&1)<<2|(rt>>S&1)<<3;if(L==0)continue;let R;F?R=h+31-(f*8+_):R=h+f*8+_,R>=0&&R>1}var nt=V([[s.SELECT,0,1],[s.START,0,4],[s.VK_2,0,8],[s.UP,1,1],[s.DOWN,1,2],[s.LEFT,1,4],[s.RIGHT,1,8],[s.A,1,16],[s.B,1,32],[s.P2_UP,2,1],[s.P2_DOWN,2,2],[s.P2_LEFT,2,4],[s.P2_RIGHT,2,8],[s.P2_A,2,16],[s.P2_B,2,32]]);var k=57344,q=k,y=16384,lt=q+y,Q=32768,ot=16384,pt=k+y+Q+ot,A=class extends D{constructor(){super();this.cpuFrequency=W;this.canvasWidth=T;this.numVisibleScanlines=Z;this.numTotalScanlines=g;this.cpuCyclesPerLine=it;this.defaultROMSize=pt;this.sampleRate=K*g*2;this.cpu=new v;this.ram=new Uint8Array(2048);this.sprram=new Uint8Array(512);this.vram=new Uint8Array(2048);this.palram=new Uint8Array(128);this.palette=new Uint32Array(64);this.interruptEnabled=!1;this.watchdog_counter=O;this.ctcVector=0;this.read=w([[0,57343,65535,t=>this.rom?this.rom[t]:0],[57344,59391,2047,t=>this.ram[t]],[59392,61439,511,t=>this.sprram[t]],[61440,63487,2047,t=>this.vram[t]],[63488,65535,127,t=>this.palram[t]]]);this.write=w([[57344,59391,2047,(t,e)=>{this.ram[t]=e}],[59392,61439,511,(t,e)=>{this.sprram[t]=e}],[61440,63487,2047,(t,e)=>{this.vram[t]=e}],[63488,65535,127,(t,e)=>{this.palram[t]=e,this.updatePalette(t)}]]);var t=new Y;this.psg1=new P(t),this.psg2=new P(t),this.audioadapter=new z([this.psg1.psg,this.psg2.psg],2,this.sampleRate),this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.inputs.set([0,0,0,255,255]),this.handler=N(this.inputs,nt)}readConst(t){return this.read(t)}newIOBus(){return{read:t=>(t&=255,t<=4?this.inputs[t]:t>=8&&t<=15?this.inputs[3]:(t>=240&&t<=243,0)),write:(t,e)=>{t&=255,t==224&&(this.watchdog_counter=O),t>=240&&t<=243&&((t&3)==0&&!(e&1)||(e&1)==0&&(this.ctcVector=e&248)),t>=0&&t<=7}}}updatePalette(t){let e=t>>1;if(e>=64)return;let r=this.palram[e*2+1],n=E(r>>6&3),i=E(r&7),a=E(r>>3&7),o=(this.palram[e*2]&1)<<2;n=E(o|r>>6&3),this.palette[e]=4278190080|a<<16|i<<8|n}drawScanline(){let t=this.scanline;if(t>=Z)return;let e=t*T;if((t&1)==0){t>>=1;let r=Math.floor(t/C),n=t%C;if(r>4&3,F=(l&4)!=0,m=(l&8)!=0?15-n:n,u=i*C*2;this.drawTileLine(e+u,x,m,h,F)}}this.drawSpriteScanline(t,e)}drawTileLine(t,e,r,n,i){let a=q,o=y/2,x=e*32+(r<8,r),h=this.rom[a+x]||0,F=this.rom[a+o+x]||0,d=n*4;for(let m=0;m<8;m++){let u=7-m,p=i?14-m*2:m*2,b=h>>u&1|(F>>u&1)<<1;this.pixels[t+p]=this.pixels[t+p+512]=this.pixels[t+p+1]=this.pixels[t+p+513]=this.palette[d+b]}}drawSpriteScanline(t,e){let r=lt,n=Q/4;for(let i=31;i>=0;i--){let a=i*4,o=this.sprram[a]-2&255;o=496-o;let l=this.sprram[a+1],x=this.sprram[a+2]|(l&8?256:0),h=this.sprram[a+3]-3&511,F=(l&16)!=0,d=(l&32)!=0,u=16+(l&3)*16,p=t-o;if(p<0||p>=32)continue;let b=d?31-p:p,J=x*128+b;for(let f=0;f<4;f++){let M=J+f*32,$=this.rom[r+M]||0,tt=this.rom[r+n+M]||0,et=this.rom[r+n*2+M]||0,rt=this.rom[r+n*3+M]||0;for(let _=0;_<8;_++){let S=7-_,L=$>>S&1|(tt>>S&1)<<1|(et>>S&1)<<2|(rt>>S&1)<<3;if(L==0)continue;let R;F?R=h+31-(f*8+_):R=h+f*8+_,R>=0&&R{let e=s>>14<<1,D=this.slotmask>>e&3,g=this.slots[D];return g?g.read(s):0};this.write=(s,e)=>{let D=s>>14<<1,g=this.slotmask>>D&3,B=this.slots[g];B&&B.write(s,e)};this.init(this,this.newIOBus(),new Q(new U)),this.bios=new E().decode(O(atob(h))),this.bios[3541]=0,this.bios[3542]=0,this.bios[3543]=0,this.slots=[{read:s=>this.bios[s]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.ram[s]|0,write:(s,e)=>{this.ram[s]=e}}]}loadBIOS(s){this.bios=s}getKeyboardMap(){return n}getKeyboardFunction(){return(s,e,D,g)=>{for(var B=F,T=0;T>3,f=7-(T&7);g&1?this.inputs[i+R]|=1<{switch(s&=255,s){case 152:return this.vdp.readData();case 153:return this.vdp.readStatus();case 162:return this.psg.currentRegister()==14?~this.inputs[a]:this.psg.readData();case 168:return this.slotmask;case 169:return~this.inputs[i+(this.ppi_c&15)];case 170:return this.ppi_c}return 0},write:(s,e)=>{switch(s&=255,e&=255,s){case 152:this.vdp.writeData(e);break;case 153:this.vdp.writeAddress(e);break;case 168:this.slotmask=e;break;case 170:this.ppi_c=e;break;case 171:let D=e>>1&7;this.ppi_c=this.ppi_c&~(1<{let e=s>>14<<1,D=this.slotmask>>e&3,g=this.slots[D];return g?g.read(s):0};this.write=(s,e)=>{let D=s>>14<<1,g=this.slotmask>>D&3,B=this.slots[g];B&&B.write(s,e)};this.init(this,this.newIOBus(),new Q(new U)),this.bios=new E().decode(O(atob(h))),this.bios[3541]=0,this.bios[3542]=0,this.bios[3543]=0,this.slots=[{read:s=>this.bios[s]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.ram[s]|0,write:(s,e)=>{this.ram[s]=e}}]}loadBIOS(s){this.bios=s}getKeyboardMap(){return n}getKeyboardFunction(){return(s,e,D,g)=>{for(var B=F,T=0;T>3,f=7-(T&7);g&1?this.inputs[i+R]|=1<{switch(s&=255,s){case 152:return this.vdp.readData();case 153:return this.vdp.readStatus();case 162:return this.psg.currentRegister()==14?~this.inputs[a]:this.psg.readData();case 168:return this.slotmask;case 169:return~this.inputs[i+(this.ppi_c&15)];case 170:return this.ppi_c}return 0},write:(s,e)=>{switch(s&=255,e&=255,s){case 152:this.vdp.writeData(e);break;case 153:this.vdp.writeAddress(e);break;case 168:this.slotmask=e;break;case 170:this.ppi_c=e;break;case 171:let D=e>>1&7;this.ppi_c=this.ppi_c&~(1<this.rom?this.rom[e]:0],[8192,16383,8191,e=>this.ram[e]]]);this.write=a([[8192,9215,1023,(e,s)=>{this.ram[e]=s}],[9216,16383,8191,(e,s)=>{this.ram[e]=s;for(var l=e-1024<<3,r=0;r<8;r++)this.pixels[l+r]=s&1<{switch(e&=3,e){case 0:case 1:case 2:return this.inputs[e];case 3:return this.bitshift_register>>8-this.bitshift_offset&255}return 0},write:(e,s)=>{switch(e&=7,s&=255,e){case 2:this.bitshift_offset=s&7;break;case 3:case 5:break;case 4:this.bitshift_register=this.bitshift_register>>8|s<<8;break;case 6:this.watchdog_counter=p;break}}}}startScanline(){}drawScanline(){this.scanline==95?this.interrupt(207):this.scanline==223&&this.interrupt(215)}interrupt(e){this.probe.logInterrupt(e),this.cpu.interrupt(e)}advanceFrame(e){return this.watchdog_counter--<=0&&(console.log("WATCHDOG FIRED"),this.reset()),super.advanceFrame(e)}loadState(e){super.loadState(e),this.bitshift_register=e.bsr,this.bitshift_offset=e.bso,this.watchdog_counter=e.wdc}saveState(){var e=super.saveState();return e.bsr=this.bitshift_register,e.bso=this.bitshift_offset,e.wdc=this.watchdog_counter,e}reset(){super.reset(),this.watchdog_counter=p}};var S=[{id:"gfxtest.c",name:"Graphics Test"},{id:"shifter.c",name:"Sprite w/ Bit Shifter"},{id:"game2.c",name:"Cosmic Impalas"}],n=class extends u{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Frame Buffer",start:9216,size:7168,type:"ram"}]}}}newMachine(){return new i}getPresets(){return S}readAddress(e){return this.machine.read(e)}showHelp(){return"https://8bitworkshop.com/docs/platforms/arcade/index.html#midway-8080"}};f.mw8080bw=n; -//# sourceMappingURL=mw8080bw-BKLOGFXB.js.map +import{H as u,c as o,r as m}from"./chunk-RWTUUV4L.js";import"./chunk-UXRCACYH.js";import{L as f,Z as t,_ as c,aa as h,da as a}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var _=h([[t.A,1,16],[t.LEFT,1,32],[t.RIGHT,1,64],[t.P2_A,2,16],[t.P2_LEFT,2,32],[t.P2_RIGHT,2,64],[t.SELECT,1,1],[t.START,1,4],[t.P2_START,1,2]]),p=256,w=4293848814,b=4278190080,i=class extends m{constructor(){super();this.cpuFrequency=1996800;this.canvasWidth=256;this.numTotalScanlines=262;this.numVisibleScanlines=224;this.cpuCyclesPerLine=Math.floor(1996800/(262*60));this.defaultROMSize=8192;this.rotate=-90;this.sampleRate=1;this.bitshift_offset=0;this.bitshift_register=0;this.cpu=new o;this.ram=new Uint8Array(8192);this.read=a([[0,8191,8191,e=>this.rom?this.rom[e]:0],[8192,16383,8191,e=>this.ram[e]]]);this.write=a([[8192,9215,1023,(e,s)=>{this.ram[e]=s}],[9216,16383,8191,(e,s)=>{this.ram[e]=s;for(var l=e-1024<<3,r=0;r<8;r++)this.pixels[l+r]=s&1<{switch(e&=3,e){case 0:case 1:case 2:return this.inputs[e];case 3:return this.bitshift_register>>8-this.bitshift_offset&255}return 0},write:(e,s)=>{switch(e&=7,s&=255,e){case 2:this.bitshift_offset=s&7;break;case 3:case 5:break;case 4:this.bitshift_register=this.bitshift_register>>8|s<<8;break;case 6:this.watchdog_counter=p;break}}}}startScanline(){}drawScanline(){this.scanline==95?this.interrupt(207):this.scanline==223&&this.interrupt(215)}interrupt(e){this.probe.logInterrupt(e),this.cpu.interrupt(e)}advanceFrame(e){return this.watchdog_counter--<=0&&(console.log("WATCHDOG FIRED"),this.reset()),super.advanceFrame(e)}loadState(e){super.loadState(e),this.bitshift_register=e.bsr,this.bitshift_offset=e.bso,this.watchdog_counter=e.wdc}saveState(){var e=super.saveState();return e.bsr=this.bitshift_register,e.bso=this.bitshift_offset,e.wdc=this.watchdog_counter,e}reset(){super.reset(),this.watchdog_counter=p}};var S=[{id:"gfxtest.c",name:"Graphics Test"},{id:"shifter.c",name:"Sprite w/ Bit Shifter"},{id:"game2.c",name:"Cosmic Impalas"}],n=class extends u{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Frame Buffer",start:9216,size:7168,type:"ram"}]}}}newMachine(){return new i}getPresets(){return S}readAddress(e){return this.machine.read(e)}showHelp(){return"https://8bitworkshop.com/docs/platforms/arcade/index.html#midway-8080"}};f.mw8080bw=n; +//# sourceMappingURL=mw8080bw-KVH4PEGP.js.map diff --git a/gen/mw8080bw-BKLOGFXB.js.map b/gen/mw8080bw-KVH4PEGP.js.map similarity index 100% rename from gen/mw8080bw-BKLOGFXB.js.map rename to gen/mw8080bw-KVH4PEGP.js.map diff --git a/gen/nes-EMVG76ED.js b/gen/nes-G3Q7YZ23.js similarity index 99% rename from gen/nes-EMVG76ED.js rename to gen/nes-G3Q7YZ23.js index 9718e0a6..bc7485c5 100644 --- a/gen/nes-EMVG76ED.js +++ b/gen/nes-G3Q7YZ23.js @@ -1,4 +1,4 @@ -import{b as qe}from"./chunk-2PGV3RX6.js";import{a as hs}from"./chunk-SRBQMLE7.js";import{a as ze}from"./chunk-TANFDIIN.js";import{j as Ve,n as we,o as Ge,x as De,z as Le}from"./chunk-QYEDG265.js";import{i as he}from"./chunk-UACHXWHT.js";import{$ as Ie,I as Me,L as ie,R as se,U as re,X as Oe,Z as I,aa as Pe,g as pt,n as Ne}from"./chunk-V6TNHL6H.js";import{a as Be,d as S,f as ss,h as rs,i as c}from"./chunk-N7W4C4V2.js";function v(u,t,e,i,s){for(let r=0;r{});var T,Z,k,A,st,M,B,Et,b,y,G,F,as,K,Q,Rt,ns,os,ls,ve,cs,ms,fs,ps,us,xs,ds,Rs,gs,bs,$,ae,ne,Tt,Cs,_s,tt,At,Ss,ys,Ue,Es,et,gt,bt,Ct,ht,it,Ts,As,ks,Fs,_t,St,Bs,Ns,X,Ms,Os,Is,at,oe,le,Ps,Vs,ws,Gs,Ds,Ls,zs,We,qs,vs,ut,kt,nt,ot,lt,ct,mt,ft,yt,D,He,Us,Ws,Hs,Ys,Js,Xs,js,Zs,Ft,ce,Ye=S(()=>{H();T=0,Z=1,k=2,A=3,st=4,M=5,B=6,Et=7,b=8,y=9,G=10,F=11,as=12,K=0,Q=1,Rt=2,ns=3,os=4,ls=5,ve=6,cs=7,ms=8,fs=9,ps=10,us=11,xs=12,ds=13,Rs=14,gs=15,bs=16,$=17,ae=18,ne=19,Tt=20,Cs=21,_s=22,tt=23,At=24,Ss=25,ys=26,Ue=27,Es=28,et=29,gt=30,bt=31,Ct=32,ht=33,it=34,Ts=35,As=36,ks=37,Fs=38,_t=39,St=40,Bs=41,Ns=42,X=43,Ms=44,Os=45,Is=46,at=47,oe=48,le=49,Ps=50,Vs=51,ws=52,Gs=53,Ds=54,Ls=55,zs=56,We=57,qs=58,vs=59,ut=60,kt=61,nt=62,ot=63,lt=64,ct=65,mt=66,ft=67,yt=68,D=69,He=71,Us=72,Ws=73,Hs=74,Ys=75,Js=76,Xs=77,js={ins:-1,mode:0,size:1,cycles:2},Zs={105:{ins:K,mode:M,size:2,cycles:2},101:{ins:K,mode:T,size:2,cycles:3},117:{ins:K,mode:B,size:2,cycles:4},109:{ins:K,mode:A,size:3,cycles:4},125:{ins:K,mode:b,size:3,cycles:4},121:{ins:K,mode:y,size:3,cycles:4},97:{ins:K,mode:G,size:2,cycles:6},113:{ins:K,mode:F,size:2,cycles:5},41:{ins:Q,mode:M,size:2,cycles:2},37:{ins:Q,mode:T,size:2,cycles:3},53:{ins:Q,mode:B,size:2,cycles:4},45:{ins:Q,mode:A,size:3,cycles:4},61:{ins:Q,mode:b,size:3,cycles:4},57:{ins:Q,mode:y,size:3,cycles:4},33:{ins:Q,mode:G,size:2,cycles:6},49:{ins:Q,mode:F,size:2,cycles:5},10:{ins:Rt,mode:st,size:1,cycles:2},6:{ins:Rt,mode:T,size:2,cycles:5},22:{ins:Rt,mode:B,size:2,cycles:6},14:{ins:Rt,mode:A,size:3,cycles:6},30:{ins:Rt,mode:b,size:3,cycles:7},144:{ins:ns,mode:Z,size:2,cycles:2},176:{ins:os,mode:Z,size:2,cycles:2},240:{ins:ls,mode:Z,size:2,cycles:2},48:{ins:cs,mode:Z,size:2,cycles:2},208:{ins:ms,mode:Z,size:2,cycles:2},16:{ins:fs,mode:Z,size:2,cycles:2},80:{ins:us,mode:Z,size:2,cycles:2},112:{ins:xs,mode:Z,size:2,cycles:2},36:{ins:ve,mode:T,size:2,cycles:3},44:{ins:ve,mode:A,size:3,cycles:4},0:{ins:ps,mode:k,size:1,cycles:7},24:{ins:ds,mode:k,size:1,cycles:2},216:{ins:Rs,mode:k,size:1,cycles:2},88:{ins:gs,mode:k,size:1,cycles:2},184:{ins:bs,mode:k,size:1,cycles:2},201:{ins:$,mode:M,size:2,cycles:2},197:{ins:$,mode:T,size:2,cycles:3},213:{ins:$,mode:B,size:2,cycles:4},205:{ins:$,mode:A,size:3,cycles:4},221:{ins:$,mode:b,size:3,cycles:4},217:{ins:$,mode:y,size:3,cycles:4},193:{ins:$,mode:G,size:2,cycles:6},209:{ins:$,mode:F,size:2,cycles:5},224:{ins:ae,mode:M,size:2,cycles:2},228:{ins:ae,mode:T,size:2,cycles:3},236:{ins:ae,mode:A,size:3,cycles:4},192:{ins:ne,mode:M,size:2,cycles:2},196:{ins:ne,mode:T,size:2,cycles:3},204:{ins:ne,mode:A,size:3,cycles:4},198:{ins:Tt,mode:T,size:2,cycles:5},214:{ins:Tt,mode:B,size:2,cycles:6},206:{ins:Tt,mode:A,size:3,cycles:6},222:{ins:Tt,mode:b,size:3,cycles:7},202:{ins:Cs,mode:k,size:1,cycles:2},136:{ins:_s,mode:k,size:1,cycles:2},73:{ins:tt,mode:M,size:2,cycles:2},69:{ins:tt,mode:T,size:2,cycles:3},85:{ins:tt,mode:B,size:2,cycles:4},77:{ins:tt,mode:A,size:3,cycles:4},93:{ins:tt,mode:b,size:3,cycles:4},89:{ins:tt,mode:y,size:3,cycles:4},65:{ins:tt,mode:G,size:2,cycles:6},81:{ins:tt,mode:F,size:2,cycles:5},230:{ins:At,mode:T,size:2,cycles:5},246:{ins:At,mode:B,size:2,cycles:6},238:{ins:At,mode:A,size:3,cycles:6},254:{ins:At,mode:b,size:3,cycles:7},232:{ins:Ss,mode:k,size:1,cycles:2},200:{ins:ys,mode:k,size:1,cycles:2},76:{ins:Ue,mode:A,size:3,cycles:3},108:{ins:Ue,mode:as,size:3,cycles:5},32:{ins:Es,mode:A,size:3,cycles:6},169:{ins:et,mode:M,size:2,cycles:2},165:{ins:et,mode:T,size:2,cycles:3},181:{ins:et,mode:B,size:2,cycles:4},173:{ins:et,mode:A,size:3,cycles:4},189:{ins:et,mode:b,size:3,cycles:4},185:{ins:et,mode:y,size:3,cycles:4},161:{ins:et,mode:G,size:2,cycles:6},177:{ins:et,mode:F,size:2,cycles:5},162:{ins:gt,mode:M,size:2,cycles:2},166:{ins:gt,mode:T,size:2,cycles:3},182:{ins:gt,mode:Et,size:2,cycles:4},174:{ins:gt,mode:A,size:3,cycles:4},190:{ins:gt,mode:y,size:3,cycles:4},160:{ins:bt,mode:M,size:2,cycles:2},164:{ins:bt,mode:T,size:2,cycles:3},180:{ins:bt,mode:B,size:2,cycles:4},172:{ins:bt,mode:A,size:3,cycles:4},188:{ins:bt,mode:b,size:3,cycles:4},74:{ins:Ct,mode:st,size:1,cycles:2},70:{ins:Ct,mode:T,size:2,cycles:5},86:{ins:Ct,mode:B,size:2,cycles:6},78:{ins:Ct,mode:A,size:3,cycles:6},94:{ins:Ct,mode:b,size:3,cycles:7},26:{ins:ht,mode:k,size:1,cycles:2},58:{ins:ht,mode:k,size:1,cycles:2},90:{ins:ht,mode:k,size:1,cycles:2},122:{ins:ht,mode:k,size:1,cycles:2},218:{ins:ht,mode:k,size:1,cycles:2},234:{ins:ht,mode:k,size:1,cycles:2},250:{ins:ht,mode:k,size:1,cycles:2},9:{ins:it,mode:M,size:2,cycles:2},5:{ins:it,mode:T,size:2,cycles:3},21:{ins:it,mode:B,size:2,cycles:4},13:{ins:it,mode:A,size:3,cycles:4},29:{ins:it,mode:b,size:3,cycles:4},25:{ins:it,mode:y,size:3,cycles:4},1:{ins:it,mode:G,size:2,cycles:6},17:{ins:it,mode:F,size:2,cycles:5},72:{ins:Ts,mode:k,size:1,cycles:3},8:{ins:As,mode:k,size:1,cycles:3},104:{ins:ks,mode:k,size:1,cycles:4},40:{ins:Fs,mode:k,size:1,cycles:4},42:{ins:_t,mode:st,size:1,cycles:2},38:{ins:_t,mode:T,size:2,cycles:5},54:{ins:_t,mode:B,size:2,cycles:6},46:{ins:_t,mode:A,size:3,cycles:6},62:{ins:_t,mode:b,size:3,cycles:7},106:{ins:St,mode:st,size:1,cycles:2},102:{ins:St,mode:T,size:2,cycles:5},118:{ins:St,mode:B,size:2,cycles:6},110:{ins:St,mode:A,size:3,cycles:6},126:{ins:St,mode:b,size:3,cycles:7},64:{ins:Bs,mode:k,size:1,cycles:6},96:{ins:Ns,mode:k,size:1,cycles:6},233:{ins:X,mode:M,size:2,cycles:2},235:{ins:X,mode:M,size:2,cycles:2},229:{ins:X,mode:T,size:2,cycles:3},245:{ins:X,mode:B,size:2,cycles:4},237:{ins:X,mode:A,size:3,cycles:4},253:{ins:X,mode:b,size:3,cycles:4},249:{ins:X,mode:y,size:3,cycles:4},225:{ins:X,mode:G,size:2,cycles:6},241:{ins:X,mode:F,size:2,cycles:5},56:{ins:Ms,mode:k,size:1,cycles:2},248:{ins:Os,mode:k,size:1,cycles:2},120:{ins:Is,mode:k,size:1,cycles:2},133:{ins:at,mode:T,size:2,cycles:3},149:{ins:at,mode:B,size:2,cycles:4},141:{ins:at,mode:A,size:3,cycles:4},157:{ins:at,mode:b,size:3,cycles:5},153:{ins:at,mode:y,size:3,cycles:5},129:{ins:at,mode:G,size:2,cycles:6},145:{ins:at,mode:F,size:2,cycles:6},134:{ins:oe,mode:T,size:2,cycles:3},150:{ins:oe,mode:Et,size:2,cycles:4},142:{ins:oe,mode:A,size:3,cycles:4},132:{ins:le,mode:T,size:2,cycles:3},148:{ins:le,mode:B,size:2,cycles:4},140:{ins:le,mode:A,size:3,cycles:4},170:{ins:Ps,mode:k,size:1,cycles:2},168:{ins:Vs,mode:k,size:1,cycles:2},186:{ins:ws,mode:k,size:1,cycles:2},138:{ins:Gs,mode:k,size:1,cycles:2},154:{ins:Ds,mode:k,size:1,cycles:2},152:{ins:Ls,mode:k,size:1,cycles:2},75:{ins:zs,mode:M,size:2,cycles:2},11:{ins:We,mode:M,size:2,cycles:2},43:{ins:We,mode:M,size:2,cycles:2},107:{ins:qs,mode:M,size:2,cycles:2},203:{ins:vs,mode:M,size:2,cycles:2},163:{ins:ut,mode:G,size:2,cycles:6},167:{ins:ut,mode:T,size:2,cycles:3},175:{ins:ut,mode:A,size:3,cycles:4},179:{ins:ut,mode:F,size:2,cycles:5},183:{ins:ut,mode:Et,size:2,cycles:4},191:{ins:ut,mode:y,size:3,cycles:4},131:{ins:kt,mode:G,size:2,cycles:6},135:{ins:kt,mode:T,size:2,cycles:3},143:{ins:kt,mode:A,size:3,cycles:4},151:{ins:kt,mode:Et,size:2,cycles:4},195:{ins:nt,mode:G,size:2,cycles:8},199:{ins:nt,mode:T,size:2,cycles:5},207:{ins:nt,mode:A,size:3,cycles:6},211:{ins:nt,mode:F,size:2,cycles:8},215:{ins:nt,mode:B,size:2,cycles:6},219:{ins:nt,mode:y,size:3,cycles:7},223:{ins:nt,mode:b,size:3,cycles:7},227:{ins:ot,mode:G,size:2,cycles:8},231:{ins:ot,mode:T,size:2,cycles:5},239:{ins:ot,mode:A,size:3,cycles:6},243:{ins:ot,mode:F,size:2,cycles:8},247:{ins:ot,mode:B,size:2,cycles:6},251:{ins:ot,mode:y,size:3,cycles:7},255:{ins:ot,mode:b,size:3,cycles:7},35:{ins:lt,mode:G,size:2,cycles:8},39:{ins:lt,mode:T,size:2,cycles:5},47:{ins:lt,mode:A,size:3,cycles:6},51:{ins:lt,mode:F,size:2,cycles:8},55:{ins:lt,mode:B,size:2,cycles:6},59:{ins:lt,mode:y,size:3,cycles:7},63:{ins:lt,mode:b,size:3,cycles:7},99:{ins:ct,mode:G,size:2,cycles:8},103:{ins:ct,mode:T,size:2,cycles:5},111:{ins:ct,mode:A,size:3,cycles:6},115:{ins:ct,mode:F,size:2,cycles:8},119:{ins:ct,mode:B,size:2,cycles:6},123:{ins:ct,mode:y,size:3,cycles:7},127:{ins:ct,mode:b,size:3,cycles:7},3:{ins:mt,mode:G,size:2,cycles:8},7:{ins:mt,mode:T,size:2,cycles:5},15:{ins:mt,mode:A,size:3,cycles:6},19:{ins:mt,mode:F,size:2,cycles:8},23:{ins:mt,mode:B,size:2,cycles:6},27:{ins:mt,mode:y,size:3,cycles:7},31:{ins:mt,mode:b,size:3,cycles:7},67:{ins:ft,mode:G,size:2,cycles:8},71:{ins:ft,mode:T,size:2,cycles:5},79:{ins:ft,mode:A,size:3,cycles:6},83:{ins:ft,mode:F,size:2,cycles:8},87:{ins:ft,mode:B,size:2,cycles:6},91:{ins:ft,mode:y,size:3,cycles:7},95:{ins:ft,mode:b,size:3,cycles:7},128:{ins:yt,mode:M,size:2,cycles:2},130:{ins:yt,mode:M,size:2,cycles:2},137:{ins:yt,mode:M,size:2,cycles:2},194:{ins:yt,mode:M,size:2,cycles:2},226:{ins:yt,mode:M,size:2,cycles:2},12:{ins:D,mode:A,size:3,cycles:4},28:{ins:D,mode:b,size:3,cycles:4},60:{ins:D,mode:b,size:3,cycles:4},92:{ins:D,mode:b,size:3,cycles:4},124:{ins:D,mode:b,size:3,cycles:4},220:{ins:D,mode:b,size:3,cycles:4},252:{ins:D,mode:b,size:3,cycles:4},4:{ins:D,mode:T,size:2,cycles:3},68:{ins:D,mode:T,size:2,cycles:3},100:{ins:D,mode:T,size:2,cycles:3},20:{ins:D,mode:B,size:2,cycles:4},52:{ins:D,mode:B,size:2,cycles:4},84:{ins:D,mode:B,size:2,cycles:4},116:{ins:D,mode:B,size:2,cycles:4},212:{ins:D,mode:B,size:2,cycles:4},244:{ins:D,mode:B,size:2,cycles:4},147:{ins:He,mode:F,size:2,cycles:6},159:{ins:He,mode:y,size:3,cycles:5},155:{ins:Us,mode:y,size:3,cycles:5},156:{ins:Ws,mode:b,size:3,cycles:5},158:{ins:Hs,mode:y,size:3,cycles:5},187:{ins:Ys,mode:y,size:3,cycles:4},139:{ins:Js,mode:M,size:2,cycles:2},171:{ins:Xs,mode:M,size:2,cycles:2}},Ft=class{constructor(t){c(this,"IRQ_NORMAL",0);c(this,"IRQ_NMI",1);c(this,"IRQ_RESET",2);this.nes=t,this.mem=new Uint8Array(65536),this.mem.fill(255,0,8192);for(let e=0;e<4;e++){let i=e*2048;this.mem[i+8]=247,this.mem[i+9]=239,this.mem[i+10]=223,this.mem[i+15]=191}this.REG_ACC=0,this.REG_X=0,this.REG_Y=0,this.REG_SP=511,this.REG_PC=32767,this.REG_PC_NEW=32767,this.REG_STATUS=40,this.setStatus(40),this.F_CARRY=0,this.F_DECIMAL=0,this.F_INTERRUPT=1,this.F_INTERRUPT_NEW=1,this.F_OVERFLOW=0,this.F_SIGN=0,this.F_ZERO=1,this.F_NOTUSED=1,this.F_NOTUSED_NEW=1,this.F_BRK=1,this.F_BRK_NEW=1,this.cyclesToHalt=0,this.crash=!1,this.irqRequested=!1,this.irqType=null,this.nmiRaised=!1,this.nmiPending=!1,this.nmiImmediate=!1,this.dataBus=0,this.instrBusCycles=0,this.apuCatchupCycles=0,this._cpuCycleBase=0,this.nmiRaisedAtCycle=0,this.nmiDotsRemainingInStep=0}emulate(){var x;if(this.nmiImmediate)return this.nmiImmediate=!1,this.nmiPending=!1,this.nmiRaised=!1,this.instrBusCycles=0,this.REG_PC_NEW=this.REG_PC,this.F_INTERRUPT_NEW=this.F_INTERRUPT,this.doNonMaskableInterrupt(this.getStatus()&239),this.REG_PC=this.REG_PC_NEW,this.F_INTERRUPT=this.F_INTERRUPT_NEW,this.F_BRK=this.F_BRK_NEW,this._cpuCycleBase+=7,7;let t,e,i=0,s=0;if(this.nmiRaised&&(this.nmiPending=!0,this.nmiRaised=!1),this.irqRequested){switch(t=this.getStatus(),this.REG_PC_NEW=this.REG_PC,this.F_INTERRUPT_NEW=this.F_INTERRUPT,this.irqType){case 0:{if(this.F_INTERRUPT!==0)break;this.doIrq(t&239),s=7;break}case 2:{this.doResetInterrupt(),s=7;break}}this.REG_PC=this.REG_PC_NEW,this.F_INTERRUPT=this.F_INTERRUPT_NEW,this.F_BRK=this.F_BRK_NEW,this.irqRequested=!1}if(this.nes.mmap===null)return 32;this.instrBusCycles=0,this.apuCatchupCycles=0,this.nmiDotsRemainingInStep=0,this._dmcFetchCycles=this._cyclesToNextDmcFetch();let r=this.loadFromCartridge(this.REG_PC+1);this.dataBus=r,this.instrBusCycles=1,this.nes.ppu.advanceDots(3);let a=(x=Zs[r])!=null?x:js,n=a.cycles,l=0,o=a.mode,p=this.REG_PC;this.REG_PC+=a.size;let h=0;switch(o){case 0:{h=this.loadDirect(p+2);break}case 1:{h=this.loadDirect(p+2),h<128?h+=this.REG_PC:h+=this.REG_PC-256;break}case 2:{this.loadDirect(p+2);break}case 3:{h=this.load16bit(p+2);break}case 4:{this.loadDirect(p+2),h=this.REG_ACC;break}case 5:{h=this.REG_PC;break}case 6:{let m=this.loadDirect(p+2);this.loadDirect(m),h=m+this.REG_X&255;break}case 7:{let m=this.loadDirect(p+2);this.loadDirect(m),h=m+this.REG_Y&255;break}case 8:{h=this.load16bit(p+2),i=h>>8&255,(h&65280)!==(h+this.REG_X&65280)&&(this.load(h&65280|h+this.REG_X&255),l=1),h+=this.REG_X;break}case 9:{h=this.load16bit(p+2),i=h>>8&255,(h&65280)!==(h+this.REG_Y&65280)&&(this.load(h&65280|h+this.REG_Y&255),l=1),h+=this.REG_Y;break}case 10:{let m=this.loadDirect(p+2);this.loadDirect(m);let f=m+this.REG_X&255;h=this.loadDirect(f)|this.loadDirect(f+1&255)<<8;break}case 11:{let m=this.loadDirect(p+2);h=this.loadDirect(m)|this.loadDirect(m+1&255)<<8,i=h>>8&255,(h&65280)!==(h+this.REG_Y&65280)&&(this.load(h&65280|h+this.REG_Y&255),l=1),h+=this.REG_Y;break}case 12:{h=this.load16bit(p+2);var d=h&65280|(h&255)+1&255;h=this.load(h)|this.load(d)<<8;break}}switch(h&=65535,a.ins){case 0:{e=this.load(h),t=this.REG_ACC+e+this.F_CARRY,((this.REG_ACC^e)&128)===0&&((this.REG_ACC^t)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t>255?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.REG_ACC=t&255,n+=l;break}case 1:{this.REG_ACC=this.REG_ACC&this.load(h),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n+=l;break}case 2:{o===st?(this.F_CARRY=this.REG_ACC>>7&1,this.REG_ACC=this.REG_ACC<<1&255,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),this.F_CARRY=t>>7&1,t=t<<1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(h,t));break}case 3:{this.F_CARRY===0&&(n+=this._takeBranch(p,h));break}case 4:{this.F_CARRY===1&&(n+=this._takeBranch(p,h));break}case 5:{this.F_ZERO===0&&(n+=this._takeBranch(p,h));break}case 6:{t=this.load(h),this.F_SIGN=t>>7&1,this.F_OVERFLOW=t>>6&1,t&=this.REG_ACC,this.F_ZERO=t;break}case 7:{this.F_SIGN===1&&(n+=this._takeBranch(p,h));break}case 8:{this.F_ZERO!==0&&(n+=this._takeBranch(p,h));break}case 9:{this.F_SIGN===0&&(n+=this._takeBranch(p,h));break}case 10:{this.REG_PC+=2,this.push(this.REG_PC>>8&255),this.push(this.REG_PC&255),this.F_BRK=1,this.push(this.getStatus()),this.F_INTERRUPT=1,this.REG_PC=this.load16bit(65534),this.REG_PC--;break}case 11:{this.F_OVERFLOW===0&&(n+=this._takeBranch(p,h));break}case 12:{this.F_OVERFLOW===1&&(n+=this._takeBranch(p,h));break}case 13:{this.F_CARRY=0;break}case 14:{this.F_DECIMAL=0;break}case 15:{this.F_INTERRUPT=0;break}case 16:{this.F_OVERFLOW=0;break}case 17:{t=this.REG_ACC-this.load(h),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,n+=l;break}case 18:{t=this.REG_X-this.load(h),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 19:{t=this.REG_Y-this.load(h),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 20:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t-1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(h,t);break}case 21:{this.REG_X=this.REG_X-1&255,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 22:{this.REG_Y=this.REG_Y-1&255,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 23:{this.REG_ACC=(this.load(h)^this.REG_ACC)&255,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n+=l;break}case 24:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t+1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(h,t);break}case 25:{this.REG_X=this.REG_X+1&255,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 26:{this.REG_Y++,this.REG_Y&=255,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 27:{this.REG_PC=h-1;break}case 28:{this.push(this.REG_PC>>8&255),this.push(this.REG_PC&255),this.loadDirect(p+3),this.REG_PC=h-1;break}case 29:{this.REG_ACC=this.load(h),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n+=l;break}case 30:{this.REG_X=this.load(h),this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X,n+=l;break}case 31:{this.REG_Y=this.load(h),this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y,n+=l;break}case 32:{o===st?(t=this.REG_ACC&255,this.F_CARRY=t&1,t>>=1,this.REG_ACC=t):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h)&255,this.write(h,t),this.F_CARRY=t&1,t>>=1,this.write(h,t)),this.F_SIGN=0,this.F_ZERO=t;break}case 33:break;case 34:{t=(this.load(h)|this.REG_ACC)&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.REG_ACC=t,n+=l;break}case 35:{this.push(this.REG_ACC);break}case 36:{this.F_BRK=1,this.push(this.getStatus());break}case 37:{this.REG_ACC=this.pull(),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 38:{this.setStatusFromStack(this.pull());break}case 39:{o===st?(t=this.REG_ACC,e=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+e,this.REG_ACC=t):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+e,this.write(h,t)),this.F_SIGN=t>>7&1,this.F_ZERO=t;break}case 40:{o===st?(e=this.F_CARRY<<7,this.F_CARRY=this.REG_ACC&1,t=(this.REG_ACC>>1)+e,this.REG_ACC=t):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY<<7,this.F_CARRY=t&1,t=(t>>1)+e,this.write(h,t)),this.F_SIGN=t>>7&1,this.F_ZERO=t;break}case 41:{if(this.setStatusFromStack(this.pull()),this.REG_PC=this.pull(),this.REG_PC+=this.pull()<<8,this.REG_PC===65535)return;this.REG_PC--;break}case 42:{if(this.REG_PC=this.pull(),this.REG_PC+=this.pull()<<8,this.REG_PC===65535)return;break}case 43:{e=this.load(h),t=this.REG_ACC-e-(1-this.F_CARRY),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,((this.REG_ACC^t)&128)!==0&&((this.REG_ACC^e)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t<0?0:1,this.REG_ACC=t&255,n+=l;break}case 44:{this.F_CARRY=1;break}case 45:{this.F_DECIMAL=1;break}case 46:{this.F_INTERRUPT=1;break}case 47:{l===0&&(o===b||o===y||o===F)&&this.load(h),this.write(h,this.REG_ACC);break}case 48:{this.write(h,this.REG_X);break}case 49:{this.write(h,this.REG_Y);break}case 50:{this.REG_X=this.REG_ACC,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 51:{this.REG_Y=this.REG_ACC,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 52:{this.REG_X=this.REG_SP&255,this.F_SIGN=this.REG_SP>>7&1,this.F_ZERO=this.REG_X;break}case 53:{this.REG_ACC=this.REG_X,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 54:{this.REG_SP=this.REG_X&255;break}case 55:{this.REG_ACC=this.REG_Y,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 56:{t=this.REG_ACC&this.load(h),this.F_CARRY=t&1,this.REG_ACC=this.F_ZERO=t>>1,this.F_SIGN=0;break}case 57:{this.REG_ACC=this.F_ZERO=this.REG_ACC&this.load(h),this.F_CARRY=this.F_SIGN=this.REG_ACC>>7&1;break}case 58:{t=this.REG_ACC&this.load(h),this.REG_ACC=this.F_ZERO=(t>>1)+(this.F_CARRY<<7),this.F_SIGN=this.F_CARRY,this.F_CARRY=t>>7&1,this.F_OVERFLOW=(t>>7^t>>6)&1;break}case 59:{t=(this.REG_X&this.REG_ACC)-this.load(h),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.F_CARRY=t<0?0:1,this.REG_X=t&255;break}case 60:{this.REG_ACC=this.REG_X=this.F_ZERO=this.load(h),this.F_SIGN=this.REG_ACC>>7&1,n+=l;break}case 61:{this.write(h,this.REG_ACC&this.REG_X);break}case 62:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t-1&255,this.write(h,t),t=this.REG_ACC-t,this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 63:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t+1&255,this.write(h,t);let m=t;t=this.REG_ACC-m-(1-this.F_CARRY),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,((this.REG_ACC^t)&128)!==0&&((this.REG_ACC^m)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t<0?0:1,this.REG_ACC=t&255;break}case 64:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+e,this.write(h,t),this.REG_ACC=this.REG_ACC&t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 65:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY<<7,this.F_CARRY=t&1,t=(t>>1)+e,this.write(h,t);let m=t;t=this.REG_ACC+m+this.F_CARRY,((this.REG_ACC^m)&128)===0&&((this.REG_ACC^t)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t>255?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.REG_ACC=t&255;break}case 66:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),this.F_CARRY=t>>7&1,t=t<<1&255,this.write(h,t),this.REG_ACC=this.REG_ACC|t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 67:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h)&255,this.write(h,t),this.F_CARRY=t&1,t>>=1,this.write(h,t),this.REG_ACC=this.REG_ACC^t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 68:break;case 69:{this.load(h),n+=l;break}case 71:{l===0&&this.load(h);let f=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles?this.REG_ACC&this.REG_X:this.REG_ACC&this.REG_X&(i+1&255|0);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 72:{l===0&&this.load(h);let m=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles;this.REG_SP=256|this.REG_ACC&this.REG_X;let f=m?this.REG_SP&255:this.REG_SP&255&(i+1&255);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 73:{l===0&&this.load(h);let f=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles?this.REG_Y:this.REG_Y&(i+1&255);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 74:{l===0&&this.load(h);let f=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles?this.REG_X:this.REG_X&(i+1&255);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 75:{t=this.load(h)&(this.REG_SP&255),this.REG_ACC=this.REG_X=this.F_ZERO=t,this.REG_SP=256|t,this.F_SIGN=t>>7&1,n+=l;break}case 76:{this.REG_ACC=this.F_ZERO=(this.REG_ACC|255)&this.REG_X&this.load(h),this.F_SIGN=this.REG_ACC>>7&1;break}case 77:{this.REG_ACC=this.REG_X=this.F_ZERO=(this.REG_ACC|255)&this.load(h),this.F_SIGN=this.REG_ACC>>7&1;break}default:throw new Error(`Game crashed, invalid opcode at address $${p.toString(16)}`)}if(this.instrBusCycles=5&&(this.nmiImmediate=!0,this.nmiRaised=!1),this.nmiPending&&(this.REG_PC_NEW=this.REG_PC,this.F_INTERRUPT_NEW=this.F_INTERRUPT,this.doNonMaskableInterrupt(this.getStatus()&239),this.REG_PC=this.REG_PC_NEW,this.F_INTERRUPT=this.F_INTERRUPT_NEW,this.F_BRK=this.F_BRK_NEW,this.nmiPending=!1,s=7),this._cpuCycleBase+=n+s,n+s}loadFromCartridge(t){return this.nes.mmap.load(t)}_loadFromCartridgePlain(t){return this.nes.mmap.load(t)}_loadFromCartridgeWithGameGenie(t){let e=this.nes.mmap.load(t);return this.nes.gameGenie.applyCodes(t,e)}_updateCartridgeLoader(){this.nes.gameGenie.enabled&&this.nes.gameGenie.patches.length>0?this.loadFromCartridge=this._loadFromCartridgeWithGameGenie:delete this.loadFromCartridge}load(t){if(t<8192)this.dataBus=this.mem[t&2047],this.instrBusCycles++,this.nes.ppu.advanceDots(3);else if(t>=16384){if(t===16405){this.nes.papu.advanceFrameCounter(this.instrBusCycles-this.apuCatchupCycles),this.apuCatchupCycles=this.instrBusCycles;let e=this.loadFromCartridge(t);return this.instrBusCycles++,this.nes.ppu.advanceDots(3),e}this.dataBus=this.loadFromCartridge(t),this.instrBusCycles++,this.nes.ppu.advanceDots(3)}else this.instrBusCycles++,this.dataBus=this.loadFromCartridge(t),this.nes.ppu.advanceDots(3);return this.dataBus}loadDirect(t){return t<8192?this.dataBus=this.mem[t&2047]:this.dataBus=this.loadFromCartridge(t),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus}load16bit(t){let e;return t<8191?(this.dataBus=this.mem[t&2047],e=this.dataBus,this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus=this.mem[t+1&2047],this.instrBusCycles++,this.nes.ppu.advanceDots(3),e|this.dataBus<<8):(this.dataBus=this.loadFromCartridge(t),e=this.dataBus,this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus=this.loadFromCartridge(t+1),this.instrBusCycles++,this.nes.ppu.advanceDots(3),e|this.dataBus<<8)}write(t,e){t>=8192&&t<16384?(this.instrBusCycles++,this.dataBus=e,this.nes.mmap.write(t,e),this.nes.ppu.advanceDots(3)):(this.dataBus=e,t<8192?this.mem[t&2047]=e:this.nes.mmap.write(t,e),this.instrBusCycles++,this.nes.ppu.advanceDots(3))}requestIrq(t){this.irqRequested&&t===this.IRQ_NORMAL||(this.irqRequested=!0,this.irqType=t)}push(t){this.dataBus=t,this.mem[this.REG_SP|256]=t,this.REG_SP--,this.REG_SP=this.REG_SP&255,this.instrBusCycles++,this.nes.ppu.advanceDots(3)}pull(){return this.REG_SP++,this.REG_SP=this.REG_SP&255,this.dataBus=this.mem[256|this.REG_SP],this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus}_cyclesToNextDmcFetch(){if(!this.nes.papu)return 2147483647;let t=this.nes.papu.dmc;if(!t||!t.isEnabled||t.dmaFrequency<=0||!t.hasSample)return 2147483647;let e=t.dmaFrequency>>3,i=t.shiftCounter+7>>3;return i<=0&&(i=e),i+(t.dmaCounter-1)*e}_takeBranch(t,e){let i=t+3&65535,s=e+1&65535;if(this.load(i),(i&65280)!==(s&65280)){let r=i&65280|s&255;return this.load(r),this.REG_PC=e,2}return this.REG_PC=e,1}pageCrossed(t,e){return(t&65280)!==(e&65280)}haltCycles(t){this.cyclesToHalt+=t}doNonMaskableInterrupt(t){if(this.nes.mmap===null)return;this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW++,this.push(this.REG_PC_NEW>>8&255),this.push(this.REG_PC_NEW&255),this.F_INTERRUPT_NEW=1,this.push(t),this.dataBus=this.loadFromCartridge(65530),this.instrBusCycles++,this.nes.ppu.advanceDots(3);let e=this.dataBus;this.dataBus=this.loadFromCartridge(65531),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW=e|this.dataBus<<8,this.REG_PC_NEW--}doResetInterrupt(){this.dataBus=this.loadFromCartridge(65532),this.instrBusCycles++,this.nes.ppu.advanceDots(3);let t=this.dataBus;this.dataBus=this.loadFromCartridge(65533),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW=t|this.dataBus<<8,this.REG_PC_NEW--}doIrq(t){this.REG_PC_NEW++,this.push(this.REG_PC_NEW>>8&255),this.push(this.REG_PC_NEW&255),this.push(t),this.F_INTERRUPT_NEW=1,this.F_BRK_NEW=0,this.dataBus=this.loadFromCartridge(65534),this.instrBusCycles++,this.nes.ppu.advanceDots(3);let e=this.dataBus;this.dataBus=this.loadFromCartridge(65535),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW=e|this.dataBus<<8,this.REG_PC_NEW--}getStatus(){return this.F_CARRY|(this.F_ZERO===0?1:0)<<1|this.F_INTERRUPT<<2|this.F_DECIMAL<<3|this.F_BRK<<4|this.F_NOTUSED<<5|this.F_OVERFLOW<<6|this.F_SIGN<<7}setStatus(t){this.F_CARRY=t&1,this.F_ZERO=(t>>1&1)===1?0:1,this.F_INTERRUPT=t>>2&1,this.F_DECIMAL=t>>3&1,this.F_BRK=t>>4&1,this.F_NOTUSED=t>>5&1,this.F_OVERFLOW=t>>6&1,this.F_SIGN=t>>7&1}setStatusFromStack(t){this.F_CARRY=t&1,this.F_ZERO=(t>>1&1)===1?0:1,this.F_INTERRUPT=t>>2&1,this.F_DECIMAL=t>>3&1,this.F_OVERFLOW=t>>6&1,this.F_SIGN=t>>7&1}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(Ft,"JSON_PROPERTIES",["mem","cyclesToHalt","dataBus","irqRequested","irqType","nmiRaised","nmiPending","nmiImmediate","REG_ACC","REG_X","REG_Y","REG_SP","REG_PC","REG_PC_NEW","REG_STATUS","F_CARRY","F_DECIMAL","F_INTERRUPT","F_INTERRUPT_NEW","F_OVERFLOW","F_SIGN","F_ZERO","F_NOTUSED","F_NOTUSED_NEW","F_BRK","F_BRK_NEW","_cpuCycleBase"]);ce=Ft});var N,me,fe,Je=S(()=>{H();N=class N{constructor(){this.state=new Array(8);for(let t=0;t{pe=class{constructor(){this.pix=new Uint8Array(64),this.initialized=!1,this.opaque=new Uint8Array(8)}setBuffer(t){for(let e=0;e<8;e++)this.setScanline(e,t[e],t[e+8])}setScanline(t,e,i){this.initialized=!0;let s=t<<3;for(let r=0;r<8;r++)this.pix[s+r]=(e>>7-r&1)+((i>>7-r&1)<<1),this.pix[s+r]===0&&(this.opaque[t]=!1)}render(t,e,i,s,r,a,n,l,o,p,h,d,x){if(a<-7||a>=256||n<-7||n>=240)return;a<0&&(e-=a),a+s>=256&&(s=256-a),n<0&&(i-=n),n+r>=240&&(r=240-n);let m,f,R,_;if(!p&&!h){m=(n<<8)+a,f=0;for(let E=0;E<8;E++){for(let g=0;g<8;g++)g>=e&&g=i&&E=e&&g=i&&E=e&&g=i&&E=e&&g=i&&E{ue=class{constructor(t,e,i){this.width=t,this.height=e,this.name=i,this.tile=new Uint8Array(t*e),this.attrib=new Uint8Array(t*e)}getTileIndex(t,e){return this.tile[e*this.width+t]}getAttrib(t,e){return this.attrib[e*this.width+t]}writeAttrib(t,e){let i=t%8*4,s=Math.floor(t/8)*4,r,a,n,l;for(let o=0;o<2;o++)for(let p=0;p<2;p++){r=e>>2*(o*2+p)&3;for(let h=0;h<2;h++)for(let d=0;d<2;d++)a=i+p*2+d,n=s+o*2+h,l=n*this.width+a,this.attrib[l]=r<<2&12}}toJSON(){return{tile:this.tile.slice(0),attrib:this.attrib.slice(0)}}fromJSON(t){this.tile.set(t.tile),this.attrib.set(t.attrib)}},Xe=ue});var xe,Ze,Ke=S(()=>{xe=class{constructor(){this.curTable=new Uint32Array(64),this.emphTable=new Array(8),this.currentEmph=-1}loadNTSCPalette(){this.curTable=new Uint32Array([5395026,11796480,10485760,11599933,7602281,91,95,6208,12048,543240,26368,1196544,7153664,0,0,0,12899815,16728064,14421538,16729963,14090399,6818519,6588,21681,27227,35843,43776,2918400,10777088,0,0,0,16316664,16755516,16742785,16735173,16730354,14633471,4681215,46327,57599,58229,259115,7911470,15065624,7895160,0,0,16777215,16773822,16300216,16300248,16758527,16761855,13095423,10148607,8973816,8650717,12122296,16119980,16777136,16308472,0,0]),this.makeTables(),this.setEmphasis(0)}loadPALPalette(){this.curTable=new Uint32Array([5395026,11796480,10485760,11599933,7602281,91,95,6208,12048,543240,26368,1196544,7153664,0,0,0,12899815,16728064,14421538,16729963,14090399,6818519,6588,21681,27227,35843,43776,2918400,10777088,0,0,0,16316664,16755516,16742785,16735173,16730354,14633471,4681215,46327,57599,58229,259115,7911470,15065624,7895160,0,0,16777215,16773822,16300216,16300248,16758527,16761855,13095423,10148607,8973816,8650717,12122296,16119980,16777136,16308472,0,0]),this.makeTables(),this.setEmphasis(0)}makeTables(){let t,e,i,s,r,a,n,l;for(let o=0;o<8;o++)for(a=1,n=1,l=1,(o&1)!==0&&(n=.75,l=.75),(o&2)!==0&&(a=.75,l=.75),(o&4)!==0&&(a=.75,n=.75),this.emphTable[o]=new Uint32Array(64),r=0;r<64;r++)s=this.curTable[r],t=Math.floor(this.getRed(s)*a),e=Math.floor(this.getGreen(s)*n),i=Math.floor(this.getBlue(s)*l),this.emphTable[o][r]=this.getRgb(t,e,i)}setEmphasis(t){if(t!==this.currentEmph){this.currentEmph=t;for(let e=0;e<64;e++)this.curTable[e]=this.emphTable[t][e]}}getEntry(t){return this.curTable[t]}getRed(t){return t>>16&255}getGreen(t){return t>>8&255}getBlue(t){return t&255}getRgb(t,e,i){return t<<16|e<<8|i}loadDefaultPalette(){this.curTable[0]=this.getRgb(117,117,117),this.curTable[1]=this.getRgb(39,27,143),this.curTable[2]=this.getRgb(0,0,171),this.curTable[3]=this.getRgb(71,0,159),this.curTable[4]=this.getRgb(143,0,119),this.curTable[5]=this.getRgb(171,0,19),this.curTable[6]=this.getRgb(167,0,0),this.curTable[7]=this.getRgb(127,11,0),this.curTable[8]=this.getRgb(67,47,0),this.curTable[9]=this.getRgb(0,71,0),this.curTable[10]=this.getRgb(0,81,0),this.curTable[11]=this.getRgb(0,63,23),this.curTable[12]=this.getRgb(27,63,95),this.curTable[13]=this.getRgb(0,0,0),this.curTable[14]=this.getRgb(0,0,0),this.curTable[15]=this.getRgb(0,0,0),this.curTable[16]=this.getRgb(188,188,188),this.curTable[17]=this.getRgb(0,115,239),this.curTable[18]=this.getRgb(35,59,239),this.curTable[19]=this.getRgb(131,0,243),this.curTable[20]=this.getRgb(191,0,191),this.curTable[21]=this.getRgb(231,0,91),this.curTable[22]=this.getRgb(219,43,0),this.curTable[23]=this.getRgb(203,79,15),this.curTable[24]=this.getRgb(139,115,0),this.curTable[25]=this.getRgb(0,151,0),this.curTable[26]=this.getRgb(0,171,0),this.curTable[27]=this.getRgb(0,147,59),this.curTable[28]=this.getRgb(0,131,139),this.curTable[29]=this.getRgb(0,0,0),this.curTable[30]=this.getRgb(0,0,0),this.curTable[31]=this.getRgb(0,0,0),this.curTable[32]=this.getRgb(255,255,255),this.curTable[33]=this.getRgb(63,191,255),this.curTable[34]=this.getRgb(95,151,255),this.curTable[35]=this.getRgb(167,139,253),this.curTable[36]=this.getRgb(247,123,255),this.curTable[37]=this.getRgb(255,119,183),this.curTable[38]=this.getRgb(255,119,99),this.curTable[39]=this.getRgb(255,155,59),this.curTable[40]=this.getRgb(243,191,63),this.curTable[41]=this.getRgb(131,211,19),this.curTable[42]=this.getRgb(79,223,75),this.curTable[43]=this.getRgb(88,248,152),this.curTable[44]=this.getRgb(0,235,219),this.curTable[45]=this.getRgb(0,0,0),this.curTable[46]=this.getRgb(0,0,0),this.curTable[47]=this.getRgb(0,0,0),this.curTable[48]=this.getRgb(255,255,255),this.curTable[49]=this.getRgb(171,231,255),this.curTable[50]=this.getRgb(199,215,255),this.curTable[51]=this.getRgb(215,203,255),this.curTable[52]=this.getRgb(255,199,255),this.curTable[53]=this.getRgb(255,199,219),this.curTable[54]=this.getRgb(255,191,179),this.curTable[55]=this.getRgb(255,219,171),this.curTable[56]=this.getRgb(255,231,163),this.curTable[57]=this.getRgb(227,255,163),this.curTable[58]=this.getRgb(171,243,191),this.curTable[59]=this.getRgb(179,255,207),this.curTable[60]=this.getRgb(159,255,243),this.curTable[61]=this.getRgb(0,0,0),this.curTable[62]=this.getRgb(0,0,0),this.curTable[63]=this.getRgb(0,0,0),this.makeTables(),this.setEmphasis(0)}},Ze=xe});var Nt,de,Qe=S(()=>{Bt();H();je();Ke();Nt=class{constructor(t){c(this,"STATUS_VRAMWRITE",4);c(this,"STATUS_SLSPRITECOUNT",5);c(this,"STATUS_SPRITE0HIT",6);c(this,"STATUS_VBLANK",7);this.nes=t,this.showSpr0Hit=!1,this.clipToTvSize=!0;let e;for(this.vramMem=new Uint8Array(32768),this.spriteMem=new Uint8Array(256),this.vramAddress=null,this.vramTmpAddress=null,this.vramBufferedReadValue=0,this.firstWrite=!0,this.openBusLatch=0,this.openBusDecayFrames=0,this.sramAddress=0,this.currentMirroring=-1,this.nmiOutput=!1,this.nmiSuppressed=!1,this.vblankPending=!1,this.frameEnded=!1,this.dummyCycleToggle=!1,this.validTileData=!1,this.scanlineAlreadyRendered=null,this.f_nmiOnVblank=0,this.f_spriteSize=0,this.f_bgPatternTable=0,this.f_spPatternTable=0,this.f_addrInc=0,this.f_nTblAddress=0,this.f_color=0,this.f_spVisibility=0,this.f_bgVisibility=0,this.f_spClipping=0,this.f_bgClipping=0,this.f_dispType=0,this.cntFV=0,this.cntV=0,this.cntH=0,this.cntVT=0,this.cntHT=0,this.regFV=0,this.regV=0,this.regH=0,this.regVT=0,this.regHT=0,this.regFH=0,this.regS=0,this.curNt=null,this.attrib=new Uint8Array(32),this.buffer=new Uint32Array(256*240),this.bgbuffer=new Uint32Array(256*240),this.pixrendered=new Uint32Array(256*240),this.validTileData=null,this.scantile=new Array(32),this.scanline=0,this.lastRenderedScanline=-1,this.curX=0,this.sprX=new Uint8Array(64),this.sprY=new Uint8Array(64),this.sprTile=new Uint8Array(64),this.sprCol=new Uint8Array(64),this.vertFlip=new Uint8Array(64),this.horiFlip=new Uint8Array(64),this.bgPriority=new Uint8Array(64),this.spr0HitX=0,this.spr0HitY=0,this.hitSpr0=!1,this.secondaryOAM=new Uint8Array(32),this.secondaryOAM.fill(255),this.spritesFound=0,this.sprite0InSecondary=!1,this.scanlineSpriteCount=new Uint8Array(241),this.scanlineSecondaryOAM=new Uint8Array(7712),this.scanlineSprite0=new Uint8Array(241),this.sprPalette=new Uint32Array(16),this.imgPalette=new Uint32Array(16),this.ptTile=new Array(512),e=0;e<512;e++)this.ptTile[e]=new xt;for(this.ntable1=new Array(4),this.currentMirroring=-1,this.nameTable=new Array(4),e=0;e<4;e++)this.nameTable[e]=new Xe(32,32,`Nt${e}`);for(this.vramMirrorTable=new Uint16Array(32768),e=0;e<32768;e++)this.vramMirrorTable[e]=e;this.palTable=new Ze,this.palTable.loadNTSCPalette(),this.updateControlReg1(0),this.updateControlReg2(0)}setMirroring(t){if(t!==this.currentMirroring){this.currentMirroring=t,this.triggerRendering(),this.vramMirrorTable===null&&(this.vramMirrorTable=new Uint16Array(32768));for(let e=0;e<32768;e++)this.vramMirrorTable[e]=e;this.defineMirrorRegion(16160,16128,32),this.defineMirrorRegion(16192,16128,32),this.defineMirrorRegion(16256,16128,32),this.defineMirrorRegion(16320,16128,32),this.defineMirrorRegion(12288,8192,3840),this.defineMirrorRegion(16384,0,16384),t===this.nes.rom.HORIZONTAL_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=0,this.ntable1[2]=1,this.ntable1[3]=1,this.defineMirrorRegion(9216,8192,1024),this.defineMirrorRegion(11264,10240,1024)):t===this.nes.rom.VERTICAL_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=1,this.ntable1[2]=0,this.ntable1[3]=1,this.defineMirrorRegion(10240,8192,1024),this.defineMirrorRegion(11264,9216,1024)):t===this.nes.rom.SINGLESCREEN_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=0,this.ntable1[2]=0,this.ntable1[3]=0,this.defineMirrorRegion(9216,8192,1024),this.defineMirrorRegion(10240,8192,1024),this.defineMirrorRegion(11264,8192,1024)):t===this.nes.rom.SINGLESCREEN_MIRRORING2?(this.ntable1[0]=1,this.ntable1[1]=1,this.ntable1[2]=1,this.ntable1[3]=1,this.defineMirrorRegion(9216,9216,1024),this.defineMirrorRegion(10240,9216,1024),this.defineMirrorRegion(11264,9216,1024)):(this.ntable1[0]=0,this.ntable1[1]=1,this.ntable1[2]=2,this.ntable1[3]=3)}}defineMirrorRegion(t,e,i){for(let s=0;s0&&(this.openBusDecayFrames--,this.openBusDecayFrames===0&&(this.openBusLatch=0)),this.lastRenderedScanline<239&&this.renderFramePartially(this.lastRenderedScanline+1,240-this.lastRenderedScanline),this.endFrame(),this.lastRenderedScanline=-1}_fireVblankSet(t,e){this.vblankPending=!1,this.nmiSuppressed||(this.setStatusFlag(this.STATUS_VBLANK,!0),this._updateNmiOutput(),t.nmiRaised&&(t.nmiDotsRemainingInStep=e)),this.nmiSuppressed=!1,this.startVBlank(),this.frameEnded=!0}_fireVblankClear(t,e){t.nmiRaised&&e&&(t.nmiPending=!0,t.nmiRaised=!1),this.setStatusFlag(this.STATUS_VBLANK,!1),this.setStatusFlag(this.STATUS_SPRITE0HIT,!1),this.setStatusFlag(this.STATUS_SLSPRITECOUNT,!1),this.hitSpr0=!1,this.spr0HitX=-1,this.spr0HitY=-1,this._updateNmiOutput()}advanceDots(t){let e=this.curX+t;if(e<341&&!(this.scanline===0&&this.vblankPending&&this.curX<=1&&e>=1)&&!(this.scanline===20&&this.curX<=1&&e>=1)&&(this.spr0HitX=e)){this.curX=e;return}let i=this.nes.cpu;for(let s=0;s=21&&this.scanline<=260){let t=this.scanline+1-21;this.performOAMCorruption(),(this.f_bgVisibility===1||this.f_spVisibility===1)&&(this.scanlineAlreadyRendered||(this.cntHT=this.regHT,this.cntH=this.regH,this.renderBgScanline(!0,t)),this.scanlineAlreadyRendered=!1,!this.hitSpr0&&this.f_bgVisibility===1&&this.f_spVisibility===1&&this.scanlineSprite0[t]&&this.checkSprite0(t)&&(this.hitSpr0=!0)),t<240&&this.evaluateSprites(t+1),!this.hitSpr0&&this.f_bgVisibility===1&&this.f_spVisibility===1&&(this._precomputeSprite0Hit(t+1),this.spr0HitX!==-1&&(this.hitSpr0=!0)),(this.f_bgVisibility===1||this.f_spVisibility===1)&&this.nes.mmap.clockIrqCounter()}}this.scanline++,this.regsToAddress(),this.cntsToAddress()}startFrame(){this.scanlineSpriteCount.fill(0),this.scanlineSprite0.fill(0);let t;if(this.f_dispType===0)t=this.imgPalette[0];else switch(this.f_color){case 0:t=0;break;case 1:t=65280;break;case 2:t=255;break;case 3:t=0;break;case 4:t=16711680;break;default:t=0}this.buffer.fill(t),this.pixrendered.fill(65)}endFrame(){let t,e,i=this.buffer;if(this.showSpr0Hit){if(this.sprX[0]>=0&&this.sprX[0]<256&&this.sprY[0]>=0&&this.sprY[0]<240){for(t=0;t<256;t++)i[(this.sprY[0]<<8)+t]=16733525;for(t=0;t<240;t++)i[(t<<8)+this.sprX[0]]=16733525}if(this.spr0HitX>=0&&this.spr0HitX<256&&this.spr0HitY>=0&&this.spr0HitY<240){for(t=0;t<256;t++)i[(this.spr0HitY<<8)+t]=5635925;for(t=0;t<240;t++)i[(t<<8)+this.spr0HitX]=5635925}}if(this.clipToTvSize||this.f_bgClipping===0||this.f_spClipping===0)for(e=0;e<240;e++)i.fill(0,e<<8,(e<<8)+8);if(this.clipToTvSize){for(e=0;e<240;e++)i.fill(0,(e<<8)+248,(e<<8)+256);i.fill(0,0,2048),i.fill(0,59392,61440)}this.nes.ui.writeFrame(i)}updateControlReg1(t){this.triggerRendering(),this.f_nmiOnVblank=t>>7&1,this.f_spriteSize=t>>5&1,this.f_bgPatternTable=t>>4&1,this.f_spPatternTable=t>>3&1,this.f_addrInc=t>>2&1,this.f_nTblAddress=t&3,this.regV=t>>1&1,this.regH=t&1,this.regS=t>>4&1,this._updateNmiOutput()}_updateNmiOutput(){let t=(this.nes.cpu.mem[8194]&128)!==0,e=this.f_nmiOnVblank!==0&&t;if(e&&!this.nmiOutput)this.nes.cpu.nmiRaised=!0,this.nes.cpu.nmiRaisedAtCycle=this.nes.cpu.instrBusCycles;else if(!e&&this.nmiOutput&&this.nes.cpu.nmiRaised){let i=this.nes.cpu.instrBusCycles-this.nes.cpu.nmiRaisedAtCycle;(i===0||i===1&&this.nes.cpu.nmiDotsRemainingInStep===0)&&(this.nes.cpu.nmiRaised=!1)}this.nmiOutput=e}updateControlReg2(t){if(this.triggerRendering(),this.f_color=t>>5&7,this.f_spVisibility=t>>4&1,this.f_bgVisibility=t>>3&1,this.f_spClipping=t>>2&1,this.f_bgClipping=t>>1&1,this.f_dispType=t&1,!this.hitSpr0&&this.f_bgVisibility===1&&this.f_spVisibility===1&&this.scanline>=21&&this.scanline<=260){let e=this.scanline+1-21;this.scanlineSprite0[e]&&this.checkSprite0(e)&&(this.hitSpr0=!0)}this.f_dispType===0&&this.palTable.setEmphasis(this.f_color),this.updatePalettes()}setStatusFlag(t,e){let i=1<=20&&this.scanline<=260){let i=this.curX;if(i<=64)return 255;if(i<=256){let s=this.spriteMem[this.sramAddress];return(this.sramAddress&3)===2&&(s&=227),s}else return 255}let e=this.spriteMem[this.sramAddress];return(this.sramAddress&3)===2&&(e&=227),e}sramWrite(t){(this.f_spVisibility===1||this.f_bgVisibility===1)&&this.scanline>=20&&this.scanline<=260?this.sramAddress=this.sramAddress+4&252:(this.spriteMem[this.sramAddress]=t,this.spriteRamWriteUpdate(this.sramAddress,t),this.sramAddress++,this.sramAddress%=256)}scrollWrite(t){this.triggerRendering(),this.firstWrite?(this.regHT=t>>3&31,this.regFH=t&7):(this.regFV=t&7,this.regVT=t>>3&31),this.firstWrite=!this.firstWrite}writeVRAMAddress(t){this.firstWrite?(this.regFV=t>>4&3,this.regV=t>>3&1,this.regH=t>>2&1,this.regVT=this.regVT&7|(t&3)<<3):(this.triggerRendering(),this.regVT=this.regVT&24|t>>5&7,this.regHT=t&31,this.cntFV=this.regFV,this.cntV=this.regV,this.cntH=this.regH,this.cntVT=this.regVT,this.cntHT=this.regHT,this.checkSprite0(this.scanline+1-21)),this.firstWrite=!this.firstWrite,this.cntsToAddress(),this.vramAddress<8192&&this.nes.mmap.latchAccess(this.vramAddress)}vramLoad(){let t;if(this.cntsToAddress(),this.regsToAddress(),this.vramAddress<=16127)return t=this.vramBufferedReadValue,this.vramAddress<8192?this.vramBufferedReadValue=this.vramMem[this.vramAddress]:this.vramBufferedReadValue=this.mirroredLoad(this.vramAddress),this.vramAddress<8192&&this.nes.mmap.latchAccess(this.vramAddress),this._incrementVramAddress(),this.cntsFromAddress(),this.regsFromAddress(),t;let e=this.vramAddress&31;return(e&19)===16&&(e&=15),t=this.vramMem[16128+e]&63|this.openBusLatch&192,this.vramBufferedReadValue=this.mirroredLoad(this.vramAddress&12287),this._incrementVramAddress(),this.cntsFromAddress(),this.regsFromAddress(),t}vramWrite(t){this.triggerRendering(),this.cntsToAddress(),this.regsToAddress(),this.vramAddress>=8192?this.mirroredWrite(this.vramAddress,t):(this.nes.mmap.canWriteChr(this.vramAddress)&&this.writeMem(this.vramAddress,t),this.nes.mmap.latchAccess(this.vramAddress)),this._incrementVramAddress(),this.regsFromAddress(),this.cntsFromAddress()}sramDMA(t){let e=t*256,i;for(let n=0;n<256;n++){i=this.nes.cpu.mem[e+n];let l=this.sramAddress+n&255;this.spriteMem[l]=i,this.spriteRamWriteUpdate(l,i)}let s=this.nes.cpu,a=(s._cpuCycleBase+s.instrBusCycles)%2===0?514:513;s.haltCycles(a)}regsFromAddress(){let t=this.vramTmpAddress>>8&255;this.regFV=t>>4&7,this.regV=t>>3&1,this.regH=t>>2&1,this.regVT=this.regVT&7|(t&3)<<3,t=this.vramTmpAddress&255,this.regVT=this.regVT&24|t>>5&7,this.regHT=t&31}_incrementVramAddress(){let t=this.f_spVisibility===1||this.f_bgVisibility===1,e=this.scanline>=20&&this.scanline<=260;if(t&&e)if((this.vramAddress&31)===31?(this.vramAddress&=-32,this.vramAddress^=1024):this.vramAddress+=1,(this.vramAddress&28672)!==28672)this.vramAddress+=4096;else{this.vramAddress&=-28673;let i=this.vramAddress>>5&31;i===29?(i=0,this.vramAddress^=2048):i===31?i=0:i+=1,this.vramAddress=this.vramAddress&-993|i<<5}else this.vramAddress+=this.f_addrInc===1?32:1}cntsFromAddress(){let t=this.vramAddress>>8&255;this.cntFV=t>>4&3,this.cntV=t>>3&1,this.cntH=t>>2&1,this.cntVT=this.cntVT&7|(t&3)<<3,t=this.vramAddress&255,this.cntVT=this.cntVT&24|t>>5&7,this.cntHT=t&31}regsToAddress(){let t=(this.regFV&7)<<4;t|=(this.regV&1)<<3,t|=(this.regH&1)<<2,t|=this.regVT>>3&3;let e=(this.regVT&7)<<5;e|=this.regHT&31,this.vramTmpAddress=(t<<8|e)&32767}cntsToAddress(){let t=(this.cntFV&7)<<4;t|=(this.cntV&1)<<3,t|=(this.cntH&1)<<2,t|=this.cntVT>>3&3;let e=(this.cntVT&7)<<5;e|=this.cntHT&31,this.vramAddress=(t<<8|e)&32767}incTileCounter(t){for(let e=t;e!==0;e--)this.cntHT++,this.cntHT===32&&(this.cntHT=0,this.cntVT++,this.cntVT>=30&&(this.cntH++,this.cntH===2&&(this.cntH=0,this.cntV++,this.cntV===2&&(this.cntV=0,this.cntFV++,this.cntFV&=7))))}mirroredLoad(t){return this.vramMem[this.vramMirrorTable[t]]}mirroredWrite(t,e){if(t>=16128&&t<16160)t===16128||t===16144?(this.writeMem(16128,e),this.writeMem(16144,e)):t===16132||t===16148?(this.writeMem(16132,e),this.writeMem(16148,e)):t===16136||t===16152?(this.writeMem(16136,e),this.writeMem(16152,e)):t===16140||t===16156?(this.writeMem(16140,e),this.writeMem(16156,e)):this.writeMem(t,e);else if(t=21&&this.scanline<=260&&(this.renderFramePartially(this.lastRenderedScanline+1,this.scanline-21-this.lastRenderedScanline),this.lastRenderedScanline=this.scanline-21)}renderFramePartially(t,e){if(this._inRendering=!0,this.nes.mmap.onSpriteRender(),this.f_spVisibility===1&&this.renderSpritesPartially(t,e,1),this.f_bgVisibility===1){let i=t<<8,s=t+e<<8;s>61440&&(s=61440);let r=this.buffer,a=this.bgbuffer,n=this.pixrendered;for(let l=i;l255&&(r[l]=a[l])}this.f_spVisibility===1&&this.renderSpritesPartially(t,e,0),this.nes.mmap.onBgRender(),this._inRendering=!1,this.validTileData=!1}renderBgScanline(t,e){let i=this.regS===0?0:256,s=this.regS===0?0:4096,r=(e<<8)-this.regFH;if(this.curNt=this.ntable1[this.cntV+this.cntV+this.cntH],this.cntHT=this.regHT,this.cntH=this.regH,this.curNt=this.ntable1[this.cntV+this.cntV+this.cntH],e<240&&e-this.cntFV>=0){let a=this.cntFV<<3,n=this.scantile,l=this.attrib,o=this.ptTile,p=this.nameTable,h=this.imgPalette,d=this.pixrendered,x=t?this.bgbuffer:this.buffer,m=this.nes.mmap,f,R,_,E;this._inRendering=!0,this.nes.mmap.onBgRender(),this.f_spriteSize===1&&m.latchAccess(8168);for(let g=0;g<32;g++){if(e>=0){let L=p[this.curNt].getTileIndex(this.cntHT,this.cntVT);if(this.validTileData){if(f=n[g],typeof f=="undefined")continue;R=f.pix,_=l[g]}else{if(f=o[i+L],typeof f=="undefined")continue;if(R=f.pix,_=p[this.curNt].getAttrib(this.cntHT,this.cntVT),m.bgTileOverride){let W=m.getBgTileData(i,L,this.cntHT,this.cntVT);W&&(f=W.tile,R=f.pix,_=W.attrib)}n[g]=f,l[g]=_}let z=0,q=(g<<3)-this.regFH;if(q>-8)if(q<0&&(r-=q,z=-q),f.opaque[this.cntFV])for(;z<8;z++)x[r]=h[R[a+z]+_],d[r]|=256,r++;else for(;z<8;z++)E=R[a+z],E!==0&&(x[r]=h[E+_],d[r]|=256),r++;m.latchAccess(s+L*16+this.cntFV+8)}++this.cntHT===32&&(this.cntHT=0,this.cntH++,this.cntH%=2,this.curNt=this.ntable1[(this.cntV<<1)+this.cntH])}this._inRendering=!1,this.validTileData=!0}this.cntFV++,this.cntFV===8&&(this.cntFV=0,this.cntVT++,this.cntVT===30?(this.cntVT=0,this.cntV++,this.cntV%=2,this.curNt=this.ntable1[(this.cntV<<1)+this.cntH]):this.cntVT===32&&(this.cntVT=0),this.validTileData=!1)}performOAMCorruption(){if(!(this.f_spVisibility===1||this.f_bgVisibility===1)||this.sramAddress===0)return;let e=this.sramAddress&248;for(let i=0;i<8;i++)this.spriteMem[i]=this.spriteMem[e+i&255];for(let i=0;i<8;i++)this.spriteRamWriteUpdate(i,this.spriteMem[i])}evaluateSprites(t){if(!(this.f_spVisibility===1||this.f_bgVisibility===1))return;let i=t*32;for(let x=0;x<32;x++)this.scanlineSecondaryOAM[i+x]=255;this.scanlineSpriteCount[t]=0,this.scanlineSprite0[t]=0;let s=this.f_spriteSize===0?8:16,r=0,a=0,n=this.sramAddress>>2&63,l=this.sramAddress&3,o=0,p=n,h=!0,d=0;do{let x;r>=8?x=o:h?x=l:x=0,h=!1;let m=this.spriteMem[p*4+x&255];if(t>m&&t<=m+s)if(r<8){for(let f=0;f<4;f++)this.scanlineSecondaryOAM[i+a+f]=this.spriteMem[p*4+x+f&255];d===0&&(this.scanlineSprite0[t]=1),r++,a+=4}else{this.setStatusFlag(this.STATUS_SLSPRITECOUNT,!0);break}else r>=8&&(o=o+1&3);p=p+1&63,d++}while(p!==0);this.scanlineSpriteCount[t]=r;for(let x=0;x<32;x++)this.secondaryOAM[x]=this.scanlineSecondaryOAM[i+x];this.spritesFound=r,this.sprite0InSecondary=this.scanlineSprite0[t]===1,this.sramAddress=0}renderSpritesPartially(t,e,i){if(this.f_spVisibility!==1)return;let s=this.nes.mmap,r=this.ptTile,a=this.buffer,n=this.sprPalette,l=this.pixrendered;for(let o=t;o=240)continue;let p=this.scanlineSpriteCount[o],h=o*32;for(let d=0;d>7&1,E=f>>6&1,g=f>>5&1,L=(f&3)<<2;if(g===i)if(this.f_spriteSize===0){let z=this.f_spPatternTable===0?m:m+256,q=this.f_spPatternTable===0?0:4096,W=x+1,J=o-W;if(J<0||J>=8)continue;r[z].render(a,0,J,8,J+1,R,W,L,n,E,_,d,l),s.latchAccess(q+m*16+8)}else{let z=(m&1)!==0?4096:0,q=m&254,W=(m&1)!==0?q-1+256:q,J=x+1,j=o-J;if(j<0||j>=16)continue;let dt,rt;j<8?(dt=_?1:0,rt=j):(dt=_?0:1,rt=j-8),r[W+dt].render(a,0,rt,8,rt+1,R,J+(j<8?0:8),L,n,E,_,d,l),s.latchAccess(z+q*16+8),s.latchAccess(z+(q+1)*16+8)}}}}checkSprite0(t){if(this.spr0HitX=-1,this.spr0HitY=-1,t<0||t>=240||!this.scanlineSprite0[t]||this.scanlineSpriteCount[t]===0)return!1;let e=t*32,i=this.scanlineSecondaryOAM[e+0],s=this.scanlineSecondaryOAM[e+1],r=this.scanlineSecondaryOAM[e+2],a=this.scanlineSecondaryOAM[e+3],n=i+1,l=r>>7&1,o=r>>6&1,p=this.f_spClipping===0||this.f_bgClipping===0,h,d,x=this.nes.mmap;if(this.f_spriteSize===0){let m=this.f_spPatternTable===0?0:256;if(n<=t&&n+8>t&&a<256)return d=x.getSpritePatternTile(s+m),h=l?7-(t-n):t-n,h*=8,this._checkSpr0Pixels(d,h,a,o,t,p)}else if(n<=t&&n+16>t&&a<256)return h=l?15-(t-n):t-n,h<8?d=x.getSpritePatternTile(s+(l?1:0)+((s&1)!==0?255:0)):(d=x.getSpritePatternTile(s+(l?0:1)+((s&1)!==0?255:0)),h=l?15-h:h-8),h*=8,this._checkSpr0Pixels(d,h,a,o,t,p);return!1}_checkSpr0Pixels(t,e,i,s,r,a){let n=r*256+i;for(let l=0;l<8;l++){let o=s?7-l:l,p=i+l;if(p>=0&&p<255){if(a&&p<8){n++;continue}if(n>=0&&n<61440&&this.pixrendered[n]>255&&t.pix[e+o]!==0)return this.spr0HitX=p,this.spr0HitY=r,!0}n++}return!1}_precomputeSprite0Hit(t){if(t<1||t>239||!this.scanlineSprite0[t]||this.scanlineSpriteCount[t]===0)return!1;let e=t*32,i=this.scanlineSecondaryOAM[e+0],s=this.scanlineSecondaryOAM[e+1],r=this.scanlineSecondaryOAM[e+2],a=this.scanlineSecondaryOAM[e+3],n=i+1,l=r>>7&1,o=r>>6&1,p=this.f_spClipping===0||this.f_bgClipping===0,h=this.f_spriteSize===0?8:16;if(!(n<=t&&n+h>t)||a>=256)return!1;let d=l?h-1-(t-n):t-n,x,m;if(this.f_spriteSize===0){let g=this.f_spPatternTable===0?0:256;x=this.ptTile[s+g],m=d*8}else{let g=(s&1)!==0?256:0,L=s&-2;d<8?(x=this.ptTile[L+g+(l?1:0)],m=d*8):(x=this.ptTile[L+g+(l?0:1)],m=(d-8)*8)}if(!x)return!1;let f=this.cntFV,R=this.cntVT,_=this.cntV,E=this.regS===0?0:256;for(let g=0;g<8;g++){let L=a+g;if(L>=255||p&&L<8)continue;let z=o?7-g:g;if(x.pix[m+z]===0)continue;let q=L+this.regFH>>3,W=this.regHT+q,J=this.regH;W>=32&&(W-=32,J^=1);let j=this.ntable1[(_<<1)+J],dt=this.nameTable[j].getTileIndex(W,R),rt=this.ptTile[E+dt];if(!rt)continue;let is=L+this.regFH&7;if(rt.pix[f*8+is]!==0)return this.spr0HitX=L,this.spr0HitY=t-1,!0}return!1}writeMem(t,e){this.vramMem[t]=e,t<8192?(this.vramMem[t]=e,this.patternWrite(t,e)):t>=8192&&t<9152?this.nameTableWrite(this.ntable1[0],t-8192,e):t>=9152&&t<9216?this.attribTableWrite(this.ntable1[0],t-9152,e):t>=9216&&t<10176?this.nameTableWrite(this.ntable1[1],t-9216,e):t>=10176&&t<10240?this.attribTableWrite(this.ntable1[1],t-10176,e):t>=10240&&t<11200?this.nameTableWrite(this.ntable1[2],t-10240,e):t>=11200&&t<11264?this.attribTableWrite(this.ntable1[2],t-11200,e):t>=11264&&t<12224?this.nameTableWrite(this.ntable1[3],t-11264,e):t>=12224&&t<12288?this.attribTableWrite(this.ntable1[3],t-12224,e):t>=16128&&t<16160&&this.updatePalettes()}updatePalettes(){let t;for(t=0;t<16;t++)this.f_dispType===0?this.imgPalette[t]=this.palTable.getEntry(this.vramMem[16128+t]&63):this.imgPalette[t]=this.palTable.getEntry(this.vramMem[16128+t]&48);for(t=0;t<16;t++)this.f_dispType===0?this.sprPalette[t]=this.palTable.getEntry(this.vramMem[16144+t]&63):this.sprPalette[t]=this.palTable.getEntry(this.vramMem[16144+t]&48)}patternWrite(t,e){let i=t>>4,s=t&15;s<8?this.ptTile[i].setScanline(s,e,this.vramMem[t+8]):this.ptTile[i].setScanline(s-8,this.vramMem[t-8],e)}nameTableWrite(t,e,i){this.nameTable[t].tile[e]=i;let s=this.scanline+1-21;this.checkSprite0(s)}attribTableWrite(t,e,i){this.nameTable[t].writeAttrib(e,i),this.nameTable[t].tile[960+e]=i}spriteRamWriteUpdate(t,e){let i=t>>2;if(i===0){let s=this.scanline+1-21;this.checkSprite0(s)}switch(t&3){case 0:this.sprY[i]=e;break;case 1:this.sprTile[i]=e;break;case 2:this.vertFlip[i]=e>>7&1,this.horiFlip[i]=e>>6&1,this.bgPriority[i]=e>>5&1,this.sprCol[i]=(e&3)<<2;break;case 3:this.sprX[i]=e;break}}isPixelWhite(t,e){return this.triggerRendering(),this.nes.ppu.buffer[(e<<8)+t]===16777215}toJSON(){let t,e=w(this);for(e.nameTable=[],t=0;t=0&&(this.scantile[e]=this.ptTile[i])}for(e=0;e{H();U=class U{constructor(t){this.papu=t,this.isEnabled=!1,this.hasSample=!1,this.irqGenerated=!1,this.playMode=U.MODE_NORMAL,this.dmaFrequency=0,this.dmaCounter=0,this.deltaCounter=0,this.playStartAddress=0,this.playAddress=0,this.playLength=0,this.playLengthCounter=0,this.sample=0,this.dacLsb=0,this.shiftCounter=0,this.reg4012=0,this.reg4013=0,this.data=0,this.lastFetchedByte=0}clockDmc(){this.hasSample&&((this.data&1)===0?this.deltaCounter>0&&this.deltaCounter--:this.deltaCounter<63&&this.deltaCounter++,this.sample=this.isEnabled?(this.deltaCounter<<1)+this.dacLsb:0,this.data>>=1),this.dmaCounter--,this.dmaCounter<=0&&(this.hasSample=!1,this.endOfSample(),this.dmaCounter=8),this.irqGenerated&&this.papu.nes.cpu.requestIrq(this.papu.nes.cpu.IRQ_NORMAL)}endOfSample(){this.playLengthCounter===0&&this.playMode===U.MODE_LOOP&&(this.playAddress=this.playStartAddress,this.playLengthCounter=this.playLength),this.playLengthCounter>0&&(this.nextSample(),this.playLengthCounter===0&&this.playMode===U.MODE_IRQ&&(this.irqGenerated=!0))}nextSample(){this.data=this.papu.nes.mmap.load(this.playAddress),this.lastFetchedByte=this.data,this.papu.nes.cpu.haltCycles(4),this.playLengthCounter--,this.playAddress++,this.playAddress>65535&&(this.playAddress=32768),this.hasSample=!0}writeReg(t,e){t===16400?(e>>6===0?this.playMode=U.MODE_NORMAL:(e>>6&1)===1?this.playMode=U.MODE_LOOP:e>>6===2&&(this.playMode=U.MODE_IRQ),(e&128)===0&&(this.irqGenerated=!1),this.dmaFrequency=this.papu.getDmcFrequency(e&15)):t===16401?(this.deltaCounter=e>>1&63,this.dacLsb=e&1,this.sample=(this.deltaCounter<<1)+this.dacLsb):t===16402?(this.playStartAddress=e<<6|49152,this.reg4012=e):t===16403?(this.playLength=(e<<4)+1,this.reg4013=e):t===16405&&(this.irqGenerated=!1,(e>>4&1)===0?this.playLengthCounter=0:this.playLengthCounter===0&&(this.playAddress=this.playStartAddress,this.playLengthCounter=this.playLength,!this.hasSample&&this.playLengthCounter>0&&(this.nextSample(),this.dmaCounter=8,this.shiftCounter=this.dmaFrequency,this.playLengthCounter===0&&this.playMode===U.MODE_IRQ&&(this.irqGenerated=!0))))}setEnabled(t){this.isEnabled=t}getLengthStatus(){return this.playLengthCounter===0||!this.isEnabled?0:1}getIrqStatus(){return this.irqGenerated?1:0}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(U,"MODE_NORMAL",0),c(U,"MODE_LOOP",1),c(U,"MODE_IRQ",2),c(U,"JSON_PROPERTIES",["isEnabled","hasSample","irqGenerated","playMode","dmaFrequency","dmaCounter","deltaCounter","playStartAddress","playAddress","playLength","playLengthCounter","shiftCounter","reg4012","reg4013","sample","dacLsb","data","lastFetchedByte"]);Re=U,$e=Re});var Mt,ei,ii=S(()=>{H();Mt=class{constructor(t){this.papu=t,this.progTimerCount=0,this.progTimerMax=0,this.isEnabled=!1,this.lengthCounter=0,this.lengthCounterEnable=!1,this.envDecayDisable=!1,this.envDecayLoopEnable=!1,this.envReset=!1,this.shiftNow=!1,this.envDecayRate=0,this.envDecayCounter=0,this.envVolume=0,this.masterVolume=0,this.shiftReg=1,this.randomBit=0,this.randomMode=0,this.sampleValue=0,this.tmp=0,this.accValue=0,this.accCount=1}clockLengthCounter(){this.lengthCounterEnable&&this.lengthCounter>0&&(this.lengthCounter--,this.lengthCounter===0&&this.updateSampleValue())}clockEnvDecay(){this.envReset?(this.envReset=!1,this.envDecayCounter=this.envDecayRate+1,this.envVolume=15):--this.envDecayCounter<=0&&(this.envDecayCounter=this.envDecayRate+1,this.envVolume>0?this.envVolume--:this.envVolume=this.envDecayLoopEnable?15:0),this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume,this.updateSampleValue()}updateSampleValue(){this.isEnabled&&this.lengthCounter>0&&(this.sampleValue=this.randomBit*this.masterVolume)}writeReg(t,e){t===16396?(this.envDecayDisable=(e&16)!==0,this.envDecayRate=e&15,this.envDecayLoopEnable=(e&32)!==0,this.lengthCounterEnable=(e&32)===0,this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume):t===16398?(this.progTimerMax=this.papu.getNoiseWaveLength(e&15),this.randomMode=e>>7):t===16399&&(this.isEnabled&&(this.lengthCounter=this.papu.getLengthMax(e&248)),this.envReset=!0)}setEnabled(t){this.isEnabled=t,t||(this.lengthCounter=0),this.updateSampleValue()}getLengthStatus(){return this.lengthCounter===0||!this.isEnabled?0:1}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(Mt,"JSON_PROPERTIES",["isEnabled","envDecayDisable","envDecayLoopEnable","lengthCounterEnable","envReset","shiftNow","lengthCounter","progTimerCount","progTimerMax","envDecayRate","envDecayCounter","envVolume","masterVolume","shiftReg","randomBit","randomMode","sampleValue","accValue","accCount","tmp"]);ei=Mt});var Ot,ge,si=S(()=>{H();Ot=class{constructor(t,e){this.papu=t,this.dutyLookup=[0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1],this.impLookup=[1,-1,0,0,0,0,0,0,1,0,-1,0,0,0,0,0,1,0,0,0,-1,0,0,0,-1,0,1,0,0,0,0,0],this.sqr1=e,this.progTimerCount=0,this.progTimerMax=0,this.lengthCounter=0,this.squareCounter=0,this.sweepCounter=0,this.sweepCounterMax=0,this.sweepMode=0,this.sweepShiftAmount=0,this.envDecayRate=0,this.envDecayCounter=0,this.envVolume=0,this.masterVolume=0,this.dutyMode=0,this.vol=0,this.isEnabled=!1,this.lengthCounterEnable=!1,this.sweepActive=!1,this.sweepCarry=!1,this.envDecayDisable=!1,this.envDecayLoopEnable=!1,this.envReset=!1,this.updateSweepPeriod=!1,this.sweepResult=0,this.sampleValue=0}clockLengthCounter(){this.lengthCounterEnable&&this.lengthCounter>0&&(this.lengthCounter--,this.lengthCounter===0&&this.updateSampleValue())}clockEnvDecay(){this.envReset?(this.envReset=!1,this.envDecayCounter=this.envDecayRate+1,this.envVolume=15):--this.envDecayCounter<=0&&(this.envDecayCounter=this.envDecayRate+1,this.envVolume>0?this.envVolume--:this.envVolume=this.envDecayLoopEnable?15:0),this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume,this.updateSampleValue()}clockSweep(){--this.sweepCounter<=0&&(this.sweepCounter=this.sweepCounterMax+1,this.sweepActive&&this.sweepShiftAmount>0&&this.progTimerMax>7&&(this.sweepCarry=!1,this.sweepMode===0?(this.progTimerMax+=this.progTimerMax>>this.sweepShiftAmount,this.progTimerMax>2047&&(this.progTimerMax=4095,this.sweepCarry=!0)):this.progTimerMax=this.progTimerMax-((this.progTimerMax>>this.sweepShiftAmount)+(this.sqr1?1:0)))),this.updateSweepPeriod&&(this.updateSweepPeriod=!1,this.sweepCounter=this.sweepCounterMax+1)}updateSampleValue(){this.isEnabled&&this.lengthCounter>0&&this.progTimerMax>7?this.sweepMode===0&&this.progTimerMax+(this.progTimerMax>>this.sweepShiftAmount)>2047?this.sampleValue=0:this.sampleValue=this.masterVolume*this.dutyLookup[(this.dutyMode<<3)+this.squareCounter]:this.sampleValue=0}writeReg(t,e){let i=this.sqr1?0:4;t===16384+i?(this.envDecayDisable=(e&16)!==0,this.envDecayRate=e&15,this.envDecayLoopEnable=(e&32)!==0,this.dutyMode=e>>6&3,this.lengthCounterEnable=(e&32)===0,this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume,this.updateSampleValue()):t===16385+i?(this.sweepActive=(e&128)!==0,this.sweepCounterMax=e>>4&7,this.sweepMode=e>>3&1,this.sweepShiftAmount=e&7,this.updateSweepPeriod=!0):t===16386+i?(this.progTimerMax&=1792,this.progTimerMax|=e):t===16387+i&&(this.progTimerMax&=255,this.progTimerMax|=(e&7)<<8,this.isEnabled&&(this.lengthCounter=this.papu.getLengthMax(e&248)),this.envReset=!0)}setEnabled(t){this.isEnabled=t,t||(this.lengthCounter=0),this.updateSampleValue()}getLengthStatus(){return this.lengthCounter===0||!this.isEnabled?0:1}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(Ot,"JSON_PROPERTIES",["isEnabled","lengthCounterEnable","sweepActive","envDecayDisable","envDecayLoopEnable","envReset","sweepCarry","updateSweepPeriod","progTimerCount","progTimerMax","lengthCounter","squareCounter","sweepCounter","sweepCounterMax","sweepMode","sweepShiftAmount","envDecayRate","envDecayCounter","envVolume","masterVolume","dutyMode","sweepResult","sampleValue","vol"]);ge=Ot});var It,ri,hi=S(()=>{H();It=class{constructor(t){this.papu=t,this.progTimerCount=0,this.progTimerMax=0,this.triangleCounter=0,this.isEnabled=!1,this.sampleCondition=!1,this.lengthCounter=0,this.lengthCounterEnable=!1,this.linearCounter=0,this.lcLoadValue=0,this.lcHalt=!0,this.lcControl=!1,this.tmp=0,this.sampleValue=15}clockLengthCounter(){this.lengthCounterEnable&&this.lengthCounter>0&&(this.lengthCounter--,this.lengthCounter===0&&this.updateSampleCondition())}clockLinearCounter(){this.lcHalt?(this.linearCounter=this.lcLoadValue,this.updateSampleCondition()):this.linearCounter>0&&(this.linearCounter--,this.updateSampleCondition()),this.lcControl||(this.lcHalt=!1)}getLengthStatus(){return this.lengthCounter===0||!this.isEnabled?0:1}readReg(t){return 0}writeReg(t,e){t===16392?(this.lcControl=(e&128)!==0,this.lcLoadValue=e&127,this.lengthCounterEnable=!this.lcControl):t===16394?(this.progTimerMax&=1792,this.progTimerMax|=e):t===16395&&(this.progTimerMax&=255,this.progTimerMax|=(e&7)<<8,this.isEnabled&&(this.lengthCounter=this.papu.getLengthMax(e&248)),this.lcHalt=!0),this.updateSampleCondition()}clockProgrammableTimer(t){if(this.progTimerMax>0)for(this.progTimerCount+=t;this.progTimerMax>0&&this.progTimerCount>=this.progTimerMax;)this.progTimerCount-=this.progTimerMax,this.isEnabled&&this.lengthCounter>0&&this.linearCounter>0&&this.clockTriangleGenerator()}clockTriangleGenerator(){this.triangleCounter++,this.triangleCounter&=31}setEnabled(t){this.isEnabled=t,t||(this.lengthCounter=0),this.updateSampleCondition()}updateSampleCondition(){this.sampleCondition=this.isEnabled&&this.progTimerMax>7&&this.linearCounter>0&&this.lengthCounter>0}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(It,"JSON_PROPERTIES",["isEnabled","sampleCondition","lengthCounterEnable","lcHalt","lcControl","progTimerCount","progTimerMax","triangleCounter","lengthCounter","linearCounter","lcLoadValue","sampleValue","tmp"]);ri=It});var ai,Ks,Qs,$s,tr,Pt,be,ni=S(()=>{H();ti();ii();si();hi();ai=17897725e-1,Ks=[7457,14913,22371,29828,29829],Qs=[7457,14913,22371,29829,37281],$s=29830,tr=37282,Pt=class{constructor(t){this.nes=t,this.square1=new ge(this,!0),this.square2=new ge(this,!1),this.triangle=new ri(this),this.noise=new ei(this),this.dmc=new $e(this),this.startedPlaying=!1,this.recordOutput=!1,this.triValue=0,this.prevSampleL=0,this.prevSampleR=0,this.smpAccumL=0,this.smpAccumR=0,this.dacRange=0,this.dcValue=0,this.masterVolume=256,this.panning=[80,170,100,150,128],this.setPanning(this.panning),this.initLengthLookup(),this.initDmcFrequencyLookup(),this.initNoiseWavelengthLookup(),this.initDACtables();for(let e=0;e<20;e++)e===16?this.writeReg(16400,16):this.writeReg(16384+e,0);this.sampleRate=this.nes.opts.sampleRate,this.sampleTimerMax=Math.floor(1024*ai/this.sampleRate),this.sampleTimer=0,this.updateChannelEnable(0),this.frameCycleCounter=0,this.frameStep=0,this.countSequence=0,this.sampleCount=0,this.frameIrqEnabled=!1,this.frameIrqActive=!1,this.frameIrqClearPending=!1,this.apuCycleParity=0,this.accCount=0,this.smpSquare1=0,this.smpSquare2=0,this.smpTriangle=0,this.smpDmc=0,this.channelEnableValue=255,this.extraCycles=0,this.maxSample=-5e5,this.minSample=5e5}readReg(t){let e=0;return e|=this.square1.getLengthStatus(),e|=this.square2.getLengthStatus()<<1,e|=this.triangle.getLengthStatus()<<2,e|=this.noise.getLengthStatus()<<3,e|=this.dmc.getLengthStatus()<<4,e|=this.nes.cpu.dataBus&32,e|=(this.frameIrqActive?1:0)<<6,e|=this.dmc.getIrqStatus()<<7,this.frameIrqActive&&(this.frameIrqClearPending=!0),e&255}writeReg(t,e){if(t>=16384&&t<16388)this.square1.writeReg(t,e);else if(t>=16388&&t<16392)this.square2.writeReg(t,e);else if(t>=16392&&t<16396)this.triangle.writeReg(t,e);else if(t>=16396&&t<=16399)this.noise.writeReg(t,e);else if(t===16400)this.dmc.writeReg(t,e);else if(t===16401)this.dmc.writeReg(t,e);else if(t===16402)this.dmc.writeReg(t,e);else if(t===16403)this.dmc.writeReg(t,e);else if(t===16405)this.updateChannelEnable(e),this.dmc.writeReg(t,e);else if(t===16407){this.countSequence=e>>7&1;let i=this.nes.cpu,s=i.instrBusCycles+1-i.apuCatchupCycles,r=this.apuCycleParity+s&1;this.frameCycleCounter=-7+r,this.frameStep=0,e&64?(this.frameIrqEnabled=!1,this.frameIrqActive=!1,this.frameIrqClearPending=!1):this.frameIrqEnabled=!0,this.countSequence===1&&(this.clockQuarterFrame(),this.clockHalfFrame())}}updateChannelEnable(t){this.channelEnableValue=t&65535,this.square1.setEnabled((t&1)!==0),this.square2.setEnabled((t&2)!==0),this.triangle.setEnabled((t&4)!==0),this.noise.setEnabled((t&8)!==0),this.dmc.setEnabled((t&16)!==0)}clockFrameCounter(t,e){let i=t-(e||0);this.processFrameIrqClear(i),this.apuCycleParity=this.apuCycleParity+i&1,t+=this.extraCycles;let s=this.sampleTimerMax-this.sampleTimer;t<<10>s?(this.extraCycles=(t<<10)-s>>10,t-=this.extraCycles):this.extraCycles=0;let r=this.dmc,a=this.triangle,n=this.square1,l=this.square2,o=this.noise;if(r.isEnabled)for(r.shiftCounter-=t<<3;r.shiftCounter<=0&&r.dmaFrequency>0;)r.shiftCounter+=r.dmaFrequency,r.clockDmc();if(a.progTimerMax>0)for(a.progTimerCount-=t;a.progTimerCount<=0;)a.progTimerCount+=a.progTimerMax+1,a.linearCounter>0&&a.lengthCounter>0&&(a.triangleCounter++,a.triangleCounter&=31,a.isEnabled&&(a.triangleCounter>=16?a.sampleValue=a.triangleCounter&15:a.sampleValue=15-(a.triangleCounter&15),a.sampleValue<<=4));n.progTimerCount-=t,n.progTimerCount<=0&&(n.progTimerCount+=n.progTimerMax+1<<1,n.squareCounter++,n.squareCounter&=7,n.updateSampleValue()),l.progTimerCount-=t,l.progTimerCount<=0&&(l.progTimerCount+=l.progTimerMax+1<<1,l.squareCounter++,l.squareCounter&=7,l.updateSampleValue());let p=t;if(o.progTimerCount-p>0)o.progTimerCount-=p,o.accCount+=p,o.accValue+=p*o.sampleValue;else for(;p-- >0;)--o.progTimerCount<=0&&o.progTimerMax>0&&(o.shiftReg<<=1,o.tmp=(o.shiftReg<<(o.randomMode===0?1:6)^o.shiftReg)&32768,o.tmp!==0?(o.shiftReg|=1,o.randomBit=0,o.sampleValue=0):(o.randomBit=1,o.isEnabled&&o.lengthCounter>0?o.sampleValue=o.masterVolume:o.sampleValue=0),o.progTimerCount+=o.progTimerMax),o.accValue+=o.sampleValue,o.accCount++;this.frameIrqEnabled&&this.frameIrqActive&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL),this._advanceFrameSteps(i),this.accSample(t),this.sampleTimer+=t<<10,this.sampleTimer>=this.sampleTimerMax&&(this.sample(),this.sampleTimer-=this.sampleTimerMax)}processFrameIrqClear(t){if(!this.frameIrqClearPending||t<=0)return;let e=(this.apuCycleParity&1)===0?1:2;t>=e&&(this.frameIrqActive=!1,this.frameIrqClearPending=!1)}advanceFrameCounter(t){this.processFrameIrqClear(t),this.apuCycleParity=this.apuCycleParity+t&1,this._advanceFrameSteps(t)}_advanceFrameSteps(t){this.frameCycleCounter+=t;let e=this.countSequence===0?Ks:Qs,i=this.countSequence===0?$s:tr;for(;;)if(this.frameStep=e[this.frameStep])this.fireFrameStep(this.frameStep),this.frameStep++;else if(this.frameStep>=e.length&&this.frameCycleCounter>=i)this.frameStep=0,this.frameCycleCounter-=i,this.countSequence===0&&(this.frameIrqActive=this.frameIrqEnabled,this.frameIrqClearPending=!1);else break}accSample(t){this.triangle.sampleCondition&&(this.triValue=Math.floor((this.triangle.progTimerCount<<4)/(this.triangle.progTimerMax+1)),this.triValue>16&&(this.triValue=16),this.triangle.triangleCounter>=16&&(this.triValue=16-this.triValue),this.triValue+=this.triangle.sampleValue),t===2?(this.smpTriangle+=this.triValue<<1,this.smpDmc+=this.dmc.sample<<1,this.smpSquare1+=this.square1.sampleValue<<1,this.smpSquare2+=this.square2.sampleValue<<1,this.accCount+=2):t===4?(this.smpTriangle+=this.triValue<<2,this.smpDmc+=this.dmc.sample<<2,this.smpSquare1+=this.square1.sampleValue<<2,this.smpSquare2+=this.square2.sampleValue<<2,this.accCount+=4):(this.smpTriangle+=t*this.triValue,this.smpDmc+=t*this.dmc.sample,this.smpSquare1+=t*this.square1.sampleValue,this.smpSquare2+=t*this.square2.sampleValue,this.accCount+=t)}fireFrameStep(t){if(this.countSequence===0)switch(t){case 0:this.clockQuarterFrame();break;case 1:this.clockQuarterFrame(),this.clockHalfFrame();break;case 2:this.clockQuarterFrame();break;case 3:this.frameIrqActive=!0,this.frameIrqClearPending=!1;break;case 4:this.clockQuarterFrame(),this.clockHalfFrame(),this.frameIrqActive=!0,this.frameIrqClearPending=!1;break}else switch(t){case 0:this.clockQuarterFrame();break;case 1:this.clockQuarterFrame(),this.clockHalfFrame();break;case 2:this.clockQuarterFrame();break;case 3:break;case 4:this.clockQuarterFrame(),this.clockHalfFrame();break}}clockQuarterFrame(){this.square1.clockEnvDecay(),this.square2.clockEnvDecay(),this.noise.clockEnvDecay(),this.triangle.clockLinearCounter()}clockHalfFrame(){this.triangle.clockLengthCounter(),this.square1.clockLengthCounter(),this.square2.clockLengthCounter(),this.noise.clockLengthCounter(),this.square1.clockSweep(),this.square2.clockSweep()}sample(){let t,e;this.accCount>0?(this.smpSquare1<<=4,this.smpSquare1=Math.floor(this.smpSquare1/this.accCount),this.smpSquare2<<=4,this.smpSquare2=Math.floor(this.smpSquare2/this.accCount),this.smpTriangle=Math.floor(this.smpTriangle/this.accCount),this.smpDmc<<=4,this.smpDmc=Math.floor(this.smpDmc/this.accCount),this.accCount=0):(this.smpSquare1=this.square1.sampleValue<<4,this.smpSquare2=this.square2.sampleValue<<4,this.smpTriangle=this.triangle.sampleValue,this.smpDmc=this.dmc.sample<<4);let i=Math.floor((this.noise.accValue<<4)/this.noise.accCount);this.noise.accValue=i>>4,this.noise.accCount=1,t=this.smpSquare1*this.stereoPosLSquare1+this.smpSquare2*this.stereoPosLSquare2>>8,e=3*this.smpTriangle*this.stereoPosLTriangle+(i<<1)*this.stereoPosLNoise+this.smpDmc*this.stereoPosLDMC>>8,t>=this.square_table.length&&(t=this.square_table.length-1),e>=this.tnd_table.length&&(e=this.tnd_table.length-1);let s=this.square_table[t]+this.tnd_table[e]-this.dcValue;t=this.smpSquare1*this.stereoPosRSquare1+this.smpSquare2*this.stereoPosRSquare2>>8,e=3*this.smpTriangle*this.stereoPosRTriangle+(i<<1)*this.stereoPosRNoise+this.smpDmc*this.stereoPosRDMC>>8,t>=this.square_table.length&&(t=this.square_table.length-1),e>=this.tnd_table.length&&(e=this.tnd_table.length-1);let r=this.square_table[t]+this.tnd_table[e]-this.dcValue,a=s-this.prevSampleL;this.prevSampleL+=a,this.smpAccumL+=a-(this.smpAccumL>>10),s=this.smpAccumL;let n=r-this.prevSampleR;this.prevSampleR+=n,this.smpAccumR+=n-(this.smpAccumR>>10),r=this.smpAccumR,s>this.maxSample&&(this.maxSample=s),s>3]}getDmcFrequency(t){return t>=0&&t<16?this.dmcFreqLookup[t]:0}getNoiseWaveLength(t){return t>=0&&t<16?this.noiseWavelengthLookup[t]:0}setFrameRate(t){this.sampleTimerMax=Math.floor(1024*ai*t/(this.sampleRate*60))}setPanning(t){for(let e=0;e<5;e++)this.panning[e]=t[e];this.updateStereoPos()}setMasterVolume(t){t<0&&(t=0),t>256&&(t=256),this.masterVolume=t,this.updateStereoPos()}updateStereoPos(){this.stereoPosLSquare1=this.panning[0]*this.masterVolume>>8,this.stereoPosLSquare2=this.panning[1]*this.masterVolume>>8,this.stereoPosLTriangle=this.panning[2]*this.masterVolume>>8,this.stereoPosLNoise=this.panning[3]*this.masterVolume>>8,this.stereoPosLDMC=this.panning[4]*this.masterVolume>>8,this.stereoPosRSquare1=this.masterVolume-this.stereoPosLSquare1,this.stereoPosRSquare2=this.masterVolume-this.stereoPosLSquare2,this.stereoPosRTriangle=this.masterVolume-this.stereoPosLTriangle,this.stereoPosRNoise=this.masterVolume-this.stereoPosLNoise,this.stereoPosRDMC=this.masterVolume-this.stereoPosLDMC}initLengthLookup(){this.lengthLookup=[10,254,20,2,40,4,80,6,160,8,60,10,14,12,26,14,12,16,24,18,48,20,96,22,192,24,72,26,16,28,32,30]}initDmcFrequencyLookup(){this.dmcFreqLookup=new Array(16),this.dmcFreqLookup[0]=3424,this.dmcFreqLookup[1]=3040,this.dmcFreqLookup[2]=2720,this.dmcFreqLookup[3]=2560,this.dmcFreqLookup[4]=2288,this.dmcFreqLookup[5]=2032,this.dmcFreqLookup[6]=1808,this.dmcFreqLookup[7]=1712,this.dmcFreqLookup[8]=1520,this.dmcFreqLookup[9]=1280,this.dmcFreqLookup[10]=1136,this.dmcFreqLookup[11]=1024,this.dmcFreqLookup[12]=848,this.dmcFreqLookup[13]=672,this.dmcFreqLookup[14]=576,this.dmcFreqLookup[15]=432}initNoiseWavelengthLookup(){this.noiseWavelengthLookup=new Array(16),this.noiseWavelengthLookup[0]=4,this.noiseWavelengthLookup[1]=8,this.noiseWavelengthLookup[2]=16,this.noiseWavelengthLookup[3]=32,this.noiseWavelengthLookup[4]=64,this.noiseWavelengthLookup[5]=96,this.noiseWavelengthLookup[6]=128,this.noiseWavelengthLookup[7]=160,this.noiseWavelengthLookup[8]=202,this.noiseWavelengthLookup[9]=254,this.noiseWavelengthLookup[10]=380,this.noiseWavelengthLookup[11]=508,this.noiseWavelengthLookup[12]=762,this.noiseWavelengthLookup[13]=1016,this.noiseWavelengthLookup[14]=2034,this.noiseWavelengthLookup[15]=4068}initDACtables(){let t,e,i,s=0,r=0;for(this.square_table=new Float32Array(512),this.tnd_table=new Float32Array(3264),i=0;i<512;i++)t=95.52/(8128/(i/16)+100),t*=.98411,t*=5e4,e=Math.floor(t),this.square_table[i]=e,e>s&&(s=e);for(i=0;i<3264;i++)t=163.67/(24329/(i/16)+100),t*=.98411,t*=5e4,e=Math.floor(t),this.tnd_table[i]=e,e>r&&(r=e);this.dacRange=s+r,this.dcValue=this.dacRange/2}toJSON(){let t=w(this);return t.dmc=this.dmc.toJSON(),t.noise=this.noise.toJSON(),t.square1=this.square1.toJSON(),t.square2=this.square2.toJSON(),t.triangle=this.triangle.toJSON(),t}fromJSON(t){V(this,t),this.dmc.fromJSON(t.dmc),this.noise.fromJSON(t.noise),this.square1.fromJSON(t.square1),this.square2.fromJSON(t.square2),this.triangle.fromJSON(t.triangle)}};c(Pt,"JSON_PROPERTIES",["channelEnableValue","sampleRate","frameIrqEnabled","frameIrqActive","frameIrqClearPending","apuCycleParity","startedPlaying","recordOutput","frameCycleCounter","frameStep","countSequence","sampleTimer","sampleTimerMax","sampleCount","triValue","smpSquare1","smpSquare2","smpTriangle","smpDmc","accCount","prevSampleL","prevSampleR","smpAccumL","smpAccumR","masterVolume","stereoPosLSquare1","stereoPosLSquare2","stereoPosLTriangle","stereoPosLNoise","stereoPosLDMC","stereoPosRSquare1","stereoPosRSquare2","stereoPosRTriangle","stereoPosRNoise","stereoPosRDMC","extraCycles","maxSample","minSample","panning"]);be=Pt});function er(u){return oi.indexOf(u)}function ir(u){return oi[u]}function Ce(u,t){let e=u.toString(16);return"0000".substring(0,t-e.length)+e}var oi,_e,li,ci=S(()=>{oi="APZLGITYEOXUKSVN";_e=class{constructor(){this.patches=[],this.enabled=!0,this.onChange=null}setEnabled(t){this.enabled=t,this.onChange&&this.onChange()}addCode(t){let e=this.decode(t);if(!e)throw new Error(`Invalid Game Genie code: ${t}`);this.patches.push(e),this.onChange&&this.onChange()}addPatch(t,e,i){this.patches.push({addr:t,value:e,key:i}),this.onChange&&this.onChange()}removeAllCodes(){this.patches=[],this.onChange&&this.onChange()}applyCodes(t,e){if(!this.enabled)return e;for(let i=0;i>3);return{value:i,addr:s,wantskey:a,key:r}}encodeHex(t,e,i,s){let r=Ce(t,4)+":"+Ce(e,2);return(i!==void 0||s)&&(r+="?"),i!==void 0&&(r+=Ce(i,2)),r}decodeHex(t){let e=t.match(/([0-9a-fA-F]+):([0-9a-fA-F]+)(\?[0-9a-fA-F]*)?/);if(!e)return null;let i=parseInt(e[1],16),s=parseInt(e[2],16),r=e[3]!==void 0,a=e[3]!==void 0&&e[3].length>1?parseInt(e[3].substring(1),16):void 0;return{value:s,addr:i,wantskey:r,key:a}}encode(t,e,i,s){let r=Array(6);return r[0]=(e&7)+(e>>4&8),r[1]=(e>>4&7)+(t>>4&8),r[2]=t>>4&7,r[3]=(t>>12)+(t&8),r[4]=(t&7)+(t>>8&8),r[5]=t>>8&7,i===void 0?(r[5]+=e&8,s&&(r[2]+=8)):(r[2]+=8,r[5]+=i&8,r[6]=(i&7)+(i>>4&8),r[7]=(i>>4&7)+(e&8)),r.map(ir).join("")}},li=_e});var Vt,C,O=S(()=>{H();Vt=class{constructor(t){this.nes=t,this.joy1StrobeState=0,this.joy2StrobeState=0,this.joypadLastWrite=0,this.joypadOutputBit0=0,this.joypadLastWriteCycle=-2,this.zapperFired=!1,this.zapperX=null,this.zapperY=null,this.bgTileOverride=!1}write(t,e){t<8192?this.nes.cpu.mem[t&2047]=e:t>=32768||(t>=24576?(this.nes.cpu.mem[t]=e,this.nes.opts.onBatteryRamWrite(t,e)):t>16407?this.nes.cpu.mem[t]=e:t>8199&&t<16384?this.regWrite(8192+(t&7),e):this.regWrite(t,e))}writelow(t,e){t<8192?this.nes.cpu.mem[t&2047]=e:t>=32768||(t>16407?this.nes.cpu.mem[t]=e:t>8199&&t<16384?this.regWrite(8192+(t&7),e):this.regWrite(t,e))}load(t){return t&=65535,t>16407?t<24576?this.nes.cpu.dataBus:this.nes.cpu.mem[t]:t>=8192?this.regLoad(t):this.nes.cpu.mem[t&2047]}regLoad(t){switch(t>>12){case 0:break;case 1:break;case 2:case 3:switch(t&7){case 0:return this.nes.ppu.openBusLatch;case 1:return this.nes.ppu.openBusLatch;case 2:return this.nes.ppu.readStatusRegister();case 3:return this.nes.ppu.openBusLatch;case 4:return this.nes.ppu.sramLoad();case 5:return this.nes.ppu.openBusLatch;case 6:return this.nes.ppu.openBusLatch;case 7:return this.nes.ppu.vramLoad()}break;case 4:switch(t-16405){case 0:return this.nes.papu.readReg(t);case 1:return this.joy1Read()&31|this.nes.cpu.dataBus&224;case 2:{let i=0;return this.zapperX!==null&&this.zapperY!==null&&(this.nes.ppu.isPixelWhite(this.zapperX,this.zapperY)||(i=8)),this.zapperFired&&(i|=16),(this.joy2Read()|i)&31|this.nes.cpu.dataBus&224}}break}let e=this.nes.cpu;if(e._dmcFetchCycles>0&&e._dmcFetchCycles===e.instrBusCycles+1){let i=this.nes.papu.dmc;if(i&&i.isEnabled)return i.lastFetchedByte}return e.dataBus}regWrite(t,e){switch(t>=8192&&t<=16383&&(this.nes.ppu.openBusLatch=e,this.nes.ppu.openBusDecayFrames=36),t){case 8192:this.nes.cpu.mem[t]=e,this.nes.ppu.updateControlReg1(e);break;case 8193:this.nes.cpu.mem[t]=e,this.nes.ppu.updateControlReg2(e);break;case 8195:this.nes.ppu.writeSRAMAddress(e);break;case 8196:this.nes.ppu.sramWrite(e);break;case 8197:this.nes.ppu.scrollWrite(e);break;case 8198:this.nes.ppu.writeVRAMAddress(e);break;case 8199:this.nes.ppu.vramWrite(e);break;case 16404:this.nes.ppu.sramDMA(e);break;case 16405:this.nes.papu.writeReg(t,e);break;case 16406:{let i=this.nes.cpu,s=i._cpuCycleBase+i.instrBusCycles;if(s-this.joypadLastWriteCycle>1){let r=this.joypadLastWrite&1;r!==this.joypadOutputBit0&&(this.joypadOutputBit0===1&&r===0&&(this.joy1StrobeState=0,this.joy2StrobeState=0),this.joypadOutputBit0=r)}if(this.joypadLastWrite=e,this.joypadLastWriteCycle=s,s%2===1){let r=e&1;this.joypadOutputBit0===1&&r===0&&(this.joy1StrobeState=0,this.joy2StrobeState=0),this.joypadOutputBit0=r}break}case 16407:this.nes.papu.writeReg(t,e);break;default:t>=16384&&t<=16407&&this.nes.papu.writeReg(t,e)}}_syncJoypadOutput(){let t=this.joypadLastWrite&1;t!==this.joypadOutputBit0&&(this.joypadOutputBit0===1&&t===0&&(this.joy1StrobeState=0,this.joy2StrobeState=0),this.joypadOutputBit0=t)}joy1Read(){if(this._syncJoypadOutput(),this.joypadOutputBit0)return this.nes.controllers[1].state[0];let t;return this.joy1StrobeState<8?t=this.nes.controllers[1].state[this.joy1StrobeState]:t=1,this.joy1StrobeState++,this.joy1StrobeState===24&&(this.joy1StrobeState=0),t}joy2Read(){if(this._syncJoypadOutput(),this.joypadOutputBit0)return this.nes.controllers[2].state[0];let t;return this.joy2StrobeState<8?t=this.nes.controllers[2].state[this.joy2StrobeState]:t=1,this.joy2StrobeState++,this.joy2StrobeState===24&&(this.joy2StrobeState=0),t}loadROM(){if(!this.nes.rom.valid||this.nes.rom.romCount<1)throw new Error("NoMapper: Invalid ROM! Unable to load.");this.loadPRGROM(),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}loadPRGROM(){this.nes.rom.romCount>1?(this.loadRomBank(0,32768),this.loadRomBank(1,49152)):(this.loadRomBank(0,32768),this.loadRomBank(0,49152))}loadCHRROM(){this.nes.rom.vromCount>0&&(this.nes.rom.vromCount===1?(this.loadVromBank(0,0),this.loadVromBank(0,4096)):(this.loadVromBank(0,0),this.loadVromBank(1,4096)))}loadBatteryRam(){if(this.nes.rom.batteryRam){let t=this.nes.rom.batteryRam;t!==null&&t.length===8192&&v(t,0,this.nes.cpu.mem,24576,8192)}}loadRomBank(t,e){t%=this.nes.rom.romCount,v(this.nes.rom.rom[t],0,this.nes.cpu.mem,e,16384)}loadVromBank(t,e){if(this.nes.rom.vromCount===0)return;this.nes.ppu.triggerRendering(),v(this.nes.rom.vrom[t%this.nes.rom.vromCount],0,this.nes.ppu.vramMem,e,4096);let i=this.nes.rom.vromTile[t%this.nes.rom.vromCount];v(i,0,this.nes.ppu.ptTile,e>>4,256)}load32kRomBank(t,e){this.loadRomBank(t*2%this.nes.rom.romCount,e),this.loadRomBank((t*2+1)%this.nes.rom.romCount,e+16384)}load8kVromBank(t,e){this.nes.rom.vromCount!==0&&(this.nes.ppu.triggerRendering(),this.loadVromBank(t%this.nes.rom.vromCount,e),this.loadVromBank((t+1)%this.nes.rom.vromCount,e+4096))}load1kVromBank(t,e){if(this.nes.rom.vromCount===0)return;this.nes.ppu.triggerRendering();let i=Math.floor(t/4)%this.nes.rom.vromCount,s=t%4*1024;v(this.nes.rom.vrom[i],s,this.nes.ppu.vramMem,e,1024);let r=this.nes.rom.vromTile[i],a=e>>4;for(let n=0;n<64;n++)this.nes.ppu.ptTile[a+n]=r[(t%4<<6)+n]}load2kVromBank(t,e){if(this.nes.rom.vromCount===0)return;this.nes.ppu.triggerRendering();let i=Math.floor(t/2)%this.nes.rom.vromCount,s=t%2*2048;v(this.nes.rom.vrom[i],s,this.nes.ppu.vramMem,e,2048);let r=this.nes.rom.vromTile[i],a=e>>4;for(let n=0;n<128;n++)this.nes.ppu.ptTile[a+n]=r[(t%2<<7)+n]}load8kRomBank(t,e){let i=Math.floor(t/2)%this.nes.rom.romCount,s=t%2*8192;v(this.nes.rom.rom[i],s,this.nes.cpu.mem,e,8192)}canWriteChr(t){return this.nes.rom.vromCount===0}clockIrqCounter(){}latchAccess(t){}onBgRender(){}onSpriteRender(){}getBgTileData(){return null}getSpritePatternTile(t){return this.nes.ppu.ptTile[t]}toJSON(){return{joy1StrobeState:this.joy1StrobeState,joy2StrobeState:this.joy2StrobeState,joypadLastWrite:this.joypadLastWrite,joypadOutputBit0:this.joypadOutputBit0,joypadLastWriteCycle:this.joypadLastWriteCycle}}fromJSON(t){var e;this.joy1StrobeState=t.joy1StrobeState,this.joy2StrobeState=t.joy2StrobeState,this.joypadLastWrite=t.joypadLastWrite,this.joypadOutputBit0=t.joypadOutputBit0||0,this.joypadLastWriteCycle=(e=t.joypadLastWriteCycle)!=null?e:-2}};c(Vt,"mapperName","NROM");C=Vt});var wt,mi,fi=S(()=>{O();wt=class extends C{constructor(t){super(t),this.regBuffer=0,this.regBufferCounter=0,this.mirroring=0,this.oneScreenMirroring=0,this.prgSwitchingArea=1,this.prgSwitchingSize=1,this.vromSwitchingSize=0,this.romSelectionReg0=0,this.romSelectionReg1=0,this.romBankSelect=0}write(t,e){if(t<32768){super.write(t,e);return}(e&128)!==0?(this.regBufferCounter=0,this.regBuffer=0,this.getRegNumber(t)===0&&(this.prgSwitchingArea=1,this.prgSwitchingSize=1)):(this.regBuffer=this.regBuffer&255-(1<>2&1,this.prgSwitchingSize=e>>3&1,this.vromSwitchingSize=e>>4&1;break;case 1:this.romSelectionReg0=e>>4&1,this.nes.rom.vromCount>0&&(this.vromSwitchingSize===0?this.romSelectionReg0===0?this.load8kVromBank(e&15,0):this.load8kVromBank(Math.floor(this.nes.rom.vromCount/2)+(e&15),0):this.romSelectionReg0===0?this.loadVromBank(e&15,0):this.loadVromBank(Math.floor(this.nes.rom.vromCount/2)+(e&15),0));break;case 2:this.romSelectionReg1=e>>4&1,this.nes.rom.vromCount>0&&this.vromSwitchingSize===1&&(this.romSelectionReg1===0?this.loadVromBank(e&15,4096):this.loadVromBank(Math.floor(this.nes.rom.vromCount/2)+(e&15),4096));break;default:{let s,r=0;this.nes.rom.romCount>=32?this.vromSwitchingSize===0?this.romSelectionReg0===1&&(r=16):r=(this.romSelectionReg0|this.romSelectionReg1<<1)<<3:this.nes.rom.romCount>=16&&this.romSelectionReg0===1&&(r=8),this.prgSwitchingSize===0?(s=r+(e&15),this.load32kRomBank(s,32768)):(s=r*2+(e&15),this.prgSwitchingArea===0?this.loadRomBank(s,49152):this.loadRomBank(s,32768))}}}getRegNumber(t){return t>=32768&&t<=40959?0:t>=40960&&t<=49151?1:t>=49152&&t<=57343?2:3}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC1: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}switchLowHighPrgRom(t){}switch16to32(){}switch32to16(){}toJSON(){let t=super.toJSON();return t.mirroring=this.mirroring,t.oneScreenMirroring=this.oneScreenMirroring,t.prgSwitchingArea=this.prgSwitchingArea,t.prgSwitchingSize=this.prgSwitchingSize,t.vromSwitchingSize=this.vromSwitchingSize,t.romSelectionReg0=this.romSelectionReg0,t.romSelectionReg1=this.romSelectionReg1,t.romBankSelect=this.romBankSelect,t.regBuffer=this.regBuffer,t.regBufferCounter=this.regBufferCounter,t}fromJSON(t){super.fromJSON(t),this.mirroring=t.mirroring,this.oneScreenMirroring=t.oneScreenMirroring,this.prgSwitchingArea=t.prgSwitchingArea,this.prgSwitchingSize=t.prgSwitchingSize,this.vromSwitchingSize=t.vromSwitchingSize,this.romSelectionReg0=t.romSelectionReg0,this.romSelectionReg1=t.romSelectionReg1,this.romBankSelect=t.romBankSelect,this.regBuffer=t.regBuffer,this.regBufferCounter=t.regBufferCounter}};c(wt,"mapperName","MMC1");mi=wt});var Gt,pi,ui=S(()=>{O();Gt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.loadRomBank(e,32768)}loadROM(){if(!this.nes.rom.valid)throw new Error("UNROM: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(Gt,"mapperName","UxROM");pi=Gt});var Dt,xi,di=S(()=>{O();Dt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load8kVromBank(e*2,0)}};c(Dt,"mapperName","CNROM");xi=Dt});var P,Se,Y,Lt=S(()=>{O();P=class P extends C{constructor(t){super(t),this.command=0,this.prgAddressSelect=0,this.chrAddressSelect=0,this.pageNumber=0,this.irqCounter=255,this.irqLatchValue=255,this.irqReload=0,this.irqEnable=0,this.prgAddressChanged=!1}write(t,e){if(t<32768){super.write(t,e);return}switch(t&57345){case 32768:{this.command=e&7;let i=e>>6&1;i!==this.prgAddressSelect&&(this.prgAddressChanged=!0),this.prgAddressSelect=i,this.chrAddressSelect=e>>7&1;break}case 32769:this.executeCommand(this.command,e);break;case 40960:(e&1)!==0?this.nes.ppu.setMirroring(this.nes.rom.HORIZONTAL_MIRRORING):this.nes.ppu.setMirroring(this.nes.rom.VERTICAL_MIRRORING);break;case 40961:break;case 49152:this.irqLatchValue=e;break;case 49153:this.irqReload=1;break;case 57344:this.irqEnable=0;break;case 57345:this.irqEnable=1;break}}executeCommand(t,e){switch(t){case P.CMD_SEL_2_1K_VROM_0000:this.chrAddressSelect===0?(this.load1kVromBank(e,0),this.load1kVromBank(e+1,1024)):(this.load1kVromBank(e,4096),this.load1kVromBank(e+1,5120));break;case P.CMD_SEL_2_1K_VROM_0800:this.chrAddressSelect===0?(this.load1kVromBank(e,2048),this.load1kVromBank(e+1,3072)):(this.load1kVromBank(e,6144),this.load1kVromBank(e+1,7168));break;case P.CMD_SEL_1K_VROM_1000:this.chrAddressSelect===0?this.load1kVromBank(e,4096):this.load1kVromBank(e,0);break;case P.CMD_SEL_1K_VROM_1400:this.chrAddressSelect===0?this.load1kVromBank(e,5120):this.load1kVromBank(e,1024);break;case P.CMD_SEL_1K_VROM_1800:this.chrAddressSelect===0?this.load1kVromBank(e,6144):this.load1kVromBank(e,2048);break;case P.CMD_SEL_1K_VROM_1C00:this.chrAddressSelect===0?this.load1kVromBank(e,7168):this.load1kVromBank(e,3072);break;case P.CMD_SEL_ROM_PAGE1:this.prgAddressChanged&&(this.prgAddressSelect===0?this.load8kRomBank((this.nes.rom.romCount-1)*2,49152):this.load8kRomBank((this.nes.rom.romCount-1)*2,32768),this.prgAddressChanged=!1),this.prgAddressSelect===0?this.load8kRomBank(e,32768):this.load8kRomBank(e,49152);break;case P.CMD_SEL_ROM_PAGE2:this.load8kRomBank(e,40960),this.prgAddressChanged&&(this.prgAddressSelect===0?this.load8kRomBank((this.nes.rom.romCount-1)*2,49152):this.load8kRomBank((this.nes.rom.romCount-1)*2,32768),this.prgAddressChanged=!1)}}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC3: Invalid ROM! Unable to load.");this.load8kRomBank((this.nes.rom.romCount-1)*2,49152),this.load8kRomBank((this.nes.rom.romCount-1)*2+1,57344),this.load8kRomBank(0,32768),this.load8kRomBank(1,40960),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}clockIrqCounter(){this.irqReload===1&&(this.irqCounter=this.irqLatchValue,this.irqReload=0),this.irqCounter--,this.irqCounter<0&&(this.irqEnable===1&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL),this.irqCounter=this.irqLatchValue)}toJSON(){let t=super.toJSON();return t.command=this.command,t.prgAddressSelect=this.prgAddressSelect,t.chrAddressSelect=this.chrAddressSelect,t.pageNumber=this.pageNumber,t.irqCounter=this.irqCounter,t.irqReload=this.irqReload,t.irqLatchValue=this.irqLatchValue,t.irqEnable=this.irqEnable,t.prgAddressChanged=this.prgAddressChanged,t}fromJSON(t){super.fromJSON(t),this.command=t.command,this.prgAddressSelect=t.prgAddressSelect,this.chrAddressSelect=t.chrAddressSelect,this.pageNumber=t.pageNumber,this.irqCounter=t.irqCounter,this.irqReload=t.irqReload||0,this.irqLatchValue=t.irqLatchValue,this.irqEnable=t.irqEnable,this.prgAddressChanged=t.prgAddressChanged}};c(P,"mapperName","MMC3"),c(P,"CMD_SEL_2_1K_VROM_0000",0),c(P,"CMD_SEL_2_1K_VROM_0800",1),c(P,"CMD_SEL_1K_VROM_1000",2),c(P,"CMD_SEL_1K_VROM_1400",3),c(P,"CMD_SEL_1K_VROM_1800",4),c(P,"CMD_SEL_1K_VROM_1C00",5),c(P,"CMD_SEL_ROM_PAGE1",6),c(P,"CMD_SEL_ROM_PAGE2",7);Se=P,Y=Se});var zt,Ri,gi=S(()=>{O();H();zt=class extends C{constructor(t){super(t),this.prgMode=3,this.prgBankReg=new Uint8Array(5),this.prgBankReg[4]=255,this.prgRam=new Uint8Array(65536),this.prgRamProtectA=3,this.prgRamProtectB=3,this.chrMode=3,this.chrBankA=new Uint16Array(8),this.chrBankB=new Uint16Array(4),this.chrUpperBits=0,this.lastChrWrite=0,this.ntMapping=new Uint8Array(4),this.exramMode=0,this.exram=new Uint8Array(1024),this.fillTile=0,this.fillAttr=0,this.irqTarget=0,this.irqEnabled=!1,this.irqPending=!1,this.inFrame=!1,this.irqCounter=0,this.multA=0,this.multB=0,this.splitEnabled=!1,this.splitRight=!1,this.splitTile=0,this.splitScroll=0,this.splitPage=0,this.pulse1=this._initPulse(),this.pulse2=this._initPulse(),this.pcmValue=0,this.pcmReadMode=!1,this.pcmIrqEnabled=!1,this.audioEnabled=0,this._chrBankTarget=-1}_initPulse(){return{enabled:!1,dutyCycle:0,lengthHalt:!1,constantVolume:!1,volume:0,timer:0,timerCounter:0,lengthCounter:0,envelopeCounter:0,envelopeDecay:15,envelopeStart:!1,sequencePos:0}}load(t){if(t&=65535,t<20480)return super.load(t);if(t===20501){let e=0;return this.pulse1.lengthCounter>0&&(e|=1),this.pulse2.lengthCounter>0&&(e|=2),e}if(t===20496)return 0;if(t>=20736&&t<=20740)return this.nes.cpu.dataBus;if(t===20741)return this.nes.cpu.dataBus;if(t===20996){let e=this.nes.ppu;e.scanline>=20&&e.scanline<=260&&(e.f_bgVisibility===1||e.f_spVisibility===1)||(this.inFrame=!1);let s=0;return this.irqPending&&(s|=128),this.inFrame&&(s|=64),this.irqPending=!1,s}if(t===20997)return this.multA*this.multB&255;if(t===20998)return this.multA*this.multB>>8&255;if(t>=23552&&t<=24575)return this.exramMode>=2?this.exram[t-23552]:this.nes.cpu.dataBus;if(t<24576)return this.nes.cpu.dataBus;if(t<32768){let i=(this.prgBankReg[0]&7)*8192+(t-24576);return this.prgRam[i&65535]}return this._readPrg(t)}_readPrg(t){let e,i,s,r,a;switch(this.prgMode){case 0:return i=this.prgBankReg[4],r=(i&124)>>2,this._readPrgRom32k(r,t-32768);case 1:return t<49152?(i=this.prgBankReg[2],s=(i&128)===0,s?(r=(i&6)>>1,this.prgRam[r*16384+(t-32768)]):(r=(i&126)>>1,this._readPrgRom16k(r,t-32768))):(i=this.prgBankReg[4],r=(i&126)>>1,this._readPrgRom16k(r,t-49152));case 2:return t<49152?(i=this.prgBankReg[2],s=(i&128)===0,s?(r=(i&6)>>1,this.prgRam[r*16384+(t-32768)]):(r=(i&126)>>1,this._readPrgRom16k(r,t-32768))):t<57344?(i=this.prgBankReg[3],s=(i&128)===0,s?(r=i&7,this.prgRam[r*8192+(t-49152)]):(r=i&127,this._readPrgRom8k(r,t-49152))):(i=this.prgBankReg[4],r=i&127,this._readPrgRom8k(r,t-57344));default:return t<40960?e=1:t<49152?e=2:t<57344?e=3:e=4,i=this.prgBankReg[e],a=e===1?32768:e===2?40960:e===3?49152:57344,e<4&&(i&128)===0?(r=i&7,this.prgRam[r*8192+(t-a)]):(r=i&127,this._readPrgRom8k(r,t-a))}}_readPrgRom32k(t,e){let i=(t*2+Math.floor(e/16384))%this.nes.rom.romCount,s=e%16384;return this.nes.rom.rom[i][s]}_readPrgRom16k(t,e){return t%=this.nes.rom.romCount,this.nes.rom.rom[t][e]}_readPrgRom8k(t,e){let i=Math.floor(t/2)%this.nes.rom.romCount,s=t%2*8192+e;return i=20480&&t<=20483){this._writePulse(this.pulse1,t-20480,e);return}if(t>=20484&&t<=20487){this._writePulse(this.pulse2,t-20484,e);return}if(t===20496){this.pcmReadMode=(e&1)!==0,this.pcmIrqEnabled=(e&128)!==0;return}if(t===20497){!this.pcmReadMode&&e!==0&&(this.pcmValue=e);return}if(t===20501){this.audioEnabled=e&3,this.pulse1.enabled=(e&1)!==0,this.pulse2.enabled=(e&2)!==0,this.pulse1.enabled||(this.pulse1.lengthCounter=0),this.pulse2.enabled||(this.pulse2.lengthCounter=0);return}if(t===20736){this.prgMode=e&3,this._syncPrg();return}if(t===20737){this.chrMode=e&3,this._syncChr();return}if(t===20738){this.prgRamProtectA=e&3;return}if(t===20739){this.prgRamProtectB=e&3;return}if(t===20740){this.exramMode=e&3,this.bgTileOverride=this.exramMode===1,this._syncNametables();return}if(t===20741){let i=e;this.ntMapping[0]=i&3,i>>=2,this.ntMapping[1]=i&3,i>>=2,this.ntMapping[2]=i&3,i>>=2,this.ntMapping[3]=i&3,this._syncNametables();return}if(t===20742){this.fillTile=e,this._syncNametables();return}if(t===20743){this.fillAttr=e&3,this._syncNametables();return}if(t===20755){this.prgBankReg[0]=e&7;return}if(t>=20756&&t<=20759){let i=t-20755;this.prgBankReg[i]=e,this._syncPrg();return}if(t>=20768&&t<=20775){let i=t-20768;this.chrBankA[i]=this.chrUpperBits<<8|e,this.lastChrWrite=0,this._syncChr();return}if(t>=20776&&t<=20779){let i=t-20776;this.chrBankB[i]=this.chrUpperBits<<8|e,this.lastChrWrite=1,this._syncChr();return}if(t===20784){this.chrUpperBits=e&3;return}if(t===20992){this.splitEnabled=(e&128)!==0,this.splitRight=(e&64)!==0,this.splitTile=e&31;return}if(t===20993){this.splitScroll=e;return}if(t===20994){this.splitPage=e&63;return}if(t===20995){this.irqTarget=e;return}if(t===20996){this.irqEnabled=(e&128)!==0,this.irqEnabled&&this.irqPending&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL);return}if(t===20997){this.multA=e;return}if(t===20998){this.multB=e;return}if(t>=23552&&t<=24575){let i=t-23552;this.exramMode===0||this.exramMode===1?(this.exram[i]=this.inFrame?e:0,this._syncExramToVram(i)):this.exramMode===2&&(this.exram[i]=e);return}if(t>=24576&&t<=32767){if(this.prgRamProtectA===2&&this.prgRamProtectB===1){let s=(this.prgBankReg[0]&7)*8192+(t-24576);this.prgRam[s&65535]=e,this.nes.cpu.mem[t]=e,this.nes.opts.onBatteryRamWrite(t,e)}return}if(t>=32768){this._writePrg(t,e);return}}_writePrg(t,e){let i,s,r,a,n;switch(this.prgMode){case 0:return;case 1:t<49152&&(s=this.prgBankReg[2],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=(s&6)>>1,this.prgRam[a*16384+(t-32768)]=e));return;case 2:t<49152?(s=this.prgBankReg[2],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=(s&6)>>1,this.prgRam[a*16384+(t-32768)]=e)):t<57344&&(s=this.prgBankReg[3],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=s&7,this.prgRam[a*8192+(t-49152)]=e));return;default:if(t<40960)i=1,n=32768;else if(t<49152)i=2,n=40960;else if(t<57344)i=3,n=49152;else return;s=this.prgBankReg[i],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=s&7,this.prgRam[a*8192+(t-n)]=e);return}}_isPrgRamWritable(){return this.prgRamProtectA===2&&this.prgRamProtectB===1}_syncPrg(){switch(this.prgMode){case 0:{let e=(this.prgBankReg[4]&124)>>2;this.load32kRomBank(e,32768);break}case 1:{let t=this.prgBankReg[2];if(t&128){let s=(t&126)>>1;this.loadRomBank(s%this.nes.rom.romCount,32768)}let i=(this.prgBankReg[4]&126)>>1;this.loadRomBank(i%this.nes.rom.romCount,49152);break}case 2:{let t=this.prgBankReg[2];if(t&128){let s=(t&126)>>1;this.loadRomBank(s%this.nes.rom.romCount,32768)}let e=this.prgBankReg[3];e&128&&this.load8kRomBank(e&127,49152);let i=this.prgBankReg[4];this.load8kRomBank(i&127,57344);break}default:{for(let t=1;t<=4;t++){let e=this.prgBankReg[t],i=24576+t*8192;(t===4||e&128)&&this.load8kRomBank(e&127,i)}break}}}_syncChr(){this.nes.ppu.triggerRendering(),this._chrBankTarget=-1,this.nes.ppu.f_spriteSize===0&&(this._applyChrSetA(),this._chrBankTarget=0)}_applyChrSetA(){if(this.nes.rom.vromCount!==0)switch(this.chrMode){case 0:this.load8kVromBank((this.chrBankA[7]&255)*2,0);break;case 1:this.loadVromBank(this.chrBankA[3]&255,0),this.loadVromBank(this.chrBankA[7]&255,4096);break;case 2:this.load2kVromBank(this.chrBankA[1]&511,0),this.load2kVromBank(this.chrBankA[3]&511,2048),this.load2kVromBank(this.chrBankA[5]&511,4096),this.load2kVromBank(this.chrBankA[7]&511,6144);break;default:for(let t=0;t<8;t++)this.load1kVromBank(this.chrBankA[t]&1023,t*1024);break}}_applyChrSetB(){if(this.nes.rom.vromCount!==0)switch(this.chrMode){case 0:this.load8kVromBank((this.chrBankB[3]&255)*2,0);break;case 1:this.loadVromBank(this.chrBankB[3]&255,0),this.loadVromBank(this.chrBankB[3]&255,4096);break;case 2:this.load2kVromBank(this.chrBankB[1]&511,0),this.load2kVromBank(this.chrBankB[3]&511,2048),this.load2kVromBank(this.chrBankB[1]&511,4096),this.load2kVromBank(this.chrBankB[3]&511,6144);break;default:for(let t=0;t<4;t++)this.load1kVromBank(this.chrBankB[t]&1023,t*1024),this.load1kVromBank(this.chrBankB[t]&1023,(t+4)*1024);break}}_syncNametables(){let t=this.nes.ppu,e=this.fillAttr|this.fillAttr<<2|this.fillAttr<<4|this.fillAttr<<6;for(let s=0;s<960;s++)t.vramMem[11264+s]=this.fillTile;for(let s=960;s<1024;s++)t.vramMem[11264+s]=e;if(this.exramMode>=2)for(let s=0;s<1024;s++)t.vramMem[10240+s]=0;else v(this.exram,0,t.vramMem,10240,1024);let i=[8192,9216,10240,11264];for(let s=0;s<4;s++){let r=8192+s*1024,a=i[this.ntMapping[s]];t.defineMirrorRegion(r,a,1024)}t.defineMirrorRegion(12288,8192,3840);for(let s=0;s<4;s++)t.ntable1[s]=this.ntMapping[s];this._populateNameTable(2,10240),this._populateNameTable(3,11264)}_populateNameTable(t,e){let i=this.nes.ppu,s=i.nameTable[t];for(let r=0;r<960;r++)s.tile[r]=i.vramMem[e+r];for(let r=0;r<64;r++)s.writeAttrib(r,i.vramMem[e+960+r])}_syncExramToVram(t){if(this.exramMode<2){let e=this.nes.ppu;e.vramMem[10240+t]=this.exram[t],t<960?e.nameTable[2].tile[t]=this.exram[t]:t<1024&&e.nameTable[2].writeAttrib(t-960,this.exram[t])}}_writePulse(t,e,i){switch(e){case 0:t.dutyCycle=i>>6&3,t.lengthHalt=(i&32)!==0,t.constantVolume=(i&16)!==0,t.volume=i&15;break;case 1:break;case 2:t.timer=t.timer&1792|i;break;case 3:t.timer=t.timer&255|(i&7)<<8,t.enabled&&(t.lengthCounter=this.nes.papu.getLengthMax(i)),t.envelopeStart=!0,t.sequencePos=0;break}}clockIrqCounter(){if(this.nes.ppu.scanline===20){this.inFrame=!0,this.irqCounter=0;return}this.irqCounter++,this.irqTarget!==0&&this.irqCounter===this.irqTarget&&(this.irqPending=!0,this.irqEnabled&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL)),(this.irqCounter&3)===0&&(this._clockPulseLengthCounter(this.pulse1),this._clockPulseLengthCounter(this.pulse2))}_clockPulseLengthCounter(t){t.enabled&&!t.lengthHalt&&t.lengthCounter>0&&t.lengthCounter--}onBgRender(){this.nes.ppu.f_spriteSize===1&&this._chrBankTarget!==1&&(this._applyChrSetB(),this._chrBankTarget=1,this.nes.ppu.validTileData=!1)}onSpriteRender(){this.nes.ppu.f_spriteSize===1&&this._chrBankTarget!==0&&(this._applyChrSetA(),this._chrBankTarget=0)}getSpritePatternTile(t){if(this.nes.ppu.f_spriteSize!==1||this.nes.rom.vromCount===0)return this.nes.ppu.ptTile[t];let e=this.nes.rom.vromCount,i=this.nes.rom.vromTile;switch(this.chrMode){case 0:{let s=(this.chrBankA[7]&255)*2,r=t>=256?1:0,a=(s+r)%e;return i[a][t-r*256]}case 1:{let s;return t<256?s=(this.chrBankA[3]&255)%e:s=(this.chrBankA[7]&255)%e,i[s][t%256]}case 2:{let s=[1,3,5,7],r=t>>7,a=t&127,n=this.chrBankA[s[r]]&511,l=Math.floor(n/2)%e;return i[l][(n%2<<7)+a]}default:{let s=t>>6,r=t&63,a=this.chrBankA[s]&1023,n=Math.floor(a/4)%e;return i[n][(a%4<<6)+r]}}}getBgTileData(t,e,i,s){if(this.exramMode!==1||this.nes.rom.vromCount===0)return null;let r=s*32+i,a=this.exram[r],l=(a&63|this.chrUpperBits<<6)%this.nes.rom.vromCount,o=this.nes.rom.vromTile[l][e];if(!o)return null;let p=(a>>6&3)<<2;return{tile:o,attrib:p}}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC5: Invalid ROM! Unable to load.");this.prgBankReg[4]=255,this._syncPrg(),this.loadCHRROM(),this.loadBatteryRam(),this._syncNametables(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}toJSON(){let t=super.toJSON();return t.prgMode=this.prgMode,t.prgBankReg=Array.from(this.prgBankReg),t.prgRam=Array.from(this.prgRam),t.prgRamProtectA=this.prgRamProtectA,t.prgRamProtectB=this.prgRamProtectB,t.chrMode=this.chrMode,t.chrBankA=Array.from(this.chrBankA),t.chrBankB=Array.from(this.chrBankB),t.chrUpperBits=this.chrUpperBits,t.lastChrWrite=this.lastChrWrite,t.ntMapping=Array.from(this.ntMapping),t.exramMode=this.exramMode,t.exram=Array.from(this.exram),t.fillTile=this.fillTile,t.fillAttr=this.fillAttr,t.irqTarget=this.irqTarget,t.irqEnabled=this.irqEnabled,t.irqPending=this.irqPending,t.inFrame=this.inFrame,t.irqCounter=this.irqCounter,t.multA=this.multA,t.multB=this.multB,t.splitEnabled=this.splitEnabled,t.splitRight=this.splitRight,t.splitTile=this.splitTile,t.splitScroll=this.splitScroll,t.splitPage=this.splitPage,t.pcmValue=this.pcmValue,t.pcmReadMode=this.pcmReadMode,t.pcmIrqEnabled=this.pcmIrqEnabled,t.audioEnabled=this.audioEnabled,t.pulse1=Object.assign({},this.pulse1),t.pulse2=Object.assign({},this.pulse2),t}fromJSON(t){super.fromJSON(t),this.prgMode=t.prgMode,this.prgBankReg=new Uint8Array(t.prgBankReg),this.prgRam=new Uint8Array(t.prgRam),this.prgRamProtectA=t.prgRamProtectA,this.prgRamProtectB=t.prgRamProtectB,this.chrMode=t.chrMode,this.chrBankA=new Uint16Array(t.chrBankA),this.chrBankB=new Uint16Array(t.chrBankB),this.chrUpperBits=t.chrUpperBits,this.lastChrWrite=t.lastChrWrite,this.ntMapping=new Uint8Array(t.ntMapping),this.exramMode=t.exramMode,this.exram=new Uint8Array(t.exram),this.fillTile=t.fillTile,this.fillAttr=t.fillAttr,this.irqTarget=t.irqTarget,this.irqEnabled=t.irqEnabled,this.irqPending=t.irqPending,this.inFrame=t.inFrame,this.irqCounter=t.irqCounter,this.multA=t.multA,this.multB=t.multB,this.splitEnabled=t.splitEnabled,this.splitRight=t.splitRight,this.splitTile=t.splitTile,this.splitScroll=t.splitScroll,this.splitPage=t.splitPage,this.pcmValue=t.pcmValue,this.pcmReadMode=t.pcmReadMode,this.pcmIrqEnabled=t.pcmIrqEnabled,this.audioEnabled=t.audioEnabled,t.pulse1&&(this.pulse1=Object.assign(this._initPulse(),t.pulse1)),t.pulse2&&(this.pulse2=Object.assign(this._initPulse(),t.pulse2)),this._syncPrg(),this._syncChr(),this._syncNametables()}};c(zt,"mapperName","MMC5");Ri=zt});var qt,bi,Ci=S(()=>{O();qt=class extends C{constructor(t){super(t)}write(t,e){t<32768?super.write(t,e):(this.load32kRomBank(e&7,32768),e&16?this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING2):this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING))}loadROM(){if(!this.nes.rom.valid)throw new Error("AOROM: Invalid ROM! Unable to load.");this.loadPRGROM(),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(qt,"mapperName","AxROM");bi=qt});var vt,_i,Si=S(()=>{O();vt=class extends C{constructor(t){super(t),this.prgBank=0,this.chrBankFD0=0,this.chrBankFE0=0,this.chrBankFD1=0,this.chrBankFE1=0,this.latch0=254,this.latch1=254}write(t,e){if(t<32768){super.write(t,e);return}switch(t&61440){case 40960:this.prgBank=e&15,this.load8kRomBank(this.prgBank,32768);break;case 45056:this.chrBankFD0=e&31,this._updateChr0();break;case 49152:this.chrBankFE0=e&31,this._updateChr0();break;case 53248:this.chrBankFD1=e&31,this._updateChr1();break;case 57344:this.chrBankFE1=e&31,this._updateChr1();break;case 61440:e&1?this.nes.ppu.setMirroring(this.nes.rom.HORIZONTAL_MIRRORING):this.nes.ppu.setMirroring(this.nes.rom.VERTICAL_MIRRORING);break}}_updateChr0(){let t=this.latch0===253?this.chrBankFD0:this.chrBankFE0;this.loadVromBank(t,0)}_updateChr1(){let t=this.latch1===253?this.chrBankFD1:this.chrBankFE1;this.loadVromBank(t,4096)}latchAccess(t){t===4056?this.latch0!==253&&(this.latch0=253,this._updateChr0()):t===4072?this.latch0!==254&&(this.latch0=254,this._updateChr0()):t>=8152&&t<=8159?this.latch1!==253&&(this.latch1=253,this._updateChr1()):t>=8168&&t<=8175&&this.latch1!==254&&(this.latch1=254,this._updateChr1())}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC2: Invalid ROM! Unable to load.");this.load8kRomBank(0,32768);let t=(this.nes.rom.romCount-1)*2+1;this.load8kRomBank(t-2,40960),this.load8kRomBank(t-1,49152),this.load8kRomBank(t,57344),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}toJSON(){let t=super.toJSON();return t.prgBank=this.prgBank,t.chrBankFD0=this.chrBankFD0,t.chrBankFE0=this.chrBankFE0,t.chrBankFD1=this.chrBankFD1,t.chrBankFE1=this.chrBankFE1,t.latch0=this.latch0,t.latch1=this.latch1,t}fromJSON(t){super.fromJSON(t),this.prgBank=t.prgBank,this.chrBankFD0=t.chrBankFD0,this.chrBankFE0=t.chrBankFE0,this.chrBankFD1=t.chrBankFD1,this.chrBankFE1=t.chrBankFE1,this.latch0=t.latch0,this.latch1=t.latch1}};c(vt,"mapperName","MMC2");_i=vt});var Ut,yi,Ei=S(()=>{O();Ut=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else{let i=(e&15)*2%this.nes.rom.romCount,s=((e&15)*2+1)%this.nes.rom.romCount;if(this.loadRomBank(i,32768),this.loadRomBank(s,49152),this.nes.rom.vromCount>0){let r=(e>>4)*2%this.nes.rom.vromCount;this.loadVromBank(r,0),this.loadVromBank(r+1,4096)}}}};c(Ut,"mapperName","Color Dreams");yi=Ut});var Wt,Ti,Ai=S(()=>{O();Wt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load32kRomBank(e,32768)}};c(Wt,"mapperName","BNROM");Ti=Wt});var Ht,ki,Fi=S(()=>{O();Ht=class extends C{constructor(t){super(t)}write(t,e){if(t<28672||t>32767){super.write(t,e);return}else this.load32kRomBank(e&3,32768),this.load8kVromBank((e>>2&3)*2,0)}};c(Ht,"mapperName","PCI556");ki=Ht});var Yt,Bi,Ni=S(()=>{O();Yt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load32kRomBank(e>>4&3,32768),this.load8kVromBank((e&3)*2,0)}};c(Yt,"mapperName","GxROM");Bi=Yt});var Jt,Mi,Oi=S(()=>{O();Jt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}t>=36864&&t<40960?e&16?this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING2):this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING):t>=49152&&this.loadRomBank(e&15,32768)}loadROM(){if(!this.nes.rom.valid)throw new Error("Mapper 71: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(Jt,"mapperName","Camerica");Mi=Jt});var Xt,Ii,Pi=S(()=>{O();Xt=class extends C{constructor(t){super(t)}write(t,e){(t&57600)===16640&&(this.load32kRomBank(e>>3&1,32768),this.load8kVromBank((e&7)*2,0)),super.write(t,e)}};c(Xt,"mapperName","NINA-03/NINA-06");Ii=Xt});var jt,Vi,wi=S(()=>{O();jt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.loadRomBank(e>>2,32768)}loadROM(){if(!this.nes.rom.valid)throw new Error("UN1ROM: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(jt,"mapperName","UN1ROM");Vi=jt});var Zt,Gi,Di=S(()=>{Lt();Zt=class extends Y{constructor(t){super(t),this.chrRegs=[0,0,0,0,0,0]}write(t,e){t!==40960&&(super.write(t,e),t===32768&&this.updateNametableMirroring())}executeCommand(t,e){t<=5?(this.chrRegs[t]=e,super.executeCommand(t,e&127),this.updateNametableMirroring()):super.executeCommand(t,e)}updateNametableMirroring(){let t=this.nes.ppu;if(this.chrAddressSelect===0){let e=this.chrRegs[0]>>7&1,i=this.chrRegs[1]>>7&1;t.ntable1[0]=e,t.ntable1[1]=e,t.ntable1[2]=i,t.ntable1[3]=i}else t.ntable1[0]=this.chrRegs[2]>>7&1,t.ntable1[1]=this.chrRegs[3]>>7&1,t.ntable1[2]=this.chrRegs[4]>>7&1,t.ntable1[3]=this.chrRegs[5]>>7&1;for(let e=0;e<4;e++){let i=8192+e*1024,s=8192+t.ntable1[e]*1024;t.defineMirrorRegion(i,s,1024)}t.currentMirroring=-1}loadROM(){super.loadROM(),this.updateNametableMirroring()}toJSON(){let t=super.toJSON();return t.chrRegs=this.chrRegs.slice(),t}fromJSON(t){super.fromJSON(t),this.chrRegs=t.chrRegs,this.updateNametableMirroring()}};c(Zt,"mapperName","TxSROM");Gi=Zt});var Kt,Li,zi=S(()=>{Lt();Bt();H();Kt=class extends Y{constructor(t){super(t),this.chrRam=new Uint8Array(8192),this.chrRamTiles=new Array(8);for(let e=0;e<8;e++){this.chrRamTiles[e]=new Array(64);for(let i=0;i<64;i++)this.chrRamTiles[e][i]=new xt}this.chrRamSlots=[-1,-1,-1,-1,-1,-1,-1,-1]}executeCommand(t,e){switch(t){case Y.CMD_SEL_2_1K_VROM_0000:{let i=this.chrAddressSelect===0?0:4096;if(e&64){let s=e&6;this.load1kChrRamBank(s,i),this.load1kChrRamBank(s+1,i+1024)}else{let s=e&63;this.saveChrRamSlot(i),this.saveChrRamSlot(i+1024),this.chrRamSlots[i>>10]=-1,this.chrRamSlots[(i>>10)+1]=-1,this.load1kVromBank(s,i),this.load1kVromBank(s+1,i+1024)}break}case Y.CMD_SEL_2_1K_VROM_0800:{let i=this.chrAddressSelect===0?2048:6144;if(e&64){let s=e&6;this.load1kChrRamBank(s,i),this.load1kChrRamBank(s+1,i+1024)}else{let s=e&63;this.saveChrRamSlot(i),this.saveChrRamSlot(i+1024),this.chrRamSlots[i>>10]=-1,this.chrRamSlots[(i>>10)+1]=-1,this.load1kVromBank(s,i),this.load1kVromBank(s+1,i+1024)}break}case Y.CMD_SEL_1K_VROM_1000:{let i=this.chrAddressSelect===0?4096:0;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}case Y.CMD_SEL_1K_VROM_1400:{let i=this.chrAddressSelect===0?5120:1024;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}case Y.CMD_SEL_1K_VROM_1800:{let i=this.chrAddressSelect===0?6144:2048;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}case Y.CMD_SEL_1K_VROM_1C00:{let i=this.chrAddressSelect===0?7168:3072;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}default:super.executeCommand(t,e)}}saveChrRamSlot(t){let e=t>>10,i=this.chrRamSlots[e];i!==-1&&v(this.nes.ppu.vramMem,e<<10,this.chrRam,i*1024,1024)}load1kChrRamBank(t,e){this.nes.ppu.triggerRendering(),t&=7,this.saveChrRamSlot(e);let i=e>>10;this.chrRamSlots[i]=t;let s=t*1024;v(this.chrRam,s,this.nes.ppu.vramMem,e,1024),this.rebuildChrRamTiles(t);let r=e>>4;for(let a=0;a<64;a++)this.nes.ppu.ptTile[r+a]=this.chrRamTiles[t][a]}rebuildChrRamTiles(t){let e=t*1024;for(let i=0;i<1024;i++){let s=i>>4,r=i%16;r<8?this.chrRamTiles[t][s].setScanline(r,this.chrRam[e+i],this.chrRam[e+i+8]):this.chrRamTiles[t][s].setScanline(r-8,this.chrRam[e+i-8],this.chrRam[e+i])}}canWriteChr(t){return t>=8192?!1:this.chrRamSlots[t>>10]!==-1}toJSON(){for(let e=0;e<8;e++)this.saveChrRamSlot(e<<10);let t=super.toJSON();return t.chrRam=Array.from(this.chrRam),t.chrRamSlots=this.chrRamSlots.slice(),t}fromJSON(t){super.fromJSON(t),this.chrRam=new Uint8Array(t.chrRam),this.chrRamSlots=t.chrRamSlots;for(let e=0;e<8;e++)this.rebuildChrRamTiles(e);for(let e=0;e<8;e++){let i=this.chrRamSlots[e];if(i!==-1){let s=e<<10>>4;for(let r=0;r<64;r++)this.nes.ppu.ptTile[s+r]=this.chrRamTiles[i][r]}}}};c(Kt,"mapperName","TQROM");Li=Kt});var Qt,qi,vi=S(()=>{O();Qt=class extends C{constructor(t){super(t)}write(t,e){if(t<24576||t>32767){super.write(t,e);return}else this.load32kRomBank(e>>4&3,32768),this.load8kVromBank((e&15)*2,0)}};c(Qt,"mapperName","Jaleco JF-11/JF-14");qi=Qt});var $t,Ui,Wi=S(()=>{O();$t=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.loadRomBank(e,49152)}loadROM(){if(!this.nes.rom.valid)throw new Error("Mapper 180: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(0,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c($t,"mapperName","UNROM (Crazy Climber)");Ui=$t});var te,Hi,Yi=S(()=>{O();te=class extends C{constructor(t){super(t)}write(t,e){if(t<16416||t>24575){super.write(t,e);return}else this.load32kRomBank(e>>4&3,32768),this.load8kVromBank((e&15)*2,0)}};c(te,"mapperName","Mapper 240");Hi=te});var ee,Ji,Xi=S(()=>{O();ee=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load32kRomBank(e,32768)}};c(ee,"mapperName","BxROM (Mapper 241)");Ji=ee});var ye,ji=S(()=>{O();fi();ui();di();Lt();gi();Ci();Si();Ei();Ai();Fi();Ni();Oi();Pi();wi();Di();zi();vi();Wi();Yi();Xi();ye={0:C,1:mi,2:pi,3:xi,4:Y,5:Ri,7:bi,9:_i,11:yi,34:Ti,38:ki,66:Bi,71:Mi,79:Ii,94:Vi,118:Gi,119:Li,140:qi,180:Ui,240:Hi,241:Ji}});var Ee,Zi,Ki=S(()=>{ji();Bt();Ee=class u{constructor(t){c(this,"VERTICAL_MIRRORING",0);c(this,"HORIZONTAL_MIRRORING",1);c(this,"FOURSCREEN_MIRRORING",2);c(this,"SINGLESCREEN_MIRRORING",3);c(this,"SINGLESCREEN_MIRRORING2",4);c(this,"SINGLESCREEN_MIRRORING3",5);c(this,"SINGLESCREEN_MIRRORING4",6);c(this,"CHRROM_MIRRORING",7);this.nes=t,this.valid=!1}load(t){let e,i,s;t instanceof ArrayBuffer&&(t=new Uint8Array(t));let r=ArrayBuffer.isView(t);if(r){if(t.length<4||t[0]!==78||t[1]!==69||t[2]!==83||t[3]!==26)throw new Error("Not a valid NES ROM.")}else if(!t.startsWith("NES"))throw new Error("Not a valid NES ROM.");for(this.header=new Uint8Array(16),e=0;e<16;e++)this.header[e]=r?t[e]:t.charCodeAt(e)&255;this.mirroring=(this.header[6]&1)!==0?1:0,this.batteryRam=(this.header[6]&2)!==0,this.trainer=(this.header[6]&4)!==0,this.fourScreen=(this.header[6]&8)!==0,this.isNES2=(this.header[7]&12)===8,this.isNES2?this._loadNES2Header():this._loadINES1Header(),this.rom=new Array(this.romCount);let a=16+(this.trainer?512:0);for(e=0;e=t.length);i++)this.rom[e][i]=r?t[a+i]:t.charCodeAt(a+i)&255;a+=16384}for(this.vrom=new Array(this.vromCount),e=0;e=t.length);i++)this.vrom[e][i]=r?t[a+i]:t.charCodeAt(a+i)&255;a+=4096}for(this.vromTile=new Array(this.vromCount),e=0;e>4,l=e%16,l<8?this.vromTile[s][n].setScanline(l,this.vrom[s][e],this.vrom[s][e+8]):this.vromTile[s][n].setScanline(l-8,this.vrom[s][e-8],this.vrom[s][e]);this.valid=!0}_loadINES1Header(){this.romCount=this.header[4],this.vromCount=this.header[5]*2,this.mapperType=this.header[6]>>4|this.header[7]&240;let t=!1;for(let e=8;e<16;e++)if(this.header[e]!==0){t=!0;break}t&&(this.mapperType&=15),this.subMapper=0,this.prgRamSize=0,this.prgNvRamSize=0,this.chrRamSize=0,this.chrNvRamSize=0,this.timingMode=0,this.consoleType=0}_loadNES2Header(){this.mapperType=this.header[6]>>4|this.header[7]&240|(this.header[8]&15)<<8,this.subMapper=this.header[8]>>4&15;let t=this.header[9]&15;if(t===15){let i=this.header[4]>>2&63,s=this.header[4]&3;this.romCount=Math.ceil(Math.pow(2,i)*(s*2+1)/16384)}else this.romCount=t<<8|this.header[4];let e=this.header[9]>>4&15;if(e===15){let i=this.header[5]>>2&63,s=this.header[5]&3;this.vromCount=Math.ceil(Math.pow(2,i)*(s*2+1)/4096)}else this.vromCount=(e<<8|this.header[5])*2;this.prgRamSize=u._decodeRamSize(this.header[10]&15),this.prgNvRamSize=u._decodeRamSize(this.header[10]>>4&15),this.chrRamSize=u._decodeRamSize(this.header[11]&15),this.chrNvRamSize=u._decodeRamSize(this.header[11]>>4&15),this.timingMode=this.header[12]&3,this.consoleType=this.header[7]&3}static _decodeRamSize(t){return t===0?0:64<sr});var Te,sr,$i=S(()=>{Ye();Je();Qe();ni();ci();Ki();Te=class{constructor(t){c(this,"frame",t=>{if(this.crashed)throw new Error("Game has crashed. Call reset() or loadROM() to restart.");this.frameInProgress||(this.controllers[1].clock(),this.controllers[2].clock(),this.ppu.startFrame(),this.frameInProgress=!0);let e,i=this.cpu,s=this.ppu,r=this.papu;try{for(;;)if(i.cyclesToHalt===0){if(t&&t())return!0;if(e=i.emulate(),r.clockFrameCounter(e,i.apuCatchupCycles),i.apuCatchupCycles=0,s.frameEnded){s.frameEnded=!1;break}}else{let a=Math.min(i.cyclesToHalt,8);for(let n=0;n{this.controllers[t].buttonDown(e)});c(this,"buttonUp",(t,e)=>{this.controllers[t].buttonUp(e)});c(this,"zapperMove",(t,e)=>{this.mmap&&(this.mmap.zapperX=t,this.mmap.zapperY=e)});c(this,"zapperFireDown",()=>{this.mmap&&(this.mmap.zapperFired=!0)});c(this,"zapperFireUp",()=>{this.mmap&&(this.mmap.zapperFired=!1)});this.opts=Be({onFrame:function(){},onAudioSample:null,onStatusUpdate:function(){},onBatteryRamWrite:function(){},emulateSound:!0,sampleRate:48e3},t),this.ui={writeFrame:this.opts.onFrame,updateStatus:this.opts.onStatusUpdate},this.cpu=new ce(this),this.ppu=new de(this),this.papu=new be(this),this.gameGenie=new li,this.gameGenie.onChange=()=>this.cpu._updateCartridgeLoader(),this.mmap=null,this.controllers={1:new fe,2:new fe},this.fpsFrameCount=0,this.romData=null,this.ui.updateStatus("Ready to load a ROM.")}reset(){this.cpu=new ce(this),this.ppu=new de(this),this.papu=new be(this),this.mmap!==null&&(this.mmap=this.rom.createMapper()),this.lastFpsTime=null,this.fpsFrameCount=0,this.crashed=!1,this.frameInProgress=!1}getFPS(){let t=Date.now(),e=null;return this.lastFpsTime&&(e=this.fpsFrameCount/((t-this.lastFpsTime)/1e3)),this.fpsFrameCount=0,this.lastFpsTime=t,e}reloadROM(){this.romData!==null&&this.loadROM(this.romData)}loadROM(t){this.rom=new Zi(this),this.rom.load(t),this.reset(),this.mmap=this.rom.createMapper(),this.mmap.loadROM(),this.ppu.setMirroring(this.rom.getMirroringType()),this.romData=t}setFramerate(t){this.papu.setFrameRate(t)}toJSON(){return{cpu:this.cpu.toJSON(),mmap:this.mmap.toJSON(),ppu:this.ppu.toJSON(),papu:this.papu.toJSON(),frameInProgress:this.frameInProgress,controllers:{1:this.controllers[1].toJSON(),2:this.controllers[2].toJSON()}}}fromJSON(t){this.reset(),this.cpu.fromJSON(t.cpu),this.mmap.fromJSON(t.mmap),this.ppu.fromJSON(t.ppu),this.papu.fromJSON(t.papu),this.frameInProgress=!!t.frameInProgress,t.controllers&&(t.controllers[1]&&this.controllers[1].fromJSON(t.controllers[1]),t.controllers[2]&&this.controllers[2].fromJSON(t.controllers[2]))}},sr=Te});var rr=($i(),rs(Qi)).default;function ts(){return hs()}var es=[{id:"hello.c",name:"Hello World"},{id:"attributes.c",name:"Attribute Table"},{id:"scroll.c",name:"Scrolling"},{id:"sprites.c",name:"Sprites"},{id:"metasprites.c",name:"Metasprites"},{id:"flicker.c",name:"Flickering Sprites"},{id:"metacursor.c",name:"Controllers"},{id:"vrambuffer.c",name:"VRAM Buffer"},{id:"statusbar.c",name:"Split Status Bar"},{id:"siegegame.c",name:"Siege Game"},{id:"tint.c",name:"Color Emphasis"},{id:"rletitle.c",name:"Title Screen RLE"},{id:"aputest.c",name:"Sound Tester"},{id:"music.c",name:"Music Player"},{id:"horizscroll.c",name:"Offscreen Scrolling"},{id:"monobitmap.c",name:"Monochrome Bitmap"},{id:"fami.c",name:"Famitone Demo"},{id:"shoot2.c",name:"Solarian Game"},{id:"climber.c",name:"Climber Game"},{id:"bankswitch.c",name:"Bank Switching"},{id:"irq.c",name:"IRQ Scanline Counter"},{id:"ex0.dasm",name:"Initialization",category:"Assembly"},{id:"ex1.dasm",name:"Hello World"},{id:"ex2.dasm",name:"Scrolling Demo"},{id:"ex3.dasm",name:"Sprite Demo"},{id:"ex4.dasm",name:"Controller Demo"},{id:"musicdemo.dasm",name:"Famitone Demo"},{id:"xyscroll.dasm",name:"XY Split Scrolling"},{id:"road.dasm",name:"3-D Road Demo"},{id:"hello.cpp",name:"Hello Oscar64",category:"Oscar64"},{id:"chase/game.c",name:"Shiru's Chase Game",category:"Other"},{id:"hello.wiz",name:"Hello (Wiz)"}],hr=Pe([[I.A,0,0],[I.B,0,1],[I.GP_A,0,0],[I.GP_B,0,1],[I.SELECT,0,2],[I.START,0,3],[I.UP,0,4],[I.DOWN,0,5],[I.LEFT,0,6],[I.RIGHT,0,7],[I.P2_A,1,0],[I.P2_B,1,1],[I.P2_SELECT,1,2],[I.P2_START,1,3],[I.P2_UP,1,4],[I.P2_DOWN,1,5],[I.P2_LEFT,1,6],[I.P2_RIGHT,1,7]]),Ae=class{constructor(t){this.p=t;this.cpuCyclesPerLine=114;this.cpu={getPC:()=>this.p.getPC(),getSP:()=>this.p.getSP(),isStable:()=>!0}}advanceFrame(t){var e=0;return this.p.nes.frame(()=>t&&t()?!0:(e++,!1)),e}saveState(){return this.p.saveState()}loadState(t){this.p.loadState(t)}read(t){return this.p.readAddress(t)}readConst(t){return this.p.readAddress(t)}write(t,e){t<8192?this.p.nes.cpu.mem[t&2047]=e:this.p.nes.mmap.write(t,e)}connectProbe(t){this.p.connectProbe(t)}},ke=class extends De{constructor(e){super();this.audioFrequency=44030;this.frameindex=0;this.showDebugView=!1;this.machine=new Ae(this);this.getToolForFilename=he;this.nullProbe=new Ge;this.probe=this.nullProbe;this.getMemoryMap=function(){return{main:[{name:"Zero Page RAM",start:0,size:256,type:"ram"},{name:"OAM Buffer",start:512,size:256,type:"ram"},{name:"Work RAM",start:768,size:3328,type:"ram"},{name:"PPU Registers",start:8192,last:8200,size:8192,type:"io"},{name:"APU Registers",start:16384,last:16416,size:8192,type:"io"},{name:"Optional Cartridge RAM",start:24576,size:8192,type:"ram"}]}};this.mainElement=e}getPresets(){return es}start(){this.debugPCDelta=1,this.audio=new Ve(this.audioFrequency),this.video=new se(this.mainElement,256,224,{overscan:!0}),this.video.create(),this.ntvideo=new se(this.mainElement,512,480,{overscan:!1}),this.ntvideo.create(),this.ntvideo.canvas.style.display="none",this.ntlastbuf=new Uint32Array(4096),ts().bind&&ts().bind("ctrl+shift+alt+n",()=>{this.showDebugView=!this.showDebugView,this.video.canvas.style.display=this.showDebugView?"none":"",this.ntvideo.canvas.style.display=this.showDebugView?"":"none"});var e=this.video.getFrameData();this.nes=new rr({onFrame:i=>{for(var s=0;s{this.frameindex<10?this.audio.feedSample(0,1):this.audio.feedSample((i+s)*.5,1)},onStatusUpdate:function(i){console.log(i)},sampleRate:this.audioFrequency}),this.timer=new Oe(60,this.nextFrame.bind(this)),this.poller=Ie(this.video,[],hr,(i,s,r,a)=>{a&1?this.nes.buttonDown(i.index+1,i.mask):a&64&&this.nes.buttonUp(i.index+1,i.mask)})}pollControls(){this.poller.poll()}advance(e){return this.nes.frame(),29780}updateDebugViews(){if(this.showDebugView){for(var e=0,i=0,s=this.ntvideo.getFrameData(),r=this.nes.ppu.regS===0?0:256,a=0;a<60;a++)for(var n=0;n<64;n++){e=8192+(n&31)+a%30*32,n>=32&&(e+=1024),a>=30&&(e+=2048);var l=this.nes.ppu.mirroredLoad(e)+r,o=this.nes.ppu.ptTile[l];i=e&11264|960|e&3072|e>>4&56|e>>2&7;var p=this.nes.ppu.mirroredLoad(i),h=l^p<<9^2147483648;if(h!=this.ntlastbuf[e&4095]){this.ntlastbuf[e&4095]=h;for(var d=a*64*8*8+n*8,x=0,m=(n&2)+((e&64)>>4),f=(p>>m&3)<<2,R=0;R<8;R++){for(var _=0;_<8;_++){var E=o.pix[x++];E&&(E+=f);var g=this.nes.ppu.imgPalette[E];s[d++]=g|4278190080}d+=504}}}this.ntvideo.updateFrame()}}loadROM(e,i){var s=Ne(i);this.nes.loadROM(s),this.frameindex=0,this.installIntercepts()}installIntercepts(){var e=this.nes.cpu;if(!e.haveProxied){var i=e.emulate.bind(e);e.emulate=()=>{e.irqRequested&&this.probe.logInterrupt(e.irqType||0),this.probe.logExecute(e.REG_PC+1,e.REG_SP);var f;try{f=i()}catch(R){throw R instanceof re?R:(this.haltAndCatchFire(R.message||"Illegal instruction"),new re("CPU STOPPED"))}return this.evalDebugCondition(),this.probe.logClocks(f),f>0?f:1};var s=e.doNonMaskableInterrupt.bind(e);e.doNonMaskableInterrupt=f=>(this.probe.logInterrupt(1),s(f)),e.haveProxied=!0}var r=this.nes.mmap;if(!r.haveProxied){var a=r.load.bind(r),n=r.write.bind(r),l=r.regLoad.bind(r),o=r.regWrite.bind(r),p=-1;r.load=f=>{var R=a(f);return f!=p&&this.probe.logRead(f,R),R},r.write=(f,R)=>{f!=p&&this.probe.logWrite(f,R),n(f,R)},r.regLoad=f=>{var R=l(f);return this.probe.logIORead(f,R),p=f,R},r.regWrite=(f,R)=>{this.probe.logIOWrite(f,R),p=f,o(f,R)},r.haveProxied=!0}var h=this.nes.ppu;if(!h.haveProxied){var d=h.endScanline.bind(h),x=h.startFrame.bind(h),m=h.writeMem.bind(h);h.endScanline=()=>{d(),this.probe.logNewScanline()},h.startFrame=()=>{x(),this.probe.logNewFrame()},h.writeMem=(f,R)=>{m(f,R),this.probe.logVRAMWrite(f,R)},h.haveProxied=!0}}newCodeAnalyzer(){return new qe(this)}getOriginPC(){return(this.readAddress(65530)|this.readAddress(65531)<<8)&65535}getDefaultExtensions(){return[...super.getDefaultExtensions(),".nesasm"]}getROMExtension(){return".nes"}reset(){this.nes.crashed=!1,this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET),this.installIntercepts()}isRunning(){return this.timer.isRunning()}pause(){this.timer.stop(),this.audio.stop()}resume(){this.timer.start(),this.audio.start()}runToVsync(){var e=this.frameindex;this.runEval(i=>this.frameindex>e)}getRasterScanline(){return this.nes.ppu.scanline}getRasterLineClock(){return this.nes.ppu.curX}getPC(){return this.nes.cpu.REG_PC+this.debugPCDelta&65535}getSP(){return this.nes.cpu.REG_SP&255}isStable(){return!0}getCPUState(){var e=this.nes.cpu.toJSON();return this.copy6502REGvars(e),e}saveState(){var e;return this.nes.mmap?e=this.nes.toJSON():(console.log("no nes.mmap!"),e={cpu:this.nes.cpu.toJSON(),ppu:this.nes.ppu.toJSON()}),e.c=e.cpu,this.copy6502REGvars(e.c),e.b=e.cpu.mem,e.ctrl=this.saveControlsState(),e}loadState(e){this.unfixPC(e.cpu),this.nes.fromJSON(e),this.fixPC(e.cpu),this.loadControlsState(e.ctrl),this.installIntercepts()}saveControlsState(){return{c1:this.nes.controllers[1].state.slice(0),c2:this.nes.controllers[2].state.slice(0)}}loadControlsState(e){this.nes.controllers[1].state=e.c1.slice(0),this.nes.controllers[2].state=e.c2.slice(0)}readAddress(e){return this.nes.cpu.mem[e]}readVRAMAddress(e){return this.nes.ppu.vramMem[e]}copy6502REGvars(e){return e.T=0,e.PC=e.REG_PC,this.fixPC(e),e.A=e.REG_ACC,e.X=e.REG_X,e.Y=e.REG_Y,e.SP=e.REG_SP&255,e.Z=e.F_ZERO,e.N=e.F_SIGN,e.V=e.F_OVERFLOW,e.D=e.F_DECIMAL,e.C=e.F_CARRY,e.I=e.F_INTERRUPT,e.R=1,e.o=this.readAddress(e.PC+1),e}getDebugCategories(){return super.getDebugCategories().concat(["PPU","Mapper"])}getDebugInfo(e,i){switch(e){case"PPU":return this.ppuStateToLongString(i.ppu,i.b);case"Mapper":return this.mapperStateToLongString(i.mmap,i.b);default:return super.getDebugInfo(e,i)}}ppuStateToLongString(e,i){for(var s="",r=[["f_nmiOnVblank","NMI_ON_VBLANK"],["f_spVisibility","SPRITES"],["f_spClipping","NO_CLIP_SPRITES"],["f_dispType","MONOCHROME"],["f_bgVisibility","BACKGROUND"],["f_bgClipping","NO_CLIP_BACKGROUND"]],a=0;a{});var T,Z,k,A,st,M,B,Et,b,y,G,F,as,K,Q,Rt,ns,os,ls,ve,cs,ms,fs,ps,us,xs,ds,Rs,gs,bs,$,ae,ne,Tt,Cs,_s,tt,At,Ss,ys,Ue,Es,et,gt,bt,Ct,ht,it,Ts,As,ks,Fs,_t,St,Bs,Ns,X,Ms,Os,Is,at,oe,le,Ps,Vs,ws,Gs,Ds,Ls,zs,We,qs,vs,ut,kt,nt,ot,lt,ct,mt,ft,yt,D,He,Us,Ws,Hs,Ys,Js,Xs,js,Zs,Ft,ce,Ye=S(()=>{H();T=0,Z=1,k=2,A=3,st=4,M=5,B=6,Et=7,b=8,y=9,G=10,F=11,as=12,K=0,Q=1,Rt=2,ns=3,os=4,ls=5,ve=6,cs=7,ms=8,fs=9,ps=10,us=11,xs=12,ds=13,Rs=14,gs=15,bs=16,$=17,ae=18,ne=19,Tt=20,Cs=21,_s=22,tt=23,At=24,Ss=25,ys=26,Ue=27,Es=28,et=29,gt=30,bt=31,Ct=32,ht=33,it=34,Ts=35,As=36,ks=37,Fs=38,_t=39,St=40,Bs=41,Ns=42,X=43,Ms=44,Os=45,Is=46,at=47,oe=48,le=49,Ps=50,Vs=51,ws=52,Gs=53,Ds=54,Ls=55,zs=56,We=57,qs=58,vs=59,ut=60,kt=61,nt=62,ot=63,lt=64,ct=65,mt=66,ft=67,yt=68,D=69,He=71,Us=72,Ws=73,Hs=74,Ys=75,Js=76,Xs=77,js={ins:-1,mode:0,size:1,cycles:2},Zs={105:{ins:K,mode:M,size:2,cycles:2},101:{ins:K,mode:T,size:2,cycles:3},117:{ins:K,mode:B,size:2,cycles:4},109:{ins:K,mode:A,size:3,cycles:4},125:{ins:K,mode:b,size:3,cycles:4},121:{ins:K,mode:y,size:3,cycles:4},97:{ins:K,mode:G,size:2,cycles:6},113:{ins:K,mode:F,size:2,cycles:5},41:{ins:Q,mode:M,size:2,cycles:2},37:{ins:Q,mode:T,size:2,cycles:3},53:{ins:Q,mode:B,size:2,cycles:4},45:{ins:Q,mode:A,size:3,cycles:4},61:{ins:Q,mode:b,size:3,cycles:4},57:{ins:Q,mode:y,size:3,cycles:4},33:{ins:Q,mode:G,size:2,cycles:6},49:{ins:Q,mode:F,size:2,cycles:5},10:{ins:Rt,mode:st,size:1,cycles:2},6:{ins:Rt,mode:T,size:2,cycles:5},22:{ins:Rt,mode:B,size:2,cycles:6},14:{ins:Rt,mode:A,size:3,cycles:6},30:{ins:Rt,mode:b,size:3,cycles:7},144:{ins:ns,mode:Z,size:2,cycles:2},176:{ins:os,mode:Z,size:2,cycles:2},240:{ins:ls,mode:Z,size:2,cycles:2},48:{ins:cs,mode:Z,size:2,cycles:2},208:{ins:ms,mode:Z,size:2,cycles:2},16:{ins:fs,mode:Z,size:2,cycles:2},80:{ins:us,mode:Z,size:2,cycles:2},112:{ins:xs,mode:Z,size:2,cycles:2},36:{ins:ve,mode:T,size:2,cycles:3},44:{ins:ve,mode:A,size:3,cycles:4},0:{ins:ps,mode:k,size:1,cycles:7},24:{ins:ds,mode:k,size:1,cycles:2},216:{ins:Rs,mode:k,size:1,cycles:2},88:{ins:gs,mode:k,size:1,cycles:2},184:{ins:bs,mode:k,size:1,cycles:2},201:{ins:$,mode:M,size:2,cycles:2},197:{ins:$,mode:T,size:2,cycles:3},213:{ins:$,mode:B,size:2,cycles:4},205:{ins:$,mode:A,size:3,cycles:4},221:{ins:$,mode:b,size:3,cycles:4},217:{ins:$,mode:y,size:3,cycles:4},193:{ins:$,mode:G,size:2,cycles:6},209:{ins:$,mode:F,size:2,cycles:5},224:{ins:ae,mode:M,size:2,cycles:2},228:{ins:ae,mode:T,size:2,cycles:3},236:{ins:ae,mode:A,size:3,cycles:4},192:{ins:ne,mode:M,size:2,cycles:2},196:{ins:ne,mode:T,size:2,cycles:3},204:{ins:ne,mode:A,size:3,cycles:4},198:{ins:Tt,mode:T,size:2,cycles:5},214:{ins:Tt,mode:B,size:2,cycles:6},206:{ins:Tt,mode:A,size:3,cycles:6},222:{ins:Tt,mode:b,size:3,cycles:7},202:{ins:Cs,mode:k,size:1,cycles:2},136:{ins:_s,mode:k,size:1,cycles:2},73:{ins:tt,mode:M,size:2,cycles:2},69:{ins:tt,mode:T,size:2,cycles:3},85:{ins:tt,mode:B,size:2,cycles:4},77:{ins:tt,mode:A,size:3,cycles:4},93:{ins:tt,mode:b,size:3,cycles:4},89:{ins:tt,mode:y,size:3,cycles:4},65:{ins:tt,mode:G,size:2,cycles:6},81:{ins:tt,mode:F,size:2,cycles:5},230:{ins:At,mode:T,size:2,cycles:5},246:{ins:At,mode:B,size:2,cycles:6},238:{ins:At,mode:A,size:3,cycles:6},254:{ins:At,mode:b,size:3,cycles:7},232:{ins:Ss,mode:k,size:1,cycles:2},200:{ins:ys,mode:k,size:1,cycles:2},76:{ins:Ue,mode:A,size:3,cycles:3},108:{ins:Ue,mode:as,size:3,cycles:5},32:{ins:Es,mode:A,size:3,cycles:6},169:{ins:et,mode:M,size:2,cycles:2},165:{ins:et,mode:T,size:2,cycles:3},181:{ins:et,mode:B,size:2,cycles:4},173:{ins:et,mode:A,size:3,cycles:4},189:{ins:et,mode:b,size:3,cycles:4},185:{ins:et,mode:y,size:3,cycles:4},161:{ins:et,mode:G,size:2,cycles:6},177:{ins:et,mode:F,size:2,cycles:5},162:{ins:gt,mode:M,size:2,cycles:2},166:{ins:gt,mode:T,size:2,cycles:3},182:{ins:gt,mode:Et,size:2,cycles:4},174:{ins:gt,mode:A,size:3,cycles:4},190:{ins:gt,mode:y,size:3,cycles:4},160:{ins:bt,mode:M,size:2,cycles:2},164:{ins:bt,mode:T,size:2,cycles:3},180:{ins:bt,mode:B,size:2,cycles:4},172:{ins:bt,mode:A,size:3,cycles:4},188:{ins:bt,mode:b,size:3,cycles:4},74:{ins:Ct,mode:st,size:1,cycles:2},70:{ins:Ct,mode:T,size:2,cycles:5},86:{ins:Ct,mode:B,size:2,cycles:6},78:{ins:Ct,mode:A,size:3,cycles:6},94:{ins:Ct,mode:b,size:3,cycles:7},26:{ins:ht,mode:k,size:1,cycles:2},58:{ins:ht,mode:k,size:1,cycles:2},90:{ins:ht,mode:k,size:1,cycles:2},122:{ins:ht,mode:k,size:1,cycles:2},218:{ins:ht,mode:k,size:1,cycles:2},234:{ins:ht,mode:k,size:1,cycles:2},250:{ins:ht,mode:k,size:1,cycles:2},9:{ins:it,mode:M,size:2,cycles:2},5:{ins:it,mode:T,size:2,cycles:3},21:{ins:it,mode:B,size:2,cycles:4},13:{ins:it,mode:A,size:3,cycles:4},29:{ins:it,mode:b,size:3,cycles:4},25:{ins:it,mode:y,size:3,cycles:4},1:{ins:it,mode:G,size:2,cycles:6},17:{ins:it,mode:F,size:2,cycles:5},72:{ins:Ts,mode:k,size:1,cycles:3},8:{ins:As,mode:k,size:1,cycles:3},104:{ins:ks,mode:k,size:1,cycles:4},40:{ins:Fs,mode:k,size:1,cycles:4},42:{ins:_t,mode:st,size:1,cycles:2},38:{ins:_t,mode:T,size:2,cycles:5},54:{ins:_t,mode:B,size:2,cycles:6},46:{ins:_t,mode:A,size:3,cycles:6},62:{ins:_t,mode:b,size:3,cycles:7},106:{ins:St,mode:st,size:1,cycles:2},102:{ins:St,mode:T,size:2,cycles:5},118:{ins:St,mode:B,size:2,cycles:6},110:{ins:St,mode:A,size:3,cycles:6},126:{ins:St,mode:b,size:3,cycles:7},64:{ins:Bs,mode:k,size:1,cycles:6},96:{ins:Ns,mode:k,size:1,cycles:6},233:{ins:X,mode:M,size:2,cycles:2},235:{ins:X,mode:M,size:2,cycles:2},229:{ins:X,mode:T,size:2,cycles:3},245:{ins:X,mode:B,size:2,cycles:4},237:{ins:X,mode:A,size:3,cycles:4},253:{ins:X,mode:b,size:3,cycles:4},249:{ins:X,mode:y,size:3,cycles:4},225:{ins:X,mode:G,size:2,cycles:6},241:{ins:X,mode:F,size:2,cycles:5},56:{ins:Ms,mode:k,size:1,cycles:2},248:{ins:Os,mode:k,size:1,cycles:2},120:{ins:Is,mode:k,size:1,cycles:2},133:{ins:at,mode:T,size:2,cycles:3},149:{ins:at,mode:B,size:2,cycles:4},141:{ins:at,mode:A,size:3,cycles:4},157:{ins:at,mode:b,size:3,cycles:5},153:{ins:at,mode:y,size:3,cycles:5},129:{ins:at,mode:G,size:2,cycles:6},145:{ins:at,mode:F,size:2,cycles:6},134:{ins:oe,mode:T,size:2,cycles:3},150:{ins:oe,mode:Et,size:2,cycles:4},142:{ins:oe,mode:A,size:3,cycles:4},132:{ins:le,mode:T,size:2,cycles:3},148:{ins:le,mode:B,size:2,cycles:4},140:{ins:le,mode:A,size:3,cycles:4},170:{ins:Ps,mode:k,size:1,cycles:2},168:{ins:Vs,mode:k,size:1,cycles:2},186:{ins:ws,mode:k,size:1,cycles:2},138:{ins:Gs,mode:k,size:1,cycles:2},154:{ins:Ds,mode:k,size:1,cycles:2},152:{ins:Ls,mode:k,size:1,cycles:2},75:{ins:zs,mode:M,size:2,cycles:2},11:{ins:We,mode:M,size:2,cycles:2},43:{ins:We,mode:M,size:2,cycles:2},107:{ins:qs,mode:M,size:2,cycles:2},203:{ins:vs,mode:M,size:2,cycles:2},163:{ins:ut,mode:G,size:2,cycles:6},167:{ins:ut,mode:T,size:2,cycles:3},175:{ins:ut,mode:A,size:3,cycles:4},179:{ins:ut,mode:F,size:2,cycles:5},183:{ins:ut,mode:Et,size:2,cycles:4},191:{ins:ut,mode:y,size:3,cycles:4},131:{ins:kt,mode:G,size:2,cycles:6},135:{ins:kt,mode:T,size:2,cycles:3},143:{ins:kt,mode:A,size:3,cycles:4},151:{ins:kt,mode:Et,size:2,cycles:4},195:{ins:nt,mode:G,size:2,cycles:8},199:{ins:nt,mode:T,size:2,cycles:5},207:{ins:nt,mode:A,size:3,cycles:6},211:{ins:nt,mode:F,size:2,cycles:8},215:{ins:nt,mode:B,size:2,cycles:6},219:{ins:nt,mode:y,size:3,cycles:7},223:{ins:nt,mode:b,size:3,cycles:7},227:{ins:ot,mode:G,size:2,cycles:8},231:{ins:ot,mode:T,size:2,cycles:5},239:{ins:ot,mode:A,size:3,cycles:6},243:{ins:ot,mode:F,size:2,cycles:8},247:{ins:ot,mode:B,size:2,cycles:6},251:{ins:ot,mode:y,size:3,cycles:7},255:{ins:ot,mode:b,size:3,cycles:7},35:{ins:lt,mode:G,size:2,cycles:8},39:{ins:lt,mode:T,size:2,cycles:5},47:{ins:lt,mode:A,size:3,cycles:6},51:{ins:lt,mode:F,size:2,cycles:8},55:{ins:lt,mode:B,size:2,cycles:6},59:{ins:lt,mode:y,size:3,cycles:7},63:{ins:lt,mode:b,size:3,cycles:7},99:{ins:ct,mode:G,size:2,cycles:8},103:{ins:ct,mode:T,size:2,cycles:5},111:{ins:ct,mode:A,size:3,cycles:6},115:{ins:ct,mode:F,size:2,cycles:8},119:{ins:ct,mode:B,size:2,cycles:6},123:{ins:ct,mode:y,size:3,cycles:7},127:{ins:ct,mode:b,size:3,cycles:7},3:{ins:mt,mode:G,size:2,cycles:8},7:{ins:mt,mode:T,size:2,cycles:5},15:{ins:mt,mode:A,size:3,cycles:6},19:{ins:mt,mode:F,size:2,cycles:8},23:{ins:mt,mode:B,size:2,cycles:6},27:{ins:mt,mode:y,size:3,cycles:7},31:{ins:mt,mode:b,size:3,cycles:7},67:{ins:ft,mode:G,size:2,cycles:8},71:{ins:ft,mode:T,size:2,cycles:5},79:{ins:ft,mode:A,size:3,cycles:6},83:{ins:ft,mode:F,size:2,cycles:8},87:{ins:ft,mode:B,size:2,cycles:6},91:{ins:ft,mode:y,size:3,cycles:7},95:{ins:ft,mode:b,size:3,cycles:7},128:{ins:yt,mode:M,size:2,cycles:2},130:{ins:yt,mode:M,size:2,cycles:2},137:{ins:yt,mode:M,size:2,cycles:2},194:{ins:yt,mode:M,size:2,cycles:2},226:{ins:yt,mode:M,size:2,cycles:2},12:{ins:D,mode:A,size:3,cycles:4},28:{ins:D,mode:b,size:3,cycles:4},60:{ins:D,mode:b,size:3,cycles:4},92:{ins:D,mode:b,size:3,cycles:4},124:{ins:D,mode:b,size:3,cycles:4},220:{ins:D,mode:b,size:3,cycles:4},252:{ins:D,mode:b,size:3,cycles:4},4:{ins:D,mode:T,size:2,cycles:3},68:{ins:D,mode:T,size:2,cycles:3},100:{ins:D,mode:T,size:2,cycles:3},20:{ins:D,mode:B,size:2,cycles:4},52:{ins:D,mode:B,size:2,cycles:4},84:{ins:D,mode:B,size:2,cycles:4},116:{ins:D,mode:B,size:2,cycles:4},212:{ins:D,mode:B,size:2,cycles:4},244:{ins:D,mode:B,size:2,cycles:4},147:{ins:He,mode:F,size:2,cycles:6},159:{ins:He,mode:y,size:3,cycles:5},155:{ins:Us,mode:y,size:3,cycles:5},156:{ins:Ws,mode:b,size:3,cycles:5},158:{ins:Hs,mode:y,size:3,cycles:5},187:{ins:Ys,mode:y,size:3,cycles:4},139:{ins:Js,mode:M,size:2,cycles:2},171:{ins:Xs,mode:M,size:2,cycles:2}},Ft=class{constructor(t){c(this,"IRQ_NORMAL",0);c(this,"IRQ_NMI",1);c(this,"IRQ_RESET",2);this.nes=t,this.mem=new Uint8Array(65536),this.mem.fill(255,0,8192);for(let e=0;e<4;e++){let i=e*2048;this.mem[i+8]=247,this.mem[i+9]=239,this.mem[i+10]=223,this.mem[i+15]=191}this.REG_ACC=0,this.REG_X=0,this.REG_Y=0,this.REG_SP=511,this.REG_PC=32767,this.REG_PC_NEW=32767,this.REG_STATUS=40,this.setStatus(40),this.F_CARRY=0,this.F_DECIMAL=0,this.F_INTERRUPT=1,this.F_INTERRUPT_NEW=1,this.F_OVERFLOW=0,this.F_SIGN=0,this.F_ZERO=1,this.F_NOTUSED=1,this.F_NOTUSED_NEW=1,this.F_BRK=1,this.F_BRK_NEW=1,this.cyclesToHalt=0,this.crash=!1,this.irqRequested=!1,this.irqType=null,this.nmiRaised=!1,this.nmiPending=!1,this.nmiImmediate=!1,this.dataBus=0,this.instrBusCycles=0,this.apuCatchupCycles=0,this._cpuCycleBase=0,this.nmiRaisedAtCycle=0,this.nmiDotsRemainingInStep=0}emulate(){var x;if(this.nmiImmediate)return this.nmiImmediate=!1,this.nmiPending=!1,this.nmiRaised=!1,this.instrBusCycles=0,this.REG_PC_NEW=this.REG_PC,this.F_INTERRUPT_NEW=this.F_INTERRUPT,this.doNonMaskableInterrupt(this.getStatus()&239),this.REG_PC=this.REG_PC_NEW,this.F_INTERRUPT=this.F_INTERRUPT_NEW,this.F_BRK=this.F_BRK_NEW,this._cpuCycleBase+=7,7;let t,e,i=0,s=0;if(this.nmiRaised&&(this.nmiPending=!0,this.nmiRaised=!1),this.irqRequested){switch(t=this.getStatus(),this.REG_PC_NEW=this.REG_PC,this.F_INTERRUPT_NEW=this.F_INTERRUPT,this.irqType){case 0:{if(this.F_INTERRUPT!==0)break;this.doIrq(t&239),s=7;break}case 2:{this.doResetInterrupt(),s=7;break}}this.REG_PC=this.REG_PC_NEW,this.F_INTERRUPT=this.F_INTERRUPT_NEW,this.F_BRK=this.F_BRK_NEW,this.irqRequested=!1}if(this.nes.mmap===null)return 32;this.instrBusCycles=0,this.apuCatchupCycles=0,this.nmiDotsRemainingInStep=0,this._dmcFetchCycles=this._cyclesToNextDmcFetch();let r=this.loadFromCartridge(this.REG_PC+1);this.dataBus=r,this.instrBusCycles=1,this.nes.ppu.advanceDots(3);let a=(x=Zs[r])!=null?x:js,n=a.cycles,l=0,o=a.mode,p=this.REG_PC;this.REG_PC+=a.size;let h=0;switch(o){case 0:{h=this.loadDirect(p+2);break}case 1:{h=this.loadDirect(p+2),h<128?h+=this.REG_PC:h+=this.REG_PC-256;break}case 2:{this.loadDirect(p+2);break}case 3:{h=this.load16bit(p+2);break}case 4:{this.loadDirect(p+2),h=this.REG_ACC;break}case 5:{h=this.REG_PC;break}case 6:{let m=this.loadDirect(p+2);this.loadDirect(m),h=m+this.REG_X&255;break}case 7:{let m=this.loadDirect(p+2);this.loadDirect(m),h=m+this.REG_Y&255;break}case 8:{h=this.load16bit(p+2),i=h>>8&255,(h&65280)!==(h+this.REG_X&65280)&&(this.load(h&65280|h+this.REG_X&255),l=1),h+=this.REG_X;break}case 9:{h=this.load16bit(p+2),i=h>>8&255,(h&65280)!==(h+this.REG_Y&65280)&&(this.load(h&65280|h+this.REG_Y&255),l=1),h+=this.REG_Y;break}case 10:{let m=this.loadDirect(p+2);this.loadDirect(m);let f=m+this.REG_X&255;h=this.loadDirect(f)|this.loadDirect(f+1&255)<<8;break}case 11:{let m=this.loadDirect(p+2);h=this.loadDirect(m)|this.loadDirect(m+1&255)<<8,i=h>>8&255,(h&65280)!==(h+this.REG_Y&65280)&&(this.load(h&65280|h+this.REG_Y&255),l=1),h+=this.REG_Y;break}case 12:{h=this.load16bit(p+2);var d=h&65280|(h&255)+1&255;h=this.load(h)|this.load(d)<<8;break}}switch(h&=65535,a.ins){case 0:{e=this.load(h),t=this.REG_ACC+e+this.F_CARRY,((this.REG_ACC^e)&128)===0&&((this.REG_ACC^t)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t>255?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.REG_ACC=t&255,n+=l;break}case 1:{this.REG_ACC=this.REG_ACC&this.load(h),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n+=l;break}case 2:{o===st?(this.F_CARRY=this.REG_ACC>>7&1,this.REG_ACC=this.REG_ACC<<1&255,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),this.F_CARRY=t>>7&1,t=t<<1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(h,t));break}case 3:{this.F_CARRY===0&&(n+=this._takeBranch(p,h));break}case 4:{this.F_CARRY===1&&(n+=this._takeBranch(p,h));break}case 5:{this.F_ZERO===0&&(n+=this._takeBranch(p,h));break}case 6:{t=this.load(h),this.F_SIGN=t>>7&1,this.F_OVERFLOW=t>>6&1,t&=this.REG_ACC,this.F_ZERO=t;break}case 7:{this.F_SIGN===1&&(n+=this._takeBranch(p,h));break}case 8:{this.F_ZERO!==0&&(n+=this._takeBranch(p,h));break}case 9:{this.F_SIGN===0&&(n+=this._takeBranch(p,h));break}case 10:{this.REG_PC+=2,this.push(this.REG_PC>>8&255),this.push(this.REG_PC&255),this.F_BRK=1,this.push(this.getStatus()),this.F_INTERRUPT=1,this.REG_PC=this.load16bit(65534),this.REG_PC--;break}case 11:{this.F_OVERFLOW===0&&(n+=this._takeBranch(p,h));break}case 12:{this.F_OVERFLOW===1&&(n+=this._takeBranch(p,h));break}case 13:{this.F_CARRY=0;break}case 14:{this.F_DECIMAL=0;break}case 15:{this.F_INTERRUPT=0;break}case 16:{this.F_OVERFLOW=0;break}case 17:{t=this.REG_ACC-this.load(h),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,n+=l;break}case 18:{t=this.REG_X-this.load(h),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 19:{t=this.REG_Y-this.load(h),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 20:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t-1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(h,t);break}case 21:{this.REG_X=this.REG_X-1&255,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 22:{this.REG_Y=this.REG_Y-1&255,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 23:{this.REG_ACC=(this.load(h)^this.REG_ACC)&255,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n+=l;break}case 24:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t+1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(h,t);break}case 25:{this.REG_X=this.REG_X+1&255,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 26:{this.REG_Y++,this.REG_Y&=255,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 27:{this.REG_PC=h-1;break}case 28:{this.push(this.REG_PC>>8&255),this.push(this.REG_PC&255),this.loadDirect(p+3),this.REG_PC=h-1;break}case 29:{this.REG_ACC=this.load(h),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n+=l;break}case 30:{this.REG_X=this.load(h),this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X,n+=l;break}case 31:{this.REG_Y=this.load(h),this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y,n+=l;break}case 32:{o===st?(t=this.REG_ACC&255,this.F_CARRY=t&1,t>>=1,this.REG_ACC=t):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h)&255,this.write(h,t),this.F_CARRY=t&1,t>>=1,this.write(h,t)),this.F_SIGN=0,this.F_ZERO=t;break}case 33:break;case 34:{t=(this.load(h)|this.REG_ACC)&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.REG_ACC=t,n+=l;break}case 35:{this.push(this.REG_ACC);break}case 36:{this.F_BRK=1,this.push(this.getStatus());break}case 37:{this.REG_ACC=this.pull(),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 38:{this.setStatusFromStack(this.pull());break}case 39:{o===st?(t=this.REG_ACC,e=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+e,this.REG_ACC=t):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+e,this.write(h,t)),this.F_SIGN=t>>7&1,this.F_ZERO=t;break}case 40:{o===st?(e=this.F_CARRY<<7,this.F_CARRY=this.REG_ACC&1,t=(this.REG_ACC>>1)+e,this.REG_ACC=t):(l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY<<7,this.F_CARRY=t&1,t=(t>>1)+e,this.write(h,t)),this.F_SIGN=t>>7&1,this.F_ZERO=t;break}case 41:{if(this.setStatusFromStack(this.pull()),this.REG_PC=this.pull(),this.REG_PC+=this.pull()<<8,this.REG_PC===65535)return;this.REG_PC--;break}case 42:{if(this.REG_PC=this.pull(),this.REG_PC+=this.pull()<<8,this.REG_PC===65535)return;break}case 43:{e=this.load(h),t=this.REG_ACC-e-(1-this.F_CARRY),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,((this.REG_ACC^t)&128)!==0&&((this.REG_ACC^e)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t<0?0:1,this.REG_ACC=t&255,n+=l;break}case 44:{this.F_CARRY=1;break}case 45:{this.F_DECIMAL=1;break}case 46:{this.F_INTERRUPT=1;break}case 47:{l===0&&(o===b||o===y||o===F)&&this.load(h),this.write(h,this.REG_ACC);break}case 48:{this.write(h,this.REG_X);break}case 49:{this.write(h,this.REG_Y);break}case 50:{this.REG_X=this.REG_ACC,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 51:{this.REG_Y=this.REG_ACC,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 52:{this.REG_X=this.REG_SP&255,this.F_SIGN=this.REG_SP>>7&1,this.F_ZERO=this.REG_X;break}case 53:{this.REG_ACC=this.REG_X,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 54:{this.REG_SP=this.REG_X&255;break}case 55:{this.REG_ACC=this.REG_Y,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 56:{t=this.REG_ACC&this.load(h),this.F_CARRY=t&1,this.REG_ACC=this.F_ZERO=t>>1,this.F_SIGN=0;break}case 57:{this.REG_ACC=this.F_ZERO=this.REG_ACC&this.load(h),this.F_CARRY=this.F_SIGN=this.REG_ACC>>7&1;break}case 58:{t=this.REG_ACC&this.load(h),this.REG_ACC=this.F_ZERO=(t>>1)+(this.F_CARRY<<7),this.F_SIGN=this.F_CARRY,this.F_CARRY=t>>7&1,this.F_OVERFLOW=(t>>7^t>>6)&1;break}case 59:{t=(this.REG_X&this.REG_ACC)-this.load(h),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.F_CARRY=t<0?0:1,this.REG_X=t&255;break}case 60:{this.REG_ACC=this.REG_X=this.F_ZERO=this.load(h),this.F_SIGN=this.REG_ACC>>7&1,n+=l;break}case 61:{this.write(h,this.REG_ACC&this.REG_X);break}case 62:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t-1&255,this.write(h,t),t=this.REG_ACC-t,this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 63:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),t=t+1&255,this.write(h,t);let m=t;t=this.REG_ACC-m-(1-this.F_CARRY),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,((this.REG_ACC^t)&128)!==0&&((this.REG_ACC^m)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t<0?0:1,this.REG_ACC=t&255;break}case 64:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+e,this.write(h,t),this.REG_ACC=this.REG_ACC&t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 65:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),e=this.F_CARRY<<7,this.F_CARRY=t&1,t=(t>>1)+e,this.write(h,t);let m=t;t=this.REG_ACC+m+this.F_CARRY,((this.REG_ACC^m)&128)===0&&((this.REG_ACC^t)&128)!==0?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t>255?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.REG_ACC=t&255;break}case 66:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h),this.write(h,t),this.F_CARRY=t>>7&1,t=t<<1&255,this.write(h,t),this.REG_ACC=this.REG_ACC|t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 67:{l===0&&(o===b||o===y||o===F)&&this.load(h),t=this.load(h)&255,this.write(h,t),this.F_CARRY=t&1,t>>=1,this.write(h,t),this.REG_ACC=this.REG_ACC^t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 68:break;case 69:{this.load(h),n+=l;break}case 71:{l===0&&this.load(h);let f=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles?this.REG_ACC&this.REG_X:this.REG_ACC&this.REG_X&(i+1&255|0);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 72:{l===0&&this.load(h);let m=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles;this.REG_SP=256|this.REG_ACC&this.REG_X;let f=m?this.REG_SP&255:this.REG_SP&255&(i+1&255);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 73:{l===0&&this.load(h);let f=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles?this.REG_Y:this.REG_Y&(i+1&255);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 74:{l===0&&this.load(h);let f=this._dmcFetchCycles>0&&this._dmcFetchCycles<=this.instrBusCycles?this.REG_X:this.REG_X&(i+1&255);l===1&&(h=f<<8|h&255),this.write(h,f);break}case 75:{t=this.load(h)&(this.REG_SP&255),this.REG_ACC=this.REG_X=this.F_ZERO=t,this.REG_SP=256|t,this.F_SIGN=t>>7&1,n+=l;break}case 76:{this.REG_ACC=this.F_ZERO=(this.REG_ACC|255)&this.REG_X&this.load(h),this.F_SIGN=this.REG_ACC>>7&1;break}case 77:{this.REG_ACC=this.REG_X=this.F_ZERO=(this.REG_ACC|255)&this.load(h),this.F_SIGN=this.REG_ACC>>7&1;break}default:throw new Error(`Game crashed, invalid opcode at address $${p.toString(16)}`)}if(this.instrBusCycles=5&&(this.nmiImmediate=!0,this.nmiRaised=!1),this.nmiPending&&(this.REG_PC_NEW=this.REG_PC,this.F_INTERRUPT_NEW=this.F_INTERRUPT,this.doNonMaskableInterrupt(this.getStatus()&239),this.REG_PC=this.REG_PC_NEW,this.F_INTERRUPT=this.F_INTERRUPT_NEW,this.F_BRK=this.F_BRK_NEW,this.nmiPending=!1,s=7),this._cpuCycleBase+=n+s,n+s}loadFromCartridge(t){return this.nes.mmap.load(t)}_loadFromCartridgePlain(t){return this.nes.mmap.load(t)}_loadFromCartridgeWithGameGenie(t){let e=this.nes.mmap.load(t);return this.nes.gameGenie.applyCodes(t,e)}_updateCartridgeLoader(){this.nes.gameGenie.enabled&&this.nes.gameGenie.patches.length>0?this.loadFromCartridge=this._loadFromCartridgeWithGameGenie:delete this.loadFromCartridge}load(t){if(t<8192)this.dataBus=this.mem[t&2047],this.instrBusCycles++,this.nes.ppu.advanceDots(3);else if(t>=16384){if(t===16405){this.nes.papu.advanceFrameCounter(this.instrBusCycles-this.apuCatchupCycles),this.apuCatchupCycles=this.instrBusCycles;let e=this.loadFromCartridge(t);return this.instrBusCycles++,this.nes.ppu.advanceDots(3),e}this.dataBus=this.loadFromCartridge(t),this.instrBusCycles++,this.nes.ppu.advanceDots(3)}else this.instrBusCycles++,this.dataBus=this.loadFromCartridge(t),this.nes.ppu.advanceDots(3);return this.dataBus}loadDirect(t){return t<8192?this.dataBus=this.mem[t&2047]:this.dataBus=this.loadFromCartridge(t),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus}load16bit(t){let e;return t<8191?(this.dataBus=this.mem[t&2047],e=this.dataBus,this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus=this.mem[t+1&2047],this.instrBusCycles++,this.nes.ppu.advanceDots(3),e|this.dataBus<<8):(this.dataBus=this.loadFromCartridge(t),e=this.dataBus,this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus=this.loadFromCartridge(t+1),this.instrBusCycles++,this.nes.ppu.advanceDots(3),e|this.dataBus<<8)}write(t,e){t>=8192&&t<16384?(this.instrBusCycles++,this.dataBus=e,this.nes.mmap.write(t,e),this.nes.ppu.advanceDots(3)):(this.dataBus=e,t<8192?this.mem[t&2047]=e:this.nes.mmap.write(t,e),this.instrBusCycles++,this.nes.ppu.advanceDots(3))}requestIrq(t){this.irqRequested&&t===this.IRQ_NORMAL||(this.irqRequested=!0,this.irqType=t)}push(t){this.dataBus=t,this.mem[this.REG_SP|256]=t,this.REG_SP--,this.REG_SP=this.REG_SP&255,this.instrBusCycles++,this.nes.ppu.advanceDots(3)}pull(){return this.REG_SP++,this.REG_SP=this.REG_SP&255,this.dataBus=this.mem[256|this.REG_SP],this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.dataBus}_cyclesToNextDmcFetch(){if(!this.nes.papu)return 2147483647;let t=this.nes.papu.dmc;if(!t||!t.isEnabled||t.dmaFrequency<=0||!t.hasSample)return 2147483647;let e=t.dmaFrequency>>3,i=t.shiftCounter+7>>3;return i<=0&&(i=e),i+(t.dmaCounter-1)*e}_takeBranch(t,e){let i=t+3&65535,s=e+1&65535;if(this.load(i),(i&65280)!==(s&65280)){let r=i&65280|s&255;return this.load(r),this.REG_PC=e,2}return this.REG_PC=e,1}pageCrossed(t,e){return(t&65280)!==(e&65280)}haltCycles(t){this.cyclesToHalt+=t}doNonMaskableInterrupt(t){if(this.nes.mmap===null)return;this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW++,this.push(this.REG_PC_NEW>>8&255),this.push(this.REG_PC_NEW&255),this.F_INTERRUPT_NEW=1,this.push(t),this.dataBus=this.loadFromCartridge(65530),this.instrBusCycles++,this.nes.ppu.advanceDots(3);let e=this.dataBus;this.dataBus=this.loadFromCartridge(65531),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW=e|this.dataBus<<8,this.REG_PC_NEW--}doResetInterrupt(){this.dataBus=this.loadFromCartridge(65532),this.instrBusCycles++,this.nes.ppu.advanceDots(3);let t=this.dataBus;this.dataBus=this.loadFromCartridge(65533),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW=t|this.dataBus<<8,this.REG_PC_NEW--}doIrq(t){this.REG_PC_NEW++,this.push(this.REG_PC_NEW>>8&255),this.push(this.REG_PC_NEW&255),this.push(t),this.F_INTERRUPT_NEW=1,this.F_BRK_NEW=0,this.dataBus=this.loadFromCartridge(65534),this.instrBusCycles++,this.nes.ppu.advanceDots(3);let e=this.dataBus;this.dataBus=this.loadFromCartridge(65535),this.instrBusCycles++,this.nes.ppu.advanceDots(3),this.REG_PC_NEW=e|this.dataBus<<8,this.REG_PC_NEW--}getStatus(){return this.F_CARRY|(this.F_ZERO===0?1:0)<<1|this.F_INTERRUPT<<2|this.F_DECIMAL<<3|this.F_BRK<<4|this.F_NOTUSED<<5|this.F_OVERFLOW<<6|this.F_SIGN<<7}setStatus(t){this.F_CARRY=t&1,this.F_ZERO=(t>>1&1)===1?0:1,this.F_INTERRUPT=t>>2&1,this.F_DECIMAL=t>>3&1,this.F_BRK=t>>4&1,this.F_NOTUSED=t>>5&1,this.F_OVERFLOW=t>>6&1,this.F_SIGN=t>>7&1}setStatusFromStack(t){this.F_CARRY=t&1,this.F_ZERO=(t>>1&1)===1?0:1,this.F_INTERRUPT=t>>2&1,this.F_DECIMAL=t>>3&1,this.F_OVERFLOW=t>>6&1,this.F_SIGN=t>>7&1}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(Ft,"JSON_PROPERTIES",["mem","cyclesToHalt","dataBus","irqRequested","irqType","nmiRaised","nmiPending","nmiImmediate","REG_ACC","REG_X","REG_Y","REG_SP","REG_PC","REG_PC_NEW","REG_STATUS","F_CARRY","F_DECIMAL","F_INTERRUPT","F_INTERRUPT_NEW","F_OVERFLOW","F_SIGN","F_ZERO","F_NOTUSED","F_NOTUSED_NEW","F_BRK","F_BRK_NEW","_cpuCycleBase"]);ce=Ft});var N,me,fe,Je=S(()=>{H();N=class N{constructor(){this.state=new Array(8);for(let t=0;t{pe=class{constructor(){this.pix=new Uint8Array(64),this.initialized=!1,this.opaque=new Uint8Array(8)}setBuffer(t){for(let e=0;e<8;e++)this.setScanline(e,t[e],t[e+8])}setScanline(t,e,i){this.initialized=!0;let s=t<<3;for(let r=0;r<8;r++)this.pix[s+r]=(e>>7-r&1)+((i>>7-r&1)<<1),this.pix[s+r]===0&&(this.opaque[t]=!1)}render(t,e,i,s,r,a,n,l,o,p,h,d,x){if(a<-7||a>=256||n<-7||n>=240)return;a<0&&(e-=a),a+s>=256&&(s=256-a),n<0&&(i-=n),n+r>=240&&(r=240-n);let m,f,R,_;if(!p&&!h){m=(n<<8)+a,f=0;for(let E=0;E<8;E++){for(let g=0;g<8;g++)g>=e&&g=i&&E=e&&g=i&&E=e&&g=i&&E=e&&g=i&&E{ue=class{constructor(t,e,i){this.width=t,this.height=e,this.name=i,this.tile=new Uint8Array(t*e),this.attrib=new Uint8Array(t*e)}getTileIndex(t,e){return this.tile[e*this.width+t]}getAttrib(t,e){return this.attrib[e*this.width+t]}writeAttrib(t,e){let i=t%8*4,s=Math.floor(t/8)*4,r,a,n,l;for(let o=0;o<2;o++)for(let p=0;p<2;p++){r=e>>2*(o*2+p)&3;for(let h=0;h<2;h++)for(let d=0;d<2;d++)a=i+p*2+d,n=s+o*2+h,l=n*this.width+a,this.attrib[l]=r<<2&12}}toJSON(){return{tile:this.tile.slice(0),attrib:this.attrib.slice(0)}}fromJSON(t){this.tile.set(t.tile),this.attrib.set(t.attrib)}},Xe=ue});var xe,Ze,Ke=S(()=>{xe=class{constructor(){this.curTable=new Uint32Array(64),this.emphTable=new Array(8),this.currentEmph=-1}loadNTSCPalette(){this.curTable=new Uint32Array([5395026,11796480,10485760,11599933,7602281,91,95,6208,12048,543240,26368,1196544,7153664,0,0,0,12899815,16728064,14421538,16729963,14090399,6818519,6588,21681,27227,35843,43776,2918400,10777088,0,0,0,16316664,16755516,16742785,16735173,16730354,14633471,4681215,46327,57599,58229,259115,7911470,15065624,7895160,0,0,16777215,16773822,16300216,16300248,16758527,16761855,13095423,10148607,8973816,8650717,12122296,16119980,16777136,16308472,0,0]),this.makeTables(),this.setEmphasis(0)}loadPALPalette(){this.curTable=new Uint32Array([5395026,11796480,10485760,11599933,7602281,91,95,6208,12048,543240,26368,1196544,7153664,0,0,0,12899815,16728064,14421538,16729963,14090399,6818519,6588,21681,27227,35843,43776,2918400,10777088,0,0,0,16316664,16755516,16742785,16735173,16730354,14633471,4681215,46327,57599,58229,259115,7911470,15065624,7895160,0,0,16777215,16773822,16300216,16300248,16758527,16761855,13095423,10148607,8973816,8650717,12122296,16119980,16777136,16308472,0,0]),this.makeTables(),this.setEmphasis(0)}makeTables(){let t,e,i,s,r,a,n,l;for(let o=0;o<8;o++)for(a=1,n=1,l=1,(o&1)!==0&&(n=.75,l=.75),(o&2)!==0&&(a=.75,l=.75),(o&4)!==0&&(a=.75,n=.75),this.emphTable[o]=new Uint32Array(64),r=0;r<64;r++)s=this.curTable[r],t=Math.floor(this.getRed(s)*a),e=Math.floor(this.getGreen(s)*n),i=Math.floor(this.getBlue(s)*l),this.emphTable[o][r]=this.getRgb(t,e,i)}setEmphasis(t){if(t!==this.currentEmph){this.currentEmph=t;for(let e=0;e<64;e++)this.curTable[e]=this.emphTable[t][e]}}getEntry(t){return this.curTable[t]}getRed(t){return t>>16&255}getGreen(t){return t>>8&255}getBlue(t){return t&255}getRgb(t,e,i){return t<<16|e<<8|i}loadDefaultPalette(){this.curTable[0]=this.getRgb(117,117,117),this.curTable[1]=this.getRgb(39,27,143),this.curTable[2]=this.getRgb(0,0,171),this.curTable[3]=this.getRgb(71,0,159),this.curTable[4]=this.getRgb(143,0,119),this.curTable[5]=this.getRgb(171,0,19),this.curTable[6]=this.getRgb(167,0,0),this.curTable[7]=this.getRgb(127,11,0),this.curTable[8]=this.getRgb(67,47,0),this.curTable[9]=this.getRgb(0,71,0),this.curTable[10]=this.getRgb(0,81,0),this.curTable[11]=this.getRgb(0,63,23),this.curTable[12]=this.getRgb(27,63,95),this.curTable[13]=this.getRgb(0,0,0),this.curTable[14]=this.getRgb(0,0,0),this.curTable[15]=this.getRgb(0,0,0),this.curTable[16]=this.getRgb(188,188,188),this.curTable[17]=this.getRgb(0,115,239),this.curTable[18]=this.getRgb(35,59,239),this.curTable[19]=this.getRgb(131,0,243),this.curTable[20]=this.getRgb(191,0,191),this.curTable[21]=this.getRgb(231,0,91),this.curTable[22]=this.getRgb(219,43,0),this.curTable[23]=this.getRgb(203,79,15),this.curTable[24]=this.getRgb(139,115,0),this.curTable[25]=this.getRgb(0,151,0),this.curTable[26]=this.getRgb(0,171,0),this.curTable[27]=this.getRgb(0,147,59),this.curTable[28]=this.getRgb(0,131,139),this.curTable[29]=this.getRgb(0,0,0),this.curTable[30]=this.getRgb(0,0,0),this.curTable[31]=this.getRgb(0,0,0),this.curTable[32]=this.getRgb(255,255,255),this.curTable[33]=this.getRgb(63,191,255),this.curTable[34]=this.getRgb(95,151,255),this.curTable[35]=this.getRgb(167,139,253),this.curTable[36]=this.getRgb(247,123,255),this.curTable[37]=this.getRgb(255,119,183),this.curTable[38]=this.getRgb(255,119,99),this.curTable[39]=this.getRgb(255,155,59),this.curTable[40]=this.getRgb(243,191,63),this.curTable[41]=this.getRgb(131,211,19),this.curTable[42]=this.getRgb(79,223,75),this.curTable[43]=this.getRgb(88,248,152),this.curTable[44]=this.getRgb(0,235,219),this.curTable[45]=this.getRgb(0,0,0),this.curTable[46]=this.getRgb(0,0,0),this.curTable[47]=this.getRgb(0,0,0),this.curTable[48]=this.getRgb(255,255,255),this.curTable[49]=this.getRgb(171,231,255),this.curTable[50]=this.getRgb(199,215,255),this.curTable[51]=this.getRgb(215,203,255),this.curTable[52]=this.getRgb(255,199,255),this.curTable[53]=this.getRgb(255,199,219),this.curTable[54]=this.getRgb(255,191,179),this.curTable[55]=this.getRgb(255,219,171),this.curTable[56]=this.getRgb(255,231,163),this.curTable[57]=this.getRgb(227,255,163),this.curTable[58]=this.getRgb(171,243,191),this.curTable[59]=this.getRgb(179,255,207),this.curTable[60]=this.getRgb(159,255,243),this.curTable[61]=this.getRgb(0,0,0),this.curTable[62]=this.getRgb(0,0,0),this.curTable[63]=this.getRgb(0,0,0),this.makeTables(),this.setEmphasis(0)}},Ze=xe});var Nt,de,Qe=S(()=>{Bt();H();je();Ke();Nt=class{constructor(t){c(this,"STATUS_VRAMWRITE",4);c(this,"STATUS_SLSPRITECOUNT",5);c(this,"STATUS_SPRITE0HIT",6);c(this,"STATUS_VBLANK",7);this.nes=t,this.showSpr0Hit=!1,this.clipToTvSize=!0;let e;for(this.vramMem=new Uint8Array(32768),this.spriteMem=new Uint8Array(256),this.vramAddress=null,this.vramTmpAddress=null,this.vramBufferedReadValue=0,this.firstWrite=!0,this.openBusLatch=0,this.openBusDecayFrames=0,this.sramAddress=0,this.currentMirroring=-1,this.nmiOutput=!1,this.nmiSuppressed=!1,this.vblankPending=!1,this.frameEnded=!1,this.dummyCycleToggle=!1,this.validTileData=!1,this.scanlineAlreadyRendered=null,this.f_nmiOnVblank=0,this.f_spriteSize=0,this.f_bgPatternTable=0,this.f_spPatternTable=0,this.f_addrInc=0,this.f_nTblAddress=0,this.f_color=0,this.f_spVisibility=0,this.f_bgVisibility=0,this.f_spClipping=0,this.f_bgClipping=0,this.f_dispType=0,this.cntFV=0,this.cntV=0,this.cntH=0,this.cntVT=0,this.cntHT=0,this.regFV=0,this.regV=0,this.regH=0,this.regVT=0,this.regHT=0,this.regFH=0,this.regS=0,this.curNt=null,this.attrib=new Uint8Array(32),this.buffer=new Uint32Array(256*240),this.bgbuffer=new Uint32Array(256*240),this.pixrendered=new Uint32Array(256*240),this.validTileData=null,this.scantile=new Array(32),this.scanline=0,this.lastRenderedScanline=-1,this.curX=0,this.sprX=new Uint8Array(64),this.sprY=new Uint8Array(64),this.sprTile=new Uint8Array(64),this.sprCol=new Uint8Array(64),this.vertFlip=new Uint8Array(64),this.horiFlip=new Uint8Array(64),this.bgPriority=new Uint8Array(64),this.spr0HitX=0,this.spr0HitY=0,this.hitSpr0=!1,this.secondaryOAM=new Uint8Array(32),this.secondaryOAM.fill(255),this.spritesFound=0,this.sprite0InSecondary=!1,this.scanlineSpriteCount=new Uint8Array(241),this.scanlineSecondaryOAM=new Uint8Array(7712),this.scanlineSprite0=new Uint8Array(241),this.sprPalette=new Uint32Array(16),this.imgPalette=new Uint32Array(16),this.ptTile=new Array(512),e=0;e<512;e++)this.ptTile[e]=new xt;for(this.ntable1=new Array(4),this.currentMirroring=-1,this.nameTable=new Array(4),e=0;e<4;e++)this.nameTable[e]=new Xe(32,32,`Nt${e}`);for(this.vramMirrorTable=new Uint16Array(32768),e=0;e<32768;e++)this.vramMirrorTable[e]=e;this.palTable=new Ze,this.palTable.loadNTSCPalette(),this.updateControlReg1(0),this.updateControlReg2(0)}setMirroring(t){if(t!==this.currentMirroring){this.currentMirroring=t,this.triggerRendering(),this.vramMirrorTable===null&&(this.vramMirrorTable=new Uint16Array(32768));for(let e=0;e<32768;e++)this.vramMirrorTable[e]=e;this.defineMirrorRegion(16160,16128,32),this.defineMirrorRegion(16192,16128,32),this.defineMirrorRegion(16256,16128,32),this.defineMirrorRegion(16320,16128,32),this.defineMirrorRegion(12288,8192,3840),this.defineMirrorRegion(16384,0,16384),t===this.nes.rom.HORIZONTAL_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=0,this.ntable1[2]=1,this.ntable1[3]=1,this.defineMirrorRegion(9216,8192,1024),this.defineMirrorRegion(11264,10240,1024)):t===this.nes.rom.VERTICAL_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=1,this.ntable1[2]=0,this.ntable1[3]=1,this.defineMirrorRegion(10240,8192,1024),this.defineMirrorRegion(11264,9216,1024)):t===this.nes.rom.SINGLESCREEN_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=0,this.ntable1[2]=0,this.ntable1[3]=0,this.defineMirrorRegion(9216,8192,1024),this.defineMirrorRegion(10240,8192,1024),this.defineMirrorRegion(11264,8192,1024)):t===this.nes.rom.SINGLESCREEN_MIRRORING2?(this.ntable1[0]=1,this.ntable1[1]=1,this.ntable1[2]=1,this.ntable1[3]=1,this.defineMirrorRegion(9216,9216,1024),this.defineMirrorRegion(10240,9216,1024),this.defineMirrorRegion(11264,9216,1024)):(this.ntable1[0]=0,this.ntable1[1]=1,this.ntable1[2]=2,this.ntable1[3]=3)}}defineMirrorRegion(t,e,i){for(let s=0;s0&&(this.openBusDecayFrames--,this.openBusDecayFrames===0&&(this.openBusLatch=0)),this.lastRenderedScanline<239&&this.renderFramePartially(this.lastRenderedScanline+1,240-this.lastRenderedScanline),this.endFrame(),this.lastRenderedScanline=-1}_fireVblankSet(t,e){this.vblankPending=!1,this.nmiSuppressed||(this.setStatusFlag(this.STATUS_VBLANK,!0),this._updateNmiOutput(),t.nmiRaised&&(t.nmiDotsRemainingInStep=e)),this.nmiSuppressed=!1,this.startVBlank(),this.frameEnded=!0}_fireVblankClear(t,e){t.nmiRaised&&e&&(t.nmiPending=!0,t.nmiRaised=!1),this.setStatusFlag(this.STATUS_VBLANK,!1),this.setStatusFlag(this.STATUS_SPRITE0HIT,!1),this.setStatusFlag(this.STATUS_SLSPRITECOUNT,!1),this.hitSpr0=!1,this.spr0HitX=-1,this.spr0HitY=-1,this._updateNmiOutput()}advanceDots(t){let e=this.curX+t;if(e<341&&!(this.scanline===0&&this.vblankPending&&this.curX<=1&&e>=1)&&!(this.scanline===20&&this.curX<=1&&e>=1)&&(this.spr0HitX=e)){this.curX=e;return}let i=this.nes.cpu;for(let s=0;s=21&&this.scanline<=260){let t=this.scanline+1-21;this.performOAMCorruption(),(this.f_bgVisibility===1||this.f_spVisibility===1)&&(this.scanlineAlreadyRendered||(this.cntHT=this.regHT,this.cntH=this.regH,this.renderBgScanline(!0,t)),this.scanlineAlreadyRendered=!1,!this.hitSpr0&&this.f_bgVisibility===1&&this.f_spVisibility===1&&this.scanlineSprite0[t]&&this.checkSprite0(t)&&(this.hitSpr0=!0)),t<240&&this.evaluateSprites(t+1),!this.hitSpr0&&this.f_bgVisibility===1&&this.f_spVisibility===1&&(this._precomputeSprite0Hit(t+1),this.spr0HitX!==-1&&(this.hitSpr0=!0)),(this.f_bgVisibility===1||this.f_spVisibility===1)&&this.nes.mmap.clockIrqCounter()}}this.scanline++,this.regsToAddress(),this.cntsToAddress()}startFrame(){this.scanlineSpriteCount.fill(0),this.scanlineSprite0.fill(0);let t;if(this.f_dispType===0)t=this.imgPalette[0];else switch(this.f_color){case 0:t=0;break;case 1:t=65280;break;case 2:t=255;break;case 3:t=0;break;case 4:t=16711680;break;default:t=0}this.buffer.fill(t),this.pixrendered.fill(65)}endFrame(){let t,e,i=this.buffer;if(this.showSpr0Hit){if(this.sprX[0]>=0&&this.sprX[0]<256&&this.sprY[0]>=0&&this.sprY[0]<240){for(t=0;t<256;t++)i[(this.sprY[0]<<8)+t]=16733525;for(t=0;t<240;t++)i[(t<<8)+this.sprX[0]]=16733525}if(this.spr0HitX>=0&&this.spr0HitX<256&&this.spr0HitY>=0&&this.spr0HitY<240){for(t=0;t<256;t++)i[(this.spr0HitY<<8)+t]=5635925;for(t=0;t<240;t++)i[(t<<8)+this.spr0HitX]=5635925}}if(this.clipToTvSize||this.f_bgClipping===0||this.f_spClipping===0)for(e=0;e<240;e++)i.fill(0,e<<8,(e<<8)+8);if(this.clipToTvSize){for(e=0;e<240;e++)i.fill(0,(e<<8)+248,(e<<8)+256);i.fill(0,0,2048),i.fill(0,59392,61440)}this.nes.ui.writeFrame(i)}updateControlReg1(t){this.triggerRendering(),this.f_nmiOnVblank=t>>7&1,this.f_spriteSize=t>>5&1,this.f_bgPatternTable=t>>4&1,this.f_spPatternTable=t>>3&1,this.f_addrInc=t>>2&1,this.f_nTblAddress=t&3,this.regV=t>>1&1,this.regH=t&1,this.regS=t>>4&1,this._updateNmiOutput()}_updateNmiOutput(){let t=(this.nes.cpu.mem[8194]&128)!==0,e=this.f_nmiOnVblank!==0&&t;if(e&&!this.nmiOutput)this.nes.cpu.nmiRaised=!0,this.nes.cpu.nmiRaisedAtCycle=this.nes.cpu.instrBusCycles;else if(!e&&this.nmiOutput&&this.nes.cpu.nmiRaised){let i=this.nes.cpu.instrBusCycles-this.nes.cpu.nmiRaisedAtCycle;(i===0||i===1&&this.nes.cpu.nmiDotsRemainingInStep===0)&&(this.nes.cpu.nmiRaised=!1)}this.nmiOutput=e}updateControlReg2(t){if(this.triggerRendering(),this.f_color=t>>5&7,this.f_spVisibility=t>>4&1,this.f_bgVisibility=t>>3&1,this.f_spClipping=t>>2&1,this.f_bgClipping=t>>1&1,this.f_dispType=t&1,!this.hitSpr0&&this.f_bgVisibility===1&&this.f_spVisibility===1&&this.scanline>=21&&this.scanline<=260){let e=this.scanline+1-21;this.scanlineSprite0[e]&&this.checkSprite0(e)&&(this.hitSpr0=!0)}this.f_dispType===0&&this.palTable.setEmphasis(this.f_color),this.updatePalettes()}setStatusFlag(t,e){let i=1<=20&&this.scanline<=260){let i=this.curX;if(i<=64)return 255;if(i<=256){let s=this.spriteMem[this.sramAddress];return(this.sramAddress&3)===2&&(s&=227),s}else return 255}let e=this.spriteMem[this.sramAddress];return(this.sramAddress&3)===2&&(e&=227),e}sramWrite(t){(this.f_spVisibility===1||this.f_bgVisibility===1)&&this.scanline>=20&&this.scanline<=260?this.sramAddress=this.sramAddress+4&252:(this.spriteMem[this.sramAddress]=t,this.spriteRamWriteUpdate(this.sramAddress,t),this.sramAddress++,this.sramAddress%=256)}scrollWrite(t){this.triggerRendering(),this.firstWrite?(this.regHT=t>>3&31,this.regFH=t&7):(this.regFV=t&7,this.regVT=t>>3&31),this.firstWrite=!this.firstWrite}writeVRAMAddress(t){this.firstWrite?(this.regFV=t>>4&3,this.regV=t>>3&1,this.regH=t>>2&1,this.regVT=this.regVT&7|(t&3)<<3):(this.triggerRendering(),this.regVT=this.regVT&24|t>>5&7,this.regHT=t&31,this.cntFV=this.regFV,this.cntV=this.regV,this.cntH=this.regH,this.cntVT=this.regVT,this.cntHT=this.regHT,this.checkSprite0(this.scanline+1-21)),this.firstWrite=!this.firstWrite,this.cntsToAddress(),this.vramAddress<8192&&this.nes.mmap.latchAccess(this.vramAddress)}vramLoad(){let t;if(this.cntsToAddress(),this.regsToAddress(),this.vramAddress<=16127)return t=this.vramBufferedReadValue,this.vramAddress<8192?this.vramBufferedReadValue=this.vramMem[this.vramAddress]:this.vramBufferedReadValue=this.mirroredLoad(this.vramAddress),this.vramAddress<8192&&this.nes.mmap.latchAccess(this.vramAddress),this._incrementVramAddress(),this.cntsFromAddress(),this.regsFromAddress(),t;let e=this.vramAddress&31;return(e&19)===16&&(e&=15),t=this.vramMem[16128+e]&63|this.openBusLatch&192,this.vramBufferedReadValue=this.mirroredLoad(this.vramAddress&12287),this._incrementVramAddress(),this.cntsFromAddress(),this.regsFromAddress(),t}vramWrite(t){this.triggerRendering(),this.cntsToAddress(),this.regsToAddress(),this.vramAddress>=8192?this.mirroredWrite(this.vramAddress,t):(this.nes.mmap.canWriteChr(this.vramAddress)&&this.writeMem(this.vramAddress,t),this.nes.mmap.latchAccess(this.vramAddress)),this._incrementVramAddress(),this.regsFromAddress(),this.cntsFromAddress()}sramDMA(t){let e=t*256,i;for(let n=0;n<256;n++){i=this.nes.cpu.mem[e+n];let l=this.sramAddress+n&255;this.spriteMem[l]=i,this.spriteRamWriteUpdate(l,i)}let s=this.nes.cpu,a=(s._cpuCycleBase+s.instrBusCycles)%2===0?514:513;s.haltCycles(a)}regsFromAddress(){let t=this.vramTmpAddress>>8&255;this.regFV=t>>4&7,this.regV=t>>3&1,this.regH=t>>2&1,this.regVT=this.regVT&7|(t&3)<<3,t=this.vramTmpAddress&255,this.regVT=this.regVT&24|t>>5&7,this.regHT=t&31}_incrementVramAddress(){let t=this.f_spVisibility===1||this.f_bgVisibility===1,e=this.scanline>=20&&this.scanline<=260;if(t&&e)if((this.vramAddress&31)===31?(this.vramAddress&=-32,this.vramAddress^=1024):this.vramAddress+=1,(this.vramAddress&28672)!==28672)this.vramAddress+=4096;else{this.vramAddress&=-28673;let i=this.vramAddress>>5&31;i===29?(i=0,this.vramAddress^=2048):i===31?i=0:i+=1,this.vramAddress=this.vramAddress&-993|i<<5}else this.vramAddress+=this.f_addrInc===1?32:1}cntsFromAddress(){let t=this.vramAddress>>8&255;this.cntFV=t>>4&3,this.cntV=t>>3&1,this.cntH=t>>2&1,this.cntVT=this.cntVT&7|(t&3)<<3,t=this.vramAddress&255,this.cntVT=this.cntVT&24|t>>5&7,this.cntHT=t&31}regsToAddress(){let t=(this.regFV&7)<<4;t|=(this.regV&1)<<3,t|=(this.regH&1)<<2,t|=this.regVT>>3&3;let e=(this.regVT&7)<<5;e|=this.regHT&31,this.vramTmpAddress=(t<<8|e)&32767}cntsToAddress(){let t=(this.cntFV&7)<<4;t|=(this.cntV&1)<<3,t|=(this.cntH&1)<<2,t|=this.cntVT>>3&3;let e=(this.cntVT&7)<<5;e|=this.cntHT&31,this.vramAddress=(t<<8|e)&32767}incTileCounter(t){for(let e=t;e!==0;e--)this.cntHT++,this.cntHT===32&&(this.cntHT=0,this.cntVT++,this.cntVT>=30&&(this.cntH++,this.cntH===2&&(this.cntH=0,this.cntV++,this.cntV===2&&(this.cntV=0,this.cntFV++,this.cntFV&=7))))}mirroredLoad(t){return this.vramMem[this.vramMirrorTable[t]]}mirroredWrite(t,e){if(t>=16128&&t<16160)t===16128||t===16144?(this.writeMem(16128,e),this.writeMem(16144,e)):t===16132||t===16148?(this.writeMem(16132,e),this.writeMem(16148,e)):t===16136||t===16152?(this.writeMem(16136,e),this.writeMem(16152,e)):t===16140||t===16156?(this.writeMem(16140,e),this.writeMem(16156,e)):this.writeMem(t,e);else if(t=21&&this.scanline<=260&&(this.renderFramePartially(this.lastRenderedScanline+1,this.scanline-21-this.lastRenderedScanline),this.lastRenderedScanline=this.scanline-21)}renderFramePartially(t,e){if(this._inRendering=!0,this.nes.mmap.onSpriteRender(),this.f_spVisibility===1&&this.renderSpritesPartially(t,e,1),this.f_bgVisibility===1){let i=t<<8,s=t+e<<8;s>61440&&(s=61440);let r=this.buffer,a=this.bgbuffer,n=this.pixrendered;for(let l=i;l255&&(r[l]=a[l])}this.f_spVisibility===1&&this.renderSpritesPartially(t,e,0),this.nes.mmap.onBgRender(),this._inRendering=!1,this.validTileData=!1}renderBgScanline(t,e){let i=this.regS===0?0:256,s=this.regS===0?0:4096,r=(e<<8)-this.regFH;if(this.curNt=this.ntable1[this.cntV+this.cntV+this.cntH],this.cntHT=this.regHT,this.cntH=this.regH,this.curNt=this.ntable1[this.cntV+this.cntV+this.cntH],e<240&&e-this.cntFV>=0){let a=this.cntFV<<3,n=this.scantile,l=this.attrib,o=this.ptTile,p=this.nameTable,h=this.imgPalette,d=this.pixrendered,x=t?this.bgbuffer:this.buffer,m=this.nes.mmap,f,R,_,E;this._inRendering=!0,this.nes.mmap.onBgRender(),this.f_spriteSize===1&&m.latchAccess(8168);for(let g=0;g<32;g++){if(e>=0){let L=p[this.curNt].getTileIndex(this.cntHT,this.cntVT);if(this.validTileData){if(f=n[g],typeof f=="undefined")continue;R=f.pix,_=l[g]}else{if(f=o[i+L],typeof f=="undefined")continue;if(R=f.pix,_=p[this.curNt].getAttrib(this.cntHT,this.cntVT),m.bgTileOverride){let W=m.getBgTileData(i,L,this.cntHT,this.cntVT);W&&(f=W.tile,R=f.pix,_=W.attrib)}n[g]=f,l[g]=_}let z=0,q=(g<<3)-this.regFH;if(q>-8)if(q<0&&(r-=q,z=-q),f.opaque[this.cntFV])for(;z<8;z++)x[r]=h[R[a+z]+_],d[r]|=256,r++;else for(;z<8;z++)E=R[a+z],E!==0&&(x[r]=h[E+_],d[r]|=256),r++;m.latchAccess(s+L*16+this.cntFV+8)}++this.cntHT===32&&(this.cntHT=0,this.cntH++,this.cntH%=2,this.curNt=this.ntable1[(this.cntV<<1)+this.cntH])}this._inRendering=!1,this.validTileData=!0}this.cntFV++,this.cntFV===8&&(this.cntFV=0,this.cntVT++,this.cntVT===30?(this.cntVT=0,this.cntV++,this.cntV%=2,this.curNt=this.ntable1[(this.cntV<<1)+this.cntH]):this.cntVT===32&&(this.cntVT=0),this.validTileData=!1)}performOAMCorruption(){if(!(this.f_spVisibility===1||this.f_bgVisibility===1)||this.sramAddress===0)return;let e=this.sramAddress&248;for(let i=0;i<8;i++)this.spriteMem[i]=this.spriteMem[e+i&255];for(let i=0;i<8;i++)this.spriteRamWriteUpdate(i,this.spriteMem[i])}evaluateSprites(t){if(!(this.f_spVisibility===1||this.f_bgVisibility===1))return;let i=t*32;for(let x=0;x<32;x++)this.scanlineSecondaryOAM[i+x]=255;this.scanlineSpriteCount[t]=0,this.scanlineSprite0[t]=0;let s=this.f_spriteSize===0?8:16,r=0,a=0,n=this.sramAddress>>2&63,l=this.sramAddress&3,o=0,p=n,h=!0,d=0;do{let x;r>=8?x=o:h?x=l:x=0,h=!1;let m=this.spriteMem[p*4+x&255];if(t>m&&t<=m+s)if(r<8){for(let f=0;f<4;f++)this.scanlineSecondaryOAM[i+a+f]=this.spriteMem[p*4+x+f&255];d===0&&(this.scanlineSprite0[t]=1),r++,a+=4}else{this.setStatusFlag(this.STATUS_SLSPRITECOUNT,!0);break}else r>=8&&(o=o+1&3);p=p+1&63,d++}while(p!==0);this.scanlineSpriteCount[t]=r;for(let x=0;x<32;x++)this.secondaryOAM[x]=this.scanlineSecondaryOAM[i+x];this.spritesFound=r,this.sprite0InSecondary=this.scanlineSprite0[t]===1,this.sramAddress=0}renderSpritesPartially(t,e,i){if(this.f_spVisibility!==1)return;let s=this.nes.mmap,r=this.ptTile,a=this.buffer,n=this.sprPalette,l=this.pixrendered;for(let o=t;o=240)continue;let p=this.scanlineSpriteCount[o],h=o*32;for(let d=0;d>7&1,E=f>>6&1,g=f>>5&1,L=(f&3)<<2;if(g===i)if(this.f_spriteSize===0){let z=this.f_spPatternTable===0?m:m+256,q=this.f_spPatternTable===0?0:4096,W=x+1,J=o-W;if(J<0||J>=8)continue;r[z].render(a,0,J,8,J+1,R,W,L,n,E,_,d,l),s.latchAccess(q+m*16+8)}else{let z=(m&1)!==0?4096:0,q=m&254,W=(m&1)!==0?q-1+256:q,J=x+1,j=o-J;if(j<0||j>=16)continue;let dt,rt;j<8?(dt=_?1:0,rt=j):(dt=_?0:1,rt=j-8),r[W+dt].render(a,0,rt,8,rt+1,R,J+(j<8?0:8),L,n,E,_,d,l),s.latchAccess(z+q*16+8),s.latchAccess(z+(q+1)*16+8)}}}}checkSprite0(t){if(this.spr0HitX=-1,this.spr0HitY=-1,t<0||t>=240||!this.scanlineSprite0[t]||this.scanlineSpriteCount[t]===0)return!1;let e=t*32,i=this.scanlineSecondaryOAM[e+0],s=this.scanlineSecondaryOAM[e+1],r=this.scanlineSecondaryOAM[e+2],a=this.scanlineSecondaryOAM[e+3],n=i+1,l=r>>7&1,o=r>>6&1,p=this.f_spClipping===0||this.f_bgClipping===0,h,d,x=this.nes.mmap;if(this.f_spriteSize===0){let m=this.f_spPatternTable===0?0:256;if(n<=t&&n+8>t&&a<256)return d=x.getSpritePatternTile(s+m),h=l?7-(t-n):t-n,h*=8,this._checkSpr0Pixels(d,h,a,o,t,p)}else if(n<=t&&n+16>t&&a<256)return h=l?15-(t-n):t-n,h<8?d=x.getSpritePatternTile(s+(l?1:0)+((s&1)!==0?255:0)):(d=x.getSpritePatternTile(s+(l?0:1)+((s&1)!==0?255:0)),h=l?15-h:h-8),h*=8,this._checkSpr0Pixels(d,h,a,o,t,p);return!1}_checkSpr0Pixels(t,e,i,s,r,a){let n=r*256+i;for(let l=0;l<8;l++){let o=s?7-l:l,p=i+l;if(p>=0&&p<255){if(a&&p<8){n++;continue}if(n>=0&&n<61440&&this.pixrendered[n]>255&&t.pix[e+o]!==0)return this.spr0HitX=p,this.spr0HitY=r,!0}n++}return!1}_precomputeSprite0Hit(t){if(t<1||t>239||!this.scanlineSprite0[t]||this.scanlineSpriteCount[t]===0)return!1;let e=t*32,i=this.scanlineSecondaryOAM[e+0],s=this.scanlineSecondaryOAM[e+1],r=this.scanlineSecondaryOAM[e+2],a=this.scanlineSecondaryOAM[e+3],n=i+1,l=r>>7&1,o=r>>6&1,p=this.f_spClipping===0||this.f_bgClipping===0,h=this.f_spriteSize===0?8:16;if(!(n<=t&&n+h>t)||a>=256)return!1;let d=l?h-1-(t-n):t-n,x,m;if(this.f_spriteSize===0){let g=this.f_spPatternTable===0?0:256;x=this.ptTile[s+g],m=d*8}else{let g=(s&1)!==0?256:0,L=s&-2;d<8?(x=this.ptTile[L+g+(l?1:0)],m=d*8):(x=this.ptTile[L+g+(l?0:1)],m=(d-8)*8)}if(!x)return!1;let f=this.cntFV,R=this.cntVT,_=this.cntV,E=this.regS===0?0:256;for(let g=0;g<8;g++){let L=a+g;if(L>=255||p&&L<8)continue;let z=o?7-g:g;if(x.pix[m+z]===0)continue;let q=L+this.regFH>>3,W=this.regHT+q,J=this.regH;W>=32&&(W-=32,J^=1);let j=this.ntable1[(_<<1)+J],dt=this.nameTable[j].getTileIndex(W,R),rt=this.ptTile[E+dt];if(!rt)continue;let is=L+this.regFH&7;if(rt.pix[f*8+is]!==0)return this.spr0HitX=L,this.spr0HitY=t-1,!0}return!1}writeMem(t,e){this.vramMem[t]=e,t<8192?(this.vramMem[t]=e,this.patternWrite(t,e)):t>=8192&&t<9152?this.nameTableWrite(this.ntable1[0],t-8192,e):t>=9152&&t<9216?this.attribTableWrite(this.ntable1[0],t-9152,e):t>=9216&&t<10176?this.nameTableWrite(this.ntable1[1],t-9216,e):t>=10176&&t<10240?this.attribTableWrite(this.ntable1[1],t-10176,e):t>=10240&&t<11200?this.nameTableWrite(this.ntable1[2],t-10240,e):t>=11200&&t<11264?this.attribTableWrite(this.ntable1[2],t-11200,e):t>=11264&&t<12224?this.nameTableWrite(this.ntable1[3],t-11264,e):t>=12224&&t<12288?this.attribTableWrite(this.ntable1[3],t-12224,e):t>=16128&&t<16160&&this.updatePalettes()}updatePalettes(){let t;for(t=0;t<16;t++)this.f_dispType===0?this.imgPalette[t]=this.palTable.getEntry(this.vramMem[16128+t]&63):this.imgPalette[t]=this.palTable.getEntry(this.vramMem[16128+t]&48);for(t=0;t<16;t++)this.f_dispType===0?this.sprPalette[t]=this.palTable.getEntry(this.vramMem[16144+t]&63):this.sprPalette[t]=this.palTable.getEntry(this.vramMem[16144+t]&48)}patternWrite(t,e){let i=t>>4,s=t&15;s<8?this.ptTile[i].setScanline(s,e,this.vramMem[t+8]):this.ptTile[i].setScanline(s-8,this.vramMem[t-8],e)}nameTableWrite(t,e,i){this.nameTable[t].tile[e]=i;let s=this.scanline+1-21;this.checkSprite0(s)}attribTableWrite(t,e,i){this.nameTable[t].writeAttrib(e,i),this.nameTable[t].tile[960+e]=i}spriteRamWriteUpdate(t,e){let i=t>>2;if(i===0){let s=this.scanline+1-21;this.checkSprite0(s)}switch(t&3){case 0:this.sprY[i]=e;break;case 1:this.sprTile[i]=e;break;case 2:this.vertFlip[i]=e>>7&1,this.horiFlip[i]=e>>6&1,this.bgPriority[i]=e>>5&1,this.sprCol[i]=(e&3)<<2;break;case 3:this.sprX[i]=e;break}}isPixelWhite(t,e){return this.triggerRendering(),this.nes.ppu.buffer[(e<<8)+t]===16777215}toJSON(){let t,e=w(this);for(e.nameTable=[],t=0;t=0&&(this.scantile[e]=this.ptTile[i])}for(e=0;e{H();U=class U{constructor(t){this.papu=t,this.isEnabled=!1,this.hasSample=!1,this.irqGenerated=!1,this.playMode=U.MODE_NORMAL,this.dmaFrequency=0,this.dmaCounter=0,this.deltaCounter=0,this.playStartAddress=0,this.playAddress=0,this.playLength=0,this.playLengthCounter=0,this.sample=0,this.dacLsb=0,this.shiftCounter=0,this.reg4012=0,this.reg4013=0,this.data=0,this.lastFetchedByte=0}clockDmc(){this.hasSample&&((this.data&1)===0?this.deltaCounter>0&&this.deltaCounter--:this.deltaCounter<63&&this.deltaCounter++,this.sample=this.isEnabled?(this.deltaCounter<<1)+this.dacLsb:0,this.data>>=1),this.dmaCounter--,this.dmaCounter<=0&&(this.hasSample=!1,this.endOfSample(),this.dmaCounter=8),this.irqGenerated&&this.papu.nes.cpu.requestIrq(this.papu.nes.cpu.IRQ_NORMAL)}endOfSample(){this.playLengthCounter===0&&this.playMode===U.MODE_LOOP&&(this.playAddress=this.playStartAddress,this.playLengthCounter=this.playLength),this.playLengthCounter>0&&(this.nextSample(),this.playLengthCounter===0&&this.playMode===U.MODE_IRQ&&(this.irqGenerated=!0))}nextSample(){this.data=this.papu.nes.mmap.load(this.playAddress),this.lastFetchedByte=this.data,this.papu.nes.cpu.haltCycles(4),this.playLengthCounter--,this.playAddress++,this.playAddress>65535&&(this.playAddress=32768),this.hasSample=!0}writeReg(t,e){t===16400?(e>>6===0?this.playMode=U.MODE_NORMAL:(e>>6&1)===1?this.playMode=U.MODE_LOOP:e>>6===2&&(this.playMode=U.MODE_IRQ),(e&128)===0&&(this.irqGenerated=!1),this.dmaFrequency=this.papu.getDmcFrequency(e&15)):t===16401?(this.deltaCounter=e>>1&63,this.dacLsb=e&1,this.sample=(this.deltaCounter<<1)+this.dacLsb):t===16402?(this.playStartAddress=e<<6|49152,this.reg4012=e):t===16403?(this.playLength=(e<<4)+1,this.reg4013=e):t===16405&&(this.irqGenerated=!1,(e>>4&1)===0?this.playLengthCounter=0:this.playLengthCounter===0&&(this.playAddress=this.playStartAddress,this.playLengthCounter=this.playLength,!this.hasSample&&this.playLengthCounter>0&&(this.nextSample(),this.dmaCounter=8,this.shiftCounter=this.dmaFrequency,this.playLengthCounter===0&&this.playMode===U.MODE_IRQ&&(this.irqGenerated=!0))))}setEnabled(t){this.isEnabled=t}getLengthStatus(){return this.playLengthCounter===0||!this.isEnabled?0:1}getIrqStatus(){return this.irqGenerated?1:0}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(U,"MODE_NORMAL",0),c(U,"MODE_LOOP",1),c(U,"MODE_IRQ",2),c(U,"JSON_PROPERTIES",["isEnabled","hasSample","irqGenerated","playMode","dmaFrequency","dmaCounter","deltaCounter","playStartAddress","playAddress","playLength","playLengthCounter","shiftCounter","reg4012","reg4013","sample","dacLsb","data","lastFetchedByte"]);Re=U,$e=Re});var Mt,ei,ii=S(()=>{H();Mt=class{constructor(t){this.papu=t,this.progTimerCount=0,this.progTimerMax=0,this.isEnabled=!1,this.lengthCounter=0,this.lengthCounterEnable=!1,this.envDecayDisable=!1,this.envDecayLoopEnable=!1,this.envReset=!1,this.shiftNow=!1,this.envDecayRate=0,this.envDecayCounter=0,this.envVolume=0,this.masterVolume=0,this.shiftReg=1,this.randomBit=0,this.randomMode=0,this.sampleValue=0,this.tmp=0,this.accValue=0,this.accCount=1}clockLengthCounter(){this.lengthCounterEnable&&this.lengthCounter>0&&(this.lengthCounter--,this.lengthCounter===0&&this.updateSampleValue())}clockEnvDecay(){this.envReset?(this.envReset=!1,this.envDecayCounter=this.envDecayRate+1,this.envVolume=15):--this.envDecayCounter<=0&&(this.envDecayCounter=this.envDecayRate+1,this.envVolume>0?this.envVolume--:this.envVolume=this.envDecayLoopEnable?15:0),this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume,this.updateSampleValue()}updateSampleValue(){this.isEnabled&&this.lengthCounter>0&&(this.sampleValue=this.randomBit*this.masterVolume)}writeReg(t,e){t===16396?(this.envDecayDisable=(e&16)!==0,this.envDecayRate=e&15,this.envDecayLoopEnable=(e&32)!==0,this.lengthCounterEnable=(e&32)===0,this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume):t===16398?(this.progTimerMax=this.papu.getNoiseWaveLength(e&15),this.randomMode=e>>7):t===16399&&(this.isEnabled&&(this.lengthCounter=this.papu.getLengthMax(e&248)),this.envReset=!0)}setEnabled(t){this.isEnabled=t,t||(this.lengthCounter=0),this.updateSampleValue()}getLengthStatus(){return this.lengthCounter===0||!this.isEnabled?0:1}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(Mt,"JSON_PROPERTIES",["isEnabled","envDecayDisable","envDecayLoopEnable","lengthCounterEnable","envReset","shiftNow","lengthCounter","progTimerCount","progTimerMax","envDecayRate","envDecayCounter","envVolume","masterVolume","shiftReg","randomBit","randomMode","sampleValue","accValue","accCount","tmp"]);ei=Mt});var Ot,ge,si=S(()=>{H();Ot=class{constructor(t,e){this.papu=t,this.dutyLookup=[0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1],this.impLookup=[1,-1,0,0,0,0,0,0,1,0,-1,0,0,0,0,0,1,0,0,0,-1,0,0,0,-1,0,1,0,0,0,0,0],this.sqr1=e,this.progTimerCount=0,this.progTimerMax=0,this.lengthCounter=0,this.squareCounter=0,this.sweepCounter=0,this.sweepCounterMax=0,this.sweepMode=0,this.sweepShiftAmount=0,this.envDecayRate=0,this.envDecayCounter=0,this.envVolume=0,this.masterVolume=0,this.dutyMode=0,this.vol=0,this.isEnabled=!1,this.lengthCounterEnable=!1,this.sweepActive=!1,this.sweepCarry=!1,this.envDecayDisable=!1,this.envDecayLoopEnable=!1,this.envReset=!1,this.updateSweepPeriod=!1,this.sweepResult=0,this.sampleValue=0}clockLengthCounter(){this.lengthCounterEnable&&this.lengthCounter>0&&(this.lengthCounter--,this.lengthCounter===0&&this.updateSampleValue())}clockEnvDecay(){this.envReset?(this.envReset=!1,this.envDecayCounter=this.envDecayRate+1,this.envVolume=15):--this.envDecayCounter<=0&&(this.envDecayCounter=this.envDecayRate+1,this.envVolume>0?this.envVolume--:this.envVolume=this.envDecayLoopEnable?15:0),this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume,this.updateSampleValue()}clockSweep(){--this.sweepCounter<=0&&(this.sweepCounter=this.sweepCounterMax+1,this.sweepActive&&this.sweepShiftAmount>0&&this.progTimerMax>7&&(this.sweepCarry=!1,this.sweepMode===0?(this.progTimerMax+=this.progTimerMax>>this.sweepShiftAmount,this.progTimerMax>2047&&(this.progTimerMax=4095,this.sweepCarry=!0)):this.progTimerMax=this.progTimerMax-((this.progTimerMax>>this.sweepShiftAmount)+(this.sqr1?1:0)))),this.updateSweepPeriod&&(this.updateSweepPeriod=!1,this.sweepCounter=this.sweepCounterMax+1)}updateSampleValue(){this.isEnabled&&this.lengthCounter>0&&this.progTimerMax>7?this.sweepMode===0&&this.progTimerMax+(this.progTimerMax>>this.sweepShiftAmount)>2047?this.sampleValue=0:this.sampleValue=this.masterVolume*this.dutyLookup[(this.dutyMode<<3)+this.squareCounter]:this.sampleValue=0}writeReg(t,e){let i=this.sqr1?0:4;t===16384+i?(this.envDecayDisable=(e&16)!==0,this.envDecayRate=e&15,this.envDecayLoopEnable=(e&32)!==0,this.dutyMode=e>>6&3,this.lengthCounterEnable=(e&32)===0,this.envDecayDisable?this.masterVolume=this.envDecayRate:this.masterVolume=this.envVolume,this.updateSampleValue()):t===16385+i?(this.sweepActive=(e&128)!==0,this.sweepCounterMax=e>>4&7,this.sweepMode=e>>3&1,this.sweepShiftAmount=e&7,this.updateSweepPeriod=!0):t===16386+i?(this.progTimerMax&=1792,this.progTimerMax|=e):t===16387+i&&(this.progTimerMax&=255,this.progTimerMax|=(e&7)<<8,this.isEnabled&&(this.lengthCounter=this.papu.getLengthMax(e&248)),this.envReset=!0)}setEnabled(t){this.isEnabled=t,t||(this.lengthCounter=0),this.updateSampleValue()}getLengthStatus(){return this.lengthCounter===0||!this.isEnabled?0:1}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(Ot,"JSON_PROPERTIES",["isEnabled","lengthCounterEnable","sweepActive","envDecayDisable","envDecayLoopEnable","envReset","sweepCarry","updateSweepPeriod","progTimerCount","progTimerMax","lengthCounter","squareCounter","sweepCounter","sweepCounterMax","sweepMode","sweepShiftAmount","envDecayRate","envDecayCounter","envVolume","masterVolume","dutyMode","sweepResult","sampleValue","vol"]);ge=Ot});var It,ri,hi=S(()=>{H();It=class{constructor(t){this.papu=t,this.progTimerCount=0,this.progTimerMax=0,this.triangleCounter=0,this.isEnabled=!1,this.sampleCondition=!1,this.lengthCounter=0,this.lengthCounterEnable=!1,this.linearCounter=0,this.lcLoadValue=0,this.lcHalt=!0,this.lcControl=!1,this.tmp=0,this.sampleValue=15}clockLengthCounter(){this.lengthCounterEnable&&this.lengthCounter>0&&(this.lengthCounter--,this.lengthCounter===0&&this.updateSampleCondition())}clockLinearCounter(){this.lcHalt?(this.linearCounter=this.lcLoadValue,this.updateSampleCondition()):this.linearCounter>0&&(this.linearCounter--,this.updateSampleCondition()),this.lcControl||(this.lcHalt=!1)}getLengthStatus(){return this.lengthCounter===0||!this.isEnabled?0:1}readReg(t){return 0}writeReg(t,e){t===16392?(this.lcControl=(e&128)!==0,this.lcLoadValue=e&127,this.lengthCounterEnable=!this.lcControl):t===16394?(this.progTimerMax&=1792,this.progTimerMax|=e):t===16395&&(this.progTimerMax&=255,this.progTimerMax|=(e&7)<<8,this.isEnabled&&(this.lengthCounter=this.papu.getLengthMax(e&248)),this.lcHalt=!0),this.updateSampleCondition()}clockProgrammableTimer(t){if(this.progTimerMax>0)for(this.progTimerCount+=t;this.progTimerMax>0&&this.progTimerCount>=this.progTimerMax;)this.progTimerCount-=this.progTimerMax,this.isEnabled&&this.lengthCounter>0&&this.linearCounter>0&&this.clockTriangleGenerator()}clockTriangleGenerator(){this.triangleCounter++,this.triangleCounter&=31}setEnabled(t){this.isEnabled=t,t||(this.lengthCounter=0),this.updateSampleCondition()}updateSampleCondition(){this.sampleCondition=this.isEnabled&&this.progTimerMax>7&&this.linearCounter>0&&this.lengthCounter>0}toJSON(){return w(this)}fromJSON(t){V(this,t)}};c(It,"JSON_PROPERTIES",["isEnabled","sampleCondition","lengthCounterEnable","lcHalt","lcControl","progTimerCount","progTimerMax","triangleCounter","lengthCounter","linearCounter","lcLoadValue","sampleValue","tmp"]);ri=It});var ai,Ks,Qs,$s,tr,Pt,be,ni=S(()=>{H();ti();ii();si();hi();ai=17897725e-1,Ks=[7457,14913,22371,29828,29829],Qs=[7457,14913,22371,29829,37281],$s=29830,tr=37282,Pt=class{constructor(t){this.nes=t,this.square1=new ge(this,!0),this.square2=new ge(this,!1),this.triangle=new ri(this),this.noise=new ei(this),this.dmc=new $e(this),this.startedPlaying=!1,this.recordOutput=!1,this.triValue=0,this.prevSampleL=0,this.prevSampleR=0,this.smpAccumL=0,this.smpAccumR=0,this.dacRange=0,this.dcValue=0,this.masterVolume=256,this.panning=[80,170,100,150,128],this.setPanning(this.panning),this.initLengthLookup(),this.initDmcFrequencyLookup(),this.initNoiseWavelengthLookup(),this.initDACtables();for(let e=0;e<20;e++)e===16?this.writeReg(16400,16):this.writeReg(16384+e,0);this.sampleRate=this.nes.opts.sampleRate,this.sampleTimerMax=Math.floor(1024*ai/this.sampleRate),this.sampleTimer=0,this.updateChannelEnable(0),this.frameCycleCounter=0,this.frameStep=0,this.countSequence=0,this.sampleCount=0,this.frameIrqEnabled=!1,this.frameIrqActive=!1,this.frameIrqClearPending=!1,this.apuCycleParity=0,this.accCount=0,this.smpSquare1=0,this.smpSquare2=0,this.smpTriangle=0,this.smpDmc=0,this.channelEnableValue=255,this.extraCycles=0,this.maxSample=-5e5,this.minSample=5e5}readReg(t){let e=0;return e|=this.square1.getLengthStatus(),e|=this.square2.getLengthStatus()<<1,e|=this.triangle.getLengthStatus()<<2,e|=this.noise.getLengthStatus()<<3,e|=this.dmc.getLengthStatus()<<4,e|=this.nes.cpu.dataBus&32,e|=(this.frameIrqActive?1:0)<<6,e|=this.dmc.getIrqStatus()<<7,this.frameIrqActive&&(this.frameIrqClearPending=!0),e&255}writeReg(t,e){if(t>=16384&&t<16388)this.square1.writeReg(t,e);else if(t>=16388&&t<16392)this.square2.writeReg(t,e);else if(t>=16392&&t<16396)this.triangle.writeReg(t,e);else if(t>=16396&&t<=16399)this.noise.writeReg(t,e);else if(t===16400)this.dmc.writeReg(t,e);else if(t===16401)this.dmc.writeReg(t,e);else if(t===16402)this.dmc.writeReg(t,e);else if(t===16403)this.dmc.writeReg(t,e);else if(t===16405)this.updateChannelEnable(e),this.dmc.writeReg(t,e);else if(t===16407){this.countSequence=e>>7&1;let i=this.nes.cpu,s=i.instrBusCycles+1-i.apuCatchupCycles,r=this.apuCycleParity+s&1;this.frameCycleCounter=-7+r,this.frameStep=0,e&64?(this.frameIrqEnabled=!1,this.frameIrqActive=!1,this.frameIrqClearPending=!1):this.frameIrqEnabled=!0,this.countSequence===1&&(this.clockQuarterFrame(),this.clockHalfFrame())}}updateChannelEnable(t){this.channelEnableValue=t&65535,this.square1.setEnabled((t&1)!==0),this.square2.setEnabled((t&2)!==0),this.triangle.setEnabled((t&4)!==0),this.noise.setEnabled((t&8)!==0),this.dmc.setEnabled((t&16)!==0)}clockFrameCounter(t,e){let i=t-(e||0);this.processFrameIrqClear(i),this.apuCycleParity=this.apuCycleParity+i&1,t+=this.extraCycles;let s=this.sampleTimerMax-this.sampleTimer;t<<10>s?(this.extraCycles=(t<<10)-s>>10,t-=this.extraCycles):this.extraCycles=0;let r=this.dmc,a=this.triangle,n=this.square1,l=this.square2,o=this.noise;if(r.isEnabled)for(r.shiftCounter-=t<<3;r.shiftCounter<=0&&r.dmaFrequency>0;)r.shiftCounter+=r.dmaFrequency,r.clockDmc();if(a.progTimerMax>0)for(a.progTimerCount-=t;a.progTimerCount<=0;)a.progTimerCount+=a.progTimerMax+1,a.linearCounter>0&&a.lengthCounter>0&&(a.triangleCounter++,a.triangleCounter&=31,a.isEnabled&&(a.triangleCounter>=16?a.sampleValue=a.triangleCounter&15:a.sampleValue=15-(a.triangleCounter&15),a.sampleValue<<=4));n.progTimerCount-=t,n.progTimerCount<=0&&(n.progTimerCount+=n.progTimerMax+1<<1,n.squareCounter++,n.squareCounter&=7,n.updateSampleValue()),l.progTimerCount-=t,l.progTimerCount<=0&&(l.progTimerCount+=l.progTimerMax+1<<1,l.squareCounter++,l.squareCounter&=7,l.updateSampleValue());let p=t;if(o.progTimerCount-p>0)o.progTimerCount-=p,o.accCount+=p,o.accValue+=p*o.sampleValue;else for(;p-- >0;)--o.progTimerCount<=0&&o.progTimerMax>0&&(o.shiftReg<<=1,o.tmp=(o.shiftReg<<(o.randomMode===0?1:6)^o.shiftReg)&32768,o.tmp!==0?(o.shiftReg|=1,o.randomBit=0,o.sampleValue=0):(o.randomBit=1,o.isEnabled&&o.lengthCounter>0?o.sampleValue=o.masterVolume:o.sampleValue=0),o.progTimerCount+=o.progTimerMax),o.accValue+=o.sampleValue,o.accCount++;this.frameIrqEnabled&&this.frameIrqActive&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL),this._advanceFrameSteps(i),this.accSample(t),this.sampleTimer+=t<<10,this.sampleTimer>=this.sampleTimerMax&&(this.sample(),this.sampleTimer-=this.sampleTimerMax)}processFrameIrqClear(t){if(!this.frameIrqClearPending||t<=0)return;let e=(this.apuCycleParity&1)===0?1:2;t>=e&&(this.frameIrqActive=!1,this.frameIrqClearPending=!1)}advanceFrameCounter(t){this.processFrameIrqClear(t),this.apuCycleParity=this.apuCycleParity+t&1,this._advanceFrameSteps(t)}_advanceFrameSteps(t){this.frameCycleCounter+=t;let e=this.countSequence===0?Ks:Qs,i=this.countSequence===0?$s:tr;for(;;)if(this.frameStep=e[this.frameStep])this.fireFrameStep(this.frameStep),this.frameStep++;else if(this.frameStep>=e.length&&this.frameCycleCounter>=i)this.frameStep=0,this.frameCycleCounter-=i,this.countSequence===0&&(this.frameIrqActive=this.frameIrqEnabled,this.frameIrqClearPending=!1);else break}accSample(t){this.triangle.sampleCondition&&(this.triValue=Math.floor((this.triangle.progTimerCount<<4)/(this.triangle.progTimerMax+1)),this.triValue>16&&(this.triValue=16),this.triangle.triangleCounter>=16&&(this.triValue=16-this.triValue),this.triValue+=this.triangle.sampleValue),t===2?(this.smpTriangle+=this.triValue<<1,this.smpDmc+=this.dmc.sample<<1,this.smpSquare1+=this.square1.sampleValue<<1,this.smpSquare2+=this.square2.sampleValue<<1,this.accCount+=2):t===4?(this.smpTriangle+=this.triValue<<2,this.smpDmc+=this.dmc.sample<<2,this.smpSquare1+=this.square1.sampleValue<<2,this.smpSquare2+=this.square2.sampleValue<<2,this.accCount+=4):(this.smpTriangle+=t*this.triValue,this.smpDmc+=t*this.dmc.sample,this.smpSquare1+=t*this.square1.sampleValue,this.smpSquare2+=t*this.square2.sampleValue,this.accCount+=t)}fireFrameStep(t){if(this.countSequence===0)switch(t){case 0:this.clockQuarterFrame();break;case 1:this.clockQuarterFrame(),this.clockHalfFrame();break;case 2:this.clockQuarterFrame();break;case 3:this.frameIrqActive=!0,this.frameIrqClearPending=!1;break;case 4:this.clockQuarterFrame(),this.clockHalfFrame(),this.frameIrqActive=!0,this.frameIrqClearPending=!1;break}else switch(t){case 0:this.clockQuarterFrame();break;case 1:this.clockQuarterFrame(),this.clockHalfFrame();break;case 2:this.clockQuarterFrame();break;case 3:break;case 4:this.clockQuarterFrame(),this.clockHalfFrame();break}}clockQuarterFrame(){this.square1.clockEnvDecay(),this.square2.clockEnvDecay(),this.noise.clockEnvDecay(),this.triangle.clockLinearCounter()}clockHalfFrame(){this.triangle.clockLengthCounter(),this.square1.clockLengthCounter(),this.square2.clockLengthCounter(),this.noise.clockLengthCounter(),this.square1.clockSweep(),this.square2.clockSweep()}sample(){let t,e;this.accCount>0?(this.smpSquare1<<=4,this.smpSquare1=Math.floor(this.smpSquare1/this.accCount),this.smpSquare2<<=4,this.smpSquare2=Math.floor(this.smpSquare2/this.accCount),this.smpTriangle=Math.floor(this.smpTriangle/this.accCount),this.smpDmc<<=4,this.smpDmc=Math.floor(this.smpDmc/this.accCount),this.accCount=0):(this.smpSquare1=this.square1.sampleValue<<4,this.smpSquare2=this.square2.sampleValue<<4,this.smpTriangle=this.triangle.sampleValue,this.smpDmc=this.dmc.sample<<4);let i=Math.floor((this.noise.accValue<<4)/this.noise.accCount);this.noise.accValue=i>>4,this.noise.accCount=1,t=this.smpSquare1*this.stereoPosLSquare1+this.smpSquare2*this.stereoPosLSquare2>>8,e=3*this.smpTriangle*this.stereoPosLTriangle+(i<<1)*this.stereoPosLNoise+this.smpDmc*this.stereoPosLDMC>>8,t>=this.square_table.length&&(t=this.square_table.length-1),e>=this.tnd_table.length&&(e=this.tnd_table.length-1);let s=this.square_table[t]+this.tnd_table[e]-this.dcValue;t=this.smpSquare1*this.stereoPosRSquare1+this.smpSquare2*this.stereoPosRSquare2>>8,e=3*this.smpTriangle*this.stereoPosRTriangle+(i<<1)*this.stereoPosRNoise+this.smpDmc*this.stereoPosRDMC>>8,t>=this.square_table.length&&(t=this.square_table.length-1),e>=this.tnd_table.length&&(e=this.tnd_table.length-1);let r=this.square_table[t]+this.tnd_table[e]-this.dcValue,a=s-this.prevSampleL;this.prevSampleL+=a,this.smpAccumL+=a-(this.smpAccumL>>10),s=this.smpAccumL;let n=r-this.prevSampleR;this.prevSampleR+=n,this.smpAccumR+=n-(this.smpAccumR>>10),r=this.smpAccumR,s>this.maxSample&&(this.maxSample=s),s>3]}getDmcFrequency(t){return t>=0&&t<16?this.dmcFreqLookup[t]:0}getNoiseWaveLength(t){return t>=0&&t<16?this.noiseWavelengthLookup[t]:0}setFrameRate(t){this.sampleTimerMax=Math.floor(1024*ai*t/(this.sampleRate*60))}setPanning(t){for(let e=0;e<5;e++)this.panning[e]=t[e];this.updateStereoPos()}setMasterVolume(t){t<0&&(t=0),t>256&&(t=256),this.masterVolume=t,this.updateStereoPos()}updateStereoPos(){this.stereoPosLSquare1=this.panning[0]*this.masterVolume>>8,this.stereoPosLSquare2=this.panning[1]*this.masterVolume>>8,this.stereoPosLTriangle=this.panning[2]*this.masterVolume>>8,this.stereoPosLNoise=this.panning[3]*this.masterVolume>>8,this.stereoPosLDMC=this.panning[4]*this.masterVolume>>8,this.stereoPosRSquare1=this.masterVolume-this.stereoPosLSquare1,this.stereoPosRSquare2=this.masterVolume-this.stereoPosLSquare2,this.stereoPosRTriangle=this.masterVolume-this.stereoPosLTriangle,this.stereoPosRNoise=this.masterVolume-this.stereoPosLNoise,this.stereoPosRDMC=this.masterVolume-this.stereoPosLDMC}initLengthLookup(){this.lengthLookup=[10,254,20,2,40,4,80,6,160,8,60,10,14,12,26,14,12,16,24,18,48,20,96,22,192,24,72,26,16,28,32,30]}initDmcFrequencyLookup(){this.dmcFreqLookup=new Array(16),this.dmcFreqLookup[0]=3424,this.dmcFreqLookup[1]=3040,this.dmcFreqLookup[2]=2720,this.dmcFreqLookup[3]=2560,this.dmcFreqLookup[4]=2288,this.dmcFreqLookup[5]=2032,this.dmcFreqLookup[6]=1808,this.dmcFreqLookup[7]=1712,this.dmcFreqLookup[8]=1520,this.dmcFreqLookup[9]=1280,this.dmcFreqLookup[10]=1136,this.dmcFreqLookup[11]=1024,this.dmcFreqLookup[12]=848,this.dmcFreqLookup[13]=672,this.dmcFreqLookup[14]=576,this.dmcFreqLookup[15]=432}initNoiseWavelengthLookup(){this.noiseWavelengthLookup=new Array(16),this.noiseWavelengthLookup[0]=4,this.noiseWavelengthLookup[1]=8,this.noiseWavelengthLookup[2]=16,this.noiseWavelengthLookup[3]=32,this.noiseWavelengthLookup[4]=64,this.noiseWavelengthLookup[5]=96,this.noiseWavelengthLookup[6]=128,this.noiseWavelengthLookup[7]=160,this.noiseWavelengthLookup[8]=202,this.noiseWavelengthLookup[9]=254,this.noiseWavelengthLookup[10]=380,this.noiseWavelengthLookup[11]=508,this.noiseWavelengthLookup[12]=762,this.noiseWavelengthLookup[13]=1016,this.noiseWavelengthLookup[14]=2034,this.noiseWavelengthLookup[15]=4068}initDACtables(){let t,e,i,s=0,r=0;for(this.square_table=new Float32Array(512),this.tnd_table=new Float32Array(3264),i=0;i<512;i++)t=95.52/(8128/(i/16)+100),t*=.98411,t*=5e4,e=Math.floor(t),this.square_table[i]=e,e>s&&(s=e);for(i=0;i<3264;i++)t=163.67/(24329/(i/16)+100),t*=.98411,t*=5e4,e=Math.floor(t),this.tnd_table[i]=e,e>r&&(r=e);this.dacRange=s+r,this.dcValue=this.dacRange/2}toJSON(){let t=w(this);return t.dmc=this.dmc.toJSON(),t.noise=this.noise.toJSON(),t.square1=this.square1.toJSON(),t.square2=this.square2.toJSON(),t.triangle=this.triangle.toJSON(),t}fromJSON(t){V(this,t),this.dmc.fromJSON(t.dmc),this.noise.fromJSON(t.noise),this.square1.fromJSON(t.square1),this.square2.fromJSON(t.square2),this.triangle.fromJSON(t.triangle)}};c(Pt,"JSON_PROPERTIES",["channelEnableValue","sampleRate","frameIrqEnabled","frameIrqActive","frameIrqClearPending","apuCycleParity","startedPlaying","recordOutput","frameCycleCounter","frameStep","countSequence","sampleTimer","sampleTimerMax","sampleCount","triValue","smpSquare1","smpSquare2","smpTriangle","smpDmc","accCount","prevSampleL","prevSampleR","smpAccumL","smpAccumR","masterVolume","stereoPosLSquare1","stereoPosLSquare2","stereoPosLTriangle","stereoPosLNoise","stereoPosLDMC","stereoPosRSquare1","stereoPosRSquare2","stereoPosRTriangle","stereoPosRNoise","stereoPosRDMC","extraCycles","maxSample","minSample","panning"]);be=Pt});function er(u){return oi.indexOf(u)}function ir(u){return oi[u]}function Ce(u,t){let e=u.toString(16);return"0000".substring(0,t-e.length)+e}var oi,_e,li,ci=S(()=>{oi="APZLGITYEOXUKSVN";_e=class{constructor(){this.patches=[],this.enabled=!0,this.onChange=null}setEnabled(t){this.enabled=t,this.onChange&&this.onChange()}addCode(t){let e=this.decode(t);if(!e)throw new Error(`Invalid Game Genie code: ${t}`);this.patches.push(e),this.onChange&&this.onChange()}addPatch(t,e,i){this.patches.push({addr:t,value:e,key:i}),this.onChange&&this.onChange()}removeAllCodes(){this.patches=[],this.onChange&&this.onChange()}applyCodes(t,e){if(!this.enabled)return e;for(let i=0;i>3);return{value:i,addr:s,wantskey:a,key:r}}encodeHex(t,e,i,s){let r=Ce(t,4)+":"+Ce(e,2);return(i!==void 0||s)&&(r+="?"),i!==void 0&&(r+=Ce(i,2)),r}decodeHex(t){let e=t.match(/([0-9a-fA-F]+):([0-9a-fA-F]+)(\?[0-9a-fA-F]*)?/);if(!e)return null;let i=parseInt(e[1],16),s=parseInt(e[2],16),r=e[3]!==void 0,a=e[3]!==void 0&&e[3].length>1?parseInt(e[3].substring(1),16):void 0;return{value:s,addr:i,wantskey:r,key:a}}encode(t,e,i,s){let r=Array(6);return r[0]=(e&7)+(e>>4&8),r[1]=(e>>4&7)+(t>>4&8),r[2]=t>>4&7,r[3]=(t>>12)+(t&8),r[4]=(t&7)+(t>>8&8),r[5]=t>>8&7,i===void 0?(r[5]+=e&8,s&&(r[2]+=8)):(r[2]+=8,r[5]+=i&8,r[6]=(i&7)+(i>>4&8),r[7]=(i>>4&7)+(e&8)),r.map(ir).join("")}},li=_e});var Vt,C,O=S(()=>{H();Vt=class{constructor(t){this.nes=t,this.joy1StrobeState=0,this.joy2StrobeState=0,this.joypadLastWrite=0,this.joypadOutputBit0=0,this.joypadLastWriteCycle=-2,this.zapperFired=!1,this.zapperX=null,this.zapperY=null,this.bgTileOverride=!1}write(t,e){t<8192?this.nes.cpu.mem[t&2047]=e:t>=32768||(t>=24576?(this.nes.cpu.mem[t]=e,this.nes.opts.onBatteryRamWrite(t,e)):t>16407?this.nes.cpu.mem[t]=e:t>8199&&t<16384?this.regWrite(8192+(t&7),e):this.regWrite(t,e))}writelow(t,e){t<8192?this.nes.cpu.mem[t&2047]=e:t>=32768||(t>16407?this.nes.cpu.mem[t]=e:t>8199&&t<16384?this.regWrite(8192+(t&7),e):this.regWrite(t,e))}load(t){return t&=65535,t>16407?t<24576?this.nes.cpu.dataBus:this.nes.cpu.mem[t]:t>=8192?this.regLoad(t):this.nes.cpu.mem[t&2047]}regLoad(t){switch(t>>12){case 0:break;case 1:break;case 2:case 3:switch(t&7){case 0:return this.nes.ppu.openBusLatch;case 1:return this.nes.ppu.openBusLatch;case 2:return this.nes.ppu.readStatusRegister();case 3:return this.nes.ppu.openBusLatch;case 4:return this.nes.ppu.sramLoad();case 5:return this.nes.ppu.openBusLatch;case 6:return this.nes.ppu.openBusLatch;case 7:return this.nes.ppu.vramLoad()}break;case 4:switch(t-16405){case 0:return this.nes.papu.readReg(t);case 1:return this.joy1Read()&31|this.nes.cpu.dataBus&224;case 2:{let i=0;return this.zapperX!==null&&this.zapperY!==null&&(this.nes.ppu.isPixelWhite(this.zapperX,this.zapperY)||(i=8)),this.zapperFired&&(i|=16),(this.joy2Read()|i)&31|this.nes.cpu.dataBus&224}}break}let e=this.nes.cpu;if(e._dmcFetchCycles>0&&e._dmcFetchCycles===e.instrBusCycles+1){let i=this.nes.papu.dmc;if(i&&i.isEnabled)return i.lastFetchedByte}return e.dataBus}regWrite(t,e){switch(t>=8192&&t<=16383&&(this.nes.ppu.openBusLatch=e,this.nes.ppu.openBusDecayFrames=36),t){case 8192:this.nes.cpu.mem[t]=e,this.nes.ppu.updateControlReg1(e);break;case 8193:this.nes.cpu.mem[t]=e,this.nes.ppu.updateControlReg2(e);break;case 8195:this.nes.ppu.writeSRAMAddress(e);break;case 8196:this.nes.ppu.sramWrite(e);break;case 8197:this.nes.ppu.scrollWrite(e);break;case 8198:this.nes.ppu.writeVRAMAddress(e);break;case 8199:this.nes.ppu.vramWrite(e);break;case 16404:this.nes.ppu.sramDMA(e);break;case 16405:this.nes.papu.writeReg(t,e);break;case 16406:{let i=this.nes.cpu,s=i._cpuCycleBase+i.instrBusCycles;if(s-this.joypadLastWriteCycle>1){let r=this.joypadLastWrite&1;r!==this.joypadOutputBit0&&(this.joypadOutputBit0===1&&r===0&&(this.joy1StrobeState=0,this.joy2StrobeState=0),this.joypadOutputBit0=r)}if(this.joypadLastWrite=e,this.joypadLastWriteCycle=s,s%2===1){let r=e&1;this.joypadOutputBit0===1&&r===0&&(this.joy1StrobeState=0,this.joy2StrobeState=0),this.joypadOutputBit0=r}break}case 16407:this.nes.papu.writeReg(t,e);break;default:t>=16384&&t<=16407&&this.nes.papu.writeReg(t,e)}}_syncJoypadOutput(){let t=this.joypadLastWrite&1;t!==this.joypadOutputBit0&&(this.joypadOutputBit0===1&&t===0&&(this.joy1StrobeState=0,this.joy2StrobeState=0),this.joypadOutputBit0=t)}joy1Read(){if(this._syncJoypadOutput(),this.joypadOutputBit0)return this.nes.controllers[1].state[0];let t;return this.joy1StrobeState<8?t=this.nes.controllers[1].state[this.joy1StrobeState]:t=1,this.joy1StrobeState++,this.joy1StrobeState===24&&(this.joy1StrobeState=0),t}joy2Read(){if(this._syncJoypadOutput(),this.joypadOutputBit0)return this.nes.controllers[2].state[0];let t;return this.joy2StrobeState<8?t=this.nes.controllers[2].state[this.joy2StrobeState]:t=1,this.joy2StrobeState++,this.joy2StrobeState===24&&(this.joy2StrobeState=0),t}loadROM(){if(!this.nes.rom.valid||this.nes.rom.romCount<1)throw new Error("NoMapper: Invalid ROM! Unable to load.");this.loadPRGROM(),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}loadPRGROM(){this.nes.rom.romCount>1?(this.loadRomBank(0,32768),this.loadRomBank(1,49152)):(this.loadRomBank(0,32768),this.loadRomBank(0,49152))}loadCHRROM(){this.nes.rom.vromCount>0&&(this.nes.rom.vromCount===1?(this.loadVromBank(0,0),this.loadVromBank(0,4096)):(this.loadVromBank(0,0),this.loadVromBank(1,4096)))}loadBatteryRam(){if(this.nes.rom.batteryRam){let t=this.nes.rom.batteryRam;t!==null&&t.length===8192&&v(t,0,this.nes.cpu.mem,24576,8192)}}loadRomBank(t,e){t%=this.nes.rom.romCount,v(this.nes.rom.rom[t],0,this.nes.cpu.mem,e,16384)}loadVromBank(t,e){if(this.nes.rom.vromCount===0)return;this.nes.ppu.triggerRendering(),v(this.nes.rom.vrom[t%this.nes.rom.vromCount],0,this.nes.ppu.vramMem,e,4096);let i=this.nes.rom.vromTile[t%this.nes.rom.vromCount];v(i,0,this.nes.ppu.ptTile,e>>4,256)}load32kRomBank(t,e){this.loadRomBank(t*2%this.nes.rom.romCount,e),this.loadRomBank((t*2+1)%this.nes.rom.romCount,e+16384)}load8kVromBank(t,e){this.nes.rom.vromCount!==0&&(this.nes.ppu.triggerRendering(),this.loadVromBank(t%this.nes.rom.vromCount,e),this.loadVromBank((t+1)%this.nes.rom.vromCount,e+4096))}load1kVromBank(t,e){if(this.nes.rom.vromCount===0)return;this.nes.ppu.triggerRendering();let i=Math.floor(t/4)%this.nes.rom.vromCount,s=t%4*1024;v(this.nes.rom.vrom[i],s,this.nes.ppu.vramMem,e,1024);let r=this.nes.rom.vromTile[i],a=e>>4;for(let n=0;n<64;n++)this.nes.ppu.ptTile[a+n]=r[(t%4<<6)+n]}load2kVromBank(t,e){if(this.nes.rom.vromCount===0)return;this.nes.ppu.triggerRendering();let i=Math.floor(t/2)%this.nes.rom.vromCount,s=t%2*2048;v(this.nes.rom.vrom[i],s,this.nes.ppu.vramMem,e,2048);let r=this.nes.rom.vromTile[i],a=e>>4;for(let n=0;n<128;n++)this.nes.ppu.ptTile[a+n]=r[(t%2<<7)+n]}load8kRomBank(t,e){let i=Math.floor(t/2)%this.nes.rom.romCount,s=t%2*8192;v(this.nes.rom.rom[i],s,this.nes.cpu.mem,e,8192)}canWriteChr(t){return this.nes.rom.vromCount===0}clockIrqCounter(){}latchAccess(t){}onBgRender(){}onSpriteRender(){}getBgTileData(){return null}getSpritePatternTile(t){return this.nes.ppu.ptTile[t]}toJSON(){return{joy1StrobeState:this.joy1StrobeState,joy2StrobeState:this.joy2StrobeState,joypadLastWrite:this.joypadLastWrite,joypadOutputBit0:this.joypadOutputBit0,joypadLastWriteCycle:this.joypadLastWriteCycle}}fromJSON(t){var e;this.joy1StrobeState=t.joy1StrobeState,this.joy2StrobeState=t.joy2StrobeState,this.joypadLastWrite=t.joypadLastWrite,this.joypadOutputBit0=t.joypadOutputBit0||0,this.joypadLastWriteCycle=(e=t.joypadLastWriteCycle)!=null?e:-2}};c(Vt,"mapperName","NROM");C=Vt});var wt,mi,fi=S(()=>{O();wt=class extends C{constructor(t){super(t),this.regBuffer=0,this.regBufferCounter=0,this.mirroring=0,this.oneScreenMirroring=0,this.prgSwitchingArea=1,this.prgSwitchingSize=1,this.vromSwitchingSize=0,this.romSelectionReg0=0,this.romSelectionReg1=0,this.romBankSelect=0}write(t,e){if(t<32768){super.write(t,e);return}(e&128)!==0?(this.regBufferCounter=0,this.regBuffer=0,this.getRegNumber(t)===0&&(this.prgSwitchingArea=1,this.prgSwitchingSize=1)):(this.regBuffer=this.regBuffer&255-(1<>2&1,this.prgSwitchingSize=e>>3&1,this.vromSwitchingSize=e>>4&1;break;case 1:this.romSelectionReg0=e>>4&1,this.nes.rom.vromCount>0&&(this.vromSwitchingSize===0?this.romSelectionReg0===0?this.load8kVromBank(e&15,0):this.load8kVromBank(Math.floor(this.nes.rom.vromCount/2)+(e&15),0):this.romSelectionReg0===0?this.loadVromBank(e&15,0):this.loadVromBank(Math.floor(this.nes.rom.vromCount/2)+(e&15),0));break;case 2:this.romSelectionReg1=e>>4&1,this.nes.rom.vromCount>0&&this.vromSwitchingSize===1&&(this.romSelectionReg1===0?this.loadVromBank(e&15,4096):this.loadVromBank(Math.floor(this.nes.rom.vromCount/2)+(e&15),4096));break;default:{let s,r=0;this.nes.rom.romCount>=32?this.vromSwitchingSize===0?this.romSelectionReg0===1&&(r=16):r=(this.romSelectionReg0|this.romSelectionReg1<<1)<<3:this.nes.rom.romCount>=16&&this.romSelectionReg0===1&&(r=8),this.prgSwitchingSize===0?(s=r+(e&15),this.load32kRomBank(s,32768)):(s=r*2+(e&15),this.prgSwitchingArea===0?this.loadRomBank(s,49152):this.loadRomBank(s,32768))}}}getRegNumber(t){return t>=32768&&t<=40959?0:t>=40960&&t<=49151?1:t>=49152&&t<=57343?2:3}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC1: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}switchLowHighPrgRom(t){}switch16to32(){}switch32to16(){}toJSON(){let t=super.toJSON();return t.mirroring=this.mirroring,t.oneScreenMirroring=this.oneScreenMirroring,t.prgSwitchingArea=this.prgSwitchingArea,t.prgSwitchingSize=this.prgSwitchingSize,t.vromSwitchingSize=this.vromSwitchingSize,t.romSelectionReg0=this.romSelectionReg0,t.romSelectionReg1=this.romSelectionReg1,t.romBankSelect=this.romBankSelect,t.regBuffer=this.regBuffer,t.regBufferCounter=this.regBufferCounter,t}fromJSON(t){super.fromJSON(t),this.mirroring=t.mirroring,this.oneScreenMirroring=t.oneScreenMirroring,this.prgSwitchingArea=t.prgSwitchingArea,this.prgSwitchingSize=t.prgSwitchingSize,this.vromSwitchingSize=t.vromSwitchingSize,this.romSelectionReg0=t.romSelectionReg0,this.romSelectionReg1=t.romSelectionReg1,this.romBankSelect=t.romBankSelect,this.regBuffer=t.regBuffer,this.regBufferCounter=t.regBufferCounter}};c(wt,"mapperName","MMC1");mi=wt});var Gt,pi,ui=S(()=>{O();Gt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.loadRomBank(e,32768)}loadROM(){if(!this.nes.rom.valid)throw new Error("UNROM: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(Gt,"mapperName","UxROM");pi=Gt});var Dt,xi,di=S(()=>{O();Dt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load8kVromBank(e*2,0)}};c(Dt,"mapperName","CNROM");xi=Dt});var P,Se,Y,Lt=S(()=>{O();P=class P extends C{constructor(t){super(t),this.command=0,this.prgAddressSelect=0,this.chrAddressSelect=0,this.pageNumber=0,this.irqCounter=255,this.irqLatchValue=255,this.irqReload=0,this.irqEnable=0,this.prgAddressChanged=!1}write(t,e){if(t<32768){super.write(t,e);return}switch(t&57345){case 32768:{this.command=e&7;let i=e>>6&1;i!==this.prgAddressSelect&&(this.prgAddressChanged=!0),this.prgAddressSelect=i,this.chrAddressSelect=e>>7&1;break}case 32769:this.executeCommand(this.command,e);break;case 40960:(e&1)!==0?this.nes.ppu.setMirroring(this.nes.rom.HORIZONTAL_MIRRORING):this.nes.ppu.setMirroring(this.nes.rom.VERTICAL_MIRRORING);break;case 40961:break;case 49152:this.irqLatchValue=e;break;case 49153:this.irqReload=1;break;case 57344:this.irqEnable=0;break;case 57345:this.irqEnable=1;break}}executeCommand(t,e){switch(t){case P.CMD_SEL_2_1K_VROM_0000:this.chrAddressSelect===0?(this.load1kVromBank(e,0),this.load1kVromBank(e+1,1024)):(this.load1kVromBank(e,4096),this.load1kVromBank(e+1,5120));break;case P.CMD_SEL_2_1K_VROM_0800:this.chrAddressSelect===0?(this.load1kVromBank(e,2048),this.load1kVromBank(e+1,3072)):(this.load1kVromBank(e,6144),this.load1kVromBank(e+1,7168));break;case P.CMD_SEL_1K_VROM_1000:this.chrAddressSelect===0?this.load1kVromBank(e,4096):this.load1kVromBank(e,0);break;case P.CMD_SEL_1K_VROM_1400:this.chrAddressSelect===0?this.load1kVromBank(e,5120):this.load1kVromBank(e,1024);break;case P.CMD_SEL_1K_VROM_1800:this.chrAddressSelect===0?this.load1kVromBank(e,6144):this.load1kVromBank(e,2048);break;case P.CMD_SEL_1K_VROM_1C00:this.chrAddressSelect===0?this.load1kVromBank(e,7168):this.load1kVromBank(e,3072);break;case P.CMD_SEL_ROM_PAGE1:this.prgAddressChanged&&(this.prgAddressSelect===0?this.load8kRomBank((this.nes.rom.romCount-1)*2,49152):this.load8kRomBank((this.nes.rom.romCount-1)*2,32768),this.prgAddressChanged=!1),this.prgAddressSelect===0?this.load8kRomBank(e,32768):this.load8kRomBank(e,49152);break;case P.CMD_SEL_ROM_PAGE2:this.load8kRomBank(e,40960),this.prgAddressChanged&&(this.prgAddressSelect===0?this.load8kRomBank((this.nes.rom.romCount-1)*2,49152):this.load8kRomBank((this.nes.rom.romCount-1)*2,32768),this.prgAddressChanged=!1)}}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC3: Invalid ROM! Unable to load.");this.load8kRomBank((this.nes.rom.romCount-1)*2,49152),this.load8kRomBank((this.nes.rom.romCount-1)*2+1,57344),this.load8kRomBank(0,32768),this.load8kRomBank(1,40960),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}clockIrqCounter(){this.irqReload===1&&(this.irqCounter=this.irqLatchValue,this.irqReload=0),this.irqCounter--,this.irqCounter<0&&(this.irqEnable===1&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL),this.irqCounter=this.irqLatchValue)}toJSON(){let t=super.toJSON();return t.command=this.command,t.prgAddressSelect=this.prgAddressSelect,t.chrAddressSelect=this.chrAddressSelect,t.pageNumber=this.pageNumber,t.irqCounter=this.irqCounter,t.irqReload=this.irqReload,t.irqLatchValue=this.irqLatchValue,t.irqEnable=this.irqEnable,t.prgAddressChanged=this.prgAddressChanged,t}fromJSON(t){super.fromJSON(t),this.command=t.command,this.prgAddressSelect=t.prgAddressSelect,this.chrAddressSelect=t.chrAddressSelect,this.pageNumber=t.pageNumber,this.irqCounter=t.irqCounter,this.irqReload=t.irqReload||0,this.irqLatchValue=t.irqLatchValue,this.irqEnable=t.irqEnable,this.prgAddressChanged=t.prgAddressChanged}};c(P,"mapperName","MMC3"),c(P,"CMD_SEL_2_1K_VROM_0000",0),c(P,"CMD_SEL_2_1K_VROM_0800",1),c(P,"CMD_SEL_1K_VROM_1000",2),c(P,"CMD_SEL_1K_VROM_1400",3),c(P,"CMD_SEL_1K_VROM_1800",4),c(P,"CMD_SEL_1K_VROM_1C00",5),c(P,"CMD_SEL_ROM_PAGE1",6),c(P,"CMD_SEL_ROM_PAGE2",7);Se=P,Y=Se});var zt,Ri,gi=S(()=>{O();H();zt=class extends C{constructor(t){super(t),this.prgMode=3,this.prgBankReg=new Uint8Array(5),this.prgBankReg[4]=255,this.prgRam=new Uint8Array(65536),this.prgRamProtectA=3,this.prgRamProtectB=3,this.chrMode=3,this.chrBankA=new Uint16Array(8),this.chrBankB=new Uint16Array(4),this.chrUpperBits=0,this.lastChrWrite=0,this.ntMapping=new Uint8Array(4),this.exramMode=0,this.exram=new Uint8Array(1024),this.fillTile=0,this.fillAttr=0,this.irqTarget=0,this.irqEnabled=!1,this.irqPending=!1,this.inFrame=!1,this.irqCounter=0,this.multA=0,this.multB=0,this.splitEnabled=!1,this.splitRight=!1,this.splitTile=0,this.splitScroll=0,this.splitPage=0,this.pulse1=this._initPulse(),this.pulse2=this._initPulse(),this.pcmValue=0,this.pcmReadMode=!1,this.pcmIrqEnabled=!1,this.audioEnabled=0,this._chrBankTarget=-1}_initPulse(){return{enabled:!1,dutyCycle:0,lengthHalt:!1,constantVolume:!1,volume:0,timer:0,timerCounter:0,lengthCounter:0,envelopeCounter:0,envelopeDecay:15,envelopeStart:!1,sequencePos:0}}load(t){if(t&=65535,t<20480)return super.load(t);if(t===20501){let e=0;return this.pulse1.lengthCounter>0&&(e|=1),this.pulse2.lengthCounter>0&&(e|=2),e}if(t===20496)return 0;if(t>=20736&&t<=20740)return this.nes.cpu.dataBus;if(t===20741)return this.nes.cpu.dataBus;if(t===20996){let e=this.nes.ppu;e.scanline>=20&&e.scanline<=260&&(e.f_bgVisibility===1||e.f_spVisibility===1)||(this.inFrame=!1);let s=0;return this.irqPending&&(s|=128),this.inFrame&&(s|=64),this.irqPending=!1,s}if(t===20997)return this.multA*this.multB&255;if(t===20998)return this.multA*this.multB>>8&255;if(t>=23552&&t<=24575)return this.exramMode>=2?this.exram[t-23552]:this.nes.cpu.dataBus;if(t<24576)return this.nes.cpu.dataBus;if(t<32768){let i=(this.prgBankReg[0]&7)*8192+(t-24576);return this.prgRam[i&65535]}return this._readPrg(t)}_readPrg(t){let e,i,s,r,a;switch(this.prgMode){case 0:return i=this.prgBankReg[4],r=(i&124)>>2,this._readPrgRom32k(r,t-32768);case 1:return t<49152?(i=this.prgBankReg[2],s=(i&128)===0,s?(r=(i&6)>>1,this.prgRam[r*16384+(t-32768)]):(r=(i&126)>>1,this._readPrgRom16k(r,t-32768))):(i=this.prgBankReg[4],r=(i&126)>>1,this._readPrgRom16k(r,t-49152));case 2:return t<49152?(i=this.prgBankReg[2],s=(i&128)===0,s?(r=(i&6)>>1,this.prgRam[r*16384+(t-32768)]):(r=(i&126)>>1,this._readPrgRom16k(r,t-32768))):t<57344?(i=this.prgBankReg[3],s=(i&128)===0,s?(r=i&7,this.prgRam[r*8192+(t-49152)]):(r=i&127,this._readPrgRom8k(r,t-49152))):(i=this.prgBankReg[4],r=i&127,this._readPrgRom8k(r,t-57344));default:return t<40960?e=1:t<49152?e=2:t<57344?e=3:e=4,i=this.prgBankReg[e],a=e===1?32768:e===2?40960:e===3?49152:57344,e<4&&(i&128)===0?(r=i&7,this.prgRam[r*8192+(t-a)]):(r=i&127,this._readPrgRom8k(r,t-a))}}_readPrgRom32k(t,e){let i=(t*2+Math.floor(e/16384))%this.nes.rom.romCount,s=e%16384;return this.nes.rom.rom[i][s]}_readPrgRom16k(t,e){return t%=this.nes.rom.romCount,this.nes.rom.rom[t][e]}_readPrgRom8k(t,e){let i=Math.floor(t/2)%this.nes.rom.romCount,s=t%2*8192+e;return i=20480&&t<=20483){this._writePulse(this.pulse1,t-20480,e);return}if(t>=20484&&t<=20487){this._writePulse(this.pulse2,t-20484,e);return}if(t===20496){this.pcmReadMode=(e&1)!==0,this.pcmIrqEnabled=(e&128)!==0;return}if(t===20497){!this.pcmReadMode&&e!==0&&(this.pcmValue=e);return}if(t===20501){this.audioEnabled=e&3,this.pulse1.enabled=(e&1)!==0,this.pulse2.enabled=(e&2)!==0,this.pulse1.enabled||(this.pulse1.lengthCounter=0),this.pulse2.enabled||(this.pulse2.lengthCounter=0);return}if(t===20736){this.prgMode=e&3,this._syncPrg();return}if(t===20737){this.chrMode=e&3,this._syncChr();return}if(t===20738){this.prgRamProtectA=e&3;return}if(t===20739){this.prgRamProtectB=e&3;return}if(t===20740){this.exramMode=e&3,this.bgTileOverride=this.exramMode===1,this._syncNametables();return}if(t===20741){let i=e;this.ntMapping[0]=i&3,i>>=2,this.ntMapping[1]=i&3,i>>=2,this.ntMapping[2]=i&3,i>>=2,this.ntMapping[3]=i&3,this._syncNametables();return}if(t===20742){this.fillTile=e,this._syncNametables();return}if(t===20743){this.fillAttr=e&3,this._syncNametables();return}if(t===20755){this.prgBankReg[0]=e&7;return}if(t>=20756&&t<=20759){let i=t-20755;this.prgBankReg[i]=e,this._syncPrg();return}if(t>=20768&&t<=20775){let i=t-20768;this.chrBankA[i]=this.chrUpperBits<<8|e,this.lastChrWrite=0,this._syncChr();return}if(t>=20776&&t<=20779){let i=t-20776;this.chrBankB[i]=this.chrUpperBits<<8|e,this.lastChrWrite=1,this._syncChr();return}if(t===20784){this.chrUpperBits=e&3;return}if(t===20992){this.splitEnabled=(e&128)!==0,this.splitRight=(e&64)!==0,this.splitTile=e&31;return}if(t===20993){this.splitScroll=e;return}if(t===20994){this.splitPage=e&63;return}if(t===20995){this.irqTarget=e;return}if(t===20996){this.irqEnabled=(e&128)!==0,this.irqEnabled&&this.irqPending&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL);return}if(t===20997){this.multA=e;return}if(t===20998){this.multB=e;return}if(t>=23552&&t<=24575){let i=t-23552;this.exramMode===0||this.exramMode===1?(this.exram[i]=this.inFrame?e:0,this._syncExramToVram(i)):this.exramMode===2&&(this.exram[i]=e);return}if(t>=24576&&t<=32767){if(this.prgRamProtectA===2&&this.prgRamProtectB===1){let s=(this.prgBankReg[0]&7)*8192+(t-24576);this.prgRam[s&65535]=e,this.nes.cpu.mem[t]=e,this.nes.opts.onBatteryRamWrite(t,e)}return}if(t>=32768){this._writePrg(t,e);return}}_writePrg(t,e){let i,s,r,a,n;switch(this.prgMode){case 0:return;case 1:t<49152&&(s=this.prgBankReg[2],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=(s&6)>>1,this.prgRam[a*16384+(t-32768)]=e));return;case 2:t<49152?(s=this.prgBankReg[2],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=(s&6)>>1,this.prgRam[a*16384+(t-32768)]=e)):t<57344&&(s=this.prgBankReg[3],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=s&7,this.prgRam[a*8192+(t-49152)]=e));return;default:if(t<40960)i=1,n=32768;else if(t<49152)i=2,n=40960;else if(t<57344)i=3,n=49152;else return;s=this.prgBankReg[i],r=(s&128)===0,r&&this._isPrgRamWritable()&&(a=s&7,this.prgRam[a*8192+(t-n)]=e);return}}_isPrgRamWritable(){return this.prgRamProtectA===2&&this.prgRamProtectB===1}_syncPrg(){switch(this.prgMode){case 0:{let e=(this.prgBankReg[4]&124)>>2;this.load32kRomBank(e,32768);break}case 1:{let t=this.prgBankReg[2];if(t&128){let s=(t&126)>>1;this.loadRomBank(s%this.nes.rom.romCount,32768)}let i=(this.prgBankReg[4]&126)>>1;this.loadRomBank(i%this.nes.rom.romCount,49152);break}case 2:{let t=this.prgBankReg[2];if(t&128){let s=(t&126)>>1;this.loadRomBank(s%this.nes.rom.romCount,32768)}let e=this.prgBankReg[3];e&128&&this.load8kRomBank(e&127,49152);let i=this.prgBankReg[4];this.load8kRomBank(i&127,57344);break}default:{for(let t=1;t<=4;t++){let e=this.prgBankReg[t],i=24576+t*8192;(t===4||e&128)&&this.load8kRomBank(e&127,i)}break}}}_syncChr(){this.nes.ppu.triggerRendering(),this._chrBankTarget=-1,this.nes.ppu.f_spriteSize===0&&(this._applyChrSetA(),this._chrBankTarget=0)}_applyChrSetA(){if(this.nes.rom.vromCount!==0)switch(this.chrMode){case 0:this.load8kVromBank((this.chrBankA[7]&255)*2,0);break;case 1:this.loadVromBank(this.chrBankA[3]&255,0),this.loadVromBank(this.chrBankA[7]&255,4096);break;case 2:this.load2kVromBank(this.chrBankA[1]&511,0),this.load2kVromBank(this.chrBankA[3]&511,2048),this.load2kVromBank(this.chrBankA[5]&511,4096),this.load2kVromBank(this.chrBankA[7]&511,6144);break;default:for(let t=0;t<8;t++)this.load1kVromBank(this.chrBankA[t]&1023,t*1024);break}}_applyChrSetB(){if(this.nes.rom.vromCount!==0)switch(this.chrMode){case 0:this.load8kVromBank((this.chrBankB[3]&255)*2,0);break;case 1:this.loadVromBank(this.chrBankB[3]&255,0),this.loadVromBank(this.chrBankB[3]&255,4096);break;case 2:this.load2kVromBank(this.chrBankB[1]&511,0),this.load2kVromBank(this.chrBankB[3]&511,2048),this.load2kVromBank(this.chrBankB[1]&511,4096),this.load2kVromBank(this.chrBankB[3]&511,6144);break;default:for(let t=0;t<4;t++)this.load1kVromBank(this.chrBankB[t]&1023,t*1024),this.load1kVromBank(this.chrBankB[t]&1023,(t+4)*1024);break}}_syncNametables(){let t=this.nes.ppu,e=this.fillAttr|this.fillAttr<<2|this.fillAttr<<4|this.fillAttr<<6;for(let s=0;s<960;s++)t.vramMem[11264+s]=this.fillTile;for(let s=960;s<1024;s++)t.vramMem[11264+s]=e;if(this.exramMode>=2)for(let s=0;s<1024;s++)t.vramMem[10240+s]=0;else v(this.exram,0,t.vramMem,10240,1024);let i=[8192,9216,10240,11264];for(let s=0;s<4;s++){let r=8192+s*1024,a=i[this.ntMapping[s]];t.defineMirrorRegion(r,a,1024)}t.defineMirrorRegion(12288,8192,3840);for(let s=0;s<4;s++)t.ntable1[s]=this.ntMapping[s];this._populateNameTable(2,10240),this._populateNameTable(3,11264)}_populateNameTable(t,e){let i=this.nes.ppu,s=i.nameTable[t];for(let r=0;r<960;r++)s.tile[r]=i.vramMem[e+r];for(let r=0;r<64;r++)s.writeAttrib(r,i.vramMem[e+960+r])}_syncExramToVram(t){if(this.exramMode<2){let e=this.nes.ppu;e.vramMem[10240+t]=this.exram[t],t<960?e.nameTable[2].tile[t]=this.exram[t]:t<1024&&e.nameTable[2].writeAttrib(t-960,this.exram[t])}}_writePulse(t,e,i){switch(e){case 0:t.dutyCycle=i>>6&3,t.lengthHalt=(i&32)!==0,t.constantVolume=(i&16)!==0,t.volume=i&15;break;case 1:break;case 2:t.timer=t.timer&1792|i;break;case 3:t.timer=t.timer&255|(i&7)<<8,t.enabled&&(t.lengthCounter=this.nes.papu.getLengthMax(i)),t.envelopeStart=!0,t.sequencePos=0;break}}clockIrqCounter(){if(this.nes.ppu.scanline===20){this.inFrame=!0,this.irqCounter=0;return}this.irqCounter++,this.irqTarget!==0&&this.irqCounter===this.irqTarget&&(this.irqPending=!0,this.irqEnabled&&this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NORMAL)),(this.irqCounter&3)===0&&(this._clockPulseLengthCounter(this.pulse1),this._clockPulseLengthCounter(this.pulse2))}_clockPulseLengthCounter(t){t.enabled&&!t.lengthHalt&&t.lengthCounter>0&&t.lengthCounter--}onBgRender(){this.nes.ppu.f_spriteSize===1&&this._chrBankTarget!==1&&(this._applyChrSetB(),this._chrBankTarget=1,this.nes.ppu.validTileData=!1)}onSpriteRender(){this.nes.ppu.f_spriteSize===1&&this._chrBankTarget!==0&&(this._applyChrSetA(),this._chrBankTarget=0)}getSpritePatternTile(t){if(this.nes.ppu.f_spriteSize!==1||this.nes.rom.vromCount===0)return this.nes.ppu.ptTile[t];let e=this.nes.rom.vromCount,i=this.nes.rom.vromTile;switch(this.chrMode){case 0:{let s=(this.chrBankA[7]&255)*2,r=t>=256?1:0,a=(s+r)%e;return i[a][t-r*256]}case 1:{let s;return t<256?s=(this.chrBankA[3]&255)%e:s=(this.chrBankA[7]&255)%e,i[s][t%256]}case 2:{let s=[1,3,5,7],r=t>>7,a=t&127,n=this.chrBankA[s[r]]&511,l=Math.floor(n/2)%e;return i[l][(n%2<<7)+a]}default:{let s=t>>6,r=t&63,a=this.chrBankA[s]&1023,n=Math.floor(a/4)%e;return i[n][(a%4<<6)+r]}}}getBgTileData(t,e,i,s){if(this.exramMode!==1||this.nes.rom.vromCount===0)return null;let r=s*32+i,a=this.exram[r],l=(a&63|this.chrUpperBits<<6)%this.nes.rom.vromCount,o=this.nes.rom.vromTile[l][e];if(!o)return null;let p=(a>>6&3)<<2;return{tile:o,attrib:p}}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC5: Invalid ROM! Unable to load.");this.prgBankReg[4]=255,this._syncPrg(),this.loadCHRROM(),this.loadBatteryRam(),this._syncNametables(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}toJSON(){let t=super.toJSON();return t.prgMode=this.prgMode,t.prgBankReg=Array.from(this.prgBankReg),t.prgRam=Array.from(this.prgRam),t.prgRamProtectA=this.prgRamProtectA,t.prgRamProtectB=this.prgRamProtectB,t.chrMode=this.chrMode,t.chrBankA=Array.from(this.chrBankA),t.chrBankB=Array.from(this.chrBankB),t.chrUpperBits=this.chrUpperBits,t.lastChrWrite=this.lastChrWrite,t.ntMapping=Array.from(this.ntMapping),t.exramMode=this.exramMode,t.exram=Array.from(this.exram),t.fillTile=this.fillTile,t.fillAttr=this.fillAttr,t.irqTarget=this.irqTarget,t.irqEnabled=this.irqEnabled,t.irqPending=this.irqPending,t.inFrame=this.inFrame,t.irqCounter=this.irqCounter,t.multA=this.multA,t.multB=this.multB,t.splitEnabled=this.splitEnabled,t.splitRight=this.splitRight,t.splitTile=this.splitTile,t.splitScroll=this.splitScroll,t.splitPage=this.splitPage,t.pcmValue=this.pcmValue,t.pcmReadMode=this.pcmReadMode,t.pcmIrqEnabled=this.pcmIrqEnabled,t.audioEnabled=this.audioEnabled,t.pulse1=Object.assign({},this.pulse1),t.pulse2=Object.assign({},this.pulse2),t}fromJSON(t){super.fromJSON(t),this.prgMode=t.prgMode,this.prgBankReg=new Uint8Array(t.prgBankReg),this.prgRam=new Uint8Array(t.prgRam),this.prgRamProtectA=t.prgRamProtectA,this.prgRamProtectB=t.prgRamProtectB,this.chrMode=t.chrMode,this.chrBankA=new Uint16Array(t.chrBankA),this.chrBankB=new Uint16Array(t.chrBankB),this.chrUpperBits=t.chrUpperBits,this.lastChrWrite=t.lastChrWrite,this.ntMapping=new Uint8Array(t.ntMapping),this.exramMode=t.exramMode,this.exram=new Uint8Array(t.exram),this.fillTile=t.fillTile,this.fillAttr=t.fillAttr,this.irqTarget=t.irqTarget,this.irqEnabled=t.irqEnabled,this.irqPending=t.irqPending,this.inFrame=t.inFrame,this.irqCounter=t.irqCounter,this.multA=t.multA,this.multB=t.multB,this.splitEnabled=t.splitEnabled,this.splitRight=t.splitRight,this.splitTile=t.splitTile,this.splitScroll=t.splitScroll,this.splitPage=t.splitPage,this.pcmValue=t.pcmValue,this.pcmReadMode=t.pcmReadMode,this.pcmIrqEnabled=t.pcmIrqEnabled,this.audioEnabled=t.audioEnabled,t.pulse1&&(this.pulse1=Object.assign(this._initPulse(),t.pulse1)),t.pulse2&&(this.pulse2=Object.assign(this._initPulse(),t.pulse2)),this._syncPrg(),this._syncChr(),this._syncNametables()}};c(zt,"mapperName","MMC5");Ri=zt});var qt,bi,Ci=S(()=>{O();qt=class extends C{constructor(t){super(t)}write(t,e){t<32768?super.write(t,e):(this.load32kRomBank(e&7,32768),e&16?this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING2):this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING))}loadROM(){if(!this.nes.rom.valid)throw new Error("AOROM: Invalid ROM! Unable to load.");this.loadPRGROM(),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(qt,"mapperName","AxROM");bi=qt});var vt,_i,Si=S(()=>{O();vt=class extends C{constructor(t){super(t),this.prgBank=0,this.chrBankFD0=0,this.chrBankFE0=0,this.chrBankFD1=0,this.chrBankFE1=0,this.latch0=254,this.latch1=254}write(t,e){if(t<32768){super.write(t,e);return}switch(t&61440){case 40960:this.prgBank=e&15,this.load8kRomBank(this.prgBank,32768);break;case 45056:this.chrBankFD0=e&31,this._updateChr0();break;case 49152:this.chrBankFE0=e&31,this._updateChr0();break;case 53248:this.chrBankFD1=e&31,this._updateChr1();break;case 57344:this.chrBankFE1=e&31,this._updateChr1();break;case 61440:e&1?this.nes.ppu.setMirroring(this.nes.rom.HORIZONTAL_MIRRORING):this.nes.ppu.setMirroring(this.nes.rom.VERTICAL_MIRRORING);break}}_updateChr0(){let t=this.latch0===253?this.chrBankFD0:this.chrBankFE0;this.loadVromBank(t,0)}_updateChr1(){let t=this.latch1===253?this.chrBankFD1:this.chrBankFE1;this.loadVromBank(t,4096)}latchAccess(t){t===4056?this.latch0!==253&&(this.latch0=253,this._updateChr0()):t===4072?this.latch0!==254&&(this.latch0=254,this._updateChr0()):t>=8152&&t<=8159?this.latch1!==253&&(this.latch1=253,this._updateChr1()):t>=8168&&t<=8175&&this.latch1!==254&&(this.latch1=254,this._updateChr1())}loadROM(){if(!this.nes.rom.valid)throw new Error("MMC2: Invalid ROM! Unable to load.");this.load8kRomBank(0,32768);let t=(this.nes.rom.romCount-1)*2+1;this.load8kRomBank(t-2,40960),this.load8kRomBank(t-1,49152),this.load8kRomBank(t,57344),this.loadCHRROM(),this.loadBatteryRam(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}toJSON(){let t=super.toJSON();return t.prgBank=this.prgBank,t.chrBankFD0=this.chrBankFD0,t.chrBankFE0=this.chrBankFE0,t.chrBankFD1=this.chrBankFD1,t.chrBankFE1=this.chrBankFE1,t.latch0=this.latch0,t.latch1=this.latch1,t}fromJSON(t){super.fromJSON(t),this.prgBank=t.prgBank,this.chrBankFD0=t.chrBankFD0,this.chrBankFE0=t.chrBankFE0,this.chrBankFD1=t.chrBankFD1,this.chrBankFE1=t.chrBankFE1,this.latch0=t.latch0,this.latch1=t.latch1}};c(vt,"mapperName","MMC2");_i=vt});var Ut,yi,Ei=S(()=>{O();Ut=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else{let i=(e&15)*2%this.nes.rom.romCount,s=((e&15)*2+1)%this.nes.rom.romCount;if(this.loadRomBank(i,32768),this.loadRomBank(s,49152),this.nes.rom.vromCount>0){let r=(e>>4)*2%this.nes.rom.vromCount;this.loadVromBank(r,0),this.loadVromBank(r+1,4096)}}}};c(Ut,"mapperName","Color Dreams");yi=Ut});var Wt,Ti,Ai=S(()=>{O();Wt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load32kRomBank(e,32768)}};c(Wt,"mapperName","BNROM");Ti=Wt});var Ht,ki,Fi=S(()=>{O();Ht=class extends C{constructor(t){super(t)}write(t,e){if(t<28672||t>32767){super.write(t,e);return}else this.load32kRomBank(e&3,32768),this.load8kVromBank((e>>2&3)*2,0)}};c(Ht,"mapperName","PCI556");ki=Ht});var Yt,Bi,Ni=S(()=>{O();Yt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load32kRomBank(e>>4&3,32768),this.load8kVromBank((e&3)*2,0)}};c(Yt,"mapperName","GxROM");Bi=Yt});var Jt,Mi,Oi=S(()=>{O();Jt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}t>=36864&&t<40960?e&16?this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING2):this.nes.ppu.setMirroring(this.nes.rom.SINGLESCREEN_MIRRORING):t>=49152&&this.loadRomBank(e&15,32768)}loadROM(){if(!this.nes.rom.valid)throw new Error("Mapper 71: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(Jt,"mapperName","Camerica");Mi=Jt});var Xt,Ii,Pi=S(()=>{O();Xt=class extends C{constructor(t){super(t)}write(t,e){(t&57600)===16640&&(this.load32kRomBank(e>>3&1,32768),this.load8kVromBank((e&7)*2,0)),super.write(t,e)}};c(Xt,"mapperName","NINA-03/NINA-06");Ii=Xt});var jt,Vi,wi=S(()=>{O();jt=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.loadRomBank(e>>2,32768)}loadROM(){if(!this.nes.rom.valid)throw new Error("UN1ROM: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(this.nes.rom.romCount-1,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c(jt,"mapperName","UN1ROM");Vi=jt});var Zt,Gi,Di=S(()=>{Lt();Zt=class extends Y{constructor(t){super(t),this.chrRegs=[0,0,0,0,0,0]}write(t,e){t!==40960&&(super.write(t,e),t===32768&&this.updateNametableMirroring())}executeCommand(t,e){t<=5?(this.chrRegs[t]=e,super.executeCommand(t,e&127),this.updateNametableMirroring()):super.executeCommand(t,e)}updateNametableMirroring(){let t=this.nes.ppu;if(this.chrAddressSelect===0){let e=this.chrRegs[0]>>7&1,i=this.chrRegs[1]>>7&1;t.ntable1[0]=e,t.ntable1[1]=e,t.ntable1[2]=i,t.ntable1[3]=i}else t.ntable1[0]=this.chrRegs[2]>>7&1,t.ntable1[1]=this.chrRegs[3]>>7&1,t.ntable1[2]=this.chrRegs[4]>>7&1,t.ntable1[3]=this.chrRegs[5]>>7&1;for(let e=0;e<4;e++){let i=8192+e*1024,s=8192+t.ntable1[e]*1024;t.defineMirrorRegion(i,s,1024)}t.currentMirroring=-1}loadROM(){super.loadROM(),this.updateNametableMirroring()}toJSON(){let t=super.toJSON();return t.chrRegs=this.chrRegs.slice(),t}fromJSON(t){super.fromJSON(t),this.chrRegs=t.chrRegs,this.updateNametableMirroring()}};c(Zt,"mapperName","TxSROM");Gi=Zt});var Kt,Li,zi=S(()=>{Lt();Bt();H();Kt=class extends Y{constructor(t){super(t),this.chrRam=new Uint8Array(8192),this.chrRamTiles=new Array(8);for(let e=0;e<8;e++){this.chrRamTiles[e]=new Array(64);for(let i=0;i<64;i++)this.chrRamTiles[e][i]=new xt}this.chrRamSlots=[-1,-1,-1,-1,-1,-1,-1,-1]}executeCommand(t,e){switch(t){case Y.CMD_SEL_2_1K_VROM_0000:{let i=this.chrAddressSelect===0?0:4096;if(e&64){let s=e&6;this.load1kChrRamBank(s,i),this.load1kChrRamBank(s+1,i+1024)}else{let s=e&63;this.saveChrRamSlot(i),this.saveChrRamSlot(i+1024),this.chrRamSlots[i>>10]=-1,this.chrRamSlots[(i>>10)+1]=-1,this.load1kVromBank(s,i),this.load1kVromBank(s+1,i+1024)}break}case Y.CMD_SEL_2_1K_VROM_0800:{let i=this.chrAddressSelect===0?2048:6144;if(e&64){let s=e&6;this.load1kChrRamBank(s,i),this.load1kChrRamBank(s+1,i+1024)}else{let s=e&63;this.saveChrRamSlot(i),this.saveChrRamSlot(i+1024),this.chrRamSlots[i>>10]=-1,this.chrRamSlots[(i>>10)+1]=-1,this.load1kVromBank(s,i),this.load1kVromBank(s+1,i+1024)}break}case Y.CMD_SEL_1K_VROM_1000:{let i=this.chrAddressSelect===0?4096:0;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}case Y.CMD_SEL_1K_VROM_1400:{let i=this.chrAddressSelect===0?5120:1024;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}case Y.CMD_SEL_1K_VROM_1800:{let i=this.chrAddressSelect===0?6144:2048;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}case Y.CMD_SEL_1K_VROM_1C00:{let i=this.chrAddressSelect===0?7168:3072;e&64?this.load1kChrRamBank(e&7,i):(this.saveChrRamSlot(i),this.chrRamSlots[i>>10]=-1,this.load1kVromBank(e&63,i));break}default:super.executeCommand(t,e)}}saveChrRamSlot(t){let e=t>>10,i=this.chrRamSlots[e];i!==-1&&v(this.nes.ppu.vramMem,e<<10,this.chrRam,i*1024,1024)}load1kChrRamBank(t,e){this.nes.ppu.triggerRendering(),t&=7,this.saveChrRamSlot(e);let i=e>>10;this.chrRamSlots[i]=t;let s=t*1024;v(this.chrRam,s,this.nes.ppu.vramMem,e,1024),this.rebuildChrRamTiles(t);let r=e>>4;for(let a=0;a<64;a++)this.nes.ppu.ptTile[r+a]=this.chrRamTiles[t][a]}rebuildChrRamTiles(t){let e=t*1024;for(let i=0;i<1024;i++){let s=i>>4,r=i%16;r<8?this.chrRamTiles[t][s].setScanline(r,this.chrRam[e+i],this.chrRam[e+i+8]):this.chrRamTiles[t][s].setScanline(r-8,this.chrRam[e+i-8],this.chrRam[e+i])}}canWriteChr(t){return t>=8192?!1:this.chrRamSlots[t>>10]!==-1}toJSON(){for(let e=0;e<8;e++)this.saveChrRamSlot(e<<10);let t=super.toJSON();return t.chrRam=Array.from(this.chrRam),t.chrRamSlots=this.chrRamSlots.slice(),t}fromJSON(t){super.fromJSON(t),this.chrRam=new Uint8Array(t.chrRam),this.chrRamSlots=t.chrRamSlots;for(let e=0;e<8;e++)this.rebuildChrRamTiles(e);for(let e=0;e<8;e++){let i=this.chrRamSlots[e];if(i!==-1){let s=e<<10>>4;for(let r=0;r<64;r++)this.nes.ppu.ptTile[s+r]=this.chrRamTiles[i][r]}}}};c(Kt,"mapperName","TQROM");Li=Kt});var Qt,qi,vi=S(()=>{O();Qt=class extends C{constructor(t){super(t)}write(t,e){if(t<24576||t>32767){super.write(t,e);return}else this.load32kRomBank(e>>4&3,32768),this.load8kVromBank((e&15)*2,0)}};c(Qt,"mapperName","Jaleco JF-11/JF-14");qi=Qt});var $t,Ui,Wi=S(()=>{O();$t=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.loadRomBank(e,49152)}loadROM(){if(!this.nes.rom.valid)throw new Error("Mapper 180: Invalid ROM! Unable to load.");this.loadRomBank(0,32768),this.loadRomBank(0,49152),this.loadCHRROM(),this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET)}};c($t,"mapperName","UNROM (Crazy Climber)");Ui=$t});var te,Hi,Yi=S(()=>{O();te=class extends C{constructor(t){super(t)}write(t,e){if(t<16416||t>24575){super.write(t,e);return}else this.load32kRomBank(e>>4&3,32768),this.load8kVromBank((e&15)*2,0)}};c(te,"mapperName","Mapper 240");Hi=te});var ee,Ji,Xi=S(()=>{O();ee=class extends C{constructor(t){super(t)}write(t,e){if(t<32768){super.write(t,e);return}else this.load32kRomBank(e,32768)}};c(ee,"mapperName","BxROM (Mapper 241)");Ji=ee});var ye,ji=S(()=>{O();fi();ui();di();Lt();gi();Ci();Si();Ei();Ai();Fi();Ni();Oi();Pi();wi();Di();zi();vi();Wi();Yi();Xi();ye={0:C,1:mi,2:pi,3:xi,4:Y,5:Ri,7:bi,9:_i,11:yi,34:Ti,38:ki,66:Bi,71:Mi,79:Ii,94:Vi,118:Gi,119:Li,140:qi,180:Ui,240:Hi,241:Ji}});var Ee,Zi,Ki=S(()=>{ji();Bt();Ee=class u{constructor(t){c(this,"VERTICAL_MIRRORING",0);c(this,"HORIZONTAL_MIRRORING",1);c(this,"FOURSCREEN_MIRRORING",2);c(this,"SINGLESCREEN_MIRRORING",3);c(this,"SINGLESCREEN_MIRRORING2",4);c(this,"SINGLESCREEN_MIRRORING3",5);c(this,"SINGLESCREEN_MIRRORING4",6);c(this,"CHRROM_MIRRORING",7);this.nes=t,this.valid=!1}load(t){let e,i,s;t instanceof ArrayBuffer&&(t=new Uint8Array(t));let r=ArrayBuffer.isView(t);if(r){if(t.length<4||t[0]!==78||t[1]!==69||t[2]!==83||t[3]!==26)throw new Error("Not a valid NES ROM.")}else if(!t.startsWith("NES"))throw new Error("Not a valid NES ROM.");for(this.header=new Uint8Array(16),e=0;e<16;e++)this.header[e]=r?t[e]:t.charCodeAt(e)&255;this.mirroring=(this.header[6]&1)!==0?1:0,this.batteryRam=(this.header[6]&2)!==0,this.trainer=(this.header[6]&4)!==0,this.fourScreen=(this.header[6]&8)!==0,this.isNES2=(this.header[7]&12)===8,this.isNES2?this._loadNES2Header():this._loadINES1Header(),this.rom=new Array(this.romCount);let a=16+(this.trainer?512:0);for(e=0;e=t.length);i++)this.rom[e][i]=r?t[a+i]:t.charCodeAt(a+i)&255;a+=16384}for(this.vrom=new Array(this.vromCount),e=0;e=t.length);i++)this.vrom[e][i]=r?t[a+i]:t.charCodeAt(a+i)&255;a+=4096}for(this.vromTile=new Array(this.vromCount),e=0;e>4,l=e%16,l<8?this.vromTile[s][n].setScanline(l,this.vrom[s][e],this.vrom[s][e+8]):this.vromTile[s][n].setScanline(l-8,this.vrom[s][e-8],this.vrom[s][e]);this.valid=!0}_loadINES1Header(){this.romCount=this.header[4],this.vromCount=this.header[5]*2,this.mapperType=this.header[6]>>4|this.header[7]&240;let t=!1;for(let e=8;e<16;e++)if(this.header[e]!==0){t=!0;break}t&&(this.mapperType&=15),this.subMapper=0,this.prgRamSize=0,this.prgNvRamSize=0,this.chrRamSize=0,this.chrNvRamSize=0,this.timingMode=0,this.consoleType=0}_loadNES2Header(){this.mapperType=this.header[6]>>4|this.header[7]&240|(this.header[8]&15)<<8,this.subMapper=this.header[8]>>4&15;let t=this.header[9]&15;if(t===15){let i=this.header[4]>>2&63,s=this.header[4]&3;this.romCount=Math.ceil(Math.pow(2,i)*(s*2+1)/16384)}else this.romCount=t<<8|this.header[4];let e=this.header[9]>>4&15;if(e===15){let i=this.header[5]>>2&63,s=this.header[5]&3;this.vromCount=Math.ceil(Math.pow(2,i)*(s*2+1)/4096)}else this.vromCount=(e<<8|this.header[5])*2;this.prgRamSize=u._decodeRamSize(this.header[10]&15),this.prgNvRamSize=u._decodeRamSize(this.header[10]>>4&15),this.chrRamSize=u._decodeRamSize(this.header[11]&15),this.chrNvRamSize=u._decodeRamSize(this.header[11]>>4&15),this.timingMode=this.header[12]&3,this.consoleType=this.header[7]&3}static _decodeRamSize(t){return t===0?0:64<sr});var Te,sr,$i=S(()=>{Ye();Je();Qe();ni();ci();Ki();Te=class{constructor(t){c(this,"frame",t=>{if(this.crashed)throw new Error("Game has crashed. Call reset() or loadROM() to restart.");this.frameInProgress||(this.controllers[1].clock(),this.controllers[2].clock(),this.ppu.startFrame(),this.frameInProgress=!0);let e,i=this.cpu,s=this.ppu,r=this.papu;try{for(;;)if(i.cyclesToHalt===0){if(t&&t())return!0;if(e=i.emulate(),r.clockFrameCounter(e,i.apuCatchupCycles),i.apuCatchupCycles=0,s.frameEnded){s.frameEnded=!1;break}}else{let a=Math.min(i.cyclesToHalt,8);for(let n=0;n{this.controllers[t].buttonDown(e)});c(this,"buttonUp",(t,e)=>{this.controllers[t].buttonUp(e)});c(this,"zapperMove",(t,e)=>{this.mmap&&(this.mmap.zapperX=t,this.mmap.zapperY=e)});c(this,"zapperFireDown",()=>{this.mmap&&(this.mmap.zapperFired=!0)});c(this,"zapperFireUp",()=>{this.mmap&&(this.mmap.zapperFired=!1)});this.opts=Be({onFrame:function(){},onAudioSample:null,onStatusUpdate:function(){},onBatteryRamWrite:function(){},emulateSound:!0,sampleRate:48e3},t),this.ui={writeFrame:this.opts.onFrame,updateStatus:this.opts.onStatusUpdate},this.cpu=new ce(this),this.ppu=new de(this),this.papu=new be(this),this.gameGenie=new li,this.gameGenie.onChange=()=>this.cpu._updateCartridgeLoader(),this.mmap=null,this.controllers={1:new fe,2:new fe},this.fpsFrameCount=0,this.romData=null,this.ui.updateStatus("Ready to load a ROM.")}reset(){this.cpu=new ce(this),this.ppu=new de(this),this.papu=new be(this),this.mmap!==null&&(this.mmap=this.rom.createMapper()),this.lastFpsTime=null,this.fpsFrameCount=0,this.crashed=!1,this.frameInProgress=!1}getFPS(){let t=Date.now(),e=null;return this.lastFpsTime&&(e=this.fpsFrameCount/((t-this.lastFpsTime)/1e3)),this.fpsFrameCount=0,this.lastFpsTime=t,e}reloadROM(){this.romData!==null&&this.loadROM(this.romData)}loadROM(t){this.rom=new Zi(this),this.rom.load(t),this.reset(),this.mmap=this.rom.createMapper(),this.mmap.loadROM(),this.ppu.setMirroring(this.rom.getMirroringType()),this.romData=t}setFramerate(t){this.papu.setFrameRate(t)}toJSON(){return{cpu:this.cpu.toJSON(),mmap:this.mmap.toJSON(),ppu:this.ppu.toJSON(),papu:this.papu.toJSON(),frameInProgress:this.frameInProgress,controllers:{1:this.controllers[1].toJSON(),2:this.controllers[2].toJSON()}}}fromJSON(t){this.reset(),this.cpu.fromJSON(t.cpu),this.mmap.fromJSON(t.mmap),this.ppu.fromJSON(t.ppu),this.papu.fromJSON(t.papu),this.frameInProgress=!!t.frameInProgress,t.controllers&&(t.controllers[1]&&this.controllers[1].fromJSON(t.controllers[1]),t.controllers[2]&&this.controllers[2].fromJSON(t.controllers[2]))}},sr=Te});var rr=($i(),rs(Qi)).default;function ts(){return hs()}var es=[{id:"hello.c",name:"Hello World"},{id:"attributes.c",name:"Attribute Table"},{id:"scroll.c",name:"Scrolling"},{id:"sprites.c",name:"Sprites"},{id:"metasprites.c",name:"Metasprites"},{id:"flicker.c",name:"Flickering Sprites"},{id:"metacursor.c",name:"Controllers"},{id:"vrambuffer.c",name:"VRAM Buffer"},{id:"statusbar.c",name:"Split Status Bar"},{id:"siegegame.c",name:"Siege Game"},{id:"tint.c",name:"Color Emphasis"},{id:"rletitle.c",name:"Title Screen RLE"},{id:"aputest.c",name:"Sound Tester"},{id:"music.c",name:"Music Player"},{id:"horizscroll.c",name:"Offscreen Scrolling"},{id:"monobitmap.c",name:"Monochrome Bitmap"},{id:"fami.c",name:"Famitone Demo"},{id:"shoot2.c",name:"Solarian Game"},{id:"climber.c",name:"Climber Game"},{id:"bankswitch.c",name:"Bank Switching"},{id:"irq.c",name:"IRQ Scanline Counter"},{id:"ex0.dasm",name:"Initialization",category:"Assembly"},{id:"ex1.dasm",name:"Hello World"},{id:"ex2.dasm",name:"Scrolling Demo"},{id:"ex3.dasm",name:"Sprite Demo"},{id:"ex4.dasm",name:"Controller Demo"},{id:"musicdemo.dasm",name:"Famitone Demo"},{id:"xyscroll.dasm",name:"XY Split Scrolling"},{id:"road.dasm",name:"3-D Road Demo"},{id:"hello.cpp",name:"Hello Oscar64",category:"Oscar64"},{id:"chase/game.c",name:"Shiru's Chase Game",category:"Other"},{id:"hello.wiz",name:"Hello (Wiz)"}],hr=Pe([[I.A,0,0],[I.B,0,1],[I.GP_A,0,0],[I.GP_B,0,1],[I.SELECT,0,2],[I.START,0,3],[I.UP,0,4],[I.DOWN,0,5],[I.LEFT,0,6],[I.RIGHT,0,7],[I.P2_A,1,0],[I.P2_B,1,1],[I.P2_SELECT,1,2],[I.P2_START,1,3],[I.P2_UP,1,4],[I.P2_DOWN,1,5],[I.P2_LEFT,1,6],[I.P2_RIGHT,1,7]]),Ae=class{constructor(t){this.p=t;this.cpuCyclesPerLine=114;this.cpu={getPC:()=>this.p.getPC(),getSP:()=>this.p.getSP(),isStable:()=>!0}}advanceFrame(t){var e=0;return this.p.nes.frame(()=>t&&t()?!0:(e++,!1)),e}saveState(){return this.p.saveState()}loadState(t){this.p.loadState(t)}read(t){return this.p.readAddress(t)}readConst(t){return this.p.readAddress(t)}write(t,e){t<8192?this.p.nes.cpu.mem[t&2047]=e:this.p.nes.mmap.write(t,e)}connectProbe(t){this.p.connectProbe(t)}},ke=class extends De{constructor(e){super();this.audioFrequency=44030;this.frameindex=0;this.showDebugView=!1;this.machine=new Ae(this);this.getToolForFilename=he;this.nullProbe=new Ge;this.probe=this.nullProbe;this.getMemoryMap=function(){return{main:[{name:"Zero Page RAM",start:0,size:256,type:"ram"},{name:"OAM Buffer",start:512,size:256,type:"ram"},{name:"Work RAM",start:768,size:3328,type:"ram"},{name:"PPU Registers",start:8192,last:8200,size:8192,type:"io"},{name:"APU Registers",start:16384,last:16416,size:8192,type:"io"},{name:"Optional Cartridge RAM",start:24576,size:8192,type:"ram"}]}};this.mainElement=e}getPresets(){return es}start(){this.debugPCDelta=1,this.audio=new Ve(this.audioFrequency),this.video=new se(this.mainElement,256,224,{overscan:!0}),this.video.create(),this.ntvideo=new se(this.mainElement,512,480,{overscan:!1}),this.ntvideo.create(),this.ntvideo.canvas.style.display="none",this.ntlastbuf=new Uint32Array(4096),ts().bind&&ts().bind("ctrl+shift+alt+n",()=>{this.showDebugView=!this.showDebugView,this.video.canvas.style.display=this.showDebugView?"none":"",this.ntvideo.canvas.style.display=this.showDebugView?"":"none"});var e=this.video.getFrameData();this.nes=new rr({onFrame:i=>{for(var s=0;s{this.frameindex<10?this.audio.feedSample(0,1):this.audio.feedSample((i+s)*.5,1)},onStatusUpdate:function(i){console.log(i)},sampleRate:this.audioFrequency}),this.timer=new Oe(60,this.nextFrame.bind(this)),this.poller=Ie(this.video,[],hr,(i,s,r,a)=>{a&1?this.nes.buttonDown(i.index+1,i.mask):a&64&&this.nes.buttonUp(i.index+1,i.mask)})}pollControls(){this.poller.poll()}advance(e){return this.nes.frame(),29780}updateDebugViews(){if(this.showDebugView){for(var e=0,i=0,s=this.ntvideo.getFrameData(),r=this.nes.ppu.regS===0?0:256,a=0;a<60;a++)for(var n=0;n<64;n++){e=8192+(n&31)+a%30*32,n>=32&&(e+=1024),a>=30&&(e+=2048);var l=this.nes.ppu.mirroredLoad(e)+r,o=this.nes.ppu.ptTile[l];i=e&11264|960|e&3072|e>>4&56|e>>2&7;var p=this.nes.ppu.mirroredLoad(i),h=l^p<<9^2147483648;if(h!=this.ntlastbuf[e&4095]){this.ntlastbuf[e&4095]=h;for(var d=a*64*8*8+n*8,x=0,m=(n&2)+((e&64)>>4),f=(p>>m&3)<<2,R=0;R<8;R++){for(var _=0;_<8;_++){var E=o.pix[x++];E&&(E+=f);var g=this.nes.ppu.imgPalette[E];s[d++]=g|4278190080}d+=504}}}this.ntvideo.updateFrame()}}loadROM(e,i){var s=Ne(i);this.nes.loadROM(s),this.frameindex=0,this.installIntercepts()}installIntercepts(){var e=this.nes.cpu;if(!e.haveProxied){var i=e.emulate.bind(e);e.emulate=()=>{e.irqRequested&&this.probe.logInterrupt(e.irqType||0),this.probe.logExecute(e.REG_PC+1,e.REG_SP);var f;try{f=i()}catch(R){throw R instanceof re?R:(this.haltAndCatchFire(R.message||"Illegal instruction"),new re("CPU STOPPED"))}return this.evalDebugCondition(),this.probe.logClocks(f),f>0?f:1};var s=e.doNonMaskableInterrupt.bind(e);e.doNonMaskableInterrupt=f=>(this.probe.logInterrupt(1),s(f)),e.haveProxied=!0}var r=this.nes.mmap;if(!r.haveProxied){var a=r.load.bind(r),n=r.write.bind(r),l=r.regLoad.bind(r),o=r.regWrite.bind(r),p=-1;r.load=f=>{var R=a(f);return f!=p&&this.probe.logRead(f,R),R},r.write=(f,R)=>{f!=p&&this.probe.logWrite(f,R),n(f,R)},r.regLoad=f=>{var R=l(f);return this.probe.logIORead(f,R),p=f,R},r.regWrite=(f,R)=>{this.probe.logIOWrite(f,R),p=f,o(f,R)},r.haveProxied=!0}var h=this.nes.ppu;if(!h.haveProxied){var d=h.endScanline.bind(h),x=h.startFrame.bind(h),m=h.writeMem.bind(h);h.endScanline=()=>{d(),this.probe.logNewScanline()},h.startFrame=()=>{x(),this.probe.logNewFrame()},h.writeMem=(f,R)=>{m(f,R),this.probe.logVRAMWrite(f,R)},h.haveProxied=!0}}newCodeAnalyzer(){return new qe(this)}getOriginPC(){return(this.readAddress(65530)|this.readAddress(65531)<<8)&65535}getDefaultExtensions(){return[...super.getDefaultExtensions(),".nesasm"]}getROMExtension(){return".nes"}reset(){this.nes.crashed=!1,this.nes.cpu.requestIrq(this.nes.cpu.IRQ_RESET),this.installIntercepts()}isRunning(){return this.timer.isRunning()}pause(){this.timer.stop(),this.audio.stop()}resume(){this.timer.start(),this.audio.start()}runToVsync(){var e=this.frameindex;this.runEval(i=>this.frameindex>e)}getRasterScanline(){return this.nes.ppu.scanline}getRasterLineClock(){return this.nes.ppu.curX}getPC(){return this.nes.cpu.REG_PC+this.debugPCDelta&65535}getSP(){return this.nes.cpu.REG_SP&255}isStable(){return!0}getCPUState(){var e=this.nes.cpu.toJSON();return this.copy6502REGvars(e),e}saveState(){var e;return this.nes.mmap?e=this.nes.toJSON():(console.log("no nes.mmap!"),e={cpu:this.nes.cpu.toJSON(),ppu:this.nes.ppu.toJSON()}),e.c=e.cpu,this.copy6502REGvars(e.c),e.b=e.cpu.mem,e.ctrl=this.saveControlsState(),e}loadState(e){this.unfixPC(e.cpu),this.nes.fromJSON(e),this.fixPC(e.cpu),this.loadControlsState(e.ctrl),this.installIntercepts()}saveControlsState(){return{c1:this.nes.controllers[1].state.slice(0),c2:this.nes.controllers[2].state.slice(0)}}loadControlsState(e){this.nes.controllers[1].state=e.c1.slice(0),this.nes.controllers[2].state=e.c2.slice(0)}readAddress(e){return this.nes.cpu.mem[e]}readVRAMAddress(e){return this.nes.ppu.vramMem[e]}copy6502REGvars(e){return e.T=0,e.PC=e.REG_PC,this.fixPC(e),e.A=e.REG_ACC,e.X=e.REG_X,e.Y=e.REG_Y,e.SP=e.REG_SP&255,e.Z=e.F_ZERO,e.N=e.F_SIGN,e.V=e.F_OVERFLOW,e.D=e.F_DECIMAL,e.C=e.F_CARRY,e.I=e.F_INTERRUPT,e.R=1,e.o=this.readAddress(e.PC+1),e}getDebugCategories(){return super.getDebugCategories().concat(["PPU","Mapper"])}getDebugInfo(e,i){switch(e){case"PPU":return this.ppuStateToLongString(i.ppu,i.b);case"Mapper":return this.mapperStateToLongString(i.mmap,i.b);default:return super.getDebugInfo(e,i)}}ppuStateToLongString(e,i){for(var s="",r=[["f_nmiOnVblank","NMI_ON_VBLANK"],["f_spVisibility","SPRITES"],["f_spClipping","NO_CLIP_SPRITES"],["f_dispType","MONOCHROME"],["f_bgVisibility","BACKGROUND"],["f_bgClipping","NO_CLIP_BACKGROUND"]],a=0;a="0"&&r[0]<="9"&&(r="L"+r),r=Me(r,".","_"),i+=`${n}:${l}:${r} `}return{extension:".mlb",blob:new Blob([i],{type:"text/plain"})}}},Fe=class extends ze{constructor(){super(...arguments);this.getToolForFilename=he;this.getOpcodeMetadata=Le}start(){}loadROM(e,i){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitws.js",driver:"nes",width:256,height:240,romfn:"/emulator/cart.nes",romdata:new Uint8Array(i),preInit:function(a){}});else{var s=i[4]*16384,r=i[5]*8192;this.loadROMFile(i),this.loadRegion(":nes_slot:cart:prg_rom",i.slice(16,16+s)),this.loadRegion(":nes_slot:cart:chr_rom",i.slice(16+s,16+s+r))}}getPresets(){return es}getDefaultExtensions(){return[".c",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}};ie.nes=ke;ie["nes.mame"]=Fe; -//# sourceMappingURL=nes-EMVG76ED.js.map +//# sourceMappingURL=nes-G3Q7YZ23.js.map diff --git a/gen/nes-EMVG76ED.js.map b/gen/nes-G3Q7YZ23.js.map similarity index 100% rename from gen/nes-EMVG76ED.js.map rename to gen/nes-G3Q7YZ23.js.map diff --git a/gen/pacman-RAYBJORX.js b/gen/pacman-L2UNSITI.js similarity index 98% rename from gen/pacman-RAYBJORX.js rename to gen/pacman-L2UNSITI.js index d7845064..e068f2d8 100644 --- a/gen/pacman-RAYBJORX.js +++ b/gen/pacman-L2UNSITI.js @@ -1,2 +1,2 @@ -import{H as B,c as w,r as V}from"./chunk-QYEDG265.js";import"./chunk-UACHXWHT.js";import{L as R,U as M,Z as x,_ as P,aa as U,ca as E}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var D=U([[x.UP,0,1],[x.LEFT,0,2],[x.RIGHT,0,4],[x.DOWN,0,8],[x.VK_5,0,32],[x.VK_6,0,64],[x.A,0,128],[x.START,1,32],[x.VK_2,1,64]]),l=224,p=288,v=class{constructor(n,r,t,e){this.rom=n;this.vram=r;this.cram=t;this.ram=e;this.tiles=new Uint8Array(256*64);this.sprites=new Uint8Array(64*256);this.colors=new Uint32Array(32);this.paletteRom=new Uint8Array(256);this.spritePos=new Uint8Array(16);this.rebuild()}rebuild(){for(var n=0;n<32;n++){var r=this.rom[24576+n],t=(r>>0&1)*33+(r>>1&1)*71+(r>>2&1)*151,e=(r>>3&1)*33+(r>>4&1)*71+(r>>5&1)*151,i=(r>>6&1)*81+(r>>7&1)*174;this.colors[n]=4278190080|i<<16|e<<8|t}this.paletteRom.set(this.rom.subarray(24832,25088));for(var a=this.rom.subarray(16384,20480),s=0;s<256;s++){var c=this.tiles.subarray(s*64,s*64+64),h=a.subarray(s*16,s*16+16);this.decodeStrip(h,0,c,0,4,8),this.decodeStrip(h,8,c,0,0,8)}for(var o=this.rom.subarray(20480,24576),f=0;f<64;f++){var u=this.sprites.subarray(f*256,f*256+256),m=o.subarray(f*64,f*64+64);this.decodeStrip(m,0,u,8,12,16),this.decodeStrip(m,8,u,8,0,16),this.decodeStrip(m,16,u,8,4,16),this.decodeStrip(m,24,u,8,8,16),this.decodeStrip(m,32,u,0,12,16),this.decodeStrip(m,40,u,0,0,16),this.decodeStrip(m,48,u,0,4,16),this.decodeStrip(m,56,u,0,8,16)}}decodeStrip(n,r,t,e,i,a){for(var s=i*a+e,c=0;c<8;c++)for(var h=n[r+c],o=0;o<4;o++){var f=(3-o)*a+(7-c),u=h>>o&1|(h>>o+4&1)<<1;t[s+f]=u}}getPalette(n,r){n&=63;var t=n*4;r[0]=this.paletteRom[t],r[1]=this.paletteRom[t+1],r[2]=this.paletteRom[t+2],r[3]=this.paletteRom[t+3]}drawTile(n,r,t,e,i){if(!(e<0||e>=l))for(var a=this.tiles.subarray(r*64,r*64+64),s=0;s<64;s++){var c=s&7,h=s>>3,o=e+c;if(!(o<0||o>=l)){var f=t[a[s]&3];n[(i+h)*l+o]=this.colors[f&31]}}}drawSprite(n,r,t,e,i,a,s){if(!(e<=-16||e>l))for(var c=this.sprites.subarray(r*256,r*256+256),h=0;h<256;h++){var o=h&15,f=h>>4,u=c[h]&3;if(t[u]!==0){var m=a?15-o:o,T=s?15-f:f,y=e+m,g=i+T;y<0||y>=l||g<0||g>=p||(n[g*l+y]=this.colors[t[u]&31])}}}drawFrame(n){n.fill(4278190080);for(var r=new Uint8Array(4),t=0,e=34;e<36;e++)for(var i=31;i>=0;i--)this.getPalette(this.cram[t],r),this.drawTile(n,this.vram[t],r,(i-2)*8,e*8),t++;t=64;for(var i=29;i>=2;i--)for(var e=2;e<=33;e++)this.getPalette(this.cram[t],r),this.drawTile(n,this.vram[t],r,(i-2)*8,e*8),t++;t=960;for(var e=0;e<2;e++)for(var i=31;i>=0;i--)this.getPalette(this.cram[t],r),this.drawTile(n,this.vram[t],r,(i-2)*8,e*8),t++;for(var a=7;a>=0;a--){var s=this.ram[1008+a*2],c=this.ram[1008+a*2+1],h=l-this.spritePos[a*2]+15,o=p-this.spritePos[a*2+1]-16;this.getPalette(c,r),this.drawSprite(n,s>>2,r,h,o,!!(s&2),!!(s&1))}}},O=18432e3,C=O/6,k=O/3/192/2,F=C/k,A=256,d=class d extends V{constructor(){super();this.cpuFrequency=C;this.canvasWidth=l;this.numTotalScanlines=p;this.numVisibleScanlines=p;this.defaultROMSize=32768;this.cpuCyclesPerLine=F|0;this.sampleRate=60*264;this.rotate=0;this.cpu=new w;this.ram=new Uint8Array(1024);this.vram=new Uint8Array(1024);this.cram=new Uint8Array(1024);this.oram=new Uint8Array(256);this.interruptEnabled=0;this.interruptVector=255;this.pendingVBlankIsr=!1;this.watchdog_counter=A;this.flipScreen=0;this.soundEnabled=0;this.soundRegs=new Uint8Array(32);this.soundAcc=new Uint32Array(3);this.waveforms=d.WAVEFORMS;this.keyMap=D;this.frameDrawn=!1;this.readByte=r=>{if(r&=65535,r<16384)return this.rom[r];if(r<17408)return this.vram[r-16384];if(r<18432)return this.cram[r-17408];if(r<19456)return 191;if(r<20480)return this.ram[r-19456];if(r<20736){var t=r&192;return t===0?~this.inputs[0]&255|16:t===64?~this.inputs[1]&111|144:t===128?201:255}return r>=32768?this.rom[r&16383]:255};this.writeByte=(r,t)=>{if(r&=65535,!(r<16384)){if(r<17408){this.vram[r-16384]=t;return}if(r<18432){this.cram[r-17408]=t;return}if(!(r<19456)){if(r<20480){this.ram[r-19456]=t;return}if((r&65528)===20480){var e=r&7;e===0&&(this.interruptEnabled=t&1),e===1&&(this.soundEnabled=t&1),e===3&&(this.flipScreen=t&1)}else r>=20544&&r<=20575?this.soundRegs[r-20544]=t&15:(r&65520)===20576?this.gfx.spritePos[r&15]=t:(r&65472)===20672&&(this.watchdog_counter=A)}}};this.connectCPUIOBus({read:r=>255,write:(r,t)=>{(r&255)===0&&(this.interruptVector=t&255)}}),this.connectCPUMemoryBus({read:this.readByte,write:this.writeByte}),this.cpu.retryInterrupts=!0,this.rom=new Uint8Array(this.defaultROMSize),this.gfx=new v(this.rom,this.vram,this.cram,this.ram),this.inputs.fill(0),this.handler=P(this.inputs,this.keyMap)}static buildWaveforms(){for(var r=new Uint8Array(256),t=0;t<32;t++){var e=t/32;r[0+t]=8+Math.sin(e*Math.PI*2)*7.5|0,r[32+t]=t<16?15:0,r[64+t]=t<16?t:31-t,r[96+t]=t>>1,r[128+t]=t<8?15:t<16?0:t<24?10:0,r[160+t]=8+Math.sin(e*Math.PI*4)*7.5|0,r[192+t]=t&1?12:2,r[224+t]=t*3&15}return r}reset(){super.reset(),this.cpu.reset(),this.watchdog_counter=A,this.interruptEnabled=0,this.interruptVector=255,this.pendingVBlankIsr=!1,this.soundEnabled=0,this.soundRegs.fill(0),this.soundAcc.fill(0),this.extractROMData()}loadROM(r){this.rom.set(E(r,this.defaultROMSize)),this.extractROMData()}extractROMData(){this.gfx=new v(this.rom,this.vram,this.cram,this.ram);for(var r=this.rom.subarray(25088,25344),t=!1,e=0;e>15&31,o=this.waveforms[this.voiceWave(a)*32+h]&15;i+=(o-8)*s}}}t+=i}this.audio.feedSample(t/(r*3*15*8),1)}}drawScanline(){this.scanline===0&&this.gfx.drawFrame(this.pixels)}drainVBlankIsr(){if(this.pendingVBlankIsr){this.pendingVBlankIsr=!1;for(var r=this.cpu.getSP()+2,t=1e5;this.cpu.getSP()!==r&&--t>0;)this.advanceCPU()}}advanceFrame(r){this.drainVBlankIsr();var t=super.advanceFrame(r);if(--this.watchdog_counter<=0)throw new M("WATCHDOG FIRED");if(this.interruptEnabled){var e=this.cpu.getSP();this.cpu.interrupt(this.interruptVector),this.cpu.getSP()!==e&&(this.pendingVBlankIsr=!0)}return t}loadState(r){this.cpu.loadState(r.c),this.ram.set(r.ram),this.vram.set(r.vr),this.cram.set(r.cr),this.gfx.spritePos.set(r.sp||[]),this.watchdog_counter=r.wdc,this.interruptEnabled=r.ie,this.pendingVBlankIsr=!!r.pvi,this.loadControlsState(r)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),vr:this.vram.slice(0),cr:this.cram.slice(0),or:this.oram.slice(0),sp:this.gfx.spritePos.slice(0),wdc:this.watchdog_counter,ie:this.interruptEnabled,pvi:this.pendingVBlankIsr,inputs:this.inputs.slice(0)}}read(r){return this.readByte(r)}write(r,t){this.writeByte(r,t)}readConst(r){return this.readByte(r)}};d.WAVEFORMS=d.buildWaveforms();var b=d;var W=[{id:"hello.c",name:"Hello World"},{id:"sprites.c",name:"Sprite Test"},{id:"music.c",name:"Music Demo"},{id:"solarian.c",name:"Solarian"},{id:"siege.c",name:"Siege Game"},{id:"climber.c",name:"Climber Game"},{id:"chase.c",name:"Chase"}],S=class extends B{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Program ROM",start:0,size:16384,type:"rom"},{name:"Video RAM",start:16384,size:1024,type:"ram"},{name:"Color RAM",start:17408,size:1024,type:"ram"},{name:"Open Bus",start:18432,size:1024,type:"ram"},{name:"Work RAM",start:19456,size:1008,type:"ram"},{name:"Sprite RAM",start:20464,size:16,type:"ram"},{name:"I/O Regs",start:20480,size:256,type:"io"},{name:"Color PROM",start:24576,size:32,type:"rom"},{name:"Palette PROM",start:24832,size:256,type:"rom"},{name:"Wave ROM",start:25088,size:256,type:"rom"}]}}}newMachine(){return new b}getPresets(){return W}getDefaultExtension(){return".c"}readAddress(r){return this.machine.readConst(r)}readVRAMAddress(r){return r<1024?this.machine.vram[r]:r<2048?this.machine.cram[r-1024]:this.machine.ram[1008+(r-2048&15)]}showHelp(){return"https://8bitworkshop.com/docs/platforms/arcade/index.html#pac-man-hardware"}getDebugTree(){let r=super.getDebugTree();return r.palette={$$:()=>{let t={};for(let e=0;e{let t={};for(let e=0;e<8;e++){let i=1008+e*2;t[`sprite_${e}`]={shape:"$"+this.machine.ram[i].toString(16).padStart(2,"0"),color:"$"+this.machine.ram[i+1].toString(16).padStart(2,"0"),x:this.machine.gfx.spritePos[e*2],y:this.machine.gfx.spritePos[e*2+1]}}return t}},r}};R.pacman=S; -//# sourceMappingURL=pacman-RAYBJORX.js.map +import{H as B,c as w,r as V}from"./chunk-RWTUUV4L.js";import"./chunk-UXRCACYH.js";import{L as R,U as M,Z as x,_ as P,aa as U,ca as E}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var D=U([[x.UP,0,1],[x.LEFT,0,2],[x.RIGHT,0,4],[x.DOWN,0,8],[x.VK_5,0,32],[x.VK_6,0,64],[x.A,0,128],[x.START,1,32],[x.VK_2,1,64]]),l=224,p=288,v=class{constructor(n,r,t,e){this.rom=n;this.vram=r;this.cram=t;this.ram=e;this.tiles=new Uint8Array(256*64);this.sprites=new Uint8Array(64*256);this.colors=new Uint32Array(32);this.paletteRom=new Uint8Array(256);this.spritePos=new Uint8Array(16);this.rebuild()}rebuild(){for(var n=0;n<32;n++){var r=this.rom[24576+n],t=(r>>0&1)*33+(r>>1&1)*71+(r>>2&1)*151,e=(r>>3&1)*33+(r>>4&1)*71+(r>>5&1)*151,i=(r>>6&1)*81+(r>>7&1)*174;this.colors[n]=4278190080|i<<16|e<<8|t}this.paletteRom.set(this.rom.subarray(24832,25088));for(var a=this.rom.subarray(16384,20480),s=0;s<256;s++){var c=this.tiles.subarray(s*64,s*64+64),h=a.subarray(s*16,s*16+16);this.decodeStrip(h,0,c,0,4,8),this.decodeStrip(h,8,c,0,0,8)}for(var o=this.rom.subarray(20480,24576),f=0;f<64;f++){var u=this.sprites.subarray(f*256,f*256+256),m=o.subarray(f*64,f*64+64);this.decodeStrip(m,0,u,8,12,16),this.decodeStrip(m,8,u,8,0,16),this.decodeStrip(m,16,u,8,4,16),this.decodeStrip(m,24,u,8,8,16),this.decodeStrip(m,32,u,0,12,16),this.decodeStrip(m,40,u,0,0,16),this.decodeStrip(m,48,u,0,4,16),this.decodeStrip(m,56,u,0,8,16)}}decodeStrip(n,r,t,e,i,a){for(var s=i*a+e,c=0;c<8;c++)for(var h=n[r+c],o=0;o<4;o++){var f=(3-o)*a+(7-c),u=h>>o&1|(h>>o+4&1)<<1;t[s+f]=u}}getPalette(n,r){n&=63;var t=n*4;r[0]=this.paletteRom[t],r[1]=this.paletteRom[t+1],r[2]=this.paletteRom[t+2],r[3]=this.paletteRom[t+3]}drawTile(n,r,t,e,i){if(!(e<0||e>=l))for(var a=this.tiles.subarray(r*64,r*64+64),s=0;s<64;s++){var c=s&7,h=s>>3,o=e+c;if(!(o<0||o>=l)){var f=t[a[s]&3];n[(i+h)*l+o]=this.colors[f&31]}}}drawSprite(n,r,t,e,i,a,s){if(!(e<=-16||e>l))for(var c=this.sprites.subarray(r*256,r*256+256),h=0;h<256;h++){var o=h&15,f=h>>4,u=c[h]&3;if(t[u]!==0){var m=a?15-o:o,T=s?15-f:f,y=e+m,g=i+T;y<0||y>=l||g<0||g>=p||(n[g*l+y]=this.colors[t[u]&31])}}}drawFrame(n){n.fill(4278190080);for(var r=new Uint8Array(4),t=0,e=34;e<36;e++)for(var i=31;i>=0;i--)this.getPalette(this.cram[t],r),this.drawTile(n,this.vram[t],r,(i-2)*8,e*8),t++;t=64;for(var i=29;i>=2;i--)for(var e=2;e<=33;e++)this.getPalette(this.cram[t],r),this.drawTile(n,this.vram[t],r,(i-2)*8,e*8),t++;t=960;for(var e=0;e<2;e++)for(var i=31;i>=0;i--)this.getPalette(this.cram[t],r),this.drawTile(n,this.vram[t],r,(i-2)*8,e*8),t++;for(var a=7;a>=0;a--){var s=this.ram[1008+a*2],c=this.ram[1008+a*2+1],h=l-this.spritePos[a*2]+15,o=p-this.spritePos[a*2+1]-16;this.getPalette(c,r),this.drawSprite(n,s>>2,r,h,o,!!(s&2),!!(s&1))}}},O=18432e3,C=O/6,k=O/3/192/2,F=C/k,A=256,d=class d extends V{constructor(){super();this.cpuFrequency=C;this.canvasWidth=l;this.numTotalScanlines=p;this.numVisibleScanlines=p;this.defaultROMSize=32768;this.cpuCyclesPerLine=F|0;this.sampleRate=60*264;this.rotate=0;this.cpu=new w;this.ram=new Uint8Array(1024);this.vram=new Uint8Array(1024);this.cram=new Uint8Array(1024);this.oram=new Uint8Array(256);this.interruptEnabled=0;this.interruptVector=255;this.pendingVBlankIsr=!1;this.watchdog_counter=A;this.flipScreen=0;this.soundEnabled=0;this.soundRegs=new Uint8Array(32);this.soundAcc=new Uint32Array(3);this.waveforms=d.WAVEFORMS;this.keyMap=D;this.frameDrawn=!1;this.readByte=r=>{if(r&=65535,r<16384)return this.rom[r];if(r<17408)return this.vram[r-16384];if(r<18432)return this.cram[r-17408];if(r<19456)return 191;if(r<20480)return this.ram[r-19456];if(r<20736){var t=r&192;return t===0?~this.inputs[0]&255|16:t===64?~this.inputs[1]&111|144:t===128?201:255}return r>=32768?this.rom[r&16383]:255};this.writeByte=(r,t)=>{if(r&=65535,!(r<16384)){if(r<17408){this.vram[r-16384]=t;return}if(r<18432){this.cram[r-17408]=t;return}if(!(r<19456)){if(r<20480){this.ram[r-19456]=t;return}if((r&65528)===20480){var e=r&7;e===0&&(this.interruptEnabled=t&1),e===1&&(this.soundEnabled=t&1),e===3&&(this.flipScreen=t&1)}else r>=20544&&r<=20575?this.soundRegs[r-20544]=t&15:(r&65520)===20576?this.gfx.spritePos[r&15]=t:(r&65472)===20672&&(this.watchdog_counter=A)}}};this.connectCPUIOBus({read:r=>255,write:(r,t)=>{(r&255)===0&&(this.interruptVector=t&255)}}),this.connectCPUMemoryBus({read:this.readByte,write:this.writeByte}),this.cpu.retryInterrupts=!0,this.rom=new Uint8Array(this.defaultROMSize),this.gfx=new v(this.rom,this.vram,this.cram,this.ram),this.inputs.fill(0),this.handler=P(this.inputs,this.keyMap)}static buildWaveforms(){for(var r=new Uint8Array(256),t=0;t<32;t++){var e=t/32;r[0+t]=8+Math.sin(e*Math.PI*2)*7.5|0,r[32+t]=t<16?15:0,r[64+t]=t<16?t:31-t,r[96+t]=t>>1,r[128+t]=t<8?15:t<16?0:t<24?10:0,r[160+t]=8+Math.sin(e*Math.PI*4)*7.5|0,r[192+t]=t&1?12:2,r[224+t]=t*3&15}return r}reset(){super.reset(),this.cpu.reset(),this.watchdog_counter=A,this.interruptEnabled=0,this.interruptVector=255,this.pendingVBlankIsr=!1,this.soundEnabled=0,this.soundRegs.fill(0),this.soundAcc.fill(0),this.extractROMData()}loadROM(r){this.rom.set(E(r,this.defaultROMSize)),this.extractROMData()}extractROMData(){this.gfx=new v(this.rom,this.vram,this.cram,this.ram);for(var r=this.rom.subarray(25088,25344),t=!1,e=0;e>15&31,o=this.waveforms[this.voiceWave(a)*32+h]&15;i+=(o-8)*s}}}t+=i}this.audio.feedSample(t/(r*3*15*8),1)}}drawScanline(){this.scanline===0&&this.gfx.drawFrame(this.pixels)}drainVBlankIsr(){if(this.pendingVBlankIsr){this.pendingVBlankIsr=!1;for(var r=this.cpu.getSP()+2,t=1e5;this.cpu.getSP()!==r&&--t>0;)this.advanceCPU()}}advanceFrame(r){this.drainVBlankIsr();var t=super.advanceFrame(r);if(--this.watchdog_counter<=0)throw new M("WATCHDOG FIRED");if(this.interruptEnabled){var e=this.cpu.getSP();this.cpu.interrupt(this.interruptVector),this.cpu.getSP()!==e&&(this.pendingVBlankIsr=!0)}return t}loadState(r){this.cpu.loadState(r.c),this.ram.set(r.ram),this.vram.set(r.vr),this.cram.set(r.cr),this.gfx.spritePos.set(r.sp||[]),this.watchdog_counter=r.wdc,this.interruptEnabled=r.ie,this.pendingVBlankIsr=!!r.pvi,this.loadControlsState(r)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),vr:this.vram.slice(0),cr:this.cram.slice(0),or:this.oram.slice(0),sp:this.gfx.spritePos.slice(0),wdc:this.watchdog_counter,ie:this.interruptEnabled,pvi:this.pendingVBlankIsr,inputs:this.inputs.slice(0)}}read(r){return this.readByte(r)}write(r,t){this.writeByte(r,t)}readConst(r){return this.readByte(r)}};d.WAVEFORMS=d.buildWaveforms();var b=d;var W=[{id:"hello.c",name:"Hello World"},{id:"sprites.c",name:"Sprite Test"},{id:"music.c",name:"Music Demo"},{id:"solarian.c",name:"Solarian"},{id:"siege.c",name:"Siege Game"},{id:"climber.c",name:"Climber Game"},{id:"chase.c",name:"Chase"}],S=class extends B{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Program ROM",start:0,size:16384,type:"rom"},{name:"Video RAM",start:16384,size:1024,type:"ram"},{name:"Color RAM",start:17408,size:1024,type:"ram"},{name:"Open Bus",start:18432,size:1024,type:"ram"},{name:"Work RAM",start:19456,size:1008,type:"ram"},{name:"Sprite RAM",start:20464,size:16,type:"ram"},{name:"I/O Regs",start:20480,size:256,type:"io"},{name:"Color PROM",start:24576,size:32,type:"rom"},{name:"Palette PROM",start:24832,size:256,type:"rom"},{name:"Wave ROM",start:25088,size:256,type:"rom"}]}}}newMachine(){return new b}getPresets(){return W}getDefaultExtension(){return".c"}readAddress(r){return this.machine.readConst(r)}readVRAMAddress(r){return r<1024?this.machine.vram[r]:r<2048?this.machine.cram[r-1024]:this.machine.ram[1008+(r-2048&15)]}showHelp(){return"https://8bitworkshop.com/docs/platforms/arcade/index.html#pac-man-hardware"}getDebugTree(){let r=super.getDebugTree();return r.palette={$$:()=>{let t={};for(let e=0;e{let t={};for(let e=0;e<8;e++){let i=1008+e*2;t[`sprite_${e}`]={shape:"$"+this.machine.ram[i].toString(16).padStart(2,"0"),color:"$"+this.machine.ram[i+1].toString(16).padStart(2,"0"),x:this.machine.gfx.spritePos[e*2],y:this.machine.gfx.spritePos[e*2+1]}}return t}},r}};R.pacman=S; +//# sourceMappingURL=pacman-L2UNSITI.js.map diff --git a/gen/pacman-RAYBJORX.js.map b/gen/pacman-L2UNSITI.js.map similarity index 100% rename from gen/pacman-RAYBJORX.js.map rename to gen/pacman-L2UNSITI.js.map diff --git a/gen/pce-QHW3U4S4.js b/gen/pce-GU673WGG.js similarity index 99% rename from gen/pce-QHW3U4S4.js rename to gen/pce-GU673WGG.js index 84dff546..41f6acab 100644 --- a/gen/pce-QHW3U4S4.js +++ b/gen/pce-GU673WGG.js @@ -1,2 +1,2 @@ -import"./chunk-QYEDG265.js";import{a as y}from"./chunk-UACHXWHT.js";import{L as m,R as G,Z as u}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var M=[{id:"gfxtest.c",name:"Graphics Test (tiles/sprites)"},{id:"perftest.c",name:"Graphics Pipeline Benchmark"},{id:"solarian.c",name:"Solarian"},{id:"chase.c",name:"Chase"},{id:"test_conio.c",name:"Hello World (conio)"},{id:"siegegame.c",name:"Siege Game (conio)"},{id:"hello.wiz",name:"Hello World (Wiz)"}],V=class{constructor(t){this.mainElement=t}start(){this.pce=new R,this.video=new G(this.mainElement,684,262,{overscan:!0,aspect:4/3}),this.video.create(),this.pce.SetCanvas(this.video.canvas)}reset(){this.pce.Reset()}isRunning(){return this.pce.TimerID!=null}pause(){this.pce.Pause()}resume(){this.pce.CreateAudioContext(),this.pce.Start()}getPresets(){return M}loadROM(t,e){this.pce.Pause(),this.pce.Init(),this.pce.SetROM(e)}advance(t){return this.pce.Run(),1}getPlatformName(){return"PC Engine"}getToolForFilename(t){return y(t)}getDefaultExtensions(){return[".c",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}showHelp(){return"https://8bitworkshop.com/docs/platforms/pce/"}readAddress(t){return this.pce.Get(t)}writeAddress(t,e){this.pce.Set(t,e)}readVRAMAddress(t){return this.pce.VDC[0].VRAM[t]}};m.pce=V;var R=class{constructor(){this.MainCanvas=null;this.Ctx=null;this.ImageData=null;this.MapperBase=class{constructor(t,e){this.ROM=t,this.Core=e}Init(){}Read(t){return 255}Write(t,e){}};this.VDCSelect=0;this.ScreenWidthMAX=0;this.ScreenHeightMAX=0;this.SuperGrafx=!1,this.CountryTypePCE=64,this.CountryTypeTG16=0,this.CountryType=this.CountryTypePCE,this.GamePadButton6=!1,this.MultiTap=!1,this.EtcConstruct(),this.CPUConstruct(),this.StorageConstruct(),this.VCEConstruct(),this.VPCConstruct(),this.VDCConstruct(),this.SoundConstruct(),this.PSGConstruct(),this.TimerConstruct(),this.JoystickConstruct()}EtcConstruct(){this.TimerID=null,this.MainCanvas=null,this.Ctx=null,this.ImageData=null}UpdateAnimationFrame(){this.TimerID=window.requestAnimationFrame(this.UpdateAnimationFrame.bind(this)),this.Run()}CancelAnimationFrame(){window.cancelAnimationFrame(this.TimerID),this.TimerID=null}Pause(){this.TimerID!=null&&(this.JoystickEventRelease(),this.CancelAnimationFrame())}Start(){this.TimerID==null&&(this.JoystickEventInit(),this.UpdateAnimationFrame())}Run(){for(this.CheckGamePad(),this.DrawFlag=!1;!this.DrawFlag;)this.CPURun(),this.VDCRun(),this.TimerRun(),this.PSGRun()}Reset(){this.StorageReset(),this.Mapper.Init(),this.CPUInit(),this.VCEInit(),this.VPCInit(),this.VDCInit(),this.TimerInit(),this.JoystickInit(),this.PSGInit(),this.CPUReset()}Init(){this.StorageInit(),this.CPUInit(),this.VCEInit(),this.VPCInit(),this.VDCInit(),this.TimerInit(),this.JoystickInit(),this.PSGInit()}SetCanvas(t){if(this.MainCanvas=t,!this.MainCanvas.getContext)return!1;this.Ctx=this.MainCanvas.getContext("2d"),this.ImageData=this.Ctx.createImageData(this.MainCanvas.width,this.MainCanvas.height);for(let e=0;ee&128),this.NZCacheTable[0]=2,this.NFlag=128,this.VFlag=64,this.TFlag=32,this.BFlag=16,this.DFlag=8,this.IFlag=4,this.ZFlag=2,this.CFlag=1,this.TIQFlag=4,this.IRQ1Flag=2,this.IRQ2Flag=1,this.ProgressClock=0,this.CPUBaseClock=0,this.BaseClock1=12,this.BaseClock3=6,this.BaseClock5=4,this.BaseClock7=3,this.BaseClock10=2,this.TransferSrc=0,this.TransferDist=0,this.TransferLen=0,this.TransferAlt=0}CPUReset(){this.TransferSrc=0,this.TransferDist=0,this.TransferLen=0,this.TransferAlt=0,this.CPUBaseClock=this.BaseClock1,this.SetIFlag(),this.PC=this.Get16(65534)}CPUInit(){this.A=0,this.X=0,this.Y=0,this.PC=0,this.S=0,this.P=0,this.ProgressClock=0,this.CPUBaseClock=this.BaseClock1,this.TransferSrc=0,this.TransferDist=0,this.TransferLen=0,this.TransferAlt=0,this.LastInt=0}CPURun(){this.ProgressClock=0;let t=this.LastInt;this.LastInt=(this.P&this.IFlag)==0?this.GetIntStatus():0,t!=0&&this.TransferLen==0?(this.LastInt=0,(t&this.TIQFlag)==this.TIQFlag?(this.Push(this.PCH()),this.Push(this.PCL()),this.Push(this.P),this.P=4,this.PC=this.Get16(65530)):(t&this.IRQ1Flag)==this.IRQ1Flag?(this.Push(this.PCH()),this.Push(this.PCL()),this.Push(this.P),this.P=4,this.PC=this.Get16(65528)):(t&this.IRQ2Flag)==this.IRQ2Flag&&(this.Push(this.PCH()),this.Push(this.PCL()),this.Push(this.P),this.SetIFlag(),this.PC=this.Get16(65526)),this.ProgressClock=8*this.CPUBaseClock):this.OpExec()}OpExec(){let t,e,s,i,a,h=this.Get(this.PC);switch(h){case 105:this.ADC(this.PC+1);break;case 101:this.ADC(this.ZP());break;case 117:this.ADC(this.ZP_X());break;case 114:this.ADC(this.IND());break;case 97:this.ADC(this.IND_X());break;case 113:this.ADC(this.IND_Y());break;case 109:this.ADC(this.ABS());break;case 125:this.ADC(this.ABS_X());break;case 121:this.ADC(this.ABS_Y());break;case 233:this.SBC(this.PC+1);break;case 229:this.SBC(this.ZP());break;case 245:this.SBC(this.ZP_X());break;case 242:this.SBC(this.IND());break;case 225:this.SBC(this.IND_X());break;case 241:this.SBC(this.IND_Y());break;case 237:this.SBC(this.ABS());break;case 253:this.SBC(this.ABS_X());break;case 249:this.SBC(this.ABS_Y());break;case 41:this.AND(this.PC+1);break;case 37:this.AND(this.ZP());break;case 53:this.AND(this.ZP_X());break;case 50:this.AND(this.IND());break;case 33:this.AND(this.IND_X());break;case 49:this.AND(this.IND_Y());break;case 45:this.AND(this.ABS());break;case 61:this.AND(this.ABS_X());break;case 57:this.AND(this.ABS_Y());break;case 73:this.EOR(this.PC+1);break;case 69:this.EOR(this.ZP());break;case 85:this.EOR(this.ZP_X());break;case 82:this.EOR(this.IND());break;case 65:this.EOR(this.IND_X());break;case 81:this.EOR(this.IND_Y());break;case 77:this.EOR(this.ABS());break;case 93:this.EOR(this.ABS_X());break;case 89:this.EOR(this.ABS_Y());break;case 9:this.ORA(this.PC+1);break;case 5:this.ORA(this.ZP());break;case 21:this.ORA(this.ZP_X());break;case 18:this.ORA(this.IND());break;case 1:this.ORA(this.IND_X());break;case 17:this.ORA(this.IND_Y());break;case 13:this.ORA(this.ABS());break;case 29:this.ORA(this.ABS_X());break;case 25:this.ORA(this.ABS_Y());break;case 6:t=this.ZP(),this.Set(t,this.ASL(this.Get(t)));break;case 22:t=this.ZP_X(),this.Set(t,this.ASL(this.Get(t)));break;case 14:t=this.ABS(),this.Set(t,this.ASL(this.Get(t)));break;case 30:t=this.ABS_X(),this.Set(t,this.ASL(this.Get(t)));break;case 10:this.A=this.ASL(this.A);break;case 70:t=this.ZP(),this.Set(t,this.LSR(this.Get(t)));break;case 86:t=this.ZP_X(),this.Set(t,this.LSR(this.Get(t)));break;case 78:t=this.ABS(),this.Set(t,this.LSR(this.Get(t)));break;case 94:t=this.ABS_X(),this.Set(t,this.LSR(this.Get(t)));break;case 74:this.A=this.LSR(this.A);break;case 38:t=this.ZP(),this.Set(t,this.ROL(this.Get(t)));break;case 54:t=this.ZP_X(),this.Set(t,this.ROL(this.Get(t)));break;case 46:t=this.ABS(),this.Set(t,this.ROL(this.Get(t)));break;case 62:t=this.ABS_X(),this.Set(t,this.ROL(this.Get(t)));break;case 42:this.A=this.ROL(this.A);break;case 102:t=this.ZP(),this.Set(t,this.ROR(this.Get(t)));break;case 118:t=this.ZP_X(),this.Set(t,this.ROR(this.Get(t)));break;case 110:t=this.ABS(),this.Set(t,this.ROR(this.Get(t)));break;case 126:t=this.ABS_X(),this.Set(t,this.ROR(this.Get(t)));break;case 106:this.A=this.ROR(this.A);break;case 15:this.BBRi(0);break;case 31:this.BBRi(1);break;case 47:this.BBRi(2);break;case 63:this.BBRi(3);break;case 79:this.BBRi(4);break;case 95:this.BBRi(5);break;case 111:this.BBRi(6);break;case 127:this.BBRi(7);break;case 143:this.BBSi(0);break;case 159:this.BBSi(1);break;case 175:this.BBSi(2);break;case 191:this.BBSi(3);break;case 207:this.BBSi(4);break;case 223:this.BBSi(5);break;case 239:this.BBSi(6);break;case 255:this.BBSi(7);break;case 144:this.Branch((this.P&this.CFlag)==0,1);break;case 176:this.Branch((this.P&this.CFlag)==this.CFlag,1);break;case 208:this.Branch((this.P&this.ZFlag)==0,1);break;case 240:this.Branch((this.P&this.ZFlag)==this.ZFlag,1);break;case 16:this.Branch((this.P&this.NFlag)==0,1);break;case 48:this.Branch((this.P&this.NFlag)==this.NFlag,1);break;case 80:this.Branch((this.P&this.VFlag)==0,1);break;case 112:this.Branch((this.P&this.VFlag)==this.VFlag,1);break;case 128:this.Branch(!0,1);break;case 68:this.PC++,this.Push(this.PCH()),this.Push(this.PCL()),this.Branch(!0,0);break;case 32:e=this.ABS(),this.PC+=2,this.Push(this.PCH()),this.Push(this.PCL()),this.PC=e,this.ClearTFlag();break;case 64:this.P=this.Pull(),this.toPCL(this.Pull()),this.toPCH(this.Pull());break;case 96:this.ClearTFlag(),this.toPCL(this.Pull()),this.toPCH(this.Pull()),this.PC++;break;case 76:this.PC=this.ABS(),this.ClearTFlag();break;case 108:this.PC=this.ABS_IND(),this.ClearTFlag();break;case 124:this.PC=this.ABS_X_IND(),this.ClearTFlag();break;case 0:this.PC+=2,this.Push(this.PCH()),this.Push(this.PCL()),this.SetBFlag(),this.Push(this.P),this.ClearDFlag(),this.ClearTFlag(),this.SetIFlag(),this.PC=this.Get16(65526);break;case 98:this.A=0,this.ClearTFlag();break;case 130:this.X=0,this.ClearTFlag();break;case 194:this.Y=0,this.ClearTFlag();break;case 24:this.ClearCFlag(),this.ClearTFlag();break;case 216:this.ClearDFlag(),this.ClearTFlag();break;case 88:this.ClearIFlag(),this.ClearTFlag();break;case 184:this.ClearVFlag(),this.ClearTFlag();break;case 56:this.SetCFlag(),this.ClearTFlag();break;case 248:this.SetDFlag(),this.ClearTFlag();break;case 120:this.SetIFlag(),this.ClearTFlag();break;case 244:this.SetTFlag();break;case 201:this.Compare(this.A,this.PC+1);break;case 197:this.Compare(this.A,this.ZP());break;case 213:this.Compare(this.A,this.ZP_X());break;case 210:this.Compare(this.A,this.IND());break;case 193:this.Compare(this.A,this.IND_X());break;case 209:this.Compare(this.A,this.IND_Y());break;case 205:this.Compare(this.A,this.ABS());break;case 221:this.Compare(this.A,this.ABS_X());break;case 217:this.Compare(this.A,this.ABS_Y());break;case 224:this.Compare(this.X,this.PC+1);break;case 228:this.Compare(this.X,this.ZP());break;case 236:this.Compare(this.X,this.ABS());break;case 192:this.Compare(this.Y,this.PC+1);break;case 196:this.Compare(this.Y,this.ZP());break;case 204:this.Compare(this.Y,this.ABS());break;case 198:t=this.ZP(),this.Set(t,this.Decrement(this.Get(t)));break;case 214:t=this.ZP_X(),this.Set(t,this.Decrement(this.Get(t)));break;case 206:t=this.ABS(),this.Set(t,this.Decrement(this.Get(t)));break;case 222:t=this.ABS_X(),this.Set(t,this.Decrement(this.Get(t)));break;case 58:this.A=this.Decrement(this.A);break;case 202:this.X=this.Decrement(this.X);break;case 136:this.Y=this.Decrement(this.Y);break;case 230:t=this.ZP(),this.Set(t,this.Increment(this.Get(t)));break;case 246:t=this.ZP_X(),this.Set(t,this.Increment(this.Get(t)));break;case 238:t=this.ABS(),this.Set(t,this.Increment(this.Get(t)));break;case 254:t=this.ABS_X(),this.Set(t,this.Increment(this.Get(t)));break;case 26:this.A=this.Increment(this.A);break;case 232:this.X=this.Increment(this.X);break;case 200:this.Y=this.Increment(this.Y);break;case 72:this.Push(this.A),this.ClearTFlag();break;case 8:this.Push(this.P),this.ClearTFlag();break;case 218:this.Push(this.X),this.ClearTFlag();break;case 90:this.Push(this.Y),this.ClearTFlag();break;case 104:this.A=this.Pull(),this.SetNZFlag(this.A),this.ClearTFlag();break;case 40:this.P=this.Pull();break;case 250:this.X=this.Pull(),this.SetNZFlag(this.X),this.ClearTFlag();break;case 122:this.Y=this.Pull(),this.SetNZFlag(this.Y),this.ClearTFlag();break;case 7:this.RMBi(0);break;case 23:this.RMBi(1);break;case 39:this.RMBi(2);break;case 55:this.RMBi(3);break;case 71:this.RMBi(4);break;case 87:this.RMBi(5);break;case 103:this.RMBi(6);break;case 119:this.RMBi(7);break;case 135:this.SMBi(0);break;case 151:this.SMBi(1);break;case 167:this.SMBi(2);break;case 183:this.SMBi(3);break;case 199:this.SMBi(4);break;case 215:this.SMBi(5);break;case 231:this.SMBi(6);break;case 247:this.SMBi(7);break;case 34:e=this.A,this.A=this.X,this.X=e,this.ClearTFlag();break;case 66:e=this.A,this.A=this.Y,this.Y=e,this.ClearTFlag();break;case 2:e=this.X,this.X=this.Y,this.Y=e,this.ClearTFlag();break;case 170:this.X=this.A,this.SetNZFlag(this.X),this.ClearTFlag();break;case 168:this.Y=this.A,this.SetNZFlag(this.Y),this.ClearTFlag();break;case 186:this.X=this.S,this.SetNZFlag(this.X),this.ClearTFlag();break;case 138:this.A=this.X,this.SetNZFlag(this.A),this.ClearTFlag();break;case 154:this.S=this.X,this.ClearTFlag();break;case 152:this.A=this.Y,this.SetNZFlag(this.A),this.ClearTFlag();break;case 137:this.BIT(this.PC+1);break;case 36:this.BIT(this.ZP());break;case 52:this.BIT(this.ZP_X());break;case 44:this.BIT(this.ABS());break;case 60:this.BIT(this.ABS_X());break;case 131:this.TST(this.PC+1,8192|this.Get(this.PC+2));break;case 163:this.TST(this.PC+1,8192|this.Get(this.PC+2)+this.X&255);break;case 147:this.TST(this.PC+1,this.Get16(this.PC+2));break;case 179:this.TST(this.PC+1,this.Get16(this.PC+2)+this.X&65535);break;case 20:this.TRB(this.ZP());break;case 28:this.TRB(this.ABS());break;case 4:this.TSB(this.ZP());break;case 12:this.TSB(this.ABS());break;case 169:this.A=this.Load(this.PC+1);break;case 165:this.A=this.Load(this.ZP());break;case 181:this.A=this.Load(this.ZP_X());break;case 178:this.A=this.Load(this.IND());break;case 161:this.A=this.Load(this.IND_X());break;case 177:this.A=this.Load(this.IND_Y());break;case 173:this.A=this.Load(this.ABS());break;case 189:this.A=this.Load(this.ABS_X());break;case 185:this.A=this.Load(this.ABS_Y());break;case 162:this.X=this.Load(this.PC+1);break;case 166:this.X=this.Load(this.ZP());break;case 182:this.X=this.Load(this.ZP_Y());break;case 174:this.X=this.Load(this.ABS());break;case 190:this.X=this.Load(this.ABS_Y());break;case 160:this.Y=this.Load(this.PC+1);break;case 164:this.Y=this.Load(this.ZP());break;case 180:this.Y=this.Load(this.ZP_X());break;case 172:this.Y=this.Load(this.ABS());break;case 188:this.Y=this.Load(this.ABS_X());break;case 133:this.Store(this.ZP(),this.A);break;case 149:this.Store(this.ZP_X(),this.A);break;case 146:this.Store(this.IND(),this.A);break;case 129:this.Store(this.IND_X(),this.A);break;case 145:this.Store(this.IND_Y(),this.A);break;case 141:this.Store(this.ABS(),this.A);break;case 157:this.Store(this.ABS_X(),this.A);break;case 153:this.Store(this.ABS_Y(),this.A);break;case 134:this.Store(this.ZP(),this.X);break;case 150:this.Store(this.ZP_Y(),this.X);break;case 142:this.Store(this.ABS(),this.X);break;case 132:this.Store(this.ZP(),this.Y);break;case 148:this.Store(this.ZP_X(),this.Y);break;case 140:this.Store(this.ABS(),this.Y);break;case 100:this.Store(this.ZP(),0);break;case 116:this.Store(this.ZP_X(),0);break;case 156:this.Store(this.ABS(),0);break;case 158:this.Store(this.ABS_X(),0);break;case 234:this.ClearTFlag();break;case 3:this.SetVDCRegister(this.Get(this.PC+1),this.VDCSelect),this.ClearTFlag();break;case 19:this.SetVDCLow(this.Get(this.PC+1),this.VDCSelect),this.ClearTFlag();break;case 35:this.SetVDCHigh(this.Get(this.PC+1),this.VDCSelect),this.ClearTFlag();break;case 83:for(s=this.Get(this.PC+1),i=1,s==0?s=this.MPRSelect:this.MPRSelect=s,a=0;a<8;a++)(s&i<>>13);break;case 243:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.TransferAlt=1,this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+this.TransferAlt&65535,this.TransferDist=this.TransferDist+1&65535,this.TransferLen=this.TransferLen-1&65535,this.TransferAlt=this.TransferAlt==1?-1:1,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 195:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc-1&65535,this.TransferDist=this.TransferDist-1&65535,this.TransferLen=this.TransferLen-1&65535,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 227:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.TransferAlt=1,this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+1&65535,this.TransferDist=this.TransferDist+this.TransferAlt&65535,this.TransferLen=this.TransferLen-1&65535,this.TransferAlt=this.TransferAlt==1?-1:1,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 115:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+1&65535,this.TransferDist=this.TransferDist+1&65535,this.TransferLen=this.TransferLen-1&65535,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 211:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+1&65535,this.TransferLen=this.TransferLen-1&65535,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 212:this.ClearTFlag(),this.CPUBaseClock=this.BaseClock7;break;case 84:this.ClearTFlag(),this.CPUBaseClock=this.BaseClock1;break;default:this.ClearTFlag();break}this.PC+=this.OpBytes[h],this.ProgressClock=(this.ProgressClock+this.OpCycles[h])*this.CPUBaseClock}Adder(t,e){let s,i=this.Get(t);!e&&(this.P&this.TFlag)==this.TFlag?(this.ProgressClock=3,s=this.Get(8192|this.X)):s=this.A,e&&(i=~i&255);let a=this.P&1,h=s+i+a;(this.P&this.DFlag)==0?((~s&~i&h|s&i&~h)&128)==128?this.SetVFlag():this.ClearVFlag():(this.ProgressClock+=1,e?((h&15)>9&&(h-=6),(h&240)>144&&(h-=96)):((s&15)+(i&15)+a>9&&(h+=6),(h&496)>144&&(h+=96))),h>255?this.SetCFlag():this.ClearCFlag(),h&=255,this.SetNZFlag(h),!e&&(this.P&this.TFlag)==this.TFlag?this.Set(8192|this.X,h):this.A=h,this.ClearTFlag()}ADC(t){this.Adder(t,!1)}SBC(t){this.Adder(t,!0)}AND(t){let e,s=this.Get(t);(this.P&this.TFlag)==0?e=this.A:(this.ProgressClock=3,e=this.Get(8192|this.X));let i=e&s;this.SetNZFlag(i),(this.P&this.TFlag)==0?this.A=i:this.Set(8192|this.X,i),this.ClearTFlag()}EOR(t){let e,s=this.Get(t);(this.P&this.TFlag)==0?e=this.A:(this.ProgressClock=3,e=this.Get(8192|this.X));let i=e^s;this.SetNZFlag(i),(this.P&this.TFlag)==0?this.A=i:this.Set(8192|this.X,i),this.ClearTFlag()}ORA(t){let e,s=this.Get(t);(this.P&this.TFlag)==0?e=this.A:(this.ProgressClock=3,e=this.Get(8192|this.X));let i=e|s;this.SetNZFlag(i),(this.P&this.TFlag)==0?this.A=i:this.Set(8192|this.X,i),this.ClearTFlag()}ASL(t){return t<<=1,t>255?this.SetCFlag():this.ClearCFlag(),t&=255,this.SetNZFlag(t),this.ClearTFlag(),t}LSR(t){return(t&1)==1?this.SetCFlag():this.ClearCFlag(),t>>=1,this.SetNZFlag(t),this.ClearTFlag(),t}ROL(t){return t=t<<1|this.P&1,t>255?this.SetCFlag():this.ClearCFlag(),t&=255,this.SetNZFlag(t),this.ClearTFlag(),t}ROR(t){let e=this.P&this.CFlag;return(t&1)==1?this.SetCFlag():this.ClearCFlag(),t=t>>1|e<<7,this.SetNZFlag(t),this.ClearTFlag(),t}BBRi(t){let e=this.Get(this.ZP());e=e>>t&1,this.Branch(e==0,2)}BBSi(t){let e=this.Get(this.ZP());e=e>>t&1,this.Branch(e==1,2)}Branch(t,e){if(this.ClearTFlag(),t){let s=this.Get(this.PC+e);s>=128&&(s|=65280),this.PC=this.PC+e+1+s&65535,this.ProgressClock=2}else this.PC+=e+1}Compare(t,e){t-=this.Get(e),t<0?this.ClearCFlag():this.SetCFlag(),this.ClearTFlag(),this.SetNZFlag(t&255)}Decrement(t){return t=t-1&255,this.SetNZFlag(t),this.ClearTFlag(),t}Increment(t){return t=t+1&255,this.SetNZFlag(t),this.ClearTFlag(),t}Push(t){this.Set(8448|this.S,t),this.S=this.S-1&255}Pull(){return this.S=this.S+1&255,this.Get(8448|this.S)}RMBi(t){let e=this.ZP();this.Set(e,this.Get(e)&~(1<>8}PCL(){return this.PC&255}toPCH(t){this.PC=this.PC&255|t<<8}toPCL(t){this.PC=this.PC&65280|t}StorageConstruct(){this.MPR=new Array(8),this.MPRSelect=0,this.RAM=new Uint8Array(32768),this.RAMMask=8191,this.BRAM=new Uint8Array(8192).fill(0),this.BRAMUse=!1,this.INTIRQ2=0,this.IntDisableRegister=0,this.Mapper=null,this.Mapper0=class extends this.MapperBase{constructor(t,e){super(t,e);let s=this.ROM.length-1;for(this.Address=524288;this.Address>0&&(this.Address&s)==0;)this.Address>>>=1}Read(t){return t>=this.ROM.length?this.ROM[t&this.Address-1|this.Address]:this.ROM[t]}},this.Mapper1=class extends this.MapperBase{constructor(t,e){super(t,e),this.Address=0}Init(){this.Address=0}Read(t){return t<524288?this.ROM[t]:this.ROM[this.Address|t&524287]}Write(t,e){this.Address=(t&15)+1<<19}},this.Mapper2=class extends this.MapperBase{constructor(t,e){super(t,e),this.ROM=t}Read(t){return this.ROM[t]||0}Write(t,e){t>=524288&&(this.ROM[t]=e)}}}GetIntStatus(){return~this.IntDisableRegister&this.GetIntReqest()}GetIntDisable(){return this.IntDisableRegister}SetIntDisable(t){this.IntDisableRegister=t,this.TimerAcknowledge()}GetIntReqest(){return(((this.VDC[0].VDCStatus|this.VDC[1].VDCStatus)&63)!=0?this.IRQ1Flag:0)|this.INTIRQ2|this.INTTIQ}SetIntReqest(t){this.TimerAcknowledge()}SetROM(t){this.Init();let e=t.slice(t.length%8192);this.Mapper=new this.Mapper0(e,this),this.CPUReset()}StorageInit(){this.RAM.fill(0),this.RAMMask=this.SuperGrafx?32767:8191,this.StorageReset()}StorageReset(){this.IntDisableRegister=0;for(let t=0;t<7;t++)this.MPR[t]=2088960;this.MPR[7]=0,this.MPRSelect=1}Get16(t){return this.Get(t+1)<<8|this.Get(t)}Get(t){if(t=this.MPR[t>>13]|t&8191,t<1048576)return this.Mapper.Read(t);if(t<2023424)return 255;if(t<2031616)return this.BRAMUse?this.BRAM[t&8191]:255;if(t<2064384)return this.RAM[t&this.RAMMask];if(t<2088960)return 255;if(t<2089984)if(this.SuperGrafx){let e=t&31;if(e<8)switch(t&3){case 0:return this.GetVDCStatus(0);case 1:return 0;case 2:return this.GetVDCLow(0);case 3:return this.GetVDCHigh(0)}else{if(e<16)return this.GetVPC(e&7);if(e<24)switch(t&3){case 0:return this.GetVDCStatus(1);case 1:return 0;case 2:return this.GetVDCLow(1);case 3:return this.GetVDCHigh(1)}else return 255}}else switch(t&3){case 0:return this.GetVDCStatus(0);case 1:return 0;case 2:return this.GetVDCLow(0);case 3:return this.GetVDCHigh(0)}if(t<2091008)switch(t&7){case 4:return this.GetVCEDataLow();case 5:return this.GetVCEDataHigh();default:return 0}if(t<2092032)return this.GetPSG(t&15);if(t<2093056)return this.ReadTimerCounter();if(t<2094080)return this.GetJoystick();if(t<2095104)switch(t&3){case 2:return this.GetIntDisable();case 3:return this.GetIntReqest();default:return 0}return 255}Set(t,e){if(t=this.MPR[t>>13]|t&8191,t<1048576){this.Mapper.Write(t,e);return}if(!(t<2023424)){if(t<2031616){this.BRAMUse&&(this.BRAM[t&8191]=e);return}if(t<2064384){this.RAM[t&this.RAMMask]=e;return}if(!(t<2088960)){if(t<2089984){if(this.SuperGrafx){let s=t&31;if(s<8)switch(t&3){case 0:this.SetVDCRegister(e,0);break;case 2:this.SetVDCLow(e,0);break;case 3:this.SetVDCHigh(e,0);break}else if(s<16)this.SetVPC(s&7,e);else if(s<24)switch(t&3){case 0:this.SetVDCRegister(e,1);break;case 2:this.SetVDCLow(e,1);break;case 3:this.SetVDCHigh(e,1);break}}else switch(t&3){case 0:this.SetVDCRegister(e,0);break;case 1:break;case 2:this.SetVDCLow(e,0);break;case 3:this.SetVDCHigh(e,0);break}return}if(t<2091008){switch(t&7){case 0:this.SetVCEControl(e);break;case 2:this.SetVCEAddressLow(e);break;case 3:this.SetVCEAddressHigh(e);break;case 4:this.SetVCEDataLow(e);break;case 5:this.SetVCEDataHigh(e);break}return}if(t<2092032){this.SetPSG(t&15,e);return}if(t<2093056){switch(t&1){case 0:this.WirteTimerReload(e);break;case 1:this.WirteTimerControl(e);break}return}if(t<2094080){this.SetJoystick(e);return}if(t<2095104){switch(t&3){case 2:this.SetIntDisable(e);break;case 3:this.SetIntReqest(e);break}return}}}}VCEConstruct(){this.Palette=new Array(512),this.PaletteData=new Array(512),this.MonoPaletteData=new Array(512),this.VCEBaseClock=0,this.VCEControl=0,this.VCEAddress=0,this.VCEData=0}VCEInit(){this.Palette.fill(0);for(let t=0;t<512;t++)this.PaletteData[t]={r:0,g:0,b:0},this.MonoPaletteData[t]={r:0,g:0,b:0};this.VCEBaseClock=this.BaseClock5,this.VCEControl=0,this.VCEAddress=0,this.VCEData=0}SetVCEControl(t){switch(this.VCEControl=t,t&3){case 0:this.VCEBaseClock=this.BaseClock5;break;case 1:this.VCEBaseClock=this.BaseClock7;break;case 2:case 3:this.VCEBaseClock=this.BaseClock10;break}}SetVCEAddressLow(t){this.VCEAddress=this.VCEAddress&65280|t}SetVCEAddressHigh(t){this.VCEAddress=(this.VCEAddress&255|t<<8)&511}GetVCEDataLow(){return this.Palette[this.VCEAddress]&255}GetVCEDataHigh(){let t=(this.Palette[this.VCEAddress]&65280)>>8;return this.VCEAddress=this.VCEAddress+1&511,t}SetVCEDataLow(t){this.Palette[this.VCEAddress]=this.Palette[this.VCEAddress]&65280|t,this.ToPalettes()}SetVCEDataHigh(t){this.Palette[this.VCEAddress]=this.Palette[this.VCEAddress]&255|t<<8,this.ToPalettes(),this.VCEAddress=this.VCEAddress+1&511}ToPalettes(){let t=this.Palette[this.VCEAddress],e=this.PaletteData[this.VCEAddress];e.r=(t>>3&7)*36,e.g=(t>>6&7)*36,e.b=(t&7)*36;let s=e.r*.299+e.g*.587+e.b*.114;this.MonoPaletteData[this.VCEAddress].r=s,this.MonoPaletteData[this.VCEAddress].g=s,this.MonoPaletteData[this.VCEAddress].b=s}VPCConstruct(){this.VPCRegister=new Uint8Array(8),this.VDCSelect=0,this.VPCWindow1=0,this.VPCWindow2=0,this.VPCPriority=new Uint8Array(4)}VPCInit(){this.VPCRegister.fill(0),this.VPCRegister[0]=17,this.VPCRegister[1]=17,this.VPCRegister[7]=255,this.VDCSelect=0,this.VPCWindow1=0,this.VPCWindow2=0,this.VPCPriority.fill(1)}SetVPC(t,e){t!=7&&(this.VPCRegister[t]=e,t==6&&(this.VDCSelect=e&1),(t==2||t==3)&&(this.VPCWindow1=(this.VPCRegister[2]|(this.VPCRegister[3]&3)<<8)-64,this.VPCWindow1<0&&(this.VPCWindow1=1024)),(t==4||t==5)&&(this.VPCWindow2=(this.VPCRegister[4]|(this.VPCRegister[5]&3)<<8)-64,this.VPCWindow2<0&&(this.VPCWindow2=-1)),t==0&&(this.VPCPriority[2]=this.VPCRegister[0]>>4,this.VPCPriority[3]=this.VPCRegister[0]&15),t==1&&(this.VPCPriority[0]=this.VPCRegister[1]>>4,this.VPCPriority[1]=this.VPCRegister[1]&15))}GetVPC(t){return this.VPCRegister[t]}VDCConstruct(){this.DrawFlag=!1,this.VDCPutLineProgressClock=0,this.VDCPutLine=0,this.VDC=new Array(2),this.VDCLineClock=1368,this.ScreenSize=[],this.ScreenSize[this.BaseClock5]=342,this.ScreenSize[this.BaseClock7]=456,this.ScreenSize[this.BaseClock10]=684,this.PutScreenSize=[],this.PutScreenSize[this.BaseClock5]=320,this.PutScreenSize[this.BaseClock7]=428,this.PutScreenSize[this.BaseClock10]=640,this.ScreenHeightMAX=262,this.ScreenWidthMAX=684,this.VScreenWidthArray=[],this.VScreenWidthArray[0]=32,this.VScreenWidthArray[16]=64,this.VScreenWidthArray[32]=128,this.VScreenWidthArray[48]=128,this.ReverseBit=new Uint8Array(256),this.ReverseBit=this.ReverseBit.map((t,e)=>(e&128)>>7|(e&64)>>5|(e&32)>>3|(e&16)>>1|(e&8)<<1|(e&4)<<3|(e&2)<<5|(e&1)<<7),this.ReverseBit16=new Uint16Array(65536).fill(0),this.ReverseBit16=this.ReverseBit16.map((t,e)=>this.ReverseBit[e&255]<<8|this.ReverseBit[(e&65280)>>8]),this.ReverseBit256=new Uint32Array(256).fill(0),this.ReverseBit256=this.ReverseBit256.map((t,e)=>{let s=this.ReverseBit[e];return(s&128)<<21|(s&64)<<18|(s&32)<<15|(s&16)<<12|(s&8)<<9|(s&4)<<6|(s&2)<<3|(s&1)<<0}),this.SPAddressMask=[],this.SPAddressMask[16]=[],this.SPAddressMask[32]=[],this.SPAddressMask[16][16]=2046,this.SPAddressMask[16][32]=2042,this.SPAddressMask[16][64]=2034,this.SPAddressMask[32][16]=2044,this.SPAddressMask[32][32]=2040,this.SPAddressMask[32][64]=2032}MakeSpriteLine(t){let e=this.VDC[t],s=e.SPLine;for(let o=0;o>8)+16;if(l=l>32?64:l,aP+l-1)continue;let x=(r[S+1]&1023)-32,C=((F&256)>>4)+16;if(x+C<=0)continue;let A=a-P;(F&32768)==32768&&(A=l-1-A);let c=(r[S+2]&this.SPAddressMask[C][l])<<5|((A&48)<<3|A&15),k,b,g,D;(F&2048)==0?(k=n[h[c]],b=n[h[c+16]],g=n[h[c+32]],D=n[h[c+48]],C==32&&(k|=n[h[c|64]]<<16,b|=n[h[(c|64)+16]]<<16,g|=n[h[(c|64)+32]]<<16,D|=n[h[(c|64)+48]]<<16)):(k=h[c],b=h[c+16],g=h[c+32],D=h[c+48],C==32&&(k=k<<16|h[c|64],b=b<<16|h[(c|64)+16],g=g<<16|h[(c|64)+32],D=D<<16|h[(c|64)+48]));let d=(F&15)<<4|256,L=F&128,B=0;for(x<0&&(B-=x,x=0);B>>B&1|b>>>B<<1&2|g>>>B<<2&4|D>>>B<<3&8;T!=0&&(f.data=T,f.palette=d,f.priority=L)}if(f.no==255&&(f.no=o),o!=0&&f.no==0&&(e.VDCStatus|=e.VDCRegister[5]&1),++i==256&&(e.VDCStatus|=e.VDCRegister[5]&2,e.SpriteLimit))return}}}MakeBGLine(t){let e=this.VDC[t],s=e.SPLine,i=e.BGLine,a=e.ScreenWidth,h=(e.HDS+e.HSW<<3)+e.DrawBGIndex;if((e.VDCRegister[5]&128)==128){let r=e.VScreenWidth-1,n=e.VDCRegister[7],o=n>>3&r;n=(n&7)<<2;let S=e.DrawBGLine,P=(S>>3&e.VScreenHeight-1)*e.VScreenWidth;S=S&7;let F=e.VRAM,l=0,x=this.ReverseBit256;for(;l>8,k=F[A],b=F[A+8],g=x[k&255]|x[(k&65280)>>8]<<1|x[b&255]<<2|x[(b&65280)>>8]<<3;for(;n<32&&l>>n&15,d=s[l];i[l+h]=d.data!=0&&(D==0||d.priority==128)?d.data|d.palette:D|(D==0?0:c)}n=0,o=o+1&r}}else for(let r=0;r0&&(e.VRAMtoSATBCount-=this.ProgressClock,e.VRAMtoSATBCount<=0&&(e.VDCStatus=e.VDCStatus&191|(e.VDCRegister[15]&1)<<3)),e.VRAMtoVRAMCount>0&&(e.VRAMtoVRAMCount-=this.ProgressClock,e.VRAMtoVRAMCount<=0&&(e.VDCStatus=e.VDCStatus&191|(e.VDCRegister[15]&2)<<3))}VDCProcess(t){let e=this.VDC[t];e.VDCProgressClock-=this.VDCLineClock,e.DrawBGIndex=0,e.BGLine.fill(256);for(let s=0;s261&&(i-=261),e.DrawBGYLine==i&&(e.VDCStatus|=(e.VDCRegister[5]&8)<<2,e.VRAMtoSATBStartFlag)){for(let a=0,h=e.VDCRegister[19];a<256;a++,h++)e.SATB[a]=e.VRAM[h];e.VRAMtoSATBCount=256*this.VCEBaseClock,e.VDCStatus|=64,e.VRAMtoSATBStartFlag=(e.VDCRegister[15]&16)==16}e.RasterCount++,e.DrawBGYLine==e.VDS+e.VSW-1&&(e.RasterCount=64),e.RasterCount==e.VDCRegister[6]&&(e.VDCStatus&32)==0&&(e.VDCStatus|=e.VDCRegister[5]&4),e.DrawBGIndex+=e.DrawLineWidth}}VDCRun(){for(this.VDCProcessDMA(0),this.VDC[0].VDCProgressClock+=this.ProgressClock,this.SuperGrafx&&(this.VDCProcessDMA(1),this.VDC[1].VDCProgressClock+=this.ProgressClock);this.VDC[0].VDCProgressClock>=this.VDCLineClock;)this.VDCProcess(0),this.SuperGrafx&&this.VDCProcess(1);if(this.VDCPutLineProgressClock+=this.ProgressClock,this.VDCPutLineProgressClock>=this.VDCLineClock){this.VDCPutLineProgressClock-=this.VDCLineClock,this.VDCPutLine++,this.VDCPutLine==this.ScreenHeightMAX&&(this.VDCPutLine=0,this.GetScreenSize(0),this.VDC[0].DrawBGYLine=0,this.SuperGrafx&&(this.GetScreenSize(1),this.VDC[1].DrawBGYLine=0),this.DrawFlag=!0,this.Ctx.putImageData(this.ImageData,0,0));let t=(this.VCEControl&128)==0?this.PaletteData:this.MonoPaletteData,e=this.ImageData.data,s=this.VDCPutLine*this.ScreenWidthMAX*4,i=t[256],a=this.ScreenSize[this.VCEBaseClock],h=this.VDC[0].BGLine;if(this.SuperGrafx){let r=this.VPCWindow1,n=this.VPCWindow2,o=this.VPCPriority,S=this.VDC[1].BGLine;for(let P=0;P=r&&(F|=1),P<=n&&(F|=2);let l=h[P],x=S[P],C;switch(o[F]){case 7:l>256||x>256?C=t[l>256?l:x]:C=t[(l&255)!=0?l:x];break;case 11:l<256&&l!=0?C=t[l]:C=t[(x&255)!=0?x:l];break;case 3:case 15:C=t[(l&255)!=0?l:x];break;case 1:case 5:case 9:case 13:C=t[l];break;case 2:case 6:case 10:case 14:C=t[x];break;default:C=i;break}e[s]=C.r,e[s+1]=C.g,e[s+2]=C.b}}else for(let r=0;rthis.ScreenWidthMAX&&(e.ScreenWidth=this.ScreenWidthMAX),e.HDS=(s[10]&32512)>>8,e.HSW=s[10]&31,e.HDE=(s[11]&32512)>>8,e.HDW=s[11]&127,e.VDS=(s[12]&65280)>>8,e.VSW=s[12]&31,e.VDW=s[13]&511,e.VCR=s[14]&255,e.ScreenSize=this.ScreenSize[this.VCEBaseClock],this.MainCanvas.width!=e.ScreenSize&&(this.MainCanvas.width=this.PutScreenSize[this.VCEBaseClock]),e.DrawLineWidth=e.HDS+e.HSW+e.HDE+e.HDW+1<<3,e.DrawLineWidth<=this.ScreenSize[this.BaseClock5]?e.DrawLineWidth=this.ScreenSize[this.BaseClock5]:e.DrawLineWidth<=this.ScreenSize[this.BaseClock7]?e.DrawLineWidth=this.ScreenSize[this.BaseClock7]:e.DrawLineWidth=this.ScreenSize[this.BaseClock10],e.VDCBurst=(s[5]&192)==0}VDCInit(){this.VDCPutLineProgressClock=0,this.VDCPutLine=0,this.DrawFlag=!1;for(let t=0;t<2;t++){this.VDC[t]={VDCRegister:new Uint16Array(20).fill(0),VRAM:new Uint16Array(65536).fill(0),SATB:new Uint16Array(256).fill(0),VDCBurst:!1,SpriteLimit:!1,SPLine:new Array(this.ScreenWidthMAX),BGLine:new Array(this.ScreenWidthMAX).fill(0),VDCStatus:0,VDCRegisterSelect:0,WriteVRAMData:0,VRAMtoSATBStartFlag:!1,VRAMtoSATBCount:0,VRAMtoVRAMCount:0,RasterCount:64,VDCProgressClock:0,DrawBGYLine:0,DrawBGLine:0,VScreenWidth:0,VScreenHeight:0,VScreenHeightMask:0,ScreenWidth:0,ScreenSize:0,DrawLineWidth:0,DrawBGIndex:0,HDS:0,HSW:0,HDE:0,HDW:0,VDS:0,VSW:0,VDW:0,VCR:0};for(let e=0;e0;n--)o[r]=o[h],h=h+i&65535,r=r+a&65535;return}s.VDCRegisterSelect==19&&(s.VRAMtoSATBStartFlag=!0)}GetVRAMIncrement(t){switch(this.VDC[t].VDCRegister[5]&6144){case 0:return 1;case 2048:return 32;case 4096:return 64;case 6144:return 128}}GetVDCStatus(t){let e=this.VDC[t].VDCStatus;return this.VDC[t].VDCStatus&=64,e}GetVDCLow(t){return this.VDC[t].VDCRegister[this.VDC[t].VDCRegisterSelect]&255}GetVDCHigh(t){let e=this.VDC[t];if(e.VDCRegisterSelect==2||e.VDCRegisterSelect==3){let s=(e.VDCRegister[2]&65280)>>8;return e.VDCRegister[2]=e.VRAM[e.VDCRegister[1]],e.VDCRegister[3]=e.VDCRegister[2],e.VDCRegister[1]=e.VDCRegister[1]+this.GetVRAMIncrement(t)&65535,s}return(e.VDCRegister[e.VDCRegisterSelect]&65280)>>8}SoundConstruct(){this.WaveDataArray=[],this.WaveClockCounter=0,this.WaveVolume=1,this.WebAudioCtx=null,this.WebAudioJsNode=null,this.WebAudioGainNode=null,this.WebAudioBufferSize=2048,this.PSGClock=3579545}WebAudioFunction(t){let e=[],s=[];for(let i=0;i<2;i++){if(e[i]=t.outputBuffer.getChannelData(i),s[i]=new Float32Array(this.WebAudioBufferSize),this.WaveDataArray[i].lengththis.WebAudioBufferSize*2&&(this.WaveDataArray[i]=this.WaveDataArray[i].slice(this.WebAudioBufferSize))}e[i].set(s[i])}}SoundInit(){this.WaveClockCounter=0,this.WaveDataArray=[],this.WaveDataArray[0]=[],this.WaveDataArray[1]=[],typeof AudioContext!="undefined"&&this.WebAudioCtx==null&&this.CreateAudioContext()}CreateAudioContext(){this.WebAudioCtx=new window.AudioContext,this.WebAudioJsNode=this.WebAudioCtx.createScriptProcessor(this.WebAudioBufferSize,0,2),this.WebAudioJsNode.onaudioprocess=this.WebAudioFunction.bind(this),this.WebAudioGainNode=this.WebAudioCtx.createGain(),this.WebAudioJsNode.connect(this.WebAudioGainNode),this.WebAudioGainNode.connect(this.WebAudioCtx.destination)}SoundSet(){let t,e,s,i,a,h;if(this.WaveClockCounter+=this.WebAudioCtx.sampleRate,this.WaveClockCounter>=this.PSGClock){for(this.WaveClockCounter-=this.PSGClock,t=0,e=0,a=0;a<6;a++)(a!=1||!this.WaveLfoOn)&&(s=this.PSGChannel[a],a<4||!s.noiseon?h=s.keyon?s.dda?s.R[6]&31:s.wave[s.index]:0:h=(s.noise&1)==1?15:0,t+=h*s.leftvol,e+=h*s.rightvol);this.WaveDataArray[0].push(t*this.WaveVolumeLeft),this.WaveDataArray[1].push(e*this.WaveVolumeRight),this.WebAudioGainNode.gain.value=this.WaveVolume}}PSGConstruct(){this.PSGChannel=new Array(6),this.PSGBaseClock=this.BaseClock3,this.PSGProgressClock=0,this.WaveVolumeLeft=0,this.WaveVolumeRight=0,this.WaveLfoOn=!1,this.WaveLfoControl=0,this.WaveLfoFreqency=0}PSGInit(){this.SoundInit();for(let t=0;t0;){for(e--,s=0,this.WaveLfoOn&&(i=this.PSGChannel[0],a=this.PSGChannel[1],i.keyon&&(i.count==0?(i.index=i.index+1&31,h=0,this.WaveLfoControl!=0&&(h=a.wave[a.index],h=h>15?h-32:h&15,h<<=4*(this.WaveLfoControl-1)),h=i.freq+h,h<0&&(h=0),i.count=h):i.count--,a.count==0?(a.index=a.index+1&31,a.count=a.freq*this.WaveLfoFreqency):a.count--),s=2);s<6;s++)t=this.PSGChannel[s],s<4||!t.noiseon?t.keyon&&!t.dda&&(t.count==0?(t.index=t.index+1&31,t.count=t.freq):t.count--):t.keyon&&!t.dda&&(t.count==0?(t.index=t.index+1&31,t.index==0&&(t.noise=t.noise>>1|(t.noise<<12^t.noise<<15)&32768),t.count=t.noisefreq):t.count--);this.SoundSet()}}SetPSG(t,e){if(t==0){this.PSGChannel[0].R[0]=e&7;return}if(this.PSGChannel[0].R[0]>5)return;let s=this.PSGChannel[this.PSGChannel[0].R[0]];switch(s.R[t]=e,t){case 1:this.PSGChannel[0].R[1]=e,this.WaveVolumeLeft=(e&240)>>4,this.WaveVolumeRight=e&15;return;case 2:case 3:s.freq=(s.R[3]<<8|s.R[2])&4095;return;case 4:s.keyon=(e&128)==128,s.dda=(e&64)==64,(e&64)==64&&(s.index=0),s.vol=e&31;case 5:let i=s.R[4]&31;s.leftvol=((s.R[5]&240)>>4)*i,s.rightvol=(s.R[5]&15)*i;return;case 6:s.dda||(s.wave[s.index]=e&31,s.index=s.index+1&31);return;case 7:s.noiseon=(e&128)==128,s.noisefreq=e&31^31;return;case 8:this.PSGChannel[0].R[8]=e,this.WaveLfoFreqency=e;return;case 9:this.PSGChannel[0].R[9]=e,this.WaveLfoOn=(e&128)==128,this.WaveLfoControl=e&3;return}}GetPSG(t){return t>9?255:t==0||t==1||t==8||t==9?this.PSGChannel[0].R[t]:this.PSGChannel[0].R[0]>5?255:this.PSGChannel[this.PSGChannel[0].R[0]].R[t]}TimerConstruct(){this.TimerBaseClock=this.BaseClock7,this.TimerReload=0,this.TimerFlag=!1,this.TimerCounter=0,this.TimerPrescaler=0,this.INTTIQ=0}TimerInit(){this.TimerReload=0,this.TimerFlag=!1,this.TimerCounter=0,this.TimerPrescaler=0,this.INTTIQ=0}ReadTimerCounter(){return this.TimerCounter}TimerAcknowledge(){this.INTTIQ=0}WirteTimerReload(t){this.TimerReload=t&127}WirteTimerControl(t){!this.TimerFlag&&(t&1)==1&&(this.TimerCounter=this.TimerReload,this.TimerPrescaler=0),this.TimerFlag=(t&1)==1}TimerRun(){if(this.TimerFlag)for(this.TimerPrescaler+=this.ProgressClock;this.TimerPrescaler>=1024*this.TimerBaseClock;)this.TimerPrescaler-=1024*this.TimerBaseClock,this.TimerCounter--,this.TimerCounter<0&&(this.TimerCounter=this.TimerReload,this.INTTIQ=this.TIQFlag)}JoystickConstruct(){this.JoystickSEL=0,this.JoystickCLR=0,this.KeyUpFunction=null,this.KeyDownFunction=null,this.Keybord=new Array(5).fill([]),this.Keybord=this.Keybord.map(t=>new Array(4)),this.GamePad=new Array(5).fill([]),this.GamePad=this.Keybord.map(t=>new Array(4)),this.GamePadSelect=0,this.GamePadButtonSelect=0,this.GamePadBuffer=0,this.GamePadData=[],this.GamePadData["STANDARD PAD"]=[[[{type:"B",index:1}],[{type:"B",index:0}],[{type:"B",index:8}],[{type:"B",index:9},{type:"B",index:2}],[{type:"B",index:12}],[{type:"B",index:13}],[{type:"B",index:14}],[{type:"B",index:15}]],[[{type:"B",index:1}],[{type:"B",index:0}],[{type:"B",index:8}],[{type:"B",index:9}],[{type:"B",index:12}],[{type:"B",index:13}],[{type:"B",index:14}],[{type:"B",index:15}],[{type:"B",index:7}],[{type:"B",index:5}],[{type:"B",index:2}],[{type:"B",index:3}]]],this.GamePadData["HORI PAD 3 TURBO (Vendor: 0f0d Product: 0009)"]=[[[{type:"B",index:2}],[{type:"B",index:1}],[{type:"B",index:8}],[{type:"B",index:9},{type:"B",index:0}],[{type:"P",index:9}],[{type:"N",index:0}],[{type:"N",index:0}],[{type:"N",index:0}]],[[{type:"B",index:2}],[{type:"B",index:1}],[{type:"B",index:8}],[{type:"B",index:9}],[{type:"P",index:9}],[{type:"N",index:0}],[{type:"N",index:0}],[{type:"N",index:0}],[{type:"B",index:7}],[{type:"B",index:5}],[{type:"B",index:0}],[{type:"B",index:3}]]],this.GamePadData["0f0d-0009-HORI PAD 3 TURBO"]=this.GamePadData["HORI PAD 3 TURBO (Vendor: 0f0d Product: 0009)"],this.GamePadData["UNKNOWN PAD"]=this.GamePadData["HORI PAD 3 TURBO (Vendor: 0f0d Product: 0009)"],this.GamePadKeyData=[{index:0,data:1},{index:0,data:2},{index:0,data:4},{index:0,data:8},{index:1,data:1},{index:1,data:4},{index:1,data:8},{index:1,data:2},{index:2,data:1},{index:2,data:2},{index:2,data:4},{index:2,data:8}],this.GamePadPovData=[1,3,2,6,4,12,8,9]}JoystickInit(){this.JoystickSEL=0,this.JoystickCLR=0;for(let t=0;t>1;if(this.JoystickSEL==1&&this.JoystickCLR==0&&e==1&&s==1){this.JoystickSEL=0,this.JoystickCLR=0,this.GamePadSelect=0,this.GamePadButton6&&(this.GamePadButtonSelect=this.GamePadButtonSelect^2),this.GamePadBuffer=176|this.CountryType;return}this.JoystickSEL==0&&this.JoystickCLR==0&&e==1&&s==0&&this.GamePadSelect++,this.JoystickSEL=e,this.JoystickCLR=s;let i=this.MultiTap?this.GamePadSelect-1:0;if(i<5){let a=this.GamePadButtonSelect|this.JoystickSEL;this.GamePadBuffer=this.Keybord[i][a]&this.GamePad[i][a]|this.CountryType}else this.GamePadBuffer=176|this.CountryType}GetJoystick(){return this.GamePadBuffer}UnsetButtonRUN(t){this.Keybord[t][0]|=8}UnsetButtonSELECT(t){this.Keybord[t][0]|=4}UnsetButtonSHOT2(t){this.Keybord[t][0]|=2}UnsetButtonSHOT1(t){this.Keybord[t][0]|=1}UnsetButtonLEFT(t){this.Keybord[t][1]|=8}UnsetButtonDOWN(t){this.Keybord[t][1]|=4}UnsetButtonRIGHT(t){this.Keybord[t][1]|=2}UnsetButtonUP(t){this.Keybord[t][1]|=1}UnsetButtonSHOT6(t){this.Keybord[t][2]|=8}UnsetButtonSHOT5(t){this.Keybord[t][2]|=4}UnsetButtonSHOT4(t){this.Keybord[t][2]|=2}UnsetButtonSHOT3(t){this.Keybord[t][2]|=1}SetButtonRUN(t){this.Keybord[t][0]&=-9}SetButtonSELECT(t){this.Keybord[t][0]&=-5}SetButtonSHOT2(t){this.Keybord[t][0]&=-3}SetButtonSHOT1(t){this.Keybord[t][0]&=-2}SetButtonLEFT(t){this.Keybord[t][1]&=-9}SetButtonDOWN(t){this.Keybord[t][1]&=-5}SetButtonRIGHT(t){this.Keybord[t][1]&=-3}SetButtonUP(t){this.Keybord[t][1]&=-2}SetButtonSHOT6(t){this.Keybord[t][2]&=-9}SetButtonSHOT5(t){this.Keybord[t][2]&=-5}SetButtonSHOT4(t){this.Keybord[t][2]&=-3}SetButtonSHOT3(t){this.Keybord[t][2]&=-2}CheckKeyUpFunction(t){switch(t.keyCode){case u.START.c:this.UnsetButtonRUN(0);break;case u.SELECT.c:this.UnsetButtonSELECT(0);break;case u.A.c:case u.GP_A.c:this.UnsetButtonSHOT2(0);break;case u.B.c:case u.GP_B.c:this.UnsetButtonSHOT1(0);break;case 86:this.UnsetButtonSHOT2(0);break;case 66:this.UnsetButtonSHOT1(0);break;case 37:this.UnsetButtonLEFT(0);break;case 39:this.UnsetButtonRIGHT(0);break;case 40:this.UnsetButtonDOWN(0);break;case 38:this.UnsetButtonUP(0);break;case 71:this.UnsetButtonSHOT6(0);break;case 70:this.UnsetButtonSHOT5(0);break;case 68:this.UnsetButtonSHOT4(0);break;case 67:this.UnsetButtonSHOT3(0);break}}CheckKeyDownFunction(t){switch(t.keyCode){case u.START.c:this.SetButtonRUN(0);break;case u.SELECT.c:this.SetButtonSELECT(0);break;case u.A.c:case u.GP_A.c:this.SetButtonSHOT2(0);break;case u.B.c:case u.GP_B.c:this.SetButtonSHOT1(0);break;case 86:this.SetButtonSHOT2(0);break;case 66:this.SetButtonSHOT1(0);break;case 37:this.SetButtonLEFT(0);break;case 39:this.SetButtonRIGHT(0);break;case 40:this.SetButtonDOWN(0);break;case 38:this.SetButtonUP(0);break;case 71:this.SetButtonSHOT6(0);break;case 70:this.SetButtonSHOT5(0);break;case 68:this.SetButtonSHOT4(0);break;case 67:this.SetButtonSHOT3(0);break}}JoystickEventInit(){this.KeyUpFunction=this.CheckKeyUpFunction.bind(this),this.KeyDownFunction=this.CheckKeyDownFunction.bind(this),this.MainCanvas.addEventListener("keyup",this.KeyUpFunction,!0),this.MainCanvas.addEventListener("keydown",this.KeyDownFunction,!0)}JoystickEventRelease(){this.MainCanvas.removeEventListener("keyup",this.KeyUpFunction,!0),this.MainCanvas.removeEventListener("keydown",this.KeyDownFunction,!0)}CheckGamePad(){for(let e=0;e.5&&(this.GamePad[e][this.GamePadKeyData[a].index]&=~this.GamePadKeyData[a].data);break;case"AB":s.axes[r.index]>-.75&&(this.GamePad[e][this.GamePadKeyData[a].index]&=~this.GamePadKeyData[a].data);break;case"P":let n=(s.axes[r.index]+1)*7/2+.5|0;this.GamePad[e][1]&=~(n<=7?this.GamePadPovData[n]:0);break}a++}}}}}; -//# sourceMappingURL=pce-QHW3U4S4.js.map +import"./chunk-RWTUUV4L.js";import{a as y}from"./chunk-UXRCACYH.js";import{L as m,R as G,Z as u}from"./chunk-V6TNHL6H.js";import"./chunk-N7W4C4V2.js";var M=[{id:"gfxtest.c",name:"Graphics Test (tiles/sprites)"},{id:"perftest.c",name:"Graphics Pipeline Benchmark"},{id:"solarian.c",name:"Solarian"},{id:"chase.c",name:"Chase"},{id:"test_conio.c",name:"Hello World (conio)"},{id:"siegegame.c",name:"Siege Game (conio)"},{id:"hello.wiz",name:"Hello World (Wiz)"}],V=class{constructor(t){this.mainElement=t}start(){this.pce=new R,this.video=new G(this.mainElement,684,262,{overscan:!0,aspect:4/3}),this.video.create(),this.pce.SetCanvas(this.video.canvas)}reset(){this.pce.Reset()}isRunning(){return this.pce.TimerID!=null}pause(){this.pce.Pause()}resume(){this.pce.CreateAudioContext(),this.pce.Start()}getPresets(){return M}loadROM(t,e){this.pce.Pause(),this.pce.Init(),this.pce.SetROM(e)}advance(t){return this.pce.Run(),1}getPlatformName(){return"PC Engine"}getToolForFilename(t){return y(t)}getDefaultExtensions(){return[".c",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}showHelp(){return"https://8bitworkshop.com/docs/platforms/pce/"}readAddress(t){return this.pce.Get(t)}writeAddress(t,e){this.pce.Set(t,e)}readVRAMAddress(t){return this.pce.VDC[0].VRAM[t]}};m.pce=V;var R=class{constructor(){this.MainCanvas=null;this.Ctx=null;this.ImageData=null;this.MapperBase=class{constructor(t,e){this.ROM=t,this.Core=e}Init(){}Read(t){return 255}Write(t,e){}};this.VDCSelect=0;this.ScreenWidthMAX=0;this.ScreenHeightMAX=0;this.SuperGrafx=!1,this.CountryTypePCE=64,this.CountryTypeTG16=0,this.CountryType=this.CountryTypePCE,this.GamePadButton6=!1,this.MultiTap=!1,this.EtcConstruct(),this.CPUConstruct(),this.StorageConstruct(),this.VCEConstruct(),this.VPCConstruct(),this.VDCConstruct(),this.SoundConstruct(),this.PSGConstruct(),this.TimerConstruct(),this.JoystickConstruct()}EtcConstruct(){this.TimerID=null,this.MainCanvas=null,this.Ctx=null,this.ImageData=null}UpdateAnimationFrame(){this.TimerID=window.requestAnimationFrame(this.UpdateAnimationFrame.bind(this)),this.Run()}CancelAnimationFrame(){window.cancelAnimationFrame(this.TimerID),this.TimerID=null}Pause(){this.TimerID!=null&&(this.JoystickEventRelease(),this.CancelAnimationFrame())}Start(){this.TimerID==null&&(this.JoystickEventInit(),this.UpdateAnimationFrame())}Run(){for(this.CheckGamePad(),this.DrawFlag=!1;!this.DrawFlag;)this.CPURun(),this.VDCRun(),this.TimerRun(),this.PSGRun()}Reset(){this.StorageReset(),this.Mapper.Init(),this.CPUInit(),this.VCEInit(),this.VPCInit(),this.VDCInit(),this.TimerInit(),this.JoystickInit(),this.PSGInit(),this.CPUReset()}Init(){this.StorageInit(),this.CPUInit(),this.VCEInit(),this.VPCInit(),this.VDCInit(),this.TimerInit(),this.JoystickInit(),this.PSGInit()}SetCanvas(t){if(this.MainCanvas=t,!this.MainCanvas.getContext)return!1;this.Ctx=this.MainCanvas.getContext("2d"),this.ImageData=this.Ctx.createImageData(this.MainCanvas.width,this.MainCanvas.height);for(let e=0;ee&128),this.NZCacheTable[0]=2,this.NFlag=128,this.VFlag=64,this.TFlag=32,this.BFlag=16,this.DFlag=8,this.IFlag=4,this.ZFlag=2,this.CFlag=1,this.TIQFlag=4,this.IRQ1Flag=2,this.IRQ2Flag=1,this.ProgressClock=0,this.CPUBaseClock=0,this.BaseClock1=12,this.BaseClock3=6,this.BaseClock5=4,this.BaseClock7=3,this.BaseClock10=2,this.TransferSrc=0,this.TransferDist=0,this.TransferLen=0,this.TransferAlt=0}CPUReset(){this.TransferSrc=0,this.TransferDist=0,this.TransferLen=0,this.TransferAlt=0,this.CPUBaseClock=this.BaseClock1,this.SetIFlag(),this.PC=this.Get16(65534)}CPUInit(){this.A=0,this.X=0,this.Y=0,this.PC=0,this.S=0,this.P=0,this.ProgressClock=0,this.CPUBaseClock=this.BaseClock1,this.TransferSrc=0,this.TransferDist=0,this.TransferLen=0,this.TransferAlt=0,this.LastInt=0}CPURun(){this.ProgressClock=0;let t=this.LastInt;this.LastInt=(this.P&this.IFlag)==0?this.GetIntStatus():0,t!=0&&this.TransferLen==0?(this.LastInt=0,(t&this.TIQFlag)==this.TIQFlag?(this.Push(this.PCH()),this.Push(this.PCL()),this.Push(this.P),this.P=4,this.PC=this.Get16(65530)):(t&this.IRQ1Flag)==this.IRQ1Flag?(this.Push(this.PCH()),this.Push(this.PCL()),this.Push(this.P),this.P=4,this.PC=this.Get16(65528)):(t&this.IRQ2Flag)==this.IRQ2Flag&&(this.Push(this.PCH()),this.Push(this.PCL()),this.Push(this.P),this.SetIFlag(),this.PC=this.Get16(65526)),this.ProgressClock=8*this.CPUBaseClock):this.OpExec()}OpExec(){let t,e,s,i,a,h=this.Get(this.PC);switch(h){case 105:this.ADC(this.PC+1);break;case 101:this.ADC(this.ZP());break;case 117:this.ADC(this.ZP_X());break;case 114:this.ADC(this.IND());break;case 97:this.ADC(this.IND_X());break;case 113:this.ADC(this.IND_Y());break;case 109:this.ADC(this.ABS());break;case 125:this.ADC(this.ABS_X());break;case 121:this.ADC(this.ABS_Y());break;case 233:this.SBC(this.PC+1);break;case 229:this.SBC(this.ZP());break;case 245:this.SBC(this.ZP_X());break;case 242:this.SBC(this.IND());break;case 225:this.SBC(this.IND_X());break;case 241:this.SBC(this.IND_Y());break;case 237:this.SBC(this.ABS());break;case 253:this.SBC(this.ABS_X());break;case 249:this.SBC(this.ABS_Y());break;case 41:this.AND(this.PC+1);break;case 37:this.AND(this.ZP());break;case 53:this.AND(this.ZP_X());break;case 50:this.AND(this.IND());break;case 33:this.AND(this.IND_X());break;case 49:this.AND(this.IND_Y());break;case 45:this.AND(this.ABS());break;case 61:this.AND(this.ABS_X());break;case 57:this.AND(this.ABS_Y());break;case 73:this.EOR(this.PC+1);break;case 69:this.EOR(this.ZP());break;case 85:this.EOR(this.ZP_X());break;case 82:this.EOR(this.IND());break;case 65:this.EOR(this.IND_X());break;case 81:this.EOR(this.IND_Y());break;case 77:this.EOR(this.ABS());break;case 93:this.EOR(this.ABS_X());break;case 89:this.EOR(this.ABS_Y());break;case 9:this.ORA(this.PC+1);break;case 5:this.ORA(this.ZP());break;case 21:this.ORA(this.ZP_X());break;case 18:this.ORA(this.IND());break;case 1:this.ORA(this.IND_X());break;case 17:this.ORA(this.IND_Y());break;case 13:this.ORA(this.ABS());break;case 29:this.ORA(this.ABS_X());break;case 25:this.ORA(this.ABS_Y());break;case 6:t=this.ZP(),this.Set(t,this.ASL(this.Get(t)));break;case 22:t=this.ZP_X(),this.Set(t,this.ASL(this.Get(t)));break;case 14:t=this.ABS(),this.Set(t,this.ASL(this.Get(t)));break;case 30:t=this.ABS_X(),this.Set(t,this.ASL(this.Get(t)));break;case 10:this.A=this.ASL(this.A);break;case 70:t=this.ZP(),this.Set(t,this.LSR(this.Get(t)));break;case 86:t=this.ZP_X(),this.Set(t,this.LSR(this.Get(t)));break;case 78:t=this.ABS(),this.Set(t,this.LSR(this.Get(t)));break;case 94:t=this.ABS_X(),this.Set(t,this.LSR(this.Get(t)));break;case 74:this.A=this.LSR(this.A);break;case 38:t=this.ZP(),this.Set(t,this.ROL(this.Get(t)));break;case 54:t=this.ZP_X(),this.Set(t,this.ROL(this.Get(t)));break;case 46:t=this.ABS(),this.Set(t,this.ROL(this.Get(t)));break;case 62:t=this.ABS_X(),this.Set(t,this.ROL(this.Get(t)));break;case 42:this.A=this.ROL(this.A);break;case 102:t=this.ZP(),this.Set(t,this.ROR(this.Get(t)));break;case 118:t=this.ZP_X(),this.Set(t,this.ROR(this.Get(t)));break;case 110:t=this.ABS(),this.Set(t,this.ROR(this.Get(t)));break;case 126:t=this.ABS_X(),this.Set(t,this.ROR(this.Get(t)));break;case 106:this.A=this.ROR(this.A);break;case 15:this.BBRi(0);break;case 31:this.BBRi(1);break;case 47:this.BBRi(2);break;case 63:this.BBRi(3);break;case 79:this.BBRi(4);break;case 95:this.BBRi(5);break;case 111:this.BBRi(6);break;case 127:this.BBRi(7);break;case 143:this.BBSi(0);break;case 159:this.BBSi(1);break;case 175:this.BBSi(2);break;case 191:this.BBSi(3);break;case 207:this.BBSi(4);break;case 223:this.BBSi(5);break;case 239:this.BBSi(6);break;case 255:this.BBSi(7);break;case 144:this.Branch((this.P&this.CFlag)==0,1);break;case 176:this.Branch((this.P&this.CFlag)==this.CFlag,1);break;case 208:this.Branch((this.P&this.ZFlag)==0,1);break;case 240:this.Branch((this.P&this.ZFlag)==this.ZFlag,1);break;case 16:this.Branch((this.P&this.NFlag)==0,1);break;case 48:this.Branch((this.P&this.NFlag)==this.NFlag,1);break;case 80:this.Branch((this.P&this.VFlag)==0,1);break;case 112:this.Branch((this.P&this.VFlag)==this.VFlag,1);break;case 128:this.Branch(!0,1);break;case 68:this.PC++,this.Push(this.PCH()),this.Push(this.PCL()),this.Branch(!0,0);break;case 32:e=this.ABS(),this.PC+=2,this.Push(this.PCH()),this.Push(this.PCL()),this.PC=e,this.ClearTFlag();break;case 64:this.P=this.Pull(),this.toPCL(this.Pull()),this.toPCH(this.Pull());break;case 96:this.ClearTFlag(),this.toPCL(this.Pull()),this.toPCH(this.Pull()),this.PC++;break;case 76:this.PC=this.ABS(),this.ClearTFlag();break;case 108:this.PC=this.ABS_IND(),this.ClearTFlag();break;case 124:this.PC=this.ABS_X_IND(),this.ClearTFlag();break;case 0:this.PC+=2,this.Push(this.PCH()),this.Push(this.PCL()),this.SetBFlag(),this.Push(this.P),this.ClearDFlag(),this.ClearTFlag(),this.SetIFlag(),this.PC=this.Get16(65526);break;case 98:this.A=0,this.ClearTFlag();break;case 130:this.X=0,this.ClearTFlag();break;case 194:this.Y=0,this.ClearTFlag();break;case 24:this.ClearCFlag(),this.ClearTFlag();break;case 216:this.ClearDFlag(),this.ClearTFlag();break;case 88:this.ClearIFlag(),this.ClearTFlag();break;case 184:this.ClearVFlag(),this.ClearTFlag();break;case 56:this.SetCFlag(),this.ClearTFlag();break;case 248:this.SetDFlag(),this.ClearTFlag();break;case 120:this.SetIFlag(),this.ClearTFlag();break;case 244:this.SetTFlag();break;case 201:this.Compare(this.A,this.PC+1);break;case 197:this.Compare(this.A,this.ZP());break;case 213:this.Compare(this.A,this.ZP_X());break;case 210:this.Compare(this.A,this.IND());break;case 193:this.Compare(this.A,this.IND_X());break;case 209:this.Compare(this.A,this.IND_Y());break;case 205:this.Compare(this.A,this.ABS());break;case 221:this.Compare(this.A,this.ABS_X());break;case 217:this.Compare(this.A,this.ABS_Y());break;case 224:this.Compare(this.X,this.PC+1);break;case 228:this.Compare(this.X,this.ZP());break;case 236:this.Compare(this.X,this.ABS());break;case 192:this.Compare(this.Y,this.PC+1);break;case 196:this.Compare(this.Y,this.ZP());break;case 204:this.Compare(this.Y,this.ABS());break;case 198:t=this.ZP(),this.Set(t,this.Decrement(this.Get(t)));break;case 214:t=this.ZP_X(),this.Set(t,this.Decrement(this.Get(t)));break;case 206:t=this.ABS(),this.Set(t,this.Decrement(this.Get(t)));break;case 222:t=this.ABS_X(),this.Set(t,this.Decrement(this.Get(t)));break;case 58:this.A=this.Decrement(this.A);break;case 202:this.X=this.Decrement(this.X);break;case 136:this.Y=this.Decrement(this.Y);break;case 230:t=this.ZP(),this.Set(t,this.Increment(this.Get(t)));break;case 246:t=this.ZP_X(),this.Set(t,this.Increment(this.Get(t)));break;case 238:t=this.ABS(),this.Set(t,this.Increment(this.Get(t)));break;case 254:t=this.ABS_X(),this.Set(t,this.Increment(this.Get(t)));break;case 26:this.A=this.Increment(this.A);break;case 232:this.X=this.Increment(this.X);break;case 200:this.Y=this.Increment(this.Y);break;case 72:this.Push(this.A),this.ClearTFlag();break;case 8:this.Push(this.P),this.ClearTFlag();break;case 218:this.Push(this.X),this.ClearTFlag();break;case 90:this.Push(this.Y),this.ClearTFlag();break;case 104:this.A=this.Pull(),this.SetNZFlag(this.A),this.ClearTFlag();break;case 40:this.P=this.Pull();break;case 250:this.X=this.Pull(),this.SetNZFlag(this.X),this.ClearTFlag();break;case 122:this.Y=this.Pull(),this.SetNZFlag(this.Y),this.ClearTFlag();break;case 7:this.RMBi(0);break;case 23:this.RMBi(1);break;case 39:this.RMBi(2);break;case 55:this.RMBi(3);break;case 71:this.RMBi(4);break;case 87:this.RMBi(5);break;case 103:this.RMBi(6);break;case 119:this.RMBi(7);break;case 135:this.SMBi(0);break;case 151:this.SMBi(1);break;case 167:this.SMBi(2);break;case 183:this.SMBi(3);break;case 199:this.SMBi(4);break;case 215:this.SMBi(5);break;case 231:this.SMBi(6);break;case 247:this.SMBi(7);break;case 34:e=this.A,this.A=this.X,this.X=e,this.ClearTFlag();break;case 66:e=this.A,this.A=this.Y,this.Y=e,this.ClearTFlag();break;case 2:e=this.X,this.X=this.Y,this.Y=e,this.ClearTFlag();break;case 170:this.X=this.A,this.SetNZFlag(this.X),this.ClearTFlag();break;case 168:this.Y=this.A,this.SetNZFlag(this.Y),this.ClearTFlag();break;case 186:this.X=this.S,this.SetNZFlag(this.X),this.ClearTFlag();break;case 138:this.A=this.X,this.SetNZFlag(this.A),this.ClearTFlag();break;case 154:this.S=this.X,this.ClearTFlag();break;case 152:this.A=this.Y,this.SetNZFlag(this.A),this.ClearTFlag();break;case 137:this.BIT(this.PC+1);break;case 36:this.BIT(this.ZP());break;case 52:this.BIT(this.ZP_X());break;case 44:this.BIT(this.ABS());break;case 60:this.BIT(this.ABS_X());break;case 131:this.TST(this.PC+1,8192|this.Get(this.PC+2));break;case 163:this.TST(this.PC+1,8192|this.Get(this.PC+2)+this.X&255);break;case 147:this.TST(this.PC+1,this.Get16(this.PC+2));break;case 179:this.TST(this.PC+1,this.Get16(this.PC+2)+this.X&65535);break;case 20:this.TRB(this.ZP());break;case 28:this.TRB(this.ABS());break;case 4:this.TSB(this.ZP());break;case 12:this.TSB(this.ABS());break;case 169:this.A=this.Load(this.PC+1);break;case 165:this.A=this.Load(this.ZP());break;case 181:this.A=this.Load(this.ZP_X());break;case 178:this.A=this.Load(this.IND());break;case 161:this.A=this.Load(this.IND_X());break;case 177:this.A=this.Load(this.IND_Y());break;case 173:this.A=this.Load(this.ABS());break;case 189:this.A=this.Load(this.ABS_X());break;case 185:this.A=this.Load(this.ABS_Y());break;case 162:this.X=this.Load(this.PC+1);break;case 166:this.X=this.Load(this.ZP());break;case 182:this.X=this.Load(this.ZP_Y());break;case 174:this.X=this.Load(this.ABS());break;case 190:this.X=this.Load(this.ABS_Y());break;case 160:this.Y=this.Load(this.PC+1);break;case 164:this.Y=this.Load(this.ZP());break;case 180:this.Y=this.Load(this.ZP_X());break;case 172:this.Y=this.Load(this.ABS());break;case 188:this.Y=this.Load(this.ABS_X());break;case 133:this.Store(this.ZP(),this.A);break;case 149:this.Store(this.ZP_X(),this.A);break;case 146:this.Store(this.IND(),this.A);break;case 129:this.Store(this.IND_X(),this.A);break;case 145:this.Store(this.IND_Y(),this.A);break;case 141:this.Store(this.ABS(),this.A);break;case 157:this.Store(this.ABS_X(),this.A);break;case 153:this.Store(this.ABS_Y(),this.A);break;case 134:this.Store(this.ZP(),this.X);break;case 150:this.Store(this.ZP_Y(),this.X);break;case 142:this.Store(this.ABS(),this.X);break;case 132:this.Store(this.ZP(),this.Y);break;case 148:this.Store(this.ZP_X(),this.Y);break;case 140:this.Store(this.ABS(),this.Y);break;case 100:this.Store(this.ZP(),0);break;case 116:this.Store(this.ZP_X(),0);break;case 156:this.Store(this.ABS(),0);break;case 158:this.Store(this.ABS_X(),0);break;case 234:this.ClearTFlag();break;case 3:this.SetVDCRegister(this.Get(this.PC+1),this.VDCSelect),this.ClearTFlag();break;case 19:this.SetVDCLow(this.Get(this.PC+1),this.VDCSelect),this.ClearTFlag();break;case 35:this.SetVDCHigh(this.Get(this.PC+1),this.VDCSelect),this.ClearTFlag();break;case 83:for(s=this.Get(this.PC+1),i=1,s==0?s=this.MPRSelect:this.MPRSelect=s,a=0;a<8;a++)(s&i<>>13);break;case 243:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.TransferAlt=1,this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+this.TransferAlt&65535,this.TransferDist=this.TransferDist+1&65535,this.TransferLen=this.TransferLen-1&65535,this.TransferAlt=this.TransferAlt==1?-1:1,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 195:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc-1&65535,this.TransferDist=this.TransferDist-1&65535,this.TransferLen=this.TransferLen-1&65535,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 227:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.TransferAlt=1,this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+1&65535,this.TransferDist=this.TransferDist+this.TransferAlt&65535,this.TransferLen=this.TransferLen-1&65535,this.TransferAlt=this.TransferAlt==1?-1:1,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 115:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+1&65535,this.TransferDist=this.TransferDist+1&65535,this.TransferLen=this.TransferLen-1&65535,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 211:this.TransferLen==0&&(this.TransferSrc=this.Get16(this.PC+1),this.TransferDist=this.Get16(this.PC+3),this.TransferLen=this.Get16(this.PC+5),this.ProgressClock=17),this.Set(this.TransferDist,this.Get(this.TransferSrc)),this.TransferSrc=this.TransferSrc+1&65535,this.TransferLen=this.TransferLen-1&65535,this.ProgressClock+=6,this.TransferLen==0&&(this.ClearTFlag(),this.PC+=7);break;case 212:this.ClearTFlag(),this.CPUBaseClock=this.BaseClock7;break;case 84:this.ClearTFlag(),this.CPUBaseClock=this.BaseClock1;break;default:this.ClearTFlag();break}this.PC+=this.OpBytes[h],this.ProgressClock=(this.ProgressClock+this.OpCycles[h])*this.CPUBaseClock}Adder(t,e){let s,i=this.Get(t);!e&&(this.P&this.TFlag)==this.TFlag?(this.ProgressClock=3,s=this.Get(8192|this.X)):s=this.A,e&&(i=~i&255);let a=this.P&1,h=s+i+a;(this.P&this.DFlag)==0?((~s&~i&h|s&i&~h)&128)==128?this.SetVFlag():this.ClearVFlag():(this.ProgressClock+=1,e?((h&15)>9&&(h-=6),(h&240)>144&&(h-=96)):((s&15)+(i&15)+a>9&&(h+=6),(h&496)>144&&(h+=96))),h>255?this.SetCFlag():this.ClearCFlag(),h&=255,this.SetNZFlag(h),!e&&(this.P&this.TFlag)==this.TFlag?this.Set(8192|this.X,h):this.A=h,this.ClearTFlag()}ADC(t){this.Adder(t,!1)}SBC(t){this.Adder(t,!0)}AND(t){let e,s=this.Get(t);(this.P&this.TFlag)==0?e=this.A:(this.ProgressClock=3,e=this.Get(8192|this.X));let i=e&s;this.SetNZFlag(i),(this.P&this.TFlag)==0?this.A=i:this.Set(8192|this.X,i),this.ClearTFlag()}EOR(t){let e,s=this.Get(t);(this.P&this.TFlag)==0?e=this.A:(this.ProgressClock=3,e=this.Get(8192|this.X));let i=e^s;this.SetNZFlag(i),(this.P&this.TFlag)==0?this.A=i:this.Set(8192|this.X,i),this.ClearTFlag()}ORA(t){let e,s=this.Get(t);(this.P&this.TFlag)==0?e=this.A:(this.ProgressClock=3,e=this.Get(8192|this.X));let i=e|s;this.SetNZFlag(i),(this.P&this.TFlag)==0?this.A=i:this.Set(8192|this.X,i),this.ClearTFlag()}ASL(t){return t<<=1,t>255?this.SetCFlag():this.ClearCFlag(),t&=255,this.SetNZFlag(t),this.ClearTFlag(),t}LSR(t){return(t&1)==1?this.SetCFlag():this.ClearCFlag(),t>>=1,this.SetNZFlag(t),this.ClearTFlag(),t}ROL(t){return t=t<<1|this.P&1,t>255?this.SetCFlag():this.ClearCFlag(),t&=255,this.SetNZFlag(t),this.ClearTFlag(),t}ROR(t){let e=this.P&this.CFlag;return(t&1)==1?this.SetCFlag():this.ClearCFlag(),t=t>>1|e<<7,this.SetNZFlag(t),this.ClearTFlag(),t}BBRi(t){let e=this.Get(this.ZP());e=e>>t&1,this.Branch(e==0,2)}BBSi(t){let e=this.Get(this.ZP());e=e>>t&1,this.Branch(e==1,2)}Branch(t,e){if(this.ClearTFlag(),t){let s=this.Get(this.PC+e);s>=128&&(s|=65280),this.PC=this.PC+e+1+s&65535,this.ProgressClock=2}else this.PC+=e+1}Compare(t,e){t-=this.Get(e),t<0?this.ClearCFlag():this.SetCFlag(),this.ClearTFlag(),this.SetNZFlag(t&255)}Decrement(t){return t=t-1&255,this.SetNZFlag(t),this.ClearTFlag(),t}Increment(t){return t=t+1&255,this.SetNZFlag(t),this.ClearTFlag(),t}Push(t){this.Set(8448|this.S,t),this.S=this.S-1&255}Pull(){return this.S=this.S+1&255,this.Get(8448|this.S)}RMBi(t){let e=this.ZP();this.Set(e,this.Get(e)&~(1<>8}PCL(){return this.PC&255}toPCH(t){this.PC=this.PC&255|t<<8}toPCL(t){this.PC=this.PC&65280|t}StorageConstruct(){this.MPR=new Array(8),this.MPRSelect=0,this.RAM=new Uint8Array(32768),this.RAMMask=8191,this.BRAM=new Uint8Array(8192).fill(0),this.BRAMUse=!1,this.INTIRQ2=0,this.IntDisableRegister=0,this.Mapper=null,this.Mapper0=class extends this.MapperBase{constructor(t,e){super(t,e);let s=this.ROM.length-1;for(this.Address=524288;this.Address>0&&(this.Address&s)==0;)this.Address>>>=1}Read(t){return t>=this.ROM.length?this.ROM[t&this.Address-1|this.Address]:this.ROM[t]}},this.Mapper1=class extends this.MapperBase{constructor(t,e){super(t,e),this.Address=0}Init(){this.Address=0}Read(t){return t<524288?this.ROM[t]:this.ROM[this.Address|t&524287]}Write(t,e){this.Address=(t&15)+1<<19}},this.Mapper2=class extends this.MapperBase{constructor(t,e){super(t,e),this.ROM=t}Read(t){return this.ROM[t]||0}Write(t,e){t>=524288&&(this.ROM[t]=e)}}}GetIntStatus(){return~this.IntDisableRegister&this.GetIntReqest()}GetIntDisable(){return this.IntDisableRegister}SetIntDisable(t){this.IntDisableRegister=t,this.TimerAcknowledge()}GetIntReqest(){return(((this.VDC[0].VDCStatus|this.VDC[1].VDCStatus)&63)!=0?this.IRQ1Flag:0)|this.INTIRQ2|this.INTTIQ}SetIntReqest(t){this.TimerAcknowledge()}SetROM(t){this.Init();let e=t.slice(t.length%8192);this.Mapper=new this.Mapper0(e,this),this.CPUReset()}StorageInit(){this.RAM.fill(0),this.RAMMask=this.SuperGrafx?32767:8191,this.StorageReset()}StorageReset(){this.IntDisableRegister=0;for(let t=0;t<7;t++)this.MPR[t]=2088960;this.MPR[7]=0,this.MPRSelect=1}Get16(t){return this.Get(t+1)<<8|this.Get(t)}Get(t){if(t=this.MPR[t>>13]|t&8191,t<1048576)return this.Mapper.Read(t);if(t<2023424)return 255;if(t<2031616)return this.BRAMUse?this.BRAM[t&8191]:255;if(t<2064384)return this.RAM[t&this.RAMMask];if(t<2088960)return 255;if(t<2089984)if(this.SuperGrafx){let e=t&31;if(e<8)switch(t&3){case 0:return this.GetVDCStatus(0);case 1:return 0;case 2:return this.GetVDCLow(0);case 3:return this.GetVDCHigh(0)}else{if(e<16)return this.GetVPC(e&7);if(e<24)switch(t&3){case 0:return this.GetVDCStatus(1);case 1:return 0;case 2:return this.GetVDCLow(1);case 3:return this.GetVDCHigh(1)}else return 255}}else switch(t&3){case 0:return this.GetVDCStatus(0);case 1:return 0;case 2:return this.GetVDCLow(0);case 3:return this.GetVDCHigh(0)}if(t<2091008)switch(t&7){case 4:return this.GetVCEDataLow();case 5:return this.GetVCEDataHigh();default:return 0}if(t<2092032)return this.GetPSG(t&15);if(t<2093056)return this.ReadTimerCounter();if(t<2094080)return this.GetJoystick();if(t<2095104)switch(t&3){case 2:return this.GetIntDisable();case 3:return this.GetIntReqest();default:return 0}return 255}Set(t,e){if(t=this.MPR[t>>13]|t&8191,t<1048576){this.Mapper.Write(t,e);return}if(!(t<2023424)){if(t<2031616){this.BRAMUse&&(this.BRAM[t&8191]=e);return}if(t<2064384){this.RAM[t&this.RAMMask]=e;return}if(!(t<2088960)){if(t<2089984){if(this.SuperGrafx){let s=t&31;if(s<8)switch(t&3){case 0:this.SetVDCRegister(e,0);break;case 2:this.SetVDCLow(e,0);break;case 3:this.SetVDCHigh(e,0);break}else if(s<16)this.SetVPC(s&7,e);else if(s<24)switch(t&3){case 0:this.SetVDCRegister(e,1);break;case 2:this.SetVDCLow(e,1);break;case 3:this.SetVDCHigh(e,1);break}}else switch(t&3){case 0:this.SetVDCRegister(e,0);break;case 1:break;case 2:this.SetVDCLow(e,0);break;case 3:this.SetVDCHigh(e,0);break}return}if(t<2091008){switch(t&7){case 0:this.SetVCEControl(e);break;case 2:this.SetVCEAddressLow(e);break;case 3:this.SetVCEAddressHigh(e);break;case 4:this.SetVCEDataLow(e);break;case 5:this.SetVCEDataHigh(e);break}return}if(t<2092032){this.SetPSG(t&15,e);return}if(t<2093056){switch(t&1){case 0:this.WirteTimerReload(e);break;case 1:this.WirteTimerControl(e);break}return}if(t<2094080){this.SetJoystick(e);return}if(t<2095104){switch(t&3){case 2:this.SetIntDisable(e);break;case 3:this.SetIntReqest(e);break}return}}}}VCEConstruct(){this.Palette=new Array(512),this.PaletteData=new Array(512),this.MonoPaletteData=new Array(512),this.VCEBaseClock=0,this.VCEControl=0,this.VCEAddress=0,this.VCEData=0}VCEInit(){this.Palette.fill(0);for(let t=0;t<512;t++)this.PaletteData[t]={r:0,g:0,b:0},this.MonoPaletteData[t]={r:0,g:0,b:0};this.VCEBaseClock=this.BaseClock5,this.VCEControl=0,this.VCEAddress=0,this.VCEData=0}SetVCEControl(t){switch(this.VCEControl=t,t&3){case 0:this.VCEBaseClock=this.BaseClock5;break;case 1:this.VCEBaseClock=this.BaseClock7;break;case 2:case 3:this.VCEBaseClock=this.BaseClock10;break}}SetVCEAddressLow(t){this.VCEAddress=this.VCEAddress&65280|t}SetVCEAddressHigh(t){this.VCEAddress=(this.VCEAddress&255|t<<8)&511}GetVCEDataLow(){return this.Palette[this.VCEAddress]&255}GetVCEDataHigh(){let t=(this.Palette[this.VCEAddress]&65280)>>8;return this.VCEAddress=this.VCEAddress+1&511,t}SetVCEDataLow(t){this.Palette[this.VCEAddress]=this.Palette[this.VCEAddress]&65280|t,this.ToPalettes()}SetVCEDataHigh(t){this.Palette[this.VCEAddress]=this.Palette[this.VCEAddress]&255|t<<8,this.ToPalettes(),this.VCEAddress=this.VCEAddress+1&511}ToPalettes(){let t=this.Palette[this.VCEAddress],e=this.PaletteData[this.VCEAddress];e.r=(t>>3&7)*36,e.g=(t>>6&7)*36,e.b=(t&7)*36;let s=e.r*.299+e.g*.587+e.b*.114;this.MonoPaletteData[this.VCEAddress].r=s,this.MonoPaletteData[this.VCEAddress].g=s,this.MonoPaletteData[this.VCEAddress].b=s}VPCConstruct(){this.VPCRegister=new Uint8Array(8),this.VDCSelect=0,this.VPCWindow1=0,this.VPCWindow2=0,this.VPCPriority=new Uint8Array(4)}VPCInit(){this.VPCRegister.fill(0),this.VPCRegister[0]=17,this.VPCRegister[1]=17,this.VPCRegister[7]=255,this.VDCSelect=0,this.VPCWindow1=0,this.VPCWindow2=0,this.VPCPriority.fill(1)}SetVPC(t,e){t!=7&&(this.VPCRegister[t]=e,t==6&&(this.VDCSelect=e&1),(t==2||t==3)&&(this.VPCWindow1=(this.VPCRegister[2]|(this.VPCRegister[3]&3)<<8)-64,this.VPCWindow1<0&&(this.VPCWindow1=1024)),(t==4||t==5)&&(this.VPCWindow2=(this.VPCRegister[4]|(this.VPCRegister[5]&3)<<8)-64,this.VPCWindow2<0&&(this.VPCWindow2=-1)),t==0&&(this.VPCPriority[2]=this.VPCRegister[0]>>4,this.VPCPriority[3]=this.VPCRegister[0]&15),t==1&&(this.VPCPriority[0]=this.VPCRegister[1]>>4,this.VPCPriority[1]=this.VPCRegister[1]&15))}GetVPC(t){return this.VPCRegister[t]}VDCConstruct(){this.DrawFlag=!1,this.VDCPutLineProgressClock=0,this.VDCPutLine=0,this.VDC=new Array(2),this.VDCLineClock=1368,this.ScreenSize=[],this.ScreenSize[this.BaseClock5]=342,this.ScreenSize[this.BaseClock7]=456,this.ScreenSize[this.BaseClock10]=684,this.PutScreenSize=[],this.PutScreenSize[this.BaseClock5]=320,this.PutScreenSize[this.BaseClock7]=428,this.PutScreenSize[this.BaseClock10]=640,this.ScreenHeightMAX=262,this.ScreenWidthMAX=684,this.VScreenWidthArray=[],this.VScreenWidthArray[0]=32,this.VScreenWidthArray[16]=64,this.VScreenWidthArray[32]=128,this.VScreenWidthArray[48]=128,this.ReverseBit=new Uint8Array(256),this.ReverseBit=this.ReverseBit.map((t,e)=>(e&128)>>7|(e&64)>>5|(e&32)>>3|(e&16)>>1|(e&8)<<1|(e&4)<<3|(e&2)<<5|(e&1)<<7),this.ReverseBit16=new Uint16Array(65536).fill(0),this.ReverseBit16=this.ReverseBit16.map((t,e)=>this.ReverseBit[e&255]<<8|this.ReverseBit[(e&65280)>>8]),this.ReverseBit256=new Uint32Array(256).fill(0),this.ReverseBit256=this.ReverseBit256.map((t,e)=>{let s=this.ReverseBit[e];return(s&128)<<21|(s&64)<<18|(s&32)<<15|(s&16)<<12|(s&8)<<9|(s&4)<<6|(s&2)<<3|(s&1)<<0}),this.SPAddressMask=[],this.SPAddressMask[16]=[],this.SPAddressMask[32]=[],this.SPAddressMask[16][16]=2046,this.SPAddressMask[16][32]=2042,this.SPAddressMask[16][64]=2034,this.SPAddressMask[32][16]=2044,this.SPAddressMask[32][32]=2040,this.SPAddressMask[32][64]=2032}MakeSpriteLine(t){let e=this.VDC[t],s=e.SPLine;for(let o=0;o>8)+16;if(l=l>32?64:l,aP+l-1)continue;let x=(r[S+1]&1023)-32,C=((F&256)>>4)+16;if(x+C<=0)continue;let A=a-P;(F&32768)==32768&&(A=l-1-A);let c=(r[S+2]&this.SPAddressMask[C][l])<<5|((A&48)<<3|A&15),k,b,g,D;(F&2048)==0?(k=n[h[c]],b=n[h[c+16]],g=n[h[c+32]],D=n[h[c+48]],C==32&&(k|=n[h[c|64]]<<16,b|=n[h[(c|64)+16]]<<16,g|=n[h[(c|64)+32]]<<16,D|=n[h[(c|64)+48]]<<16)):(k=h[c],b=h[c+16],g=h[c+32],D=h[c+48],C==32&&(k=k<<16|h[c|64],b=b<<16|h[(c|64)+16],g=g<<16|h[(c|64)+32],D=D<<16|h[(c|64)+48]));let d=(F&15)<<4|256,L=F&128,B=0;for(x<0&&(B-=x,x=0);B>>B&1|b>>>B<<1&2|g>>>B<<2&4|D>>>B<<3&8;T!=0&&(f.data=T,f.palette=d,f.priority=L)}if(f.no==255&&(f.no=o),o!=0&&f.no==0&&(e.VDCStatus|=e.VDCRegister[5]&1),++i==256&&(e.VDCStatus|=e.VDCRegister[5]&2,e.SpriteLimit))return}}}MakeBGLine(t){let e=this.VDC[t],s=e.SPLine,i=e.BGLine,a=e.ScreenWidth,h=(e.HDS+e.HSW<<3)+e.DrawBGIndex;if((e.VDCRegister[5]&128)==128){let r=e.VScreenWidth-1,n=e.VDCRegister[7],o=n>>3&r;n=(n&7)<<2;let S=e.DrawBGLine,P=(S>>3&e.VScreenHeight-1)*e.VScreenWidth;S=S&7;let F=e.VRAM,l=0,x=this.ReverseBit256;for(;l>8,k=F[A],b=F[A+8],g=x[k&255]|x[(k&65280)>>8]<<1|x[b&255]<<2|x[(b&65280)>>8]<<3;for(;n<32&&l>>n&15,d=s[l];i[l+h]=d.data!=0&&(D==0||d.priority==128)?d.data|d.palette:D|(D==0?0:c)}n=0,o=o+1&r}}else for(let r=0;r0&&(e.VRAMtoSATBCount-=this.ProgressClock,e.VRAMtoSATBCount<=0&&(e.VDCStatus=e.VDCStatus&191|(e.VDCRegister[15]&1)<<3)),e.VRAMtoVRAMCount>0&&(e.VRAMtoVRAMCount-=this.ProgressClock,e.VRAMtoVRAMCount<=0&&(e.VDCStatus=e.VDCStatus&191|(e.VDCRegister[15]&2)<<3))}VDCProcess(t){let e=this.VDC[t];e.VDCProgressClock-=this.VDCLineClock,e.DrawBGIndex=0,e.BGLine.fill(256);for(let s=0;s261&&(i-=261),e.DrawBGYLine==i&&(e.VDCStatus|=(e.VDCRegister[5]&8)<<2,e.VRAMtoSATBStartFlag)){for(let a=0,h=e.VDCRegister[19];a<256;a++,h++)e.SATB[a]=e.VRAM[h];e.VRAMtoSATBCount=256*this.VCEBaseClock,e.VDCStatus|=64,e.VRAMtoSATBStartFlag=(e.VDCRegister[15]&16)==16}e.RasterCount++,e.DrawBGYLine==e.VDS+e.VSW-1&&(e.RasterCount=64),e.RasterCount==e.VDCRegister[6]&&(e.VDCStatus&32)==0&&(e.VDCStatus|=e.VDCRegister[5]&4),e.DrawBGIndex+=e.DrawLineWidth}}VDCRun(){for(this.VDCProcessDMA(0),this.VDC[0].VDCProgressClock+=this.ProgressClock,this.SuperGrafx&&(this.VDCProcessDMA(1),this.VDC[1].VDCProgressClock+=this.ProgressClock);this.VDC[0].VDCProgressClock>=this.VDCLineClock;)this.VDCProcess(0),this.SuperGrafx&&this.VDCProcess(1);if(this.VDCPutLineProgressClock+=this.ProgressClock,this.VDCPutLineProgressClock>=this.VDCLineClock){this.VDCPutLineProgressClock-=this.VDCLineClock,this.VDCPutLine++,this.VDCPutLine==this.ScreenHeightMAX&&(this.VDCPutLine=0,this.GetScreenSize(0),this.VDC[0].DrawBGYLine=0,this.SuperGrafx&&(this.GetScreenSize(1),this.VDC[1].DrawBGYLine=0),this.DrawFlag=!0,this.Ctx.putImageData(this.ImageData,0,0));let t=(this.VCEControl&128)==0?this.PaletteData:this.MonoPaletteData,e=this.ImageData.data,s=this.VDCPutLine*this.ScreenWidthMAX*4,i=t[256],a=this.ScreenSize[this.VCEBaseClock],h=this.VDC[0].BGLine;if(this.SuperGrafx){let r=this.VPCWindow1,n=this.VPCWindow2,o=this.VPCPriority,S=this.VDC[1].BGLine;for(let P=0;P=r&&(F|=1),P<=n&&(F|=2);let l=h[P],x=S[P],C;switch(o[F]){case 7:l>256||x>256?C=t[l>256?l:x]:C=t[(l&255)!=0?l:x];break;case 11:l<256&&l!=0?C=t[l]:C=t[(x&255)!=0?x:l];break;case 3:case 15:C=t[(l&255)!=0?l:x];break;case 1:case 5:case 9:case 13:C=t[l];break;case 2:case 6:case 10:case 14:C=t[x];break;default:C=i;break}e[s]=C.r,e[s+1]=C.g,e[s+2]=C.b}}else for(let r=0;rthis.ScreenWidthMAX&&(e.ScreenWidth=this.ScreenWidthMAX),e.HDS=(s[10]&32512)>>8,e.HSW=s[10]&31,e.HDE=(s[11]&32512)>>8,e.HDW=s[11]&127,e.VDS=(s[12]&65280)>>8,e.VSW=s[12]&31,e.VDW=s[13]&511,e.VCR=s[14]&255,e.ScreenSize=this.ScreenSize[this.VCEBaseClock],this.MainCanvas.width!=e.ScreenSize&&(this.MainCanvas.width=this.PutScreenSize[this.VCEBaseClock]),e.DrawLineWidth=e.HDS+e.HSW+e.HDE+e.HDW+1<<3,e.DrawLineWidth<=this.ScreenSize[this.BaseClock5]?e.DrawLineWidth=this.ScreenSize[this.BaseClock5]:e.DrawLineWidth<=this.ScreenSize[this.BaseClock7]?e.DrawLineWidth=this.ScreenSize[this.BaseClock7]:e.DrawLineWidth=this.ScreenSize[this.BaseClock10],e.VDCBurst=(s[5]&192)==0}VDCInit(){this.VDCPutLineProgressClock=0,this.VDCPutLine=0,this.DrawFlag=!1;for(let t=0;t<2;t++){this.VDC[t]={VDCRegister:new Uint16Array(20).fill(0),VRAM:new Uint16Array(65536).fill(0),SATB:new Uint16Array(256).fill(0),VDCBurst:!1,SpriteLimit:!1,SPLine:new Array(this.ScreenWidthMAX),BGLine:new Array(this.ScreenWidthMAX).fill(0),VDCStatus:0,VDCRegisterSelect:0,WriteVRAMData:0,VRAMtoSATBStartFlag:!1,VRAMtoSATBCount:0,VRAMtoVRAMCount:0,RasterCount:64,VDCProgressClock:0,DrawBGYLine:0,DrawBGLine:0,VScreenWidth:0,VScreenHeight:0,VScreenHeightMask:0,ScreenWidth:0,ScreenSize:0,DrawLineWidth:0,DrawBGIndex:0,HDS:0,HSW:0,HDE:0,HDW:0,VDS:0,VSW:0,VDW:0,VCR:0};for(let e=0;e0;n--)o[r]=o[h],h=h+i&65535,r=r+a&65535;return}s.VDCRegisterSelect==19&&(s.VRAMtoSATBStartFlag=!0)}GetVRAMIncrement(t){switch(this.VDC[t].VDCRegister[5]&6144){case 0:return 1;case 2048:return 32;case 4096:return 64;case 6144:return 128}}GetVDCStatus(t){let e=this.VDC[t].VDCStatus;return this.VDC[t].VDCStatus&=64,e}GetVDCLow(t){return this.VDC[t].VDCRegister[this.VDC[t].VDCRegisterSelect]&255}GetVDCHigh(t){let e=this.VDC[t];if(e.VDCRegisterSelect==2||e.VDCRegisterSelect==3){let s=(e.VDCRegister[2]&65280)>>8;return e.VDCRegister[2]=e.VRAM[e.VDCRegister[1]],e.VDCRegister[3]=e.VDCRegister[2],e.VDCRegister[1]=e.VDCRegister[1]+this.GetVRAMIncrement(t)&65535,s}return(e.VDCRegister[e.VDCRegisterSelect]&65280)>>8}SoundConstruct(){this.WaveDataArray=[],this.WaveClockCounter=0,this.WaveVolume=1,this.WebAudioCtx=null,this.WebAudioJsNode=null,this.WebAudioGainNode=null,this.WebAudioBufferSize=2048,this.PSGClock=3579545}WebAudioFunction(t){let e=[],s=[];for(let i=0;i<2;i++){if(e[i]=t.outputBuffer.getChannelData(i),s[i]=new Float32Array(this.WebAudioBufferSize),this.WaveDataArray[i].lengththis.WebAudioBufferSize*2&&(this.WaveDataArray[i]=this.WaveDataArray[i].slice(this.WebAudioBufferSize))}e[i].set(s[i])}}SoundInit(){this.WaveClockCounter=0,this.WaveDataArray=[],this.WaveDataArray[0]=[],this.WaveDataArray[1]=[],typeof AudioContext!="undefined"&&this.WebAudioCtx==null&&this.CreateAudioContext()}CreateAudioContext(){this.WebAudioCtx=new window.AudioContext,this.WebAudioJsNode=this.WebAudioCtx.createScriptProcessor(this.WebAudioBufferSize,0,2),this.WebAudioJsNode.onaudioprocess=this.WebAudioFunction.bind(this),this.WebAudioGainNode=this.WebAudioCtx.createGain(),this.WebAudioJsNode.connect(this.WebAudioGainNode),this.WebAudioGainNode.connect(this.WebAudioCtx.destination)}SoundSet(){let t,e,s,i,a,h;if(this.WaveClockCounter+=this.WebAudioCtx.sampleRate,this.WaveClockCounter>=this.PSGClock){for(this.WaveClockCounter-=this.PSGClock,t=0,e=0,a=0;a<6;a++)(a!=1||!this.WaveLfoOn)&&(s=this.PSGChannel[a],a<4||!s.noiseon?h=s.keyon?s.dda?s.R[6]&31:s.wave[s.index]:0:h=(s.noise&1)==1?15:0,t+=h*s.leftvol,e+=h*s.rightvol);this.WaveDataArray[0].push(t*this.WaveVolumeLeft),this.WaveDataArray[1].push(e*this.WaveVolumeRight),this.WebAudioGainNode.gain.value=this.WaveVolume}}PSGConstruct(){this.PSGChannel=new Array(6),this.PSGBaseClock=this.BaseClock3,this.PSGProgressClock=0,this.WaveVolumeLeft=0,this.WaveVolumeRight=0,this.WaveLfoOn=!1,this.WaveLfoControl=0,this.WaveLfoFreqency=0}PSGInit(){this.SoundInit();for(let t=0;t0;){for(e--,s=0,this.WaveLfoOn&&(i=this.PSGChannel[0],a=this.PSGChannel[1],i.keyon&&(i.count==0?(i.index=i.index+1&31,h=0,this.WaveLfoControl!=0&&(h=a.wave[a.index],h=h>15?h-32:h&15,h<<=4*(this.WaveLfoControl-1)),h=i.freq+h,h<0&&(h=0),i.count=h):i.count--,a.count==0?(a.index=a.index+1&31,a.count=a.freq*this.WaveLfoFreqency):a.count--),s=2);s<6;s++)t=this.PSGChannel[s],s<4||!t.noiseon?t.keyon&&!t.dda&&(t.count==0?(t.index=t.index+1&31,t.count=t.freq):t.count--):t.keyon&&!t.dda&&(t.count==0?(t.index=t.index+1&31,t.index==0&&(t.noise=t.noise>>1|(t.noise<<12^t.noise<<15)&32768),t.count=t.noisefreq):t.count--);this.SoundSet()}}SetPSG(t,e){if(t==0){this.PSGChannel[0].R[0]=e&7;return}if(this.PSGChannel[0].R[0]>5)return;let s=this.PSGChannel[this.PSGChannel[0].R[0]];switch(s.R[t]=e,t){case 1:this.PSGChannel[0].R[1]=e,this.WaveVolumeLeft=(e&240)>>4,this.WaveVolumeRight=e&15;return;case 2:case 3:s.freq=(s.R[3]<<8|s.R[2])&4095;return;case 4:s.keyon=(e&128)==128,s.dda=(e&64)==64,(e&64)==64&&(s.index=0),s.vol=e&31;case 5:let i=s.R[4]&31;s.leftvol=((s.R[5]&240)>>4)*i,s.rightvol=(s.R[5]&15)*i;return;case 6:s.dda||(s.wave[s.index]=e&31,s.index=s.index+1&31);return;case 7:s.noiseon=(e&128)==128,s.noisefreq=e&31^31;return;case 8:this.PSGChannel[0].R[8]=e,this.WaveLfoFreqency=e;return;case 9:this.PSGChannel[0].R[9]=e,this.WaveLfoOn=(e&128)==128,this.WaveLfoControl=e&3;return}}GetPSG(t){return t>9?255:t==0||t==1||t==8||t==9?this.PSGChannel[0].R[t]:this.PSGChannel[0].R[0]>5?255:this.PSGChannel[this.PSGChannel[0].R[0]].R[t]}TimerConstruct(){this.TimerBaseClock=this.BaseClock7,this.TimerReload=0,this.TimerFlag=!1,this.TimerCounter=0,this.TimerPrescaler=0,this.INTTIQ=0}TimerInit(){this.TimerReload=0,this.TimerFlag=!1,this.TimerCounter=0,this.TimerPrescaler=0,this.INTTIQ=0}ReadTimerCounter(){return this.TimerCounter}TimerAcknowledge(){this.INTTIQ=0}WirteTimerReload(t){this.TimerReload=t&127}WirteTimerControl(t){!this.TimerFlag&&(t&1)==1&&(this.TimerCounter=this.TimerReload,this.TimerPrescaler=0),this.TimerFlag=(t&1)==1}TimerRun(){if(this.TimerFlag)for(this.TimerPrescaler+=this.ProgressClock;this.TimerPrescaler>=1024*this.TimerBaseClock;)this.TimerPrescaler-=1024*this.TimerBaseClock,this.TimerCounter--,this.TimerCounter<0&&(this.TimerCounter=this.TimerReload,this.INTTIQ=this.TIQFlag)}JoystickConstruct(){this.JoystickSEL=0,this.JoystickCLR=0,this.KeyUpFunction=null,this.KeyDownFunction=null,this.Keybord=new Array(5).fill([]),this.Keybord=this.Keybord.map(t=>new Array(4)),this.GamePad=new Array(5).fill([]),this.GamePad=this.Keybord.map(t=>new Array(4)),this.GamePadSelect=0,this.GamePadButtonSelect=0,this.GamePadBuffer=0,this.GamePadData=[],this.GamePadData["STANDARD PAD"]=[[[{type:"B",index:1}],[{type:"B",index:0}],[{type:"B",index:8}],[{type:"B",index:9},{type:"B",index:2}],[{type:"B",index:12}],[{type:"B",index:13}],[{type:"B",index:14}],[{type:"B",index:15}]],[[{type:"B",index:1}],[{type:"B",index:0}],[{type:"B",index:8}],[{type:"B",index:9}],[{type:"B",index:12}],[{type:"B",index:13}],[{type:"B",index:14}],[{type:"B",index:15}],[{type:"B",index:7}],[{type:"B",index:5}],[{type:"B",index:2}],[{type:"B",index:3}]]],this.GamePadData["HORI PAD 3 TURBO (Vendor: 0f0d Product: 0009)"]=[[[{type:"B",index:2}],[{type:"B",index:1}],[{type:"B",index:8}],[{type:"B",index:9},{type:"B",index:0}],[{type:"P",index:9}],[{type:"N",index:0}],[{type:"N",index:0}],[{type:"N",index:0}]],[[{type:"B",index:2}],[{type:"B",index:1}],[{type:"B",index:8}],[{type:"B",index:9}],[{type:"P",index:9}],[{type:"N",index:0}],[{type:"N",index:0}],[{type:"N",index:0}],[{type:"B",index:7}],[{type:"B",index:5}],[{type:"B",index:0}],[{type:"B",index:3}]]],this.GamePadData["0f0d-0009-HORI PAD 3 TURBO"]=this.GamePadData["HORI PAD 3 TURBO (Vendor: 0f0d Product: 0009)"],this.GamePadData["UNKNOWN PAD"]=this.GamePadData["HORI PAD 3 TURBO (Vendor: 0f0d Product: 0009)"],this.GamePadKeyData=[{index:0,data:1},{index:0,data:2},{index:0,data:4},{index:0,data:8},{index:1,data:1},{index:1,data:4},{index:1,data:8},{index:1,data:2},{index:2,data:1},{index:2,data:2},{index:2,data:4},{index:2,data:8}],this.GamePadPovData=[1,3,2,6,4,12,8,9]}JoystickInit(){this.JoystickSEL=0,this.JoystickCLR=0;for(let t=0;t>1;if(this.JoystickSEL==1&&this.JoystickCLR==0&&e==1&&s==1){this.JoystickSEL=0,this.JoystickCLR=0,this.GamePadSelect=0,this.GamePadButton6&&(this.GamePadButtonSelect=this.GamePadButtonSelect^2),this.GamePadBuffer=176|this.CountryType;return}this.JoystickSEL==0&&this.JoystickCLR==0&&e==1&&s==0&&this.GamePadSelect++,this.JoystickSEL=e,this.JoystickCLR=s;let i=this.MultiTap?this.GamePadSelect-1:0;if(i<5){let a=this.GamePadButtonSelect|this.JoystickSEL;this.GamePadBuffer=this.Keybord[i][a]&this.GamePad[i][a]|this.CountryType}else this.GamePadBuffer=176|this.CountryType}GetJoystick(){return this.GamePadBuffer}UnsetButtonRUN(t){this.Keybord[t][0]|=8}UnsetButtonSELECT(t){this.Keybord[t][0]|=4}UnsetButtonSHOT2(t){this.Keybord[t][0]|=2}UnsetButtonSHOT1(t){this.Keybord[t][0]|=1}UnsetButtonLEFT(t){this.Keybord[t][1]|=8}UnsetButtonDOWN(t){this.Keybord[t][1]|=4}UnsetButtonRIGHT(t){this.Keybord[t][1]|=2}UnsetButtonUP(t){this.Keybord[t][1]|=1}UnsetButtonSHOT6(t){this.Keybord[t][2]|=8}UnsetButtonSHOT5(t){this.Keybord[t][2]|=4}UnsetButtonSHOT4(t){this.Keybord[t][2]|=2}UnsetButtonSHOT3(t){this.Keybord[t][2]|=1}SetButtonRUN(t){this.Keybord[t][0]&=-9}SetButtonSELECT(t){this.Keybord[t][0]&=-5}SetButtonSHOT2(t){this.Keybord[t][0]&=-3}SetButtonSHOT1(t){this.Keybord[t][0]&=-2}SetButtonLEFT(t){this.Keybord[t][1]&=-9}SetButtonDOWN(t){this.Keybord[t][1]&=-5}SetButtonRIGHT(t){this.Keybord[t][1]&=-3}SetButtonUP(t){this.Keybord[t][1]&=-2}SetButtonSHOT6(t){this.Keybord[t][2]&=-9}SetButtonSHOT5(t){this.Keybord[t][2]&=-5}SetButtonSHOT4(t){this.Keybord[t][2]&=-3}SetButtonSHOT3(t){this.Keybord[t][2]&=-2}CheckKeyUpFunction(t){switch(t.keyCode){case u.START.c:this.UnsetButtonRUN(0);break;case u.SELECT.c:this.UnsetButtonSELECT(0);break;case u.A.c:case u.GP_A.c:this.UnsetButtonSHOT2(0);break;case u.B.c:case u.GP_B.c:this.UnsetButtonSHOT1(0);break;case 86:this.UnsetButtonSHOT2(0);break;case 66:this.UnsetButtonSHOT1(0);break;case 37:this.UnsetButtonLEFT(0);break;case 39:this.UnsetButtonRIGHT(0);break;case 40:this.UnsetButtonDOWN(0);break;case 38:this.UnsetButtonUP(0);break;case 71:this.UnsetButtonSHOT6(0);break;case 70:this.UnsetButtonSHOT5(0);break;case 68:this.UnsetButtonSHOT4(0);break;case 67:this.UnsetButtonSHOT3(0);break}}CheckKeyDownFunction(t){switch(t.keyCode){case u.START.c:this.SetButtonRUN(0);break;case u.SELECT.c:this.SetButtonSELECT(0);break;case u.A.c:case u.GP_A.c:this.SetButtonSHOT2(0);break;case u.B.c:case u.GP_B.c:this.SetButtonSHOT1(0);break;case 86:this.SetButtonSHOT2(0);break;case 66:this.SetButtonSHOT1(0);break;case 37:this.SetButtonLEFT(0);break;case 39:this.SetButtonRIGHT(0);break;case 40:this.SetButtonDOWN(0);break;case 38:this.SetButtonUP(0);break;case 71:this.SetButtonSHOT6(0);break;case 70:this.SetButtonSHOT5(0);break;case 68:this.SetButtonSHOT4(0);break;case 67:this.SetButtonSHOT3(0);break}}JoystickEventInit(){this.KeyUpFunction=this.CheckKeyUpFunction.bind(this),this.KeyDownFunction=this.CheckKeyDownFunction.bind(this),this.MainCanvas.addEventListener("keyup",this.KeyUpFunction,!0),this.MainCanvas.addEventListener("keydown",this.KeyDownFunction,!0)}JoystickEventRelease(){this.MainCanvas.removeEventListener("keyup",this.KeyUpFunction,!0),this.MainCanvas.removeEventListener("keydown",this.KeyDownFunction,!0)}CheckGamePad(){for(let e=0;e.5&&(this.GamePad[e][this.GamePadKeyData[a].index]&=~this.GamePadKeyData[a].data);break;case"AB":s.axes[r.index]>-.75&&(this.GamePad[e][this.GamePadKeyData[a].index]&=~this.GamePadKeyData[a].data);break;case"P":let n=(s.axes[r.index]+1)*7/2+.5|0;this.GamePad[e][1]&=~(n<=7?this.GamePadPovData[n]:0);break}a++}}}}}; +//# sourceMappingURL=pce-GU673WGG.js.map diff --git a/gen/pce-QHW3U4S4.js.map b/gen/pce-GU673WGG.js.map similarity index 100% rename from gen/pce-QHW3U4S4.js.map rename to gen/pce-GU673WGG.js.map diff --git a/gen/platform/apple2.js b/gen/platform/apple2.js index e09a890e..4ea7f8b2 100644 --- a/gen/platform/apple2.js +++ b/gen/platform/apple2.js @@ -27,6 +27,8 @@ const APPLE2_PRESETS = [ // {id:'tb_6502.s', name:'Tom Bombem (assembler game)'}, { id: 'dos33bin.a', name: "DOS 3.3 Binary" }, { id: 'applesinglebin.a', name: "AppleSingle Binary" }, + { id: 'hello-sdcc.c', name: 'Hello World (SDCC)', category: "C (SDCC)" }, + { id: 'cosmic-sdcc.c', name: 'Cosmic Impalas (SDCC)' }, ]; /// MAME support class Apple2MAMEPlatform extends mameplatform_1.BaseMAME6502Platform { @@ -50,7 +52,7 @@ class Apple2MAMEPlatform extends mameplatform_1.BaseMAME6502Platform { }, }); } - getDefaultExtensions() { return [".c", ".cpp", ".acme", ".xa", ".ca65", ".dasm", ".ecs", ".wiz"]; } + getDefaultExtensions() { return [".c", ".sdcc", ".cpp", ".acme", ".xa", ".ca65", ".dasm", ".ecs", ".wiz"]; } getPresets() { return APPLE2_PRESETS; } loadROM(title, data) { this.loadROMFile(data); diff --git a/gen/platform/apple2.js.map b/gen/platform/apple2.js.map index 73f9563d..951ae1ea 100644 --- a/gen/platform/apple2.js.map +++ b/gen/platform/apple2.js.map @@ -1 +1 @@ -{"version":3,"file":"apple2.js","sourceRoot":"","sources":["../../src/platform/apple2.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"apple2.js","sourceRoot":"","sources":["../../src/platform/apple2.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gen/platform/c64.js b/gen/platform/c64.js index cce1aed9..94af396c 100644 --- a/gen/platform/c64.js +++ b/gen/platform/c64.js @@ -46,6 +46,9 @@ const C64_PRESETS = [ { id: 'hello.cpp', name: 'Hello Oscar64', category: 'C++ (Oscar64)' }, { id: 'particles.cpp', name: 'Fireworks' }, { id: 'lander.cpp', name: 'Lunar Lander' }, + { id: 'hello-sdcc.c', name: 'Hello World (SDCC)', category: 'C (SDCC)' }, + { id: 'sprite_collision-sdcc.c', name: 'Sprite Collision (SDCC)' }, + { id: 'fullscrollgame-sdcc.c', name: 'Full-Scrolling Game (SDCC)' }, ]; const C64_MEMORY_MAP = { main: [ { name: '6510 Registers', start: 0x0, size: 0x2, type: 'io' }, diff --git a/gen/platform/c64.js.map b/gen/platform/c64.js.map index 3ea9b4ef..6022917f 100644 --- a/gen/platform/c64.js.map +++ b/gen/platform/c64.js.map @@ -1 +1 @@ -{"version":3,"file":"c64.js","sourceRoot":"","sources":["../../src/platform/c64.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"c64.js","sourceRoot":"","sources":["../../src/platform/c64.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gen/platform/devel.js b/gen/platform/devel.js index eb1e5314..322ceecf 100644 --- a/gen/platform/devel.js +++ b/gen/platform/devel.js @@ -8,7 +8,18 @@ const util_1 = require("../common/util"); const teletype_1 = require("../common/teletype"); var DEVEL_6502_PRESETS = [ { id: 'hello.dasm', name: 'Hello World (ASM)' }, + { id: 'hello-sdcc.c', name: 'Hello World (SDCC C)' }, ]; +/** For the CLI and tests, which have no DOM: the output is kept by the harness. */ +class HeadlessSerialViewer { + constructor() { + this.tty = { addtext() { }, newline() { }, clear() { }, saveState() { return {}; }, loadState() { } }; + } + start() { } + reset() { } + saveState() { return {}; } + loadState() { } +} class SerialInOutViewer { constructor(div) { div.style.overflowY = 'auto'; @@ -108,7 +119,8 @@ class Devel6502Platform extends baseplatform_1.Base6502MachinePlatform { { name: 'ROM', start: 0x8000, size: 0x8000, type: 'rom' }, ] }; }; - this.serview = new SerialInOutViewer(mainElement); + // no element: running headless (the 8bws CLI) + this.serview = mainElement ? new SerialInOutViewer(mainElement) : new HeadlessSerialViewer(); } async start() { super.start(); @@ -145,6 +157,8 @@ class Devel6502Platform extends baseplatform_1.Base6502MachinePlatform { this.serview.loadState(state.serview); // TODO: reload tty UI } + /** Everything the program has sent to the serial port (for the CLI's `serial` command). */ + getSerialOutput() { return (0, util_1.byteArrayToString)(this.serial.outputBytes); } newMachine() { return new devel_1.Devel6502(); } getPresets() { return DEVEL_6502_PRESETS; } readAddress(a) { return this.machine.readConst(a); } diff --git a/gen/platform/devel.js.map b/gen/platform/devel.js.map index 4e9a956c..153eeaaa 100644 --- a/gen/platform/devel.js.map +++ b/gen/platform/devel.js.map @@ -1 +1 @@ -{"version":3,"file":"devel.js","sourceRoot":"","sources":["../../src/platform/devel.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"devel.js","sourceRoot":"","sources":["../../src/platform/devel.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/gen/server/server.js.map b/gen/server/server.js.map index 13c74b64..cdafb40e 100644 --- a/gen/server/server.js.map +++ b/gen/server/server.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/depd/index.js", "../../node_modules/bytes/index.js", "../../node_modules/content-type/index.js", "../../node_modules/setprototypeof/index.js", "../../node_modules/statuses/codes.json", "../../node_modules/statuses/index.js", "../../node_modules/inherits/inherits_browser.js", "../../node_modules/inherits/inherits.js", "../../node_modules/toidentifier/index.js", "../../node_modules/http-errors/index.js", "../../node_modules/ms/index.js", "../../node_modules/debug/src/debug.js", "../../node_modules/debug/src/browser.js", "../../node_modules/debug/src/node.js", "../../node_modules/debug/src/index.js", "../../node_modules/destroy/index.js", "../../node_modules/safer-buffer/safer.js", "../../node_modules/iconv-lite/lib/bom-handling.js", "../../node_modules/iconv-lite/encodings/internal.js", "../../node_modules/iconv-lite/encodings/utf16.js", "../../node_modules/iconv-lite/encodings/utf7.js", "../../node_modules/iconv-lite/encodings/sbcs-codec.js", "../../node_modules/iconv-lite/encodings/sbcs-data.js", "../../node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../node_modules/iconv-lite/encodings/dbcs-codec.js", "../../node_modules/iconv-lite/encodings/tables/shiftjis.json", "../../node_modules/iconv-lite/encodings/tables/eucjp.json", "../../node_modules/iconv-lite/encodings/tables/cp936.json", "../../node_modules/iconv-lite/encodings/tables/gbk-added.json", "../../node_modules/iconv-lite/encodings/tables/gb18030-ranges.json", "../../node_modules/iconv-lite/encodings/tables/cp949.json", "../../node_modules/iconv-lite/encodings/tables/cp950.json", "../../node_modules/iconv-lite/encodings/tables/big5-added.json", "../../node_modules/iconv-lite/encodings/dbcs-data.js", "../../node_modules/iconv-lite/encodings/index.js", "../../node_modules/iconv-lite/lib/streams.js", "../../node_modules/iconv-lite/lib/extend-node.js", "../../node_modules/iconv-lite/lib/index.js", "../../node_modules/unpipe/index.js", "../../node_modules/raw-body/index.js", "../../node_modules/ee-first/index.js", "../../node_modules/on-finished/index.js", "../../node_modules/body-parser/lib/read.js", "../../node_modules/media-typer/index.js", "../../node_modules/mime-db/db.json", "../../node_modules/mime-db/index.js", "../../node_modules/mime-types/index.js", "../../node_modules/type-is/index.js", "../../node_modules/body-parser/lib/types/json.js", "../../node_modules/body-parser/lib/types/raw.js", "../../node_modules/body-parser/lib/types/text.js", "../../node_modules/es-errors/type.js", "../../node_modules/object-inspect/util.inspect.js", "../../node_modules/object-inspect/index.js", "../../node_modules/side-channel-list/index.js", "../../node_modules/es-object-atoms/index.js", "../../node_modules/es-errors/index.js", "../../node_modules/es-errors/eval.js", "../../node_modules/es-errors/range.js", "../../node_modules/es-errors/ref.js", "../../node_modules/es-errors/syntax.js", "../../node_modules/es-errors/uri.js", "../../node_modules/math-intrinsics/abs.js", "../../node_modules/math-intrinsics/floor.js", "../../node_modules/math-intrinsics/max.js", "../../node_modules/math-intrinsics/min.js", "../../node_modules/math-intrinsics/pow.js", "../../node_modules/math-intrinsics/round.js", "../../node_modules/math-intrinsics/isNaN.js", "../../node_modules/math-intrinsics/sign.js", "../../node_modules/gopd/gOPD.js", "../../node_modules/gopd/index.js", "../../node_modules/es-define-property/index.js", "../../node_modules/has-symbols/shams.js", "../../node_modules/has-symbols/index.js", "../../node_modules/get-proto/Reflect.getPrototypeOf.js", "../../node_modules/get-proto/Object.getPrototypeOf.js", "../../node_modules/function-bind/implementation.js", "../../node_modules/function-bind/index.js", "../../node_modules/call-bind-apply-helpers/functionCall.js", "../../node_modules/call-bind-apply-helpers/functionApply.js", "../../node_modules/call-bind-apply-helpers/reflectApply.js", "../../node_modules/call-bind-apply-helpers/actualApply.js", "../../node_modules/call-bind-apply-helpers/index.js", "../../node_modules/dunder-proto/get.js", "../../node_modules/get-proto/index.js", "../../node_modules/hasown/index.js", "../../node_modules/get-intrinsic/index.js", "../../node_modules/call-bound/index.js", "../../node_modules/side-channel-map/index.js", "../../node_modules/side-channel-weakmap/index.js", "../../node_modules/side-channel/index.js", "../../node_modules/qs/lib/formats.js", "../../node_modules/qs/lib/utils.js", "../../node_modules/qs/lib/stringify.js", "../../node_modules/qs/lib/parse.js", "../../node_modules/qs/lib/index.js", "../../node_modules/body-parser/lib/types/urlencoded.js", "../../node_modules/body-parser/index.js", "../../node_modules/merge-descriptors/index.js", "../../node_modules/encodeurl/index.js", "../../node_modules/escape-html/index.js", "../../node_modules/parseurl/index.js", "../../node_modules/finalhandler/index.js", "../../node_modules/array-flatten/array-flatten.js", "../../node_modules/path-to-regexp/index.js", "../../node_modules/express/lib/router/layer.js", "../../node_modules/methods/index.js", "../../node_modules/express/lib/router/route.js", "../../node_modules/utils-merge/index.js", "../../node_modules/express/lib/router/index.js", "../../node_modules/express/lib/middleware/init.js", "../../node_modules/express/lib/middleware/query.js", "../../node_modules/express/lib/view.js", "../../node_modules/safe-buffer/index.js", "../../node_modules/content-disposition/index.js", "../../node_modules/etag/index.js", "../../node_modules/fresh/index.js", "../../node_modules/mime/types.json", "../../node_modules/mime/mime.js", "../../node_modules/send/node_modules/ms/index.js", "../../node_modules/range-parser/index.js", "../../node_modules/send/index.js", "../../node_modules/forwarded/index.js", "../../node_modules/ipaddr.js/lib/ipaddr.js", "../../node_modules/proxy-addr/index.js", "../../node_modules/express/lib/utils.js", "../../node_modules/express/lib/application.js", "../../node_modules/negotiator/lib/charset.js", "../../node_modules/negotiator/lib/encoding.js", "../../node_modules/negotiator/lib/language.js", "../../node_modules/negotiator/lib/mediaType.js", "../../node_modules/negotiator/index.js", "../../node_modules/accepts/index.js", "../../node_modules/express/lib/request.js", "../../node_modules/cookie-signature/index.js", "../../node_modules/cookie/index.js", "../../node_modules/vary/index.js", "../../node_modules/express/lib/response.js", "../../node_modules/serve-static/index.js", "../../node_modules/express/lib/express.js", "../../node_modules/express/index.js", "../../node_modules/object-assign/index.js", "../../node_modules/cors/lib/index.js", "../../src/worker/server/server.ts", "../../src/worker/server/buildenv.ts", "../../src/common/workertypes.ts", "../../src/common/util.ts", "../../src/worker/server/clang.ts", "../../src/worker/tools/oscar64parse.ts", "../../src/worker/listingutils.ts"], - "sourcesContent": ["/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n var vals = str.split(/[ ,]+/)\n var ns = String(namespace).toLowerCase()\n\n for (var i = 0; i < vals.length; i++) {\n var val = vals[i]\n\n // namespace contained\n if (val && (val === '*' || val.toLowerCase() === ns)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n var value = descriptor.value\n\n descriptor.get = function getter () { return value }\n\n if (descriptor.writable) {\n descriptor.set = function setter (val) { return (value = val) }\n }\n\n delete descriptor.value\n delete descriptor.writable\n\n Object.defineProperty(obj, prop, descriptor)\n\n return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n var str = ''\n\n for (var i = 0; i < arity; i++) {\n str += ', arg' + i\n }\n\n return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n var str = this.name + ': ' + this.namespace\n\n if (this.message) {\n str += ' deprecated ' + this.message\n }\n\n for (var i = 0; i < stack.length; i++) {\n str += '\\n at ' + stack[i].toString()\n }\n\n return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n if (!namespace) {\n throw new TypeError('argument namespace is required')\n }\n\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n var file = site[0]\n\n function deprecate (message) {\n // call to self as log\n log.call(deprecate, message)\n }\n\n deprecate._file = file\n deprecate._ignored = isignored(namespace)\n deprecate._namespace = namespace\n deprecate._traced = istraced(namespace)\n deprecate._warned = Object.create(null)\n\n deprecate.function = wrapfunction\n deprecate.property = wrapproperty\n\n return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n if (process.noDeprecation) {\n // --no-deprecation support\n return true\n }\n\n var str = process.env.NO_DEPRECATION || ''\n\n // namespace ignored\n return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n if (process.traceDeprecation) {\n // --trace-deprecation support\n return true\n }\n\n var str = process.env.TRACE_DEPRECATION || ''\n\n // namespace traced\n return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n var haslisteners = eehaslisteners(process, 'deprecation')\n\n // abort early if no destination\n if (!haslisteners && this._ignored) {\n return\n }\n\n var caller\n var callFile\n var callSite\n var depSite\n var i = 0\n var seen = false\n var stack = getStack()\n var file = this._file\n\n if (site) {\n // provided site\n depSite = site\n callSite = callSiteLocation(stack[1])\n callSite.name = depSite.name\n file = callSite[0]\n } else {\n // get call site\n i = 2\n depSite = callSiteLocation(stack[i])\n callSite = depSite\n }\n\n // get caller of deprecated thing in relation to file\n for (; i < stack.length; i++) {\n caller = callSiteLocation(stack[i])\n callFile = caller[0]\n\n if (callFile === file) {\n seen = true\n } else if (callFile === this._file) {\n file = this._file\n } else if (seen) {\n break\n }\n }\n\n var key = caller\n ? depSite.join(':') + '__' + caller.join(':')\n : undefined\n\n if (key !== undefined && key in this._warned) {\n // already warned\n return\n }\n\n this._warned[key] = true\n\n // generate automatic message from call site\n var msg = message\n if (!msg) {\n msg = callSite === depSite || !callSite.name\n ? defaultMessage(depSite)\n : defaultMessage(callSite)\n }\n\n // emit deprecation if listeners exist\n if (haslisteners) {\n var err = DeprecationError(this._namespace, msg, stack.slice(i))\n process.emit('deprecation', err)\n return\n }\n\n // format and write message\n var format = process.stderr.isTTY\n ? formatColor\n : formatPlain\n var output = format.call(this, msg, caller, stack.slice(i))\n process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n var file = callSite.getFileName() || ''\n var line = callSite.getLineNumber()\n var colm = callSite.getColumnNumber()\n\n if (callSite.isEval()) {\n file = callSite.getEvalOrigin() + ', ' + file\n }\n\n var site = [file, line, colm]\n\n site.callSite = callSite\n site.name = callSite.getFunctionName()\n\n return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n var callSite = site.callSite\n var funcName = site.name\n\n // make useful anonymous name\n if (!funcName) {\n funcName = ''\n }\n\n var context = callSite.getThis()\n var typeName = context && callSite.getTypeName()\n\n // ignore useless type name\n if (typeName === 'Object') {\n typeName = undefined\n }\n\n // make useful type name\n if (typeName === 'Function') {\n typeName = context.name || typeName\n }\n\n return typeName && callSite.getMethodName()\n ? typeName + '.' + funcName\n : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n var timestamp = new Date().toUTCString()\n\n var formatted = timestamp +\n ' ' + this._namespace +\n ' deprecated ' + msg\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n at ' + stack[i].toString()\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' at ' + formatLocation(caller)\n }\n\n return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n }\n\n return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n return relative(basePath, callSite[0]) +\n ':' + callSite[1] +\n ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n var limit = Error.stackTraceLimit\n var obj = {}\n var prep = Error.prepareStackTrace\n\n Error.prepareStackTrace = prepareObjectStackTrace\n Error.stackTraceLimit = Math.max(10, limit)\n\n // capture the stack\n Error.captureStackTrace(obj)\n\n // slice this function off the top\n var stack = obj.stack.slice(1)\n\n Error.prepareStackTrace = prep\n Error.stackTraceLimit = limit\n\n return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n if (typeof fn !== 'function') {\n throw new TypeError('argument fn must be a function')\n }\n\n var args = createArgumentsString(fn.length)\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n site.name = fn.name\n\n // eslint-disable-next-line no-new-func\n var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n '\"use strict\"\\n' +\n 'return function (' + args + ') {' +\n 'log.call(deprecate, message, site)\\n' +\n 'return fn.apply(this, arguments)\\n' +\n '}')(fn, log, this, message, site)\n\n return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new TypeError('argument obj must be object')\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n if (!descriptor) {\n throw new TypeError('must call property on owner object')\n }\n\n if (!descriptor.configurable) {\n throw new TypeError('property must be configurable')\n }\n\n var deprecate = this\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n // set site name\n site.name = prop\n\n // convert data descriptor\n if ('value' in descriptor) {\n descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n }\n\n var get = descriptor.get\n var set = descriptor.set\n\n // wrap getter\n if (typeof get === 'function') {\n descriptor.get = function getter () {\n log.call(deprecate, message, site)\n return get.apply(this, arguments)\n }\n }\n\n // wrap setter\n if (typeof set === 'function') {\n descriptor.set = function setter () {\n log.call(deprecate, message, site)\n return set.apply(this, arguments)\n }\n }\n\n Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n var error = new Error()\n var stackString\n\n Object.defineProperty(error, 'constructor', {\n value: DeprecationError\n })\n\n Object.defineProperty(error, 'message', {\n configurable: true,\n enumerable: false,\n value: message,\n writable: true\n })\n\n Object.defineProperty(error, 'name', {\n enumerable: false,\n configurable: true,\n value: 'DeprecationError',\n writable: true\n })\n\n Object.defineProperty(error, 'namespace', {\n configurable: true,\n enumerable: false,\n value: namespace,\n writable: true\n })\n\n Object.defineProperty(error, 'stack', {\n configurable: true,\n enumerable: false,\n get: function () {\n if (stackString !== undefined) {\n return stackString\n }\n\n // prepare stack trace\n return (stackString = createStackString.call(this, stack))\n },\n set: function setter (val) {\n stackString = val\n }\n })\n\n return error\n}\n", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: Math.pow(1024, 4),\n pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.pb) {\n unit = 'PB';\n } else if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.split('.').map(function (s, i) {\n return i === 0\n ? s.replace(formatThousandsRegExp, thousandsSeparator)\n : s\n }).join('.');\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n if (isNaN(floatValue)) {\n return null;\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter = token \"=\" ( token / quoted-string )\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text = %x80-FF\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || !TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n var string = type\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!TOKEN_REGEXP.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n var header = typeof string === 'object'\n ? getcontenttype(string)\n : string\n\n if (typeof header !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = header.indexOf(';')\n var type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (!TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid media type')\n }\n\n var obj = new ContentType(type.toLowerCase())\n\n // parse parameters\n if (index !== -1) {\n var key\n var match\n var value\n\n PARAM_REGEXP.lastIndex = index\n\n while ((match = PARAM_REGEXP.exec(header))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value.charCodeAt(0) === 0x22 /* \" */) {\n // remove quotes\n value = value.slice(1, -1)\n\n // remove escapes\n if (value.indexOf('\\\\') !== -1) {\n value = value.replace(QESC_REGEXP, '$1')\n }\n }\n\n obj.parameters[key] = value\n }\n\n if (index !== header.length) {\n throw new TypeError('invalid parameter format')\n }\n }\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n var header\n\n if (typeof obj.getHeader === 'function') {\n // res-like\n header = obj.getHeader('content-type')\n } else if (typeof obj.headers === 'object') {\n // req-like\n header = obj.headers && obj.headers['content-type']\n }\n\n if (typeof header !== 'string') {\n throw new TypeError('content-type header is missing from object')\n }\n\n return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n // no need to quote tokens\n if (TOKEN_REGEXP.test(str)) {\n return str\n }\n\n if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n this.parameters = Object.create(null)\n this.type = type\n}\n", "'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n obj.__proto__ = proto\n return obj\n}\n\nfunction mixinProperties (obj, proto) {\n for (var prop in proto) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n obj[prop] = proto[prop]\n }\n }\n return obj\n}\n", "{\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"103\": \"Early Hints\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a Teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Too Early\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n}\n", "/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n 300: true,\n 301: true,\n 302: true,\n 303: true,\n 305: true,\n 307: true,\n 308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n 204: true,\n 205: true,\n 304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n 502: true,\n 503: true,\n 504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n var map = {}\n\n Object.keys(codes).forEach(function forEachCode (code) {\n var message = codes[code]\n var status = Number(code)\n\n // populate map\n map[message.toLowerCase()] = status\n })\n\n return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n return Object.keys(codes).map(function mapCode (code) {\n return Number(code)\n })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n var msg = message.toLowerCase()\n\n if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n throw new Error('invalid status message: \"' + message + '\"')\n }\n\n return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n throw new Error('invalid status code: ' + code)\n }\n\n return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n if (typeof code === 'number') {\n return getStatusMessage(code)\n }\n\n if (typeof code !== 'string') {\n throw new TypeError('code must be a number or string')\n }\n\n // '403'\n var n = parseInt(code, 10)\n if (!isNaN(n)) {\n return getStatusMessage(n)\n }\n\n return getStatusCode(code)\n}\n", "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", "try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n", "/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n return str\n .split(' ')\n .map(function (token) {\n return token.slice(0, 1).toUpperCase() + token.slice(1)\n })\n .join('')\n .replace(/[^ _0-9a-z]/gi, '')\n}\n", "/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n // so much arity going on ~_~\n var err\n var msg\n var status = 500\n var props = {}\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i]\n var type = typeof arg\n if (type === 'object' && arg instanceof Error) {\n err = arg\n status = err.status || err.statusCode || status\n } else if (type === 'number' && i === 0) {\n status = arg\n } else if (type === 'string') {\n msg = arg\n } else if (type === 'object') {\n props = arg\n } else {\n throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n }\n }\n\n if (typeof status === 'number' && (status < 400 || status >= 600)) {\n deprecate('non-error status code; use only 4xx or 5xx status codes')\n }\n\n if (typeof status !== 'number' ||\n (!statuses.message[status] && (status < 400 || status >= 600))) {\n status = 500\n }\n\n // constructor\n var HttpError = createError[status] || createError[codeClass(status)]\n\n if (!err) {\n // create error\n err = HttpError\n ? new HttpError(msg)\n : new Error(msg || statuses.message[status])\n Error.captureStackTrace(err, createError)\n }\n\n if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n // add properties to generic error\n err.expose = status < 500\n err.status = err.statusCode = status\n }\n\n for (var key in props) {\n if (key !== 'status' && key !== 'statusCode') {\n err[key] = props[key]\n }\n }\n\n return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n function HttpError () {\n throw new TypeError('cannot construct abstract class')\n }\n\n inherits(HttpError, Error)\n\n return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ClientError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ClientError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ClientError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ClientError, HttpError)\n nameFunc(ClientError, className)\n\n ClientError.prototype.status = code\n ClientError.prototype.statusCode = code\n ClientError.prototype.expose = true\n\n return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n return function isHttpError (val) {\n if (!val || typeof val !== 'object') {\n return false\n }\n\n if (val instanceof HttpError) {\n return true\n }\n\n return val instanceof Error &&\n typeof val.expose === 'boolean' &&\n typeof val.statusCode === 'number' && val.status === val.statusCode\n }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ServerError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ServerError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ServerError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ServerError, HttpError)\n nameFunc(ServerError, className)\n\n ServerError.prototype.status = code\n ServerError.prototype.statusCode = code\n ServerError.prototype.expose = false\n\n return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n if (desc && desc.configurable) {\n desc.value = name\n Object.defineProperty(func, 'name', desc)\n }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n codes.forEach(function forEachCode (code) {\n var CodeError\n var name = toIdentifier(statuses.message[code])\n\n switch (codeClass(code)) {\n case 400:\n CodeError = createClientErrorConstructor(HttpError, name, code)\n break\n case 500:\n CodeError = createServerErrorConstructor(HttpError, name, code)\n break\n }\n\n if (CodeError) {\n // export the constructor\n exports[code] = CodeError\n exports[name] = CodeError\n }\n })\n}\n\n/**\n * Get a class name from a name identifier.\n *\n * @param {string} name\n * @returns {string}\n * @private\n */\n\nfunction toClassName (name) {\n return name.slice(-5) === 'Error' ? name : name + 'Error'\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "/*!\n * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar EventEmitter = require('events').EventEmitter\nvar ReadStream = require('fs').ReadStream\nvar Stream = require('stream')\nvar Zlib = require('zlib')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy (stream, suppress) {\n if (isFsReadStream(stream)) {\n destroyReadStream(stream)\n } else if (isZlibStream(stream)) {\n destroyZlibStream(stream)\n } else if (hasDestroy(stream)) {\n stream.destroy()\n }\n\n if (isEventEmitter(stream) && suppress) {\n stream.removeAllListeners('error')\n stream.addListener('error', noop)\n }\n\n return stream\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream (stream) {\n stream.destroy()\n\n if (typeof stream.close === 'function') {\n // node.js core bug work-around\n stream.on('open', onOpenClose)\n }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream (stream) {\n if (stream._hadError === true) {\n var prop = stream._binding === null\n ? '_binding'\n : '_handle'\n\n stream[prop] = {\n close: function () { this[prop] = null }\n }\n }\n\n stream.close()\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream (stream) {\n if (typeof stream.destroy === 'function') {\n // node.js core bug work-around\n // istanbul ignore if: node.js 0.8\n if (stream._binding) {\n // node.js < 0.10.0\n stream.destroy()\n if (stream._processing) {\n stream._needDrain = true\n stream.once('drain', onDrainClearBinding)\n } else {\n stream._binding.clear()\n }\n } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n // node.js >= 12, ^11.1.0, ^10.15.1\n stream.destroy()\n } else if (stream._destroy && typeof stream.close === 'function') {\n // node.js 7, 8\n stream.destroyed = true\n stream.close()\n } else {\n // fallback\n // istanbul ignore next\n stream.destroy()\n }\n } else if (typeof stream.close === 'function') {\n // node.js < 8 fallback\n closeZlibStream(stream)\n }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy (stream) {\n return stream instanceof Stream &&\n typeof stream.destroy === 'function'\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter (val) {\n return val instanceof EventEmitter\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream (stream) {\n return stream instanceof ReadStream\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream (stream) {\n return stream instanceof Zlib.Gzip ||\n stream instanceof Zlib.Gunzip ||\n stream instanceof Zlib.Deflate ||\n stream instanceof Zlib.DeflateRaw ||\n stream instanceof Zlib.Inflate ||\n stream instanceof Zlib.InflateRaw ||\n stream instanceof Zlib.Unzip\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop () {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding () {\n this._binding.clear()\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose () {\n if (typeof this.fd === 'number') {\n // actually close down the fd\n this.close()\n }\n}\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBytes = [];\n this.initialBytesLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBytes.push(buf);\n this.initialBytesLen += buf.length;\n \n if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n this.initialBytes.length = this.initialBytesLen = 0;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var res = this.decoder.write(buf),\n trail = this.decoder.end();\n\n return trail ? (res + trail) : res;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n var enc = defaultEncoding || 'utf-16le';\n\n if (buf.length >= 2) {\n // Check BOM.\n if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n enc = 'utf-16be';\n else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n enc = 'utf-16le';\n else {\n // No BOM found. Try to deduce encoding from initial content.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n for (var i = 0; i < _len; i += 2) {\n if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n }\n\n if (asciiCharsBE > asciiCharsLE)\n enc = 'utf-16be';\n else if (asciiCharsBE < asciiCharsLE)\n enc = 'utf-16le';\n }\n }\n\n return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString();\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString();\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 decode tables.\n var thirdByteNodeIdx = this.decodeTables.length;\n var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n var fourthByteNodeIdx = this.decodeTables.length;\n var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n var secondByteNode = this.decodeTables[secondByteNodeIdx];\n for (var j = 0x30; j <= 0x39; j++)\n secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n }\n for (var i = 0x81; i <= 0xFE; i++)\n thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n for (var i = 0x30; i <= 0x39; i++)\n fourthByteNode[i] = GB18030_CODE\n } \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0)\n this._setEncodeChar(uCode, mbCode);\n else if (uCode <= NODE_START)\n this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n else if (uCode <= SEQ_START)\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBuf = Buffer.alloc(0);\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n uCode;\n\n if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n \n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n uCode = this.defaultCharUnicode.charCodeAt(0);\n }\n else if (uCode === GB18030_CODE) {\n var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode > 0xFFFF) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 + uCode % 0x400;\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBuf.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var buf = this.prevBuf.slice(1);\n\n // Parse remaining as usual.\n this.prevBuf = Buffer.alloc(0);\n this.nodeIdx = 0;\n if (buf.length > 0)\n ret += this.write(buf);\n }\n\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + Math.floor((r-l+1)/2);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n", "[\n[\"0\",\"\\u0000\",128],\n[\"a1\",\"\uFF61\",62],\n[\"8140\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\"],\n[\"8180\",\"\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"81b8\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"81c8\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"81da\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"81f0\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"81fc\",\"\u25EF\"],\n[\"824f\",\"\uFF10\",9],\n[\"8260\",\"\uFF21\",25],\n[\"8281\",\"\uFF41\",25],\n[\"829f\",\"\u3041\",82],\n[\"8340\",\"\u30A1\",62],\n[\"8380\",\"\u30E0\",22],\n[\"839f\",\"\u0391\",16,\"\u03A3\",6],\n[\"83bf\",\"\u03B1\",16,\"\u03C3\",6],\n[\"8440\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"8470\",\"\u0430\",5,\"\u0451\u0436\",7],\n[\"8480\",\"\u043E\",17],\n[\"849f\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"8740\",\"\u2460\",19,\"\u2160\",9],\n[\"875f\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"877e\",\"\u337B\"],\n[\"8780\",\"\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"889f\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"8940\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\"],\n[\"8980\",\"\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"8a40\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\"],\n[\"8a80\",\"\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"8b40\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\"],\n[\"8b80\",\"\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"8c40\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\"],\n[\"8c80\",\"\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"8d40\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\"],\n[\"8d80\",\"\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"8e40\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\"],\n[\"8e80\",\"\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"8f40\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\"],\n[\"8f80\",\"\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"9040\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\"],\n[\"9080\",\"\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"9140\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\"],\n[\"9180\",\"\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"9240\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\"],\n[\"9280\",\"\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"9340\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\"],\n[\"9380\",\"\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"9440\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\"],\n[\"9480\",\"\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"9540\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\"],\n[\"9580\",\"\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"9640\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\"],\n[\"9680\",\"\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"9740\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\"],\n[\"9780\",\"\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"9840\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"989f\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"9940\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\"],\n[\"9980\",\"\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"9a40\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\"],\n[\"9a80\",\"\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"9b40\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\"],\n[\"9b80\",\"\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"9c40\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\"],\n[\"9c80\",\"\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"9d40\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\"],\n[\"9d80\",\"\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"9e40\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\"],\n[\"9e80\",\"\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"9f40\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\"],\n[\"9f80\",\"\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"e040\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\"],\n[\"e080\",\"\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e140\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\"],\n[\"e180\",\"\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e240\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\"],\n[\"e280\",\"\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e340\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\"],\n[\"e380\",\"\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e440\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\"],\n[\"e480\",\"\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e540\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\"],\n[\"e580\",\"\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"e640\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\"],\n[\"e680\",\"\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"e740\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\"],\n[\"e780\",\"\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"e840\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\"],\n[\"e880\",\"\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"e940\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\"],\n[\"e980\",\"\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"ea40\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\"],\n[\"ea80\",\"\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"ed40\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\"],\n[\"ed80\",\"\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"ee40\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\"],\n[\"ee80\",\"\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"eeef\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"f040\",\"\uE000\",62],\n[\"f080\",\"\uE03F\",124],\n[\"f140\",\"\uE0BC\",62],\n[\"f180\",\"\uE0FB\",124],\n[\"f240\",\"\uE178\",62],\n[\"f280\",\"\uE1B7\",124],\n[\"f340\",\"\uE234\",62],\n[\"f380\",\"\uE273\",124],\n[\"f440\",\"\uE2F0\",62],\n[\"f480\",\"\uE32F\",124],\n[\"f540\",\"\uE3AC\",62],\n[\"f580\",\"\uE3EB\",124],\n[\"f640\",\"\uE468\",62],\n[\"f680\",\"\uE4A7\",124],\n[\"f740\",\"\uE524\",62],\n[\"f780\",\"\uE563\",124],\n[\"f840\",\"\uE5E0\",62],\n[\"f880\",\"\uE61F\",124],\n[\"f940\",\"\uE69C\"],\n[\"fa40\",\"\u2170\",9,\"\u2160\",9,\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\"],\n[\"fa80\",\"\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\"],\n[\"fb40\",\"\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\"],\n[\"fb80\",\"\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\"],\n[\"fc40\",\"\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"8ea1\",\"\uFF61\",62],\n[\"a1a1\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\"],\n[\"a2a1\",\"\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2ba\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"a2ca\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"a2dc\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"a2f2\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"a2fe\",\"\u25EF\"],\n[\"a3b0\",\"\uFF10\",9],\n[\"a3c1\",\"\uFF21\",25],\n[\"a3e1\",\"\uFF41\",25],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a8a1\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"ada1\",\"\u2460\",19,\"\u2160\",9],\n[\"adc0\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"addf\",\"\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"b0a1\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"b1a1\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\"],\n[\"b2a1\",\"\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"b3a1\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\"],\n[\"b4a1\",\"\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"b5a1\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\"],\n[\"b6a1\",\"\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"b7a1\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\"],\n[\"b8a1\",\"\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"b9a1\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\"],\n[\"baa1\",\"\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"bba1\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\"],\n[\"bca1\",\"\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"bda1\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\"],\n[\"bea1\",\"\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"bfa1\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\"],\n[\"c0a1\",\"\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"c1a1\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\"],\n[\"c2a1\",\"\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"c3a1\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\"],\n[\"c4a1\",\"\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"c5a1\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\"],\n[\"c6a1\",\"\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"c7a1\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\"],\n[\"c8a1\",\"\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"c9a1\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\"],\n[\"caa1\",\"\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"cba1\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\"],\n[\"cca1\",\"\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"cda1\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\"],\n[\"cea1\",\"\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"cfa1\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"d0a1\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"d1a1\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\"],\n[\"d2a1\",\"\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"d3a1\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\"],\n[\"d4a1\",\"\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"d5a1\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\"],\n[\"d6a1\",\"\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"d7a1\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\"],\n[\"d8a1\",\"\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"d9a1\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\"],\n[\"daa1\",\"\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"dba1\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\"],\n[\"dca1\",\"\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"dda1\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\"],\n[\"dea1\",\"\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"dfa1\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\"],\n[\"e0a1\",\"\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e1a1\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\"],\n[\"e2a1\",\"\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e3a1\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\"],\n[\"e4a1\",\"\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e5a1\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\"],\n[\"e6a1\",\"\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e7a1\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\"],\n[\"e8a1\",\"\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e9a1\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\"],\n[\"eaa1\",\"\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"eba1\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\"],\n[\"eca1\",\"\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"eda1\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\"],\n[\"eea1\",\"\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"efa1\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\"],\n[\"f0a1\",\"\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"f1a1\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\"],\n[\"f2a1\",\"\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"f3a1\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\"],\n[\"f4a1\",\"\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"f9a1\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\"],\n[\"faa1\",\"\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"fba1\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\"],\n[\"fca1\",\"\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"fcf1\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"8fa2af\",\"\u02D8\u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\"],\n[\"8fa2c2\",\"\u00A1\u00A6\u00BF\"],\n[\"8fa2eb\",\"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\"],\n[\"8fa6e1\",\"\u0386\u0388\u0389\u038A\u03AA\"],\n[\"8fa6e7\",\"\u038C\"],\n[\"8fa6e9\",\"\u038E\u03AB\"],\n[\"8fa6ec\",\"\u038F\"],\n[\"8fa6f1\",\"\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE\"],\n[\"8fa7c2\",\"\u0402\",10,\"\u040E\u040F\"],\n[\"8fa7f2\",\"\u0452\",10,\"\u045E\u045F\"],\n[\"8fa9a1\",\"\u00C6\u0110\"],\n[\"8fa9a4\",\"\u0126\"],\n[\"8fa9a6\",\"\u0132\"],\n[\"8fa9a8\",\"\u0141\u013F\"],\n[\"8fa9ab\",\"\u014A\u00D8\u0152\"],\n[\"8fa9af\",\"\u0166\u00DE\"],\n[\"8fa9c1\",\"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE\"],\n[\"8faaa1\",\"\u00C1\u00C0\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8\u00CB\u00CA\u011A\u0116\u0112\u0118\"],\n[\"8faaba\",\"\u011C\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD\u0178\u0176\u0179\u017D\u017B\"],\n[\"8faba1\",\"\u00E1\u00E0\u00E4\u00E2\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\"],\n[\"8fabbd\",\"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\"],\n[\"8fabc5\",\"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177\u017A\u017E\u017C\"],\n[\"8fb0a1\",\"\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84\"],\n[\"8fb1a1\",\"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090\"],\n[\"8fb2a1\",\"\u5092\u5093\u5094\u5096\u509B\u509C\u509E\",4,\"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2\"],\n[\"8fb3a1\",\"\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B\"],\n[\"8fb4a1\",\"\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F\"],\n[\"8fb5a1\",\"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\"],\n[\"8fb6a1\",\"\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D\",5,\"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4\",4,\"\u56F1\u56EB\u56ED\"],\n[\"8fb7a1\",\"\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D\",4,\"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1\"],\n[\"8fb8a1\",\"\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D\"],\n[\"8fb9a1\",\"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\"],\n[\"8fbaa1\",\"\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\",4,\"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69\"],\n[\"8fbba1\",\"\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4\"],\n[\"8fbca1\",\"\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\",4,\"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67\"],\n[\"8fbda1\",\"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\",4,\"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\"],\n[\"8fbea1\",\"\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110\",4,\"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5\"],\n[\"8fbfa1\",\"\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375\"],\n[\"8fc0a1\",\"\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF\"],\n[\"8fc1a1\",\"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D\"],\n[\"8fc2a1\",\"\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D\"],\n[\"8fc3a1\",\"\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E\",4,\"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF\"],\n[\"8fc4a1\",\"\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32\"],\n[\"8fc5a1\",\"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\"],\n[\"8fc6a1\",\"\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6\"],\n[\"8fc7a1\",\"\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E\"],\n[\"8fc8a1\",\"\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA\"],\n[\"8fc9a1\",\"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094\",4,\"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103\",4,\"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160\"],\n[\"8fcaa1\",\"\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB\"],\n[\"8fcba1\",\"\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD\"],\n[\"8fcca1\",\"\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428\",9,\"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506\"],\n[\"8fcda1\",\"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579\",5,\"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639\"],\n[\"8fcea1\",\"\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2\",6,\"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762\"],\n[\"8fcfa1\",\"\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3\"],\n[\"8fd0a1\",\"\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE\"],\n[\"8fd1a1\",\"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\"],\n[\"8fd2a1\",\"\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\",5],\n[\"8fd3a1\",\"\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D\"],\n[\"8fd4a1\",\"\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2\",4,\"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D\"],\n[\"8fd5a1\",\"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\"],\n[\"8fd6a1\",\"\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246\"],\n[\"8fd7a1\",\"\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378\"],\n[\"8fd8a1\",\"\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3\"],\n[\"8fd9a1\",\"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F\",4,\"\u8556\u8559\u855C\",6,\"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\"],\n[\"8fdaa1\",\"\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660\",4,\"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723\"],\n[\"8fdba1\",\"\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783\",6,\"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835\"],\n[\"8fdca1\",\"\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\",4,\"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A\"],\n[\"8fdda1\",\"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4\",4,\"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\"],\n[\"8fdea1\",\"\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42\",4,\"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86\"],\n[\"8fdfa1\",\"\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22\"],\n[\"8fe0a1\",\"\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41\"],\n[\"8fe1a1\",\"\u8F43\u8F47\u8F4F\u8F51\",4,\"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\"],\n[\"8fe2a1\",\"\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF\"],\n[\"8fe3a1\",\"\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC\",5,\"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275\",4,\"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297\"],\n[\"8fe4a1\",\"\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF\",4,\"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376\"],\n[\"8fe5a1\",\"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9\",4,\"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579\"],\n[\"8fe6a1\",\"\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702\"],\n[\"8fe7a1\",\"\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826\"],\n[\"8fe8a1\",\"\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931\",4,\"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5\"],\n[\"8fe9a1\",\"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF\",4],\n[\"8feaa1\",\"\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A\",4,\"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8\"],\n[\"8feba1\",\"\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\",4,\"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B\"],\n[\"8feca1\",\"\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5\"],\n[\"8feda1\",\"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43\",4,\"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\",4,\"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5\"]\n]\n", "[\n[\"0\",\"\\u0000\",127,\"\u20AC\"],\n[\"8140\",\"\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A\",5,\"\u4E72\u4E74\",9,\"\u4E7F\",6,\"\u4E87\u4E8A\"],\n[\"8180\",\"\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02\",6,\"\u4F0B\u4F0C\u4F12\",4,\"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\",4,\"\u4F44\u4F45\u4F47\",5,\"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\"],\n[\"8240\",\"\u4FA4\u4FAB\u4FAD\u4FB0\",4,\"\u4FB6\",8,\"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2\",4,\"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF\",11],\n[\"8280\",\"\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F\",10,\"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050\",4,\"\u5056\u5057\u5058\u5059\u505B\u505D\",7,\"\u5066\",5,\"\u506D\",8,\"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E\",20,\"\u50A4\u50A6\u50AA\u50AB\u50AD\",4,\"\u50B3\",6,\"\u50BC\"],\n[\"8340\",\"\u50BD\",17,\"\u50D0\",5,\"\u50D7\u50D8\u50D9\u50DB\",10,\"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6\",4,\"\u50FC\",9,\"\u5108\"],\n[\"8380\",\"\u5109\u510A\u510C\",5,\"\u5113\",13,\"\u5122\",28,\"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D\",4,\"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6\",4,\"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\",5],\n[\"8440\",\"\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5\",5,\"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244\",5,\"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258\"],\n[\"8480\",\"\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273\",9,\"\u527E\u5280\u5283\",4,\"\u5289\",6,\"\u5291\u5292\u5294\",6,\"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\",9,\"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9\",5,\"\u52E0\u52E1\u52E2\u52E3\u52E5\",10,\"\u52F1\",7,\"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E\"],\n[\"8540\",\"\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F\",9,\"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F\"],\n[\"8580\",\"\u5390\",4,\"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\",6,\"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\",4,\"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D\",4,\"\u5463\u5465\u5467\u5469\",7,\"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1\"],\n[\"8640\",\"\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\",4,\"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4\",5,\"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A\",4,\"\u5512\u5513\u5515\",5,\"\u551C\u551D\u551E\u551F\u5521\u5525\u5526\"],\n[\"8680\",\"\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B\",4,\"\u5551\u5552\u5553\u5554\u5557\",4,\"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F\",5,\"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0\",6,\"\u55A8\",8,\"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF\",4,\"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7\",4,\"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8\",4,\"\u55FF\u5602\u5603\u5604\u5605\"],\n[\"8740\",\"\u5606\u5607\u560A\u560B\u560D\u5610\",7,\"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640\",11,\"\u564F\",4,\"\u5655\u5656\u565A\u565B\u565D\",4],\n[\"8780\",\"\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D\",7,\"\u5687\",6,\"\u5690\u5691\u5692\u5694\",14,\"\u56A4\",10,\"\u56B0\",6,\"\u56B8\u56B9\u56BA\u56BB\u56BD\",12,\"\u56CB\",8,\"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5\",5,\"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B\",6],\n[\"8840\",\"\u5712\",9,\"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734\",4,\"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752\",4,\"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780\"],\n[\"8880\",\"\u5781\u5787\u5788\u5789\u578A\u578D\",4,\"\u5794\",6,\"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9\",8,\"\u57C4\",6,\"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\",7,\"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825\",4,\"\u582B\",4,\"\u5831\u5832\u5833\u5834\u5836\",7],\n[\"8940\",\"\u583E\",5,\"\u5845\",6,\"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859\",4,\"\u585F\",5,\"\u5866\",4,\"\u586D\",16,\"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C\"],\n[\"8980\",\"\u588D\",4,\"\u5894\",4,\"\u589B\u589C\u589D\u58A0\",7,\"\u58AA\",17,\"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\",10,\"\u58D2\u58D3\u58D4\u58D6\",13,\"\u58E5\",5,\"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA\",7,\"\u5903\u5905\u5906\u5908\",4,\"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B\"],\n[\"8a40\",\"\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B\",4,\"\u5961\u5963\u5964\u5966\",12,\"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6\"],\n[\"8a80\",\"\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3\",5,\"\u59BA\u59BC\u59BD\u59BF\",6,\"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\",4,\"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED\",11,\"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A\",6,\"\u5A33\u5A35\u5A37\",4,\"\u5A3D\u5A3E\u5A3F\u5A41\",4,\"\u5A47\u5A48\u5A4B\",9,\"\u5A56\u5A57\u5A58\u5A59\u5A5B\",5],\n[\"8b40\",\"\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B\",8,\"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80\",17,\"\u5A93\",6,\"\u5A9C\",13,\"\u5AAB\u5AAC\"],\n[\"8b80\",\"\u5AAD\",4,\"\u5AB4\u5AB6\u5AB7\u5AB9\",4,\"\u5ABF\u5AC0\u5AC3\",5,\"\u5ACA\u5ACB\u5ACD\",4,\"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC\",4,\"\u5AF2\",22,\"\u5B0A\",11,\"\u5B18\",25,\"\u5B33\u5B35\u5B36\u5B38\",7,\"\u5B41\",6],\n[\"8c40\",\"\u5B48\",7,\"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF\"],\n[\"8c80\",\"\u5BD1\u5BD4\",8,\"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9\",4,\"\u5BEF\u5BF1\",6,\"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67\",6,\"\u5C70\u5C72\",6,\"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83\",4,\"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D\",4,\"\u5CA4\",4],\n[\"8d40\",\"\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5\",5,\"\u5CCC\",5,\"\u5CD3\",5,\"\u5CDA\",6,\"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1\",9,\"\u5CFC\",4],\n[\"8d80\",\"\u5D01\u5D04\u5D05\u5D08\",5,\"\u5D0F\",4,\"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F\",4,\"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F\",4,\"\u5D35\",7,\"\u5D3F\",7,\"\u5D48\u5D49\u5D4D\",10,\"\u5D59\u5D5A\u5D5C\u5D5E\",10,\"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75\",12,\"\u5D83\",21,\"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0\"],\n[\"8e40\",\"\u5DA1\",21,\"\u5DB8\",12,\"\u5DC6\",6,\"\u5DCE\",12,\"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED\"],\n[\"8e80\",\"\u5DF0\u5DF5\u5DF6\u5DF8\",4,\"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\",7,\"\u5E28\",4,\"\u5E2F\u5E30\u5E32\",4,\"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46\",5,\"\u5E4D\",6,\"\u5E56\",4,\"\u5E5C\u5E5D\u5E5F\u5E60\u5E63\",14,\"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8\",4,\"\u5EAE\",4,\"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF\",6],\n[\"8f40\",\"\u5EC6\u5EC7\u5EC8\u5ECB\",5,\"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC\",11,\"\u5EE9\u5EEB\",8,\"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24\"],\n[\"8f80\",\"\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\",6,\"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41\",14,\"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2\",5,\"\u5FA9\u5FAB\u5FAC\u5FAF\",5,\"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\",4,\"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007\"],\n[\"9040\",\"\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030\",4,\"\u6036\",4,\"\u603D\u603E\u6040\u6044\",6,\"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080\"],\n[\"9080\",\"\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD\",7,\"\u60C7\u60C8\u60C9\u60CC\",4,\"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1\",4,\"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\",4,\"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110\",4,\"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C\",18,\"\u6140\",6],\n[\"9140\",\"\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156\",6,\"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169\",6,\"\u6171\u6172\u6173\u6174\u6176\u6178\",18,\"\u618C\u618D\u618F\",4,\"\u6195\"],\n[\"9180\",\"\u6196\",6,\"\u619E\",8,\"\u61AA\u61AB\u61AD\",9,\"\u61B8\",5,\"\u61BF\u61C0\u61C1\u61C3\",4,\"\u61C9\u61CC\",4,\"\u61D3\u61D5\",16,\"\u61E7\",13,\"\u61F6\",8,\"\u6200\",5,\"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238\",4,\"\u6242\u6244\u6245\u6246\u624A\"],\n[\"9240\",\"\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C\",6,\"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B\",5,\"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1\"],\n[\"9280\",\"\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333\",5,\"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356\",7,\"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399\",6,\"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0\"],\n[\"9340\",\"\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7\",6,\"\u63DF\u63E2\u63E4\",4,\"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406\",4,\"\u640D\u640E\u6411\u6412\u6415\",5,\"\u641D\u641F\u6422\u6423\u6424\"],\n[\"9380\",\"\u6425\u6427\u6428\u6429\u642B\u642E\",5,\"\u6435\",4,\"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B\",6,\"\u6453\u6455\u6456\u6457\u6459\",4,\"\u645F\",7,\"\u6468\u646A\u646B\u646C\u646E\",9,\"\u647B\",6,\"\u6483\u6486\u6488\",8,\"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F\",4,\"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\",6,\"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA\"],\n[\"9440\",\"\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7\",24,\"\u6501\",7,\"\u650A\",7,\"\u6513\",4,\"\u6519\",8],\n[\"9480\",\"\u6522\u6523\u6524\u6526\",4,\"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540\",4,\"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578\",14,\"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\",7,\"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\",7,\"\u65E1\u65E3\u65E4\u65EA\u65EB\"],\n[\"9540\",\"\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB\",4,\"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637\",4,\"\u663D\u663F\u6640\u6642\u6644\",6,\"\u664D\u664E\u6650\u6651\u6658\"],\n[\"9580\",\"\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669\",4,\"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698\",4,\"\u669E\",8,\"\u66A9\",4,\"\u66AF\",4,\"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\",25,\"\u66DA\u66DE\",7,\"\u66E7\u66E8\u66EA\",5,\"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703\"],\n[\"9640\",\"\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720\",5,\"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757\",4,\"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776\"],\n[\"9680\",\"\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9\",7,\"\u67C2\u67C5\",9,\"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5\",7,\"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818\",4,\"\u681E\u681F\u6820\u6822\",6,\"\u682B\",6,\"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856\",5],\n[\"9740\",\"\u685C\u685D\u685E\u685F\u686A\u686C\",7,\"\u6875\u6878\",8,\"\u6882\u6884\u6887\",7,\"\u6890\u6891\u6892\u6894\u6895\u6896\u6898\",9,\"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8\"],\n[\"9780\",\"\u68B9\",6,\"\u68C1\u68C3\",5,\"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB\",4,\"\u68E1\u68E2\u68E4\",9,\"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906\",4,\"\u690C\u690F\u6911\u6913\",11,\"\u6921\u6922\u6923\u6925\",7,\"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943\",16,\"\u6955\u6956\u6958\u6959\u695B\u695C\u695F\"],\n[\"9840\",\"\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972\",4,\"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E\",5,\"\u6996\u6997\u6999\u699A\u699D\",9,\"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\"],\n[\"9880\",\"\u69BE\u69BF\u69C0\u69C2\",7,\"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5\",5,\"\u69DC\u69DD\u69DE\u69E1\",11,\"\u69EE\u69EF\u69F0\u69F1\u69F3\",9,\"\u69FE\u6A00\",9,\"\u6A0B\",11,\"\u6A19\",5,\"\u6A20\u6A22\",5,\"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36\",6,\"\u6A3F\",4,\"\u6A45\u6A46\u6A48\",7,\"\u6A51\",6,\"\u6A5A\"],\n[\"9940\",\"\u6A5C\",4,\"\u6A62\u6A63\u6A64\u6A66\",10,\"\u6A72\",6,\"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85\",8,\"\u6A8F\u6A92\",4,\"\u6A98\",7,\"\u6AA1\",5],\n[\"9980\",\"\u6AA7\u6AA8\u6AAA\u6AAD\",114,\"\u6B25\u6B26\u6B28\",6],\n[\"9a40\",\"\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D\",11,\"\u6B5A\",7,\"\u6B68\u6B69\u6B6B\",13,\"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88\"],\n[\"9a80\",\"\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C\",4,\"\u6BA2\",7,\"\u6BAB\",7,\"\u6BB6\u6BB8\",6,\"\u6BC0\u6BC3\u6BC4\u6BC6\",4,\"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC\",4,\"\u6BE2\",7,\"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\",6,\"\u6C08\",4,\"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B\",4,\"\u6C51\u6C52\u6C53\u6C56\u6C58\"],\n[\"9b40\",\"\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B\",4,\"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8\"],\n[\"9b80\",\"\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F\",5,\"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D\",4,\"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96\",4,\"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9\",5,\"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA\"],\n[\"9c40\",\"\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD\",7,\"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35\"],\n[\"9c80\",\"\u6E36\u6E37\u6E39\u6E3B\",7,\"\u6E45\",7,\"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60\",10,\"\u6E6C\u6E6D\u6E6F\",14,\"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A\",4,\"\u6E91\",6,\"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\",5],\n[\"9d40\",\"\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA\",7,\"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A\",4,\"\u6F10\u6F11\u6F12\u6F16\",9,\"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37\",6,\"\u6F3F\u6F40\u6F41\u6F42\"],\n[\"9d80\",\"\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E\",9,\"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\",5,\"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\",6,\"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F\",12,\"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2\",4,\"\u6FA8\",10,\"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\",5,\"\u6FC1\u6FC3\",5,\"\u6FCA\",6,\"\u6FD3\",10,\"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5\"],\n[\"9e40\",\"\u6FE6\",7,\"\u6FF0\",32,\"\u7012\",7,\"\u701C\",6,\"\u7024\",6],\n[\"9e80\",\"\u702B\",9,\"\u7036\u7037\u7038\u703A\",17,\"\u704D\u704E\u7050\",13,\"\u705F\",11,\"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E\",12,\"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB\",12,\"\u70DA\"],\n[\"9f40\",\"\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0\",6,\"\u70F8\u70FA\u70FB\u70FC\u70FE\",10,\"\u710B\",4,\"\u7111\u7112\u7114\u7117\u711B\",10,\"\u7127\",7,\"\u7132\u7133\u7134\"],\n[\"9f80\",\"\u7135\u7137\",13,\"\u7146\u7147\u7148\u7149\u714B\u714D\u714F\",12,\"\u715D\u715F\",4,\"\u7165\u7169\",4,\"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E\",5,\"\u7185\",4,\"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A\",4,\"\u71A1\",6,\"\u71A9\u71AA\u71AB\u71AD\",5,\"\u71B4\u71B6\u71B7\u71B8\u71BA\",8,\"\u71C4\",9,\"\u71CF\",4],\n[\"a040\",\"\u71D6\",9,\"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8\",5,\"\u71EF\",9,\"\u71FA\",11,\"\u7207\",19],\n[\"a080\",\"\u721B\u721C\u721E\",9,\"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240\",6,\"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285\",4,\"\u728C\u728E\u7290\u7291\u7293\",11,\"\u72A0\",11,\"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA\",6,\"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\"],\n[\"a1a1\",\"\u3000\u3001\u3002\u00B7\u02C9\u02C7\u00A8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",7,\"\u3016\u3017\u3010\u3011\u00B1\u00D7\u00F7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFF04\u00A4\uFFE0\uFFE1\u2030\u00A7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2a1\",\"\u2170\",9],\n[\"a2b1\",\"\u2488\",19,\"\u2474\",19,\"\u2460\",9],\n[\"a2e5\",\"\u3220\",9],\n[\"a2f1\",\"\u2160\",11],\n[\"a3a1\",\"\uFF01\uFF02\uFF03\uFFE5\uFF05\",88,\"\uFFE3\"],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a6e0\",\"\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\"],\n[\"a6ee\",\"\uFE3B\uFE3C\uFE37\uFE38\uFE31\"],\n[\"a6f4\",\"\uFE33\uFE34\"],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a840\",\"\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550\",35,\"\u2581\",6],\n[\"a880\",\"\u2588\",7,\"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E\"],\n[\"a8a1\",\"\u0101\u00E1\u01CE\u00E0\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\u01DC\u00FC\u00EA\u0251\"],\n[\"a8bd\",\"\u0144\u0148\"],\n[\"a8c0\",\"\u0261\"],\n[\"a8c5\",\"\u3105\",36],\n[\"a940\",\"\u3021\",8,\"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\"],\n[\"a959\",\"\u2121\u3231\"],\n[\"a95c\",\"\u2010\"],\n[\"a960\",\"\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49\",9,\"\uFE54\uFE55\uFE56\uFE57\uFE59\",8],\n[\"a980\",\"\uFE62\",4,\"\uFE68\uFE69\uFE6A\uFE6B\"],\n[\"a996\",\"\u3007\"],\n[\"a9a4\",\"\u2500\",75],\n[\"aa40\",\"\u72DC\u72DD\u72DF\u72E2\",5,\"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304\",5,\"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340\",8],\n[\"aa80\",\"\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358\",7,\"\u7361\",10,\"\u736E\u7370\u7371\"],\n[\"ab40\",\"\u7372\",11,\"\u737F\",4,\"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3\",5,\"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3\",4],\n[\"ab80\",\"\u73CB\u73CC\u73CE\u73D2\",6,\"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3\",4],\n[\"ac40\",\"\u73F8\",10,\"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411\",8,\"\u741C\",5,\"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437\",4,\"\u743D\u743E\u743F\u7440\u7442\",11],\n[\"ac80\",\"\u744E\",6,\"\u7456\u7458\u745D\u7460\",12,\"\u746E\u746F\u7471\",4,\"\u7478\u7479\u747A\"],\n[\"ad40\",\"\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491\",10,\"\u749D\u749F\",7,\"\u74AA\",15,\"\u74BB\",12],\n[\"ad80\",\"\u74C8\",9,\"\u74D3\",8,\"\u74DD\u74DF\u74E1\u74E5\u74E7\",6,\"\u74F0\u74F1\u74F2\"],\n[\"ae40\",\"\u74F3\u74F5\u74F8\",6,\"\u7500\u7501\u7502\u7503\u7505\",7,\"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520\",4,\"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558\"],\n[\"ae80\",\"\u755D\",7,\"\u7567\u7568\u7569\u756B\",6,\"\u7573\u7575\u7576\u7577\u757A\",4,\"\u7580\u7581\u7582\u7584\u7585\u7587\"],\n[\"af40\",\"\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6\",4,\"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607\"],\n[\"af80\",\"\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644\"],\n[\"b040\",\"\u7645\",6,\"\u764E\",5,\"\u7655\u7657\",4,\"\u765D\u765F\u7660\u7661\u7662\u7664\",6,\"\u766C\u766D\u766E\u7670\",7,\"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B\"],\n[\"b080\",\"\u769C\",7,\"\u76A5\",8,\"\u76AF\u76B0\u76B3\u76B5\",9,\"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\"],\n[\"b140\",\"\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0\",4,\"\u76E6\",7,\"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E\",10,\"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B\"],\n[\"b180\",\"\u772C\u772E\u7730\",4,\"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748\",7,\"\u7752\",7,\"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\"],\n[\"b240\",\"\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D\",11,\"\u777A\u777B\u777C\u7781\u7782\u7783\u7786\",5,\"\u778F\u7790\u7793\",11,\"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6\",4],\n[\"b280\",\"\u77BC\u77BE\u77C0\",12,\"\u77CE\",8,\"\u77D8\u77D9\u77DA\u77DD\",4,\"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\"],\n[\"b340\",\"\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803\",5,\"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A\"],\n[\"b380\",\"\u785B\u785C\u785E\",11,\"\u786F\",7,\"\u7878\u7879\u787A\u787B\u787D\",6,\"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\"],\n[\"b440\",\"\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8\",7,\"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA\",9],\n[\"b480\",\"\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED\",4,\"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\",5,\"\u7902\u7903\u7904\u7906\",6,\"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\"],\n[\"b540\",\"\u790D\",5,\"\u7914\",9,\"\u791F\",4,\"\u7925\",14,\"\u7935\",4,\"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A\",8,\"\u7954\u7955\u7958\u7959\u7961\u7963\"],\n[\"b580\",\"\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970\",6,\"\u7979\u797B\",4,\"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\"],\n[\"b640\",\"\u7993\",6,\"\u799B\",11,\"\u79A8\",10,\"\u79B4\",4,\"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\",5,\"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA\"],\n[\"b680\",\"\u79EC\u79EE\u79F1\",6,\"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F\",4,\"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\"],\n[\"b740\",\"\u7A1D\u7A1F\u7A21\u7A22\u7A24\",14,\"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40\",5,\"\u7A47\",9,\"\u7A52\",4,\"\u7A58\",16],\n[\"b780\",\"\u7A69\",6,\"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\"],\n[\"b840\",\"\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\",4,\"\u7AB4\",10,\"\u7AC0\",10,\"\u7ACC\",9,\"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\",5,\"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\"],\n[\"b880\",\"\u7AF4\",4,\"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\"],\n[\"b940\",\"\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F\",5,\"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63\",10,\"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\",6,\"\u7B8E\u7B8F\"],\n[\"b980\",\"\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\",7,\"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\"],\n[\"ba40\",\"\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4\",4,\"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\",4,\"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF\",7,\"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10\",5,\"\u7C17\u7C18\u7C19\"],\n[\"ba80\",\"\u7C1A\",4,\"\u7C20\",5,\"\u7C28\u7C29\u7C2B\",12,\"\u7C39\",5,\"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\"],\n[\"bb40\",\"\u7C43\",9,\"\u7C4E\",36,\"\u7C75\",5,\"\u7C7E\",9],\n[\"bb80\",\"\u7C88\u7C8A\",6,\"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4\",4,\"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\"],\n[\"bc40\",\"\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\",6,\"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1\",6,\"\u7CE9\",5,\"\u7CF0\",7,\"\u7CF9\u7CFA\u7CFC\",13,\"\u7D0B\",5],\n[\"bc80\",\"\u7D11\",14,\"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\",6,\"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\"],\n[\"bd40\",\"\u7D37\",54,\"\u7D6F\",7],\n[\"bd80\",\"\u7D78\",32,\"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\"],\n[\"be40\",\"\u7D99\",12,\"\u7DA7\",6,\"\u7DAF\",42],\n[\"be80\",\"\u7DDA\",32,\"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\"],\n[\"bf40\",\"\u7DFB\",62],\n[\"bf80\",\"\u7E3A\u7E3C\",4,\"\u7E42\",4,\"\u7E48\",21,\"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\"],\n[\"c040\",\"\u7E5E\",35,\"\u7E83\",23,\"\u7E9C\u7E9D\u7E9E\"],\n[\"c080\",\"\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\",6,\"\u7F43\u7F46\",9,\"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\"],\n[\"c140\",\"\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\",4,\"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82\",7,\"\u7F8B\u7F8D\u7F8F\",4,\"\u7F95\",4,\"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\",6,\"\u7FB1\"],\n[\"c180\",\"\u7FB3\",4,\"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF\",4,\"\u7FD6\u7FD7\u7FD9\",5,\"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\"],\n[\"c240\",\"\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4\",6,\"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B\",5,\"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057\"],\n[\"c280\",\"\u8059\u805B\",13,\"\u806B\",5,\"\u8072\",11,\"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\"],\n[\"c340\",\"\u807E\u8081\u8082\u8085\u8088\u808A\u808D\",5,\"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7\",4,\"\u80CF\",6,\"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B\"],\n[\"c380\",\"\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F\",12,\"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139\",4,\"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\"],\n[\"c440\",\"\u8140\",5,\"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B\",4,\"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183\",4,\"\u8189\u818B\u818C\u818D\u818E\u8190\u8192\",5,\"\u8199\u819A\u819E\",4,\"\u81A4\u81A5\"],\n[\"c480\",\"\u81A7\u81A9\u81AB\",7,\"\u81B4\",5,\"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\",6,\"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\"],\n[\"c540\",\"\u81D4\",14,\"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE\",4,\"\u81F5\",5,\"\u81FD\u81FF\u8203\u8207\",4,\"\u820E\u820F\u8211\u8213\u8215\",5,\"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F\"],\n[\"c580\",\"\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250\",7,\"\u8259\u825B\u825C\u825D\u825E\u8260\",7,\"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\"],\n[\"c640\",\"\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8\"],\n[\"c680\",\"\u82FA\u82FC\",4,\"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D\",9,\"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\"],\n[\"c740\",\"\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A\",4,\"\u8353\u8355\",4,\"\u835D\u8362\u8370\",6,\"\u8379\u837A\u837E\",6,\"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\",6,\"\u83AC\u83AD\u83AE\"],\n[\"c780\",\"\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\"],\n[\"c840\",\"\u83EE\u83EF\u83F3\",4,\"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412\",5,\"\u8419\u841A\u841B\u841E\",5,\"\u8429\",7,\"\u8432\",5,\"\u8439\u843A\u843B\u843E\",7,\"\u8447\u8448\u8449\"],\n[\"c880\",\"\u844A\",6,\"\u8452\",4,\"\u8458\u845D\u845E\u845F\u8460\u8462\u8464\",4,\"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\"],\n[\"c940\",\"\u847D\",4,\"\u8483\u8484\u8485\u8486\u848A\u848D\u848F\",7,\"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2\",12,\"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\"],\n[\"c980\",\"\u84D8\",4,\"\u84DE\u84E1\u84E2\u84E4\u84E7\",4,\"\u84ED\u84EE\u84EF\u84F1\",10,\"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\"],\n[\"ca40\",\"\u8503\",8,\"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522\",8,\"\u852D\",9,\"\u853E\",4,\"\u8544\u8545\u8546\u8547\u854B\",10],\n[\"ca80\",\"\u8557\u8558\u855A\u855B\u855C\u855D\u855F\",4,\"\u8565\u8566\u8567\u8569\",8,\"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\"],\n[\"cb40\",\"\u8582\u8583\u8586\u8588\",6,\"\u8590\",10,\"\u859D\",6,\"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1\",5,\"\u85B8\u85BA\",6,\"\u85C2\",6,\"\u85CA\",4,\"\u85D1\u85D2\"],\n[\"cb80\",\"\u85D4\u85D6\",5,\"\u85DD\",6,\"\u85E5\u85E6\u85E7\u85E8\u85EA\",14,\"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\"],\n[\"cc40\",\"\u85F9\u85FA\u85FC\u85FD\u85FE\u8600\",4,\"\u8606\",10,\"\u8612\u8613\u8614\u8615\u8617\",15,\"\u8628\u862A\",13,\"\u8639\u863A\u863B\u863D\u863E\u863F\u8640\"],\n[\"cc80\",\"\u8641\",11,\"\u8652\u8653\u8655\",4,\"\u865B\u865C\u865D\u865F\u8660\u8661\u8663\",7,\"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\"],\n[\"cd40\",\"\u866D\u866F\u8670\u8672\",6,\"\u8683\",6,\"\u868E\",4,\"\u8694\u8696\",5,\"\u869E\",4,\"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB\",4,\"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC\"],\n[\"cd80\",\"\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\"],\n[\"ce40\",\"\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740\",6,\"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A\",5,\"\u8761\u8762\u8766\",7,\"\u876F\u8771\u8772\u8773\u8775\"],\n[\"ce80\",\"\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E\",4,\"\u8794\u8795\u8796\u8798\",6,\"\u87A0\",4,\"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\"],\n[\"cf40\",\"\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1\",4,\"\u87C7\u87C8\u87C9\u87CC\",4,\"\u87D4\",6,\"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\",9],\n[\"cf80\",\"\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804\",5,\"\u880B\",7,\"\u8814\u8817\u8818\u8819\u881A\u881C\",4,\"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\"],\n[\"d040\",\"\u8824\",13,\"\u8833\",5,\"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846\",5,\"\u884E\",5,\"\u8855\u8856\u8858\u885A\",6,\"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A\"],\n[\"d080\",\"\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897\",4,\"\u889D\",4,\"\u88A3\u88A5\",5,\"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\"],\n[\"d140\",\"\u88AC\u88AE\u88AF\u88B0\u88B2\",4,\"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\",4,\"\u88E0\u88E1\u88E6\u88E7\u88E9\",6,\"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903\",5],\n[\"d180\",\"\u8909\u890B\",4,\"\u8911\u8914\",4,\"\u891C\",4,\"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\"],\n[\"d240\",\"\u8938\",8,\"\u8942\u8943\u8945\",24,\"\u8960\",5,\"\u8967\",19,\"\u897C\"],\n[\"d280\",\"\u897D\u897E\u8980\u8982\u8984\u8985\u8987\",26,\"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\"],\n[\"d340\",\"\u89A2\",30,\"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\",6],\n[\"d380\",\"\u89FB\",4,\"\u8A01\",5,\"\u8A08\",21,\"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\"],\n[\"d440\",\"\u8A1E\",31,\"\u8A3F\",8,\"\u8A49\",21],\n[\"d480\",\"\u8A5F\",25,\"\u8A7A\",6,\"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\"],\n[\"d540\",\"\u8A81\",7,\"\u8A8B\",7,\"\u8A94\",46],\n[\"d580\",\"\u8AC3\",32,\"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\"],\n[\"d640\",\"\u8AE4\",34,\"\u8B08\",27],\n[\"d680\",\"\u8B24\u8B25\u8B27\",30,\"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\"],\n[\"d740\",\"\u8B46\",31,\"\u8B67\",4,\"\u8B6D\",25],\n[\"d780\",\"\u8B87\",24,\"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\"],\n[\"d840\",\"\u8C38\",8,\"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D\",7,\"\u8C56\u8C57\u8C58\u8C59\u8C5B\",5,\"\u8C63\",6,\"\u8C6C\",6,\"\u8C74\u8C75\u8C76\u8C77\u8C7B\",6,\"\u8C83\u8C84\u8C86\u8C87\"],\n[\"d880\",\"\u8C88\u8C8B\u8C8D\",6,\"\u8C95\u8C96\u8C97\u8C99\",20,\"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\"],\n[\"d940\",\"\u8CAE\",62],\n[\"d980\",\"\u8CED\",32,\"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\"],\n[\"da40\",\"\u8D0E\",14,\"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78\",8,\"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C\",4,\"\u8D92\u8D93\u8D95\",9,\"\u8DA0\u8DA1\"],\n[\"da80\",\"\u8DA2\u8DA4\",12,\"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\"],\n[\"db40\",\"\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE\",6,\"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15\",7,\"\u8E20\u8E21\u8E24\",4,\"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E\"],\n[\"db80\",\"\u8E3F\u8E43\u8E45\u8E46\u8E4C\",4,\"\u8E53\",5,\"\u8E5A\",11,\"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\"],\n[\"dc40\",\"\u8E73\u8E75\u8E77\",4,\"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88\",6,\"\u8E91\u8E92\u8E93\u8E95\",6,\"\u8E9D\u8E9F\",11,\"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\",6,\"\u8EBB\",7],\n[\"dc80\",\"\u8EC3\",10,\"\u8ECF\",21,\"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\"],\n[\"dd40\",\"\u8EE5\",62],\n[\"dd80\",\"\u8F24\",32,\"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\"],\n[\"de40\",\"\u8F45\",32,\"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6\"],\n[\"de80\",\"\u8FC9\",4,\"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\"],\n[\"df40\",\"\u9019\u901C\u9023\u9024\u9025\u9027\",5,\"\u9030\",4,\"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048\",4,\"\u904E\u9054\u9055\u9056\u9059\u905A\u905C\",5,\"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F\",4,\"\u9076\",6,\"\u907E\u9081\"],\n[\"df80\",\"\u9084\u9085\u9086\u9087\u9089\u908A\u908C\",4,\"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\"],\n[\"e040\",\"\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105\",19,\"\u911A\u911B\u911C\"],\n[\"e080\",\"\u911D\u911F\u9120\u9121\u9124\",10,\"\u9130\u9132\",6,\"\u913A\",8,\"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\"],\n[\"e140\",\"\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180\",4,\"\u9186\u9188\u918A\u918E\u918F\u9193\",6,\"\u919C\",5,\"\u91A4\",5,\"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\"],\n[\"e180\",\"\u91BC\",10,\"\u91C8\u91CB\u91D0\u91D2\",9,\"\u91DD\",8,\"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\"],\n[\"e240\",\"\u91E6\",62],\n[\"e280\",\"\u9225\",32,\"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\",5,\"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\"],\n[\"e340\",\"\u9246\",45,\"\u9275\",16],\n[\"e380\",\"\u9286\",7,\"\u928F\",24,\"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\"],\n[\"e440\",\"\u92A8\",5,\"\u92AF\",24,\"\u92C9\",31],\n[\"e480\",\"\u92E9\",32,\"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\"],\n[\"e540\",\"\u930A\",51,\"\u933F\",10],\n[\"e580\",\"\u934A\",31,\"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\"],\n[\"e640\",\"\u936C\",34,\"\u9390\",27],\n[\"e680\",\"\u93AC\",29,\"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\"],\n[\"e740\",\"\u93CE\",7,\"\u93D7\",54],\n[\"e780\",\"\u940E\",32,\"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\",6,\"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\",4,\"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\"],\n[\"e840\",\"\u942F\",14,\"\u943F\",43,\"\u946C\u946D\u946E\u946F\"],\n[\"e880\",\"\u9470\",20,\"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\"],\n[\"e940\",\"\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577\",7,\"\u9580\",42],\n[\"e980\",\"\u95AB\",32,\"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\"],\n[\"ea40\",\"\u95CC\",27,\"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623\",6,\"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657\"],\n[\"ea80\",\"\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D\",4,\"\u9673\u9678\",12,\"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\"],\n[\"eb40\",\"\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D\",9,\"\u96A8\",7,\"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6\",9,\"\u96E1\",6,\"\u96EB\"],\n[\"eb80\",\"\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717\",4,\"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\"],\n[\"ec40\",\"\u9721\",8,\"\u972B\u972C\u972E\u972F\u9731\u9733\",4,\"\u973A\u973B\u973C\u973D\u973F\",18,\"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A\",7],\n[\"ec80\",\"\u9772\u9775\u9777\",4,\"\u977D\",7,\"\u9786\",4,\"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799\",4,\"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\"],\n[\"ed40\",\"\u979E\u979F\u97A1\u97A2\u97A4\",6,\"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5\",46],\n[\"ed80\",\"\u97E4\u97E5\u97E8\u97EE\",4,\"\u97F4\u97F7\",23,\"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\"],\n[\"ee40\",\"\u980F\",62],\n[\"ee80\",\"\u984E\",32,\"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\",4,\"\u94BC\u94BD\u94BF\u94C4\u94C8\",6,\"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\"],\n[\"ef40\",\"\u986F\",5,\"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8\",37,\"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0\",4],\n[\"ef80\",\"\u98E5\u98E6\u98E9\",30,\"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\",4,\"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\",8,\"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\"],\n[\"f040\",\"\u9908\",4,\"\u990E\u990F\u9911\",28,\"\u992F\",26],\n[\"f080\",\"\u994A\",9,\"\u9956\",12,\"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\",4,\"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\",6,\"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\"],\n[\"f140\",\"\u998C\u998E\u999A\",10,\"\u99A6\u99A7\u99A9\",47],\n[\"f180\",\"\u99D9\",32,\"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\"],\n[\"f240\",\"\u99FA\",62],\n[\"f280\",\"\u9A39\",32,\"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\"],\n[\"f340\",\"\u9A5A\",17,\"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9\",6,\"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6\",4,\"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC\"],\n[\"f380\",\"\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0\",8,\"\u9AFA\u9AFC\",6,\"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\"],\n[\"f440\",\"\u9B07\u9B09\",5,\"\u9B10\u9B11\u9B12\u9B14\",10,\"\u9B20\u9B21\u9B22\u9B24\",10,\"\u9B30\u9B31\u9B33\",7,\"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\",5],\n[\"f480\",\"\u9B5B\",32,\"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\"],\n[\"f540\",\"\u9B7C\",62],\n[\"f580\",\"\u9BBB\",32,\"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\"],\n[\"f640\",\"\u9BDC\",62],\n[\"f680\",\"\u9C1B\",32,\"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\",5,\"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\",5,\"\u9CA5\",4,\"\u9CAB\u9CAD\u9CAE\u9CB0\",7,\"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\"],\n[\"f740\",\"\u9C3C\",62],\n[\"f780\",\"\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\",4,\"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC\",4,\"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\"],\n[\"f840\",\"\u9CE3\",62],\n[\"f880\",\"\u9D22\",32],\n[\"f940\",\"\u9D43\",62],\n[\"f980\",\"\u9D82\",32],\n[\"fa40\",\"\u9DA3\",62],\n[\"fa80\",\"\u9DE2\",32],\n[\"fb40\",\"\u9E03\",27,\"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74\",9,\"\u9E80\"],\n[\"fb80\",\"\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C\",5,\"\u9E94\",8,\"\u9E9E\u9EA0\",5,\"\u9EA7\u9EA8\u9EA9\u9EAA\"],\n[\"fc40\",\"\u9EAB\",8,\"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF\",4,\"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0\",8,\"\u9EFA\u9EFD\u9EFF\",6],\n[\"fc80\",\"\u9F06\",4,\"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A\",5,\"\u9F21\u9F23\",8,\"\u9F2D\u9F2E\u9F30\u9F31\"],\n[\"fd40\",\"\u9F32\",4,\"\u9F38\u9F3A\u9F3C\u9F3F\",4,\"\u9F45\",10,\"\u9F52\",38],\n[\"fd80\",\"\u9F79\",5,\"\u9F81\u9F82\u9F8D\",11,\"\u9F9C\u9F9D\u9F9E\u9FA1\",4,\"\uF92C\uF979\uF995\uF9E7\uF9F1\"],\n[\"fe40\",\"\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29\"]\n]\n", "[\n[\"a140\",\"\uE4C6\",62],\n[\"a180\",\"\uE505\",32],\n[\"a240\",\"\uE526\",62],\n[\"a280\",\"\uE565\",32],\n[\"a2ab\",\"\uE766\",5],\n[\"a2e3\",\"\u20AC\uE76D\"],\n[\"a2ef\",\"\uE76E\uE76F\"],\n[\"a2fd\",\"\uE770\uE771\"],\n[\"a340\",\"\uE586\",62],\n[\"a380\",\"\uE5C5\",31,\"\u3000\"],\n[\"a440\",\"\uE5E6\",62],\n[\"a480\",\"\uE625\",32],\n[\"a4f4\",\"\uE772\",10],\n[\"a540\",\"\uE646\",62],\n[\"a580\",\"\uE685\",32],\n[\"a5f7\",\"\uE77D\",7],\n[\"a640\",\"\uE6A6\",62],\n[\"a680\",\"\uE6E5\",32],\n[\"a6b9\",\"\uE785\",7],\n[\"a6d9\",\"\uE78D\",6],\n[\"a6ec\",\"\uE794\uE795\"],\n[\"a6f3\",\"\uE796\"],\n[\"a6f6\",\"\uE797\",8],\n[\"a740\",\"\uE706\",62],\n[\"a780\",\"\uE745\",32],\n[\"a7c2\",\"\uE7A0\",14],\n[\"a7f2\",\"\uE7AF\",12],\n[\"a896\",\"\uE7BC\",10],\n[\"a8bc\",\"\uE7C7\"],\n[\"a8bf\",\"\u01F9\"],\n[\"a8c1\",\"\uE7C9\uE7CA\uE7CB\uE7CC\"],\n[\"a8ea\",\"\uE7CD\",20],\n[\"a958\",\"\uE7E2\"],\n[\"a95b\",\"\uE7E3\"],\n[\"a95d\",\"\uE7E4\uE7E5\uE7E6\"],\n[\"a989\",\"\u303E\u2FF0\",11],\n[\"a997\",\"\uE7F4\",12],\n[\"a9f0\",\"\uE801\",14],\n[\"aaa1\",\"\uE000\",93],\n[\"aba1\",\"\uE05E\",93],\n[\"aca1\",\"\uE0BC\",93],\n[\"ada1\",\"\uE11A\",93],\n[\"aea1\",\"\uE178\",93],\n[\"afa1\",\"\uE1D6\",93],\n[\"d7fa\",\"\uE810\",4],\n[\"f8a1\",\"\uE234\",93],\n[\"f9a1\",\"\uE292\",93],\n[\"faa1\",\"\uE2F0\",93],\n[\"fba1\",\"\uE34E\",93],\n[\"fca1\",\"\uE3AC\",93],\n[\"fda1\",\"\uE40A\",93],\n[\"fe50\",\"\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843\"],\n[\"fe80\",\"\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13\",6,\"\u4DAE\uE864\uE468\",93]\n]\n", "{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}", "[\n[\"0\",\"\\u0000\",127],\n[\"8141\",\"\uAC02\uAC03\uAC05\uAC06\uAC0B\",4,\"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25\",6,\"\uAC2E\uAC32\uAC33\uAC34\"],\n[\"8161\",\"\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41\",9,\"\uAC4C\uAC4E\",5,\"\uAC55\"],\n[\"8181\",\"\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D\",18,\"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B\",4,\"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95\",6,\"\uAC9E\uACA2\",5,\"\uACAB\uACAD\uACAE\uACB1\",6,\"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD\",7,\"\uACD6\uACD8\",7,\"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7\",4,\"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07\",4,\"\uAD0E\uAD10\uAD12\uAD13\"],\n[\"8241\",\"\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21\",7,\"\uAD2A\uAD2B\uAD2E\",5],\n[\"8261\",\"\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D\",6,\"\uAD46\uAD48\uAD4A\",5,\"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57\"],\n[\"8281\",\"\uAD59\",7,\"\uAD62\uAD64\",7,\"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83\",4,\"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91\",10,\"\uAD9E\",5,\"\uADA5\",17,\"\uADB8\",7,\"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9\",6,\"\uADD2\uADD4\",7,\"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5\",18],\n[\"8341\",\"\uADFA\uADFB\uADFD\uADFE\uAE02\",5,\"\uAE0A\uAE0C\uAE0E\",5,\"\uAE15\",7],\n[\"8361\",\"\uAE1D\",18,\"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C\"],\n[\"8381\",\"\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57\",4,\"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71\",6,\"\uAE7A\uAE7E\",5,\"\uAE86\",5,\"\uAE8D\",46,\"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5\",6,\"\uAECE\uAED2\",5,\"\uAEDA\uAEDB\uAEDD\",8],\n[\"8441\",\"\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE\",5,\"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD\",8],\n[\"8461\",\"\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11\",18],\n[\"8481\",\"\uAF24\",7,\"\uAF2E\uAF2F\uAF31\uAF33\uAF35\",6,\"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A\",5,\"\uAF51\",10,\"\uAF5E\",5,\"\uAF66\",18,\"\uAF7A\",5,\"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89\",6,\"\uAF92\uAF93\uAF94\uAF96\",5,\"\uAF9D\",26,\"\uAFBA\uAFBB\uAFBD\uAFBE\"],\n[\"8541\",\"\uAFBF\uAFC1\",5,\"\uAFCA\uAFCC\uAFCF\",4,\"\uAFD5\",6,\"\uAFDD\",4],\n[\"8561\",\"\uAFE2\",5,\"\uAFEA\",5,\"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9\",6,\"\uB002\uB003\"],\n[\"8581\",\"\uB005\",6,\"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015\",6,\"\uB01E\",9,\"\uB029\",26,\"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E\",29,\"\uB07E\uB07F\uB081\uB082\uB083\uB085\",6,\"\uB08E\uB090\uB092\",5,\"\uB09B\uB09D\uB09E\uB0A3\uB0A4\"],\n[\"8641\",\"\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD\",6,\"\uB0C6\uB0CA\",5,\"\uB0D2\"],\n[\"8661\",\"\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9\",6,\"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6\",10],\n[\"8681\",\"\uB0F1\",22,\"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E\",4,\"\uB126\uB127\uB129\uB12A\uB12B\uB12D\",6,\"\uB136\uB13A\",5,\"\uB142\uB143\uB145\uB146\uB147\uB149\",6,\"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161\",22,\"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183\",4,\"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D\"],\n[\"8741\",\"\uB19E\",9,\"\uB1A9\",15],\n[\"8761\",\"\uB1B9\",18,\"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5\"],\n[\"8781\",\"\uB1D6\",5,\"\uB1DE\uB1E0\",7,\"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1\",7,\"\uB1FA\uB1FC\uB1FE\",5,\"\uB206\uB207\uB209\uB20A\uB20D\",6,\"\uB216\uB218\uB21A\",5,\"\uB221\",18,\"\uB235\",6,\"\uB23D\",26,\"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261\",6,\"\uB26A\",4],\n[\"8841\",\"\uB26F\",4,\"\uB276\",5,\"\uB27D\",6,\"\uB286\uB287\uB288\uB28A\",4],\n[\"8861\",\"\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B\",4,\"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7\"],\n[\"8881\",\"\uB2B8\",15,\"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3\",4,\"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309\",6,\"\uB312\uB316\",5,\"\uB31D\",54,\"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363\"],\n[\"8941\",\"\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379\",6,\"\uB382\uB386\",5,\"\uB38D\"],\n[\"8961\",\"\uB38E\uB38F\uB391\uB392\uB393\uB395\",10,\"\uB3A2\",5,\"\uB3A9\uB3AA\uB3AB\uB3AD\"],\n[\"8981\",\"\uB3AE\",21,\"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9\",18,\"\uB3FD\",18,\"\uB411\",6,\"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421\",6,\"\uB42A\uB42C\",7,\"\uB435\",15],\n[\"8a41\",\"\uB445\",10,\"\uB452\uB453\uB455\uB456\uB457\uB459\",6,\"\uB462\uB464\uB466\"],\n[\"8a61\",\"\uB467\",4,\"\uB46D\",18,\"\uB481\uB482\"],\n[\"8a81\",\"\uB483\",4,\"\uB489\",19,\"\uB49E\",5,\"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD\",7,\"\uB4B6\uB4B8\uB4BA\",5,\"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9\",6,\"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6\",5,\"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7\",4,\"\uB4EE\uB4F0\uB4F2\",5,\"\uB4F9\",26,\"\uB516\uB517\uB519\uB51A\uB51D\"],\n[\"8b41\",\"\uB51E\",5,\"\uB526\uB52B\",4,\"\uB532\uB533\uB535\uB536\uB537\uB539\",6,\"\uB542\uB546\"],\n[\"8b61\",\"\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555\",6,\"\uB55E\uB562\",8],\n[\"8b81\",\"\uB56B\",52,\"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6\",4,\"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5\",6,\"\uB5CE\uB5D2\",5,\"\uB5D9\",18,\"\uB5ED\",18],\n[\"8c41\",\"\uB600\",15,\"\uB612\uB613\uB615\uB616\uB617\uB619\",4],\n[\"8c61\",\"\uB61E\",6,\"\uB626\",5,\"\uB62D\",6,\"\uB635\",5],\n[\"8c81\",\"\uB63B\",12,\"\uB649\",26,\"\uB665\uB666\uB667\uB669\",50,\"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5\",5,\"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2\",16],\n[\"8d41\",\"\uB6C3\",16,\"\uB6D5\",8],\n[\"8d61\",\"\uB6DE\",17,\"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA\"],\n[\"8d81\",\"\uB6FB\",4,\"\uB702\uB703\uB704\uB706\",33,\"\uB72A\uB72B\uB72D\uB72E\uB731\",6,\"\uB73A\uB73C\",7,\"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D\",6,\"\uB756\",9,\"\uB761\uB762\uB763\uB765\uB766\uB767\uB769\",6,\"\uB772\uB774\uB776\",5,\"\uB77E\uB77F\uB781\uB782\uB783\uB785\",6,\"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E\"],\n[\"8e41\",\"\uB79F\uB7A1\",6,\"\uB7AA\uB7AE\",5,\"\uB7B6\uB7B7\uB7B9\",8],\n[\"8e61\",\"\uB7C2\",4,\"\uB7C8\uB7CA\",19],\n[\"8e81\",\"\uB7DE\",13,\"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5\",6,\"\uB7FE\uB802\",4,\"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811\",6,\"\uB81A\uB81C\uB81E\",5,\"\uB826\uB827\uB829\uB82A\uB82B\uB82D\",6,\"\uB836\uB83A\",5,\"\uB841\uB842\uB843\uB845\",11,\"\uB852\uB854\",7,\"\uB85E\uB85F\uB861\uB862\uB863\uB865\",6,\"\uB86E\uB870\uB872\",5,\"\uB879\uB87A\uB87B\uB87D\",7],\n[\"8f41\",\"\uB885\",7,\"\uB88E\",17],\n[\"8f61\",\"\uB8A0\",7,\"\uB8A9\",6,\"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9\",4],\n[\"8f81\",\"\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6\",5,\"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5\",7,\"\uB8DE\uB8E0\uB8E2\",5,\"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1\",6,\"\uB8FA\uB8FC\uB8FE\",5,\"\uB905\",18,\"\uB919\",6,\"\uB921\",26,\"\uB93E\uB93F\uB941\uB942\uB943\uB945\",6,\"\uB94D\uB94E\uB950\uB952\",5],\n[\"9041\",\"\uB95A\uB95B\uB95D\uB95E\uB95F\uB961\",6,\"\uB96A\uB96C\uB96E\",5,\"\uB976\uB977\uB979\uB97A\uB97B\uB97D\"],\n[\"9061\",\"\uB97E\",5,\"\uB986\uB988\uB98B\uB98C\uB98F\",15],\n[\"9081\",\"\uB99F\",12,\"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5\",6,\"\uB9BE\uB9C0\uB9C2\",5,\"\uB9CA\uB9CB\uB9CD\uB9D3\",4,\"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED\",6,\"\uB9F6\uB9FB\",4,\"\uBA02\",5,\"\uBA09\",11,\"\uBA16\",33,\"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46\"],\n[\"9141\",\"\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D\",6,\"\uBA66\uBA6A\",5],\n[\"9161\",\"\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79\",9,\"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D\",5],\n[\"9181\",\"\uBA93\",20,\"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3\",4,\"\uBABA\uBABC\uBABE\",5,\"\uBAC5\uBAC6\uBAC7\uBAC9\",14,\"\uBADA\",33,\"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05\",7,\"\uBB0E\uBB10\uBB12\",5,\"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21\",6],\n[\"9241\",\"\uBB28\uBB2A\uBB2C\",7,\"\uBB37\uBB39\uBB3A\uBB3F\",4,\"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52\"],\n[\"9261\",\"\uBB53\uBB55\uBB56\uBB57\uBB59\",7,\"\uBB62\uBB64\",7,\"\uBB6D\",4],\n[\"9281\",\"\uBB72\",21,\"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91\",18,\"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD\",6,\"\uBBB5\uBBB6\uBBB8\",7,\"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9\",6,\"\uBBD1\uBBD2\uBBD4\",35,\"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01\"],\n[\"9341\",\"\uBC03\",4,\"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35\"],\n[\"9361\",\"\uBC36\uBC37\uBC39\",6,\"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51\",8],\n[\"9381\",\"\uBC5A\uBC5B\uBC5C\uBC5E\",37,\"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F\",4,\"\uBC96\uBC98\uBC9B\",4,\"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9\",6,\"\uBCB2\uBCB6\",5,\"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5\",7,\"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD\",22,\"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD\"],\n[\"9441\",\"\uBCFE\",5,\"\uBD06\uBD08\uBD0A\",5,\"\uBD11\uBD12\uBD13\uBD15\",8],\n[\"9461\",\"\uBD1E\",5,\"\uBD25\",6,\"\uBD2D\",12],\n[\"9481\",\"\uBD3A\",5,\"\uBD41\",6,\"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51\",6,\"\uBD5A\",9,\"\uBD65\uBD66\uBD67\uBD69\",22,\"\uBD82\uBD83\uBD85\uBD86\uBD8B\",4,\"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D\",6,\"\uBDA5\",10,\"\uBDB1\",6,\"\uBDB9\",24],\n[\"9541\",\"\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD\",11,\"\uBDEA\",5,\"\uBDF1\"],\n[\"9561\",\"\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9\",6,\"\uBE01\uBE02\uBE04\uBE06\",5,\"\uBE0E\uBE0F\uBE11\uBE12\uBE13\"],\n[\"9581\",\"\uBE15\",6,\"\uBE1E\uBE20\",35,\"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F\",4,\"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B\",4,\"\uBE72\uBE76\",4,\"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85\",6,\"\uBE8E\uBE92\",5,\"\uBE9A\",13,\"\uBEA9\",14],\n[\"9641\",\"\uBEB8\",23,\"\uBED2\uBED3\"],\n[\"9661\",\"\uBED5\uBED6\uBED9\",6,\"\uBEE1\uBEE2\uBEE6\",5,\"\uBEED\",8],\n[\"9681\",\"\uBEF6\",10,\"\uBF02\",5,\"\uBF0A\",13,\"\uBF1A\uBF1E\",33,\"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49\",6,\"\uBF52\uBF53\uBF54\uBF56\",44],\n[\"9741\",\"\uBF83\",16,\"\uBF95\",8],\n[\"9761\",\"\uBF9E\",17,\"\uBFB1\",7],\n[\"9781\",\"\uBFB9\",11,\"\uBFC6\",5,\"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5\",6,\"\uBFDD\uBFDE\uBFE0\uBFE2\",89,\"\uC03D\uC03E\uC03F\"],\n[\"9841\",\"\uC040\",16,\"\uC052\",5,\"\uC059\uC05A\uC05B\"],\n[\"9861\",\"\uC05D\uC05E\uC05F\uC061\",6,\"\uC06A\",15],\n[\"9881\",\"\uC07A\",21,\"\uC092\uC093\uC095\uC096\uC097\uC099\",6,\"\uC0A2\uC0A4\uC0A6\",5,\"\uC0AE\uC0B1\uC0B2\uC0B7\",4,\"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1\",6,\"\uC0DA\uC0DE\",5,\"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED\",6,\"\uC0F6\uC0F8\uC0FA\",5,\"\uC101\uC102\uC103\uC105\uC106\uC107\uC109\",6,\"\uC111\uC112\uC113\uC114\uC116\",5,\"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E\"],\n[\"9941\",\"\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141\",6,\"\uC14A\uC14E\",5,\"\uC156\uC157\"],\n[\"9961\",\"\uC159\uC15A\uC15B\uC15D\",6,\"\uC166\uC16A\",5,\"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B\"],\n[\"9981\",\"\uC17C\",8,\"\uC186\",5,\"\uC18F\uC191\uC192\uC193\uC195\uC197\",4,\"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1\",11,\"\uC1BE\",5,\"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD\",6,\"\uC1D5\uC1D6\uC1D9\",6,\"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9\",6,\"\uC1F2\uC1F4\",7,\"\uC1FE\uC1FF\uC201\uC202\uC203\uC205\",6,\"\uC20E\uC210\uC212\",5,\"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223\"],\n[\"9a41\",\"\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235\",16],\n[\"9a61\",\"\uC246\uC247\uC249\",6,\"\uC252\uC253\uC255\uC256\uC257\uC259\",6,\"\uC261\uC262\uC263\uC264\uC266\"],\n[\"9a81\",\"\uC267\",4,\"\uC26E\uC26F\uC271\uC272\uC273\uC275\",6,\"\uC27E\uC280\uC282\",5,\"\uC28A\",5,\"\uC291\",6,\"\uC299\uC29A\uC29C\uC29E\",5,\"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE\",5,\"\uC2B6\uC2B8\uC2BA\",33,\"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5\",5,\"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301\",6,\"\uC30A\uC30B\uC30E\uC30F\"],\n[\"9b41\",\"\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D\",6,\"\uC326\uC327\uC32A\",8],\n[\"9b61\",\"\uC333\",17,\"\uC346\",7],\n[\"9b81\",\"\uC34E\",25,\"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373\",4,\"\uC37A\uC37B\uC37E\",5,\"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D\",50,\"\uC3C1\",22,\"\uC3DA\"],\n[\"9c41\",\"\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3\",4,\"\uC3EA\uC3EB\uC3EC\uC3EE\",5,\"\uC3F6\uC3F7\uC3F9\",5],\n[\"9c61\",\"\uC3FF\",8,\"\uC409\",6,\"\uC411\",9],\n[\"9c81\",\"\uC41B\",8,\"\uC425\",6,\"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435\",6,\"\uC43E\",9,\"\uC449\",26,\"\uC466\uC467\uC469\uC46A\uC46B\uC46D\",6,\"\uC476\uC477\uC478\uC47A\",5,\"\uC481\",18,\"\uC495\",6,\"\uC49D\",12],\n[\"9d41\",\"\uC4AA\",13,\"\uC4B9\uC4BA\uC4BB\uC4BD\",8],\n[\"9d61\",\"\uC4C6\",25],\n[\"9d81\",\"\uC4E0\",8,\"\uC4EA\",5,\"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502\",9,\"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515\",6,\"\uC51D\",10,\"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531\",6,\"\uC53A\uC53C\uC53E\",5,\"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569\",6,\"\uC572\uC576\",5,\"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594\"],\n[\"9e41\",\"\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1\",7,\"\uC5AA\",9,\"\uC5B6\"],\n[\"9e61\",\"\uC5B7\uC5BA\uC5BF\",4,\"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9\",6,\"\uC5E2\uC5E4\uC5E6\uC5E7\"],\n[\"9e81\",\"\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611\",6,\"\uC61A\uC61D\",6,\"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649\",6,\"\uC652\uC656\",5,\"\uC65E\uC65F\uC661\",10,\"\uC66D\uC66E\uC670\uC672\",5,\"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681\",6,\"\uC68A\uC68C\uC68E\",5,\"\uC696\uC697\uC699\uC69A\uC69B\uC69D\",6,\"\uC6A6\"],\n[\"9f41\",\"\uC6A8\uC6AA\",5,\"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB\",4,\"\uC6C2\uC6C4\uC6C6\",5,\"\uC6CE\"],\n[\"9f61\",\"\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5\",6,\"\uC6DE\uC6DF\uC6E2\",5,\"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2\"],\n[\"9f81\",\"\uC6F3\",4,\"\uC6FA\uC6FB\uC6FC\uC6FE\",5,\"\uC706\uC707\uC709\uC70A\uC70B\uC70D\",6,\"\uC716\uC718\uC71A\",5,\"\uC722\uC723\uC725\uC726\uC727\uC729\",6,\"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745\",4,\"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761\",6,\"\uC769\uC76A\uC76C\",7,\"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B\",4,\"\uC7A2\uC7A7\",4,\"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7\"],\n[\"a041\",\"\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2\",5,\"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1\",6,\"\uC7D9\uC7DA\uC7DB\uC7DC\"],\n[\"a061\",\"\uC7DE\",5,\"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED\",13],\n[\"a081\",\"\uC7FB\",4,\"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B\",4,\"\uC812\uC814\uC817\",4,\"\uC81E\uC81F\uC821\uC822\uC823\uC825\",6,\"\uC82E\uC830\uC832\",5,\"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841\",6,\"\uC84A\uC84B\uC84E\",5,\"\uC855\",26,\"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B\",4,\"\uC882\uC884\uC888\uC889\uC88A\uC88E\",5,\"\uC895\",7,\"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4\"],\n[\"a141\",\"\uC8A5\uC8A6\uC8A7\uC8A9\",18,\"\uC8BE\uC8BF\uC8C0\uC8C1\"],\n[\"a161\",\"\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD\",6,\"\uC8D6\uC8D8\uC8DA\",5,\"\uC8E2\uC8E3\uC8E5\"],\n[\"a181\",\"\uC8E6\",14,\"\uC8F6\",5,\"\uC8FE\uC8FF\uC901\uC902\uC903\uC907\",4,\"\uC90E\u3000\u3001\u3002\u00B7\u2025\u2026\u00A8\u3003\u00AD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",9,\"\u00B1\u00D7\u00F7\u2260\u2264\u2265\u221E\u2234\u00B0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u00A7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2\"],\n[\"a241\",\"\uC910\uC912\",5,\"\uC919\",18],\n[\"a261\",\"\uC92D\",6,\"\uC935\",18],\n[\"a281\",\"\uC948\",7,\"\uC952\uC953\uC955\uC956\uC957\uC959\",6,\"\uC962\uC964\",7,\"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\u00B4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\u00B8\u02DB\u00A1\u00BF\u02D0\u222E\u2211\u220F\u00A4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\u00B6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\u00AE\"],\n[\"a341\",\"\uC971\uC972\uC973\uC975\",6,\"\uC97D\",10,\"\uC98A\uC98B\uC98D\uC98E\uC98F\"],\n[\"a361\",\"\uC991\",6,\"\uC99A\uC99C\uC99E\",16],\n[\"a381\",\"\uC9AF\",16,\"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB\",4,\"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01\",58,\"\uFFE6\uFF3D\",32,\"\uFFE3\"],\n[\"a441\",\"\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2\",5,\"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04\"],\n[\"a461\",\"\uCA05\uCA06\uCA07\uCA0A\uCA0E\",5,\"\uCA15\uCA16\uCA17\uCA19\",12],\n[\"a481\",\"\uCA26\uCA27\uCA28\uCA2A\",28,\"\u3131\",93],\n[\"a541\",\"\uCA47\",4,\"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55\",6,\"\uCA5E\uCA62\",5,\"\uCA69\uCA6A\"],\n[\"a561\",\"\uCA6B\",17,\"\uCA7E\",5,\"\uCA85\uCA86\"],\n[\"a581\",\"\uCA87\",16,\"\uCA99\",14,\"\u2170\",9],\n[\"a5b0\",\"\u2160\",9],\n[\"a5c1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a5e1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a641\",\"\uCAA8\",19,\"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5\"],\n[\"a661\",\"\uCAC6\",5,\"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA\",5,\"\uCAE1\",6],\n[\"a681\",\"\uCAE8\uCAE9\uCAEA\uCAEB\uCAED\",6,\"\uCAF5\",18,\"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543\",7],\n[\"a741\",\"\uCB0B\",4,\"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19\",6,\"\uCB22\",7],\n[\"a761\",\"\uCB2A\",22,\"\uCB42\uCB43\uCB44\"],\n[\"a781\",\"\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51\",6,\"\uCB5A\uCB5B\uCB5C\uCB5E\",5,\"\uCB65\",7,\"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399\",9,\"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0\",9,\"\u3380\",4,\"\u33BA\",5,\"\u3390\",4,\"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6\"],\n[\"a841\",\"\uCB6D\",10,\"\uCB7A\",14],\n[\"a861\",\"\uCB89\",18,\"\uCB9D\",6],\n[\"a881\",\"\uCBA4\",19,\"\uCBB9\",11,\"\u00C6\u00D0\u00AA\u0126\"],\n[\"a8a6\",\"\u0132\"],\n[\"a8a8\",\"\u013F\u0141\u00D8\u0152\u00BA\u00DE\u0166\u014A\"],\n[\"a8b1\",\"\u3260\",27,\"\u24D0\",25,\"\u2460\",14,\"\u00BD\u2153\u2154\u00BC\u00BE\u215B\u215C\u215D\u215E\"],\n[\"a941\",\"\uCBC5\",14,\"\uCBD5\",10],\n[\"a961\",\"\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA\",18],\n[\"a981\",\"\uCBFD\",14,\"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15\",6,\"\uCC1E\uCC1F\uCC20\uCC23\uCC24\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0140\u0142\u00F8\u0153\u00DF\u00FE\u0167\u014B\u0149\u3200\",27,\"\u249C\",25,\"\u2474\",14,\"\u00B9\u00B2\u00B3\u2074\u207F\u2081\u2082\u2083\u2084\"],\n[\"aa41\",\"\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31\",6,\"\uCC3A\uCC3F\",4,\"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E\"],\n[\"aa61\",\"\uCC4F\",4,\"\uCC56\uCC5A\",5,\"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69\",6,\"\uCC71\uCC72\"],\n[\"aa81\",\"\uCC73\uCC74\uCC76\",29,\"\u3041\",82],\n[\"ab41\",\"\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1\",6,\"\uCCAA\uCCAE\",5,\"\uCCB6\uCCB7\uCCB9\"],\n[\"ab61\",\"\uCCBA\uCCBB\uCCBD\",6,\"\uCCC6\uCCC8\uCCCA\",5,\"\uCCD1\uCCD2\uCCD3\uCCD5\",5],\n[\"ab81\",\"\uCCDB\",8,\"\uCCE5\",6,\"\uCCED\uCCEE\uCCEF\uCCF1\",12,\"\u30A1\",85],\n[\"ac41\",\"\uCCFE\uCCFF\uCD00\uCD02\",5,\"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11\",6,\"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20\"],\n[\"ac61\",\"\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D\",11,\"\uCD3A\",4],\n[\"ac81\",\"\uCD3F\",28,\"\uCD5D\uCD5E\uCD5F\u0410\",5,\"\u0401\u0416\",25],\n[\"acd1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"ad41\",\"\uCD61\uCD62\uCD63\uCD65\",6,\"\uCD6E\uCD70\uCD72\",5,\"\uCD79\",7],\n[\"ad61\",\"\uCD81\",6,\"\uCD89\",10,\"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F\"],\n[\"ad81\",\"\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA\",5,\"\uCDB1\",18,\"\uCDC5\"],\n[\"ae41\",\"\uCDC6\",5,\"\uCDCD\uCDCE\uCDCF\uCDD1\",16],\n[\"ae61\",\"\uCDE2\",5,\"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1\",6,\"\uCDFA\uCDFC\uCDFE\",4],\n[\"ae81\",\"\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D\",6,\"\uCE15\uCE16\uCE17\uCE18\uCE1A\",5,\"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B\"],\n[\"af41\",\"\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36\",19],\n[\"af61\",\"\uCE4A\",13,\"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62\",5,\"\uCE6A\uCE6C\"],\n[\"af81\",\"\uCE6E\",5,\"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D\",6,\"\uCE86\uCE88\uCE8A\",5,\"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99\"],\n[\"b041\",\"\uCE9A\",5,\"\uCEA2\uCEA6\",5,\"\uCEAE\",12],\n[\"b061\",\"\uCEBB\",5,\"\uCEC2\",19],\n[\"b081\",\"\uCED6\",13,\"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED\",6,\"\uCEF6\uCEFA\",5,\"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10\",7,\"\uAC19\",4,\"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06\"],\n[\"b141\",\"\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09\",6,\"\uCF12\uCF14\uCF16\",5,\"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23\"],\n[\"b161\",\"\uCF25\",6,\"\uCF2E\uCF32\",5,\"\uCF39\",11],\n[\"b181\",\"\uCF45\",14,\"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D\",6,\"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78\"],\n[\"b241\",\"\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79\",6,\"\uCF81\uCF82\uCF83\uCF84\uCF86\",5,\"\uCF8D\"],\n[\"b261\",\"\uCF8E\",18,\"\uCFA2\",5,\"\uCFA9\"],\n[\"b281\",\"\uCFAA\",5,\"\uCFB1\",18,\"\uCFC5\",6,\"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059\"],\n[\"b341\",\"\uCFCC\",19,\"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9\"],\n[\"b361\",\"\uCFEA\",5,\"\uCFF2\uCFF4\uCFF6\",5,\"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005\",5],\n[\"b381\",\"\uD00B\",5,\"\uD012\",5,\"\uD019\",19,\"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB\",4,\"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD\"],\n[\"b441\",\"\uD02E\",5,\"\uD036\uD037\uD039\uD03A\uD03B\uD03D\",6,\"\uD046\uD048\uD04A\",5],\n[\"b461\",\"\uD051\uD052\uD053\uD055\uD056\uD057\uD059\",6,\"\uD061\",10,\"\uD06E\uD06F\"],\n[\"b481\",\"\uD071\uD072\uD073\uD075\",6,\"\uD07E\uD07F\uD080\uD082\",18,\"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB\",4,\"\uB2F3\uB2F4\uB2F5\uB2F7\",4,\"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365\"],\n[\"b541\",\"\uD095\",14,\"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD\",5],\n[\"b561\",\"\uD0B3\uD0B6\uD0B8\uD0BA\",5,\"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA\",5,\"\uD0D2\uD0D6\",4],\n[\"b581\",\"\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5\",6,\"\uD0EE\uD0F2\",5,\"\uD0F9\",11,\"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538\"],\n[\"b641\",\"\uD105\",7,\"\uD10E\",17],\n[\"b661\",\"\uD120\",15,\"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E\"],\n[\"b681\",\"\uD13F\uD142\uD146\",5,\"\uD14E\uD14F\uD151\uD152\uD153\uD155\",6,\"\uD15E\uD160\uD162\",5,\"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797\"],\n[\"b741\",\"\uD16E\",13,\"\uD17D\",6,\"\uD185\uD186\uD187\uD189\uD18A\"],\n[\"b761\",\"\uD18B\",20,\"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7\"],\n[\"b781\",\"\uD1A9\",6,\"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1\",14,\"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969\"],\n[\"b841\",\"\uD1D0\",7,\"\uD1D9\",17],\n[\"b861\",\"\uD1EB\",8,\"\uD1F5\uD1F6\uD1F7\uD1F9\",13],\n[\"b881\",\"\uD208\uD20A\",5,\"\uD211\",24,\"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE\",4,\"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC\"],\n[\"b941\",\"\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235\",6,\"\uD23E\uD240\uD242\",5,\"\uD249\uD24A\uD24B\uD24C\"],\n[\"b961\",\"\uD24D\",14,\"\uD25D\",6,\"\uD265\uD266\uD267\uD268\"],\n[\"b981\",\"\uD269\",22,\"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14\",4,\"\uBC1B\",4,\"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97\"],\n[\"ba41\",\"\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296\",5,\"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5\",6,\"\uD2AD\"],\n[\"ba61\",\"\uD2AE\uD2AF\uD2B0\uD2B2\",5,\"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3\",4,\"\uD2CA\uD2CC\",5],\n[\"ba81\",\"\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD\",6,\"\uD2E6\",9,\"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64\"],\n[\"bb41\",\"\uD2FB\",4,\"\uD302\uD304\uD306\",5,\"\uD30F\uD311\uD312\uD313\uD315\uD317\",4,\"\uD31E\uD322\uD323\"],\n[\"bb61\",\"\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331\",6,\"\uD33A\uD33E\",5,\"\uD346\uD347\uD348\uD349\"],\n[\"bb81\",\"\uD34A\",31,\"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4\"],\n[\"bc41\",\"\uD36A\",17,\"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387\"],\n[\"bc61\",\"\uD388\uD389\uD38A\uD38B\uD38E\uD392\",5,\"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1\",6,\"\uD3AA\uD3AC\uD3AE\"],\n[\"bc81\",\"\uD3AF\",4,\"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD\",6,\"\uD3C6\uD3C7\uD3CA\",5,\"\uD3D1\",5,\"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C\",4,\"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D\"],\n[\"bd41\",\"\uD3D7\uD3D9\",7,\"\uD3E2\uD3E4\",7,\"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7\"],\n[\"bd61\",\"\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402\",5,\"\uD409\",13],\n[\"bd81\",\"\uD417\",5,\"\uD41E\",25,\"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430\"],\n[\"be41\",\"\uD438\",7,\"\uD441\uD442\uD443\uD445\",14],\n[\"be61\",\"\uD454\",7,\"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465\",7,\"\uD46E\uD470\uD471\uD472\"],\n[\"be81\",\"\uD473\",4,\"\uD47A\uD47B\uD47D\uD47E\uD481\uD483\",4,\"\uD48A\uD48C\uD48E\",5,\"\uD495\",8,\"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4\",6,\"\uC5CC\uC5CE\"],\n[\"bf41\",\"\uD49E\",10,\"\uD4AA\",14],\n[\"bf61\",\"\uD4B9\",18,\"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5\"],\n[\"bf81\",\"\uD4D6\",5,\"\uD4DD\uD4DE\uD4E0\",7,\"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1\",6,\"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC\",5,\"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8\"],\n[\"c041\",\"\uD4FE\",5,\"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D\",6,\"\uD516\uD518\",5],\n[\"c061\",\"\uD51E\",25],\n[\"c081\",\"\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545\",6,\"\uD54E\uD550\uD552\",5,\"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751\",7,\"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A\"],\n[\"c141\",\"\uD564\uD566\uD567\uD56A\uD56C\uD56E\",5,\"\uD576\uD577\uD579\uD57A\uD57B\uD57D\",6,\"\uD586\uD58A\uD58B\"],\n[\"c161\",\"\uD58C\uD58D\uD58E\uD58F\uD591\",19,\"\uD5A6\uD5A7\"],\n[\"c181\",\"\uD5A8\",31,\"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3\"],\n[\"c241\",\"\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3\",4,\"\uD5DA\uD5DC\uD5DE\",5,\"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE\"],\n[\"c261\",\"\uD5EF\",4,\"\uD5F6\uD5F8\uD5FA\",5,\"\uD602\uD603\uD605\uD606\uD607\uD609\",6,\"\uD612\"],\n[\"c281\",\"\uD616\",5,\"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625\",7,\"\uD62E\",9,\"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B\"],\n[\"c341\",\"\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D\",4],\n[\"c361\",\"\uD662\",4,\"\uD668\uD66A\",5,\"\uD672\uD673\uD675\",11],\n[\"c381\",\"\uD681\uD682\uD684\uD686\",5,\"\uD68E\uD68F\uD691\uD692\uD693\uD695\",7,\"\uD69E\uD6A0\uD6A2\",5,\"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35\"],\n[\"c441\",\"\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1\",7,\"\uD6BA\uD6BC\",7,\"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB\"],\n[\"c461\",\"\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA\",5,\"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9\",4],\n[\"c481\",\"\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6\",5,\"\uD6FE\uD6FF\uD701\uD702\uD703\uD705\",11,\"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C\"],\n[\"c541\",\"\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721\",6,\"\uD72A\uD72C\uD72E\",5,\"\uD736\uD737\uD739\"],\n[\"c561\",\"\uD73A\uD73B\uD73D\",6,\"\uD745\uD746\uD748\uD74A\",5,\"\uD752\uD753\uD755\uD75A\",4],\n[\"c581\",\"\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775\",6,\"\uD77E\uD77F\uD780\uD782\",5,\"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C\"],\n[\"c641\",\"\uD78D\uD78E\uD78F\uD791\",6,\"\uD79A\uD79C\uD79E\",5],\n[\"c6a1\",\"\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401\"],\n[\"c7a1\",\"\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620\"],\n[\"c8a1\",\"\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D\"],\n[\"caa1\",\"\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95\"],\n[\"cba1\",\"\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2\"],\n[\"cca1\",\"\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0\"],\n[\"cda1\",\"\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC\"],\n[\"cea1\",\"\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE\"],\n[\"cfa1\",\"\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4\"],\n[\"d0a1\",\"\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3\"],\n[\"d1a1\",\"\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E\",5,\"\u90A3\uF914\",4,\"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925\"],\n[\"d2a1\",\"\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928\",4,\"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933\",5,\"\u99D1\uF939\",10,\"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A\",7,\"\u5AE9\u8A25\u677B\u7D10\uF952\",5,\"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336\"],\n[\"d3a1\",\"\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843\"],\n[\"d4a1\",\"\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85\"],\n[\"d5a1\",\"\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23\"],\n[\"d6a1\",\"\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC\"],\n[\"d7a1\",\"\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C\"],\n[\"d8a1\",\"\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5\"],\n[\"d9a1\",\"\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587\"],\n[\"daa1\",\"\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51\"],\n[\"dba1\",\"\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656\"],\n[\"dca1\",\"\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66\"],\n[\"dda1\",\"\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5\"],\n[\"dea1\",\"\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A\"],\n[\"dfa1\",\"\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72\"],\n[\"e0a1\",\"\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C\"],\n[\"e1a1\",\"\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101\"],\n[\"e2a1\",\"\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27\"],\n[\"e3a1\",\"\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81\"],\n[\"e4a1\",\"\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D\"],\n[\"e5a1\",\"\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982\"],\n[\"e6a1\",\"\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2\"],\n[\"e7a1\",\"\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3\"],\n[\"e8a1\",\"\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1\"],\n[\"e9a1\",\"\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553\"],\n[\"eaa1\",\"\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB\"],\n[\"eba1\",\"\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC\"],\n[\"eca1\",\"\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344\"],\n[\"eda1\",\"\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577\"],\n[\"eea1\",\"\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1\"],\n[\"efa1\",\"\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756\"],\n[\"f0a1\",\"\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B\"],\n[\"f1a1\",\"\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA\"],\n[\"f2a1\",\"\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F\"],\n[\"f3a1\",\"\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56\"],\n[\"f4a1\",\"\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2\"],\n[\"f5a1\",\"\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403\"],\n[\"f6a1\",\"\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17\"],\n[\"f7a1\",\"\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211\"],\n[\"f8a1\",\"\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43\"],\n[\"f9a1\",\"\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A\"],\n[\"faa1\",\"\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B\"],\n[\"fba1\",\"\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575\"],\n[\"fca1\",\"\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6\"],\n[\"fda1\",\"\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"a140\",\"\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\u00B7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\"],\n[\"a1a1\",\"\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\u00A7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\u00AF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\u00D7\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62\",4,\"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F\"],\n[\"a240\",\"\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581\",7,\"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D\"],\n[\"a2a1\",\"\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10\",9,\"\u2160\",9,\"\u3021\",8,\"\u5341\u5344\u5345\uFF21\",25,\"\uFF41\",21],\n[\"a340\",\"\uFF57\uFF58\uFF59\uFF5A\u0391\",16,\"\u03A3\",6,\"\u03B1\",16,\"\u03C3\",6,\"\u3105\",10],\n[\"a3a1\",\"\u3110\",25,\"\u02D9\u02C9\u02CA\u02C7\u02CB\"],\n[\"a3e1\",\"\u20AC\"],\n[\"a440\",\"\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D\"],\n[\"a4a1\",\"\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\"],\n[\"a540\",\"\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\"],\n[\"a5a1\",\"\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168\"],\n[\"a640\",\"\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74\"],\n[\"a6a1\",\"\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63\"],\n[\"a740\",\"\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D\"],\n[\"a7a1\",\"\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760\"],\n[\"a840\",\"\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\"],\n[\"a8a1\",\"\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\"],\n[\"a940\",\"\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\"],\n[\"a9a1\",\"\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A\"],\n[\"aa40\",\"\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\"],\n[\"aaa1\",\"\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644\"],\n[\"ab40\",\"\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1\"],\n[\"aba1\",\"\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7\"],\n[\"ac40\",\"\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17\"],\n[\"aca1\",\"\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004\"],\n[\"ad40\",\"\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\"],\n[\"ada1\",\"\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA\"],\n[\"ae40\",\"\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059\"],\n[\"aea1\",\"\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93\"],\n[\"af40\",\"\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\"],\n[\"afa1\",\"\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343\"],\n[\"b040\",\"\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\"],\n[\"b0a1\",\"\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\"],\n[\"b140\",\"\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\"],\n[\"b1a1\",\"\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\"],\n[\"b240\",\"\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\"],\n[\"b2a1\",\"\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C\"],\n[\"b340\",\"\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014\"],\n[\"b3a1\",\"\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960\"],\n[\"b440\",\"\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD\"],\n[\"b4a1\",\"\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\"],\n[\"b540\",\"\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\"],\n[\"b5a1\",\"\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41\"],\n[\"b640\",\"\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591\"],\n[\"b6a1\",\"\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC\"],\n[\"b740\",\"\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D\"],\n[\"b7a1\",\"\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763\"],\n[\"b840\",\"\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B\"],\n[\"b8a1\",\"\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\"],\n[\"b940\",\"\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4\"],\n[\"b9a1\",\"\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\"],\n[\"ba40\",\"\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\"],\n[\"baa1\",\"\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\"],\n[\"bb40\",\"\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4\"],\n[\"bba1\",\"\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC\"],\n[\"bc40\",\"\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182\"],\n[\"bca1\",\"\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483\"],\n[\"bd40\",\"\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\"],\n[\"bda1\",\"\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E\"],\n[\"be40\",\"\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09\"],\n[\"bea1\",\"\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1\"],\n[\"bf40\",\"\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A\"],\n[\"bfa1\",\"\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A\"],\n[\"c040\",\"\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\"],\n[\"c0a1\",\"\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\"],\n[\"c140\",\"\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA\"],\n[\"c1a1\",\"\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01\"],\n[\"c240\",\"\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658\"],\n[\"c2a1\",\"\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6\"],\n[\"c340\",\"\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378\"],\n[\"c3a1\",\"\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E\"],\n[\"c440\",\"\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C\"],\n[\"c4a1\",\"\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\"],\n[\"c540\",\"\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C\"],\n[\"c5a1\",\"\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92\"],\n[\"c640\",\"\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72\"],\n[\"c940\",\"\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\"],\n[\"c9a1\",\"\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\"],\n[\"ca40\",\"\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418\"],\n[\"caa1\",\"\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747\"],\n[\"cb40\",\"\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293\"],\n[\"cba1\",\"\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762\"],\n[\"cc40\",\"\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B\"],\n[\"cca1\",\"\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2\"],\n[\"cd40\",\"\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA\"],\n[\"cda1\",\"\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF\"],\n[\"ce40\",\"\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\"],\n[\"cea1\",\"\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA\"],\n[\"cf40\",\"\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42\"],\n[\"cfa1\",\"\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80\"],\n[\"d040\",\"\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA\"],\n[\"d0a1\",\"\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\"],\n[\"d140\",\"\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\"],\n[\"d1a1\",\"\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\"],\n[\"d240\",\"\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278\"],\n[\"d2a1\",\"\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\"],\n[\"d340\",\"\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322\"],\n[\"d3a1\",\"\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\"],\n[\"d440\",\"\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545\"],\n[\"d4a1\",\"\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F\"],\n[\"d540\",\"\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F\"],\n[\"d5a1\",\"\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9\"],\n[\"d640\",\"\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\"],\n[\"d6a1\",\"\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F\"],\n[\"d740\",\"\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7\"],\n[\"d7a1\",\"\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA\"],\n[\"d840\",\"\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837\"],\n[\"d8a1\",\"\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\"],\n[\"d940\",\"\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\"],\n[\"d9a1\",\"\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\"],\n[\"da40\",\"\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416\"],\n[\"daa1\",\"\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\"],\n[\"db40\",\"\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\"],\n[\"dba1\",\"\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\"],\n[\"dc40\",\"\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688\"],\n[\"dca1\",\"\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6\"],\n[\"dd40\",\"\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424\"],\n[\"dda1\",\"\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC\"],\n[\"de40\",\"\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153\"],\n[\"dea1\",\"\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13\"],\n[\"df40\",\"\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F\"],\n[\"dfa1\",\"\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4\"],\n[\"e040\",\"\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F\"],\n[\"e0a1\",\"\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\"],\n[\"e140\",\"\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\"],\n[\"e1a1\",\"\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\"],\n[\"e240\",\"\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\"],\n[\"e2a1\",\"\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993\"],\n[\"e340\",\"\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\"],\n[\"e3a1\",\"\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB\"],\n[\"e440\",\"\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D\"],\n[\"e4a1\",\"\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658\"],\n[\"e540\",\"\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189\"],\n[\"e5a1\",\"\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\"],\n[\"e640\",\"\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359\"],\n[\"e6a1\",\"\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F\"],\n[\"e740\",\"\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662\"],\n[\"e7a1\",\"\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27\"],\n[\"e840\",\"\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3\"],\n[\"e8a1\",\"\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\"],\n[\"e940\",\"\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\"],\n[\"e9a1\",\"\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\"],\n[\"ea40\",\"\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799\"],\n[\"eaa1\",\"\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558\"],\n[\"eb40\",\"\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0\"],\n[\"eba1\",\"\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\"],\n[\"ec40\",\"\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\"],\n[\"eca1\",\"\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E\"],\n[\"ed40\",\"\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6\"],\n[\"eda1\",\"\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E\"],\n[\"ee40\",\"\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E\"],\n[\"eea1\",\"\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C\"],\n[\"ef40\",\"\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30\"],\n[\"efa1\",\"\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376\"],\n[\"f040\",\"\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2\"],\n[\"f0a1\",\"\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67\"],\n[\"f140\",\"\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\"],\n[\"f1a1\",\"\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\"],\n[\"f240\",\"\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B\"],\n[\"f2a1\",\"\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\"],\n[\"f340\",\"\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\"],\n[\"f3a1\",\"\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2\"],\n[\"f440\",\"\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929\"],\n[\"f4a1\",\"\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF\"],\n[\"f540\",\"\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B\"],\n[\"f5a1\",\"\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625\"],\n[\"f640\",\"\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\"],\n[\"f6a1\",\"\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A\"],\n[\"f740\",\"\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A\"],\n[\"f7a1\",\"\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE\"],\n[\"f840\",\"\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F\"],\n[\"f8a1\",\"\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\"],\n[\"f940\",\"\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\"],\n[\"f9a1\",\"\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593\"]\n]\n", "[\n[\"8740\",\"\u43F0\u4C32\u4603\u45A6\u4578\uD85C\uDE67\u4D77\u45B3\uD85F\uDCB1\u4CE2\uD85F\uDCC5\u3B95\u4736\u4744\u4C47\u4C40\uD850\uDEBF\uD84D\uDE17\uD85C\uDF52\uD85B\uDE8B\uD85C\uDCD2\u4C57\uD868\uDF51\u474F\u45DA\u4C85\uD85F\uDC6C\u4D07\u4AA4\u46A1\uD85A\uDF23\u7225\uD856\uDE54\uD846\uDE63\uD84F\uDE06\uD84F\uDF61\u664D\u56FB\"],\n[\"8767\",\"\u7D95\u591D\uD862\uDFB9\u3DF4\u9734\uD85E\uDFEF\u5BDB\uD847\uDD5E\u5AA4\u3625\uD867\uDEB0\u5AD1\u5BB7\u5CFC\u676E\u8593\uD866\uDD45\u7461\u749D\u3875\uD847\uDD53\uD84D\uDE9E\uD858\uDC21\u3EEC\"],\n[\"87a1\",\"\uD856\uDCDE\u3AF5\u7AFC\u9F97\uD850\uDD61\uD862\uDD0D\uD84C\uDDEA\uD842\uDE8A\uD84C\uDE5E\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\uD857\uDDB9\u74C6\u9FC7\u57B3\u492F\u544C\u4131\uD84D\uDE8E\u5818\u7A72\uD85E\uDF65\u8B8F\u46AE\uD85B\uDE88\u4181\uD857\uDD99\u7BAE\uD849\uDCBC\u9FC8\uD849\uDCC1\uD849\uDCC9\uD849\uDCCC\u9FC9\u8504\uD84D\uDDBB\u40B4\u9FCA\u44E1\uD86B\uDDFF\u62C1\u706E\u9FCB\"],\n[\"8840\",\"\u31C0\",4,\"\uD840\uDD0C\u31C5\uD840\uDCD1\uD840\uDCCD\u31C6\u31C7\uD840\uDCCB\uD847\uDFE8\u31C8\uD840\uDCCA\u31C9\u31CA\u31CB\u31CC\uD840\uDD0E\u31CD\u31CE\u0100\u00C1\u01CD\u00C0\u0112\u00C9\u011A\u00C8\u014C\u00D3\u01D1\u00D2\u0FFF\u00CA\u0304\u1EBE\u0FFF\u00CA\u030C\u1EC0\u00CA\u0101\u00E1\u01CE\u00E0\u0251\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\"],\n[\"88a1\",\"\u01DC\u00FC\u0FFF\u00EA\u0304\u1EBF\u0FFF\u00EA\u030C\u1EC1\u00EA\u0261\u23DA\u23DB\"],\n[\"8940\",\"\uD868\uDFA9\uD844\uDD45\"],\n[\"8943\",\"\u650A\"],\n[\"8946\",\"\u4E3D\u6EDD\u9D4E\u91DF\"],\n[\"894c\",\"\uD85D\uDF35\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E\"],\n[\"89a1\",\"\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227\"],\n[\"89ab\",\"\u918C\u78B8\u915E\u80BC\"],\n[\"89b0\",\"\u8D0B\u80F6\uD842\uDDE7\"],\n[\"89b5\",\"\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\uD867\uDDF6\uD85C\uDC0E\u9E0A\uD868\uDD33\u35C1\"],\n[\"89c1\",\"\u6E9A\u823E\u7519\"],\n[\"89c5\",\"\u4911\u9A6C\u9A8F\u9F99\u7987\uD861\uDC6C\uD847\uDDCA\uD841\uDDD0\uD84A\uDEE6\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5\"],\n[\"8a40\",\"\uD85F\uDD84\u5525\"],\n[\"8a43\",\"\uD843\uDC42\uD843\uDD15\uD854\uDD2B\u5590\uD84B\uDCC6\u39EC\uD840\uDF41\u8E46\uD853\uDDB8\uD865\uDCE5\u4053\uD860\uDCBE\u777A\uD84B\uDC38\u3A34\u47D5\uD860\uDD5D\uD85A\uDDF2\uD853\uDDEA\u64DD\uD843\uDD7C\uD843\uDFB4\uD843\uDCD5\uD844\uDCF4\u648D\u8E7E\uD843\uDE96\uD843\uDC0B\uD843\uDF64\uD84B\uDCA9\uD860\uDE56\uD851\uDCD3\"],\n[\"8a64\",\"\uD843\uDD46\uD866\uDE4D\uD860\uDCE9\u47F4\uD853\uDEA7\uD84B\uDCC2\u9AB2\u3A67\uD865\uDDF4\u3FED\u3506\uD854\uDEC7\uD865\uDFD4\uD85E\uDCC8\uD84B\uDD44\u9D6E\u9815\"],\n[\"8a76\",\"\u43D9\uD858\uDCA5\u64B4\u54E3\uD84B\uDD4C\uD84A\uDFCA\uD844\uDC77\u39FB\uD844\uDC6F\"],\n[\"8aa1\",\"\uD859\uDEDA\uD859\uDF16\uD85E\uDDA0\u64EA\uD854\uDC52\uD843\uDC43\u8E68\uD848\uDDA1\uD862\uDF4C\uD841\uDF31\"],\n[\"8aac\",\"\u480B\uD840\uDDA9\u3FFA\u5873\uD84B\uDD8D\"],\n[\"8ab2\",\"\uD851\uDDC8\uD841\uDCFC\uD858\uDC97\uD843\uDF4C\uD843\uDD96\u5579\u40BB\u43BA\"],\n[\"8abb\",\"\u4AB4\uD84A\uDE66\uD844\uDC9D\u81AA\u98F5\uD843\uDD9C\u6379\u39FE\uD849\uDF75\u8DC0\u56A1\u647C\u3E43\"],\n[\"8ac9\",\"\uD869\uDE01\uD843\uDE09\uD84A\uDECF\uD84B\uDCC9\"],\n[\"8ace\",\"\uD844\uDCC8\uD84E\uDDC2\u3992\u3A06\uD860\uDE9B\u3578\uD857\uDE49\uD848\uDCC7\u5652\uD843\uDF31\uD84B\uDCB2\uD865\uDF20\u34BC\u6C3D\uD853\uDE3B\"],\n[\"8adf\",\"\uD85D\uDD74\uD84B\uDE8B\uD848\uDE08\uD869\uDE5B\uD863\uDCCD\uD843\uDE7A\uD843\uDC34\uD85A\uDC1C\u7F93\uD844\uDCCF\uD84A\uDC03\uD84A\uDD39\u35FB\uD854\uDDE3\uD843\uDE8C\uD843\uDF8D\uD843\uDEAA\u3F93\uD843\uDF30\uD843\uDD47\uD844\uDD4F\uD843\uDE4C\"],\n[\"8af6\",\"\uD843\uDEAB\uD842\uDFA9\uD843\uDD48\uD844\uDCC0\uD844\uDD3D\u3FF9\uD849\uDE96\u6432\uD843\uDFAD\"],\n[\"8b40\",\"\uD84C\uDFF4\uD85D\uDE39\uD84A\uDFCE\uD843\uDD7E\uD843\uDD7F\uD84B\uDC51\uD84B\uDC55\u3A18\uD843\uDE98\uD844\uDCC7\uD843\uDF2E\uD869\uDE32\uD85A\uDF50\uD863\uDCD2\uD863\uDD99\uD863\uDCCA\u95AA\u54CC\u82C4\u55B9\"],\n[\"8b55\",\"\uD867\uDEC3\u9C26\u9AB6\uD85D\uDF5E\uD84B\uDDEE\u7140\u816D\u80EC\u5C1C\uD859\uDD72\u8134\u3797\u535F\uD860\uDCBD\u91B6\uD843\uDEFA\uD843\uDE0F\uD843\uDE77\uD843\uDEFB\u35DD\uD853\uDDEB\u3609\uD843\uDCD6\u56AF\uD849\uDFB5\uD844\uDCC9\uD843\uDE10\uD843\uDE78\uD844\uDC78\uD844\uDD48\uD860\uDE07\uD845\uDC55\uD843\uDE79\uD853\uDE50\uD84B\uDDA4\u5A54\uD844\uDC1D\uD844\uDC1E\uD844\uDCF5\uD844\uDCF6\u579C\uD843\uDE11\"],\n[\"8ba1\",\"\uD85D\uDE94\uD860\uDECD\uD843\uDFB5\uD843\uDE7B\uD854\uDD7E\u3703\uD843\uDFB6\uD844\uDD80\uD854\uDED8\uD868\uDEBD\uD852\uDDDA\uD846\uDC3A\uD850\uDD77\uD860\uDE7C\u5899\u5268\u361A\uD855\uDF3D\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\uD856\uDF74\uD84C\uDD3D\u55FB\u35F2\u5689\u4E28\u5902\uD846\uDFC1\uD87E\uDC78\u9751\uD840\uDC86\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\uD852\uDCE9\u7F52\u793B\u7CF9\u7F53\uD858\uDE6A\u34C1\"],\n[\"8bde\",\"\uD858\uDF4B\u8002\u8080\uD859\uDE12\uD85A\uDD51\u535D\u8864\u89C1\uD85E\uDCB2\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\uD863\uDE0F\u97E6\u9875\u98CE\u98DE\u9963\uD866\uDC10\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\uD840\uDC87\u961D\u6237\u94A2\"],\n[\"8c40\",\"\u503B\u6DFE\uD867\uDC73\u9FA6\u3DC9\u888F\uD850\uDD4E\u7077\u5CF5\u4B20\uD854\uDDCD\u3559\uD857\uDD30\u6122\uD862\uDE32\u8FA7\u91F6\u7191\u6719\u73BA\uD84C\uDE81\uD868\uDD07\u3C8B\uD846\uDD80\u4B10\u78E4\u7402\u51AE\uD861\uDF0F\u4009\u6A63\uD868\uDEBA\u4223\u860F\uD842\uDE6F\u7A2A\uD866\uDD47\uD862\uDEEA\u9755\u704D\u5324\uD848\uDC7E\u93F4\u76D9\uD862\uDDE3\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\uD847\uDDB6\u5E92\u5E99\u5FC2\uD849\uDF12\u658B\"],\n[\"8ca1\",\"\uD84C\uDFF9\u6919\u6A43\uD84F\uDC63\u6CFF\"],\n[\"8ca7\",\"\u7200\uD851\uDD05\u738C\u3EDB\uD852\uDE13\u5B15\u74B9\u8B83\uD857\uDCA4\uD855\uDE95\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\uD863\uDDB9\uD845\uDC3F\u4071\u42A2\u5A1A\"],\n[\"8cc9\",\"\u9868\u676B\u4276\u573D\"],\n[\"8cce\",\"\u85D6\uD852\uDD7B\u82BF\uD85C\uDD0D\u4C81\uD85B\uDD74\u5D7B\uD85A\uDF15\uD85B\uDFBE\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\uD84C\uDE56\uD849\uDF96\u439A\u4536\"],\n[\"8ce6\",\"\u5CD5\uD84E\uDF1A\u8AF9\u5C78\u3D12\uD84D\uDD51\u5D78\u9FB2\u7157\u4558\uD850\uDCEC\uD847\uDE23\u4C77\u3978\u344A\uD840\uDDA4\uD85B\uDC41\u8ACC\u4FB4\uD840\uDE39\u59BF\u816C\u9856\uD866\uDCFA\u5F3B\"],\n[\"8d40\",\"\uD842\uDF9F\"],\n[\"8d42\",\"\uD848\uDDC1\uD862\uDD6D\u4102\u46BB\uD864\uDC79\u3F07\u9FB3\uD868\uDDB5\u40F8\u37D6\u46F7\uD85B\uDC46\u417C\uD861\uDEB2\uD85C\uDFFF\u456D\u38D4\uD855\uDC9A\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\uD852\uDF0F\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1\"],\n[\"8da1\",\"\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\uD862\uDDC0\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\uD84F\uDF41\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\uD840\uDF25\u43C1\u35F1\uD843\uDED8\"],\n[\"8e40\",\"\uD84F\uDED7\u57BE\uD85B\uDED3\u713E\uD855\uDFE0\u364E\u69A2\uD862\uDFE9\u5B74\u7A49\uD856\uDCE1\uD865\uDCD9\u7A65\u7A7D\uD856\uDDAC\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\uD859\uDC8D\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\uD857\uDC01\u7B0B\u7B55\u7B29\uD854\uDF0E\uD857\uDCFE\u7BA2\u7B6F\u839C\uD856\uDFB4\uD85B\uDC7F\u7BD0\u8421\u7B92\u7BB8\uD857\uDD20\u3DAD\uD857\uDC65\u8492\u7BFA\u7C06\u7C35\uD857\uDCC1\u7C44\u7C83\uD852\uDC82\u7CA6\u667D\uD851\uDD78\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE\"],\n[\"8ea1\",\"\u7E67\u451D\uD85B\uDE44\u7D5D\uD85B\uDED6\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\uD850\uDC57\uD858\uDC29\u7DE4\u3D13\u7DF5\uD845\uDFF9\u7DE5\uD860\uDF6D\u7E1D\uD858\uDD21\uD858\uDD5A\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\uD858\uDED0\u99E1\u7F97\uD858\uDF51\u7FA3\uD845\uDE61\uD840\uDC68\u455C\uD84D\uDF66\u4503\uD860\uDF3A\u7FFA\uD859\uDC89\u8005\u8008\u801D\u8028\u802F\uD868\uDC87\uD85B\uDCC3\u803B\u803C\u8061\uD849\uDF14\u4989\uD859\uDE26\uD84F\uDDE3\uD859\uDEE8\u6725\u80A7\uD862\uDE48\u8107\u811A\u58B0\uD849\uDEF6\u6C7F\uD859\uDC98\uD853\uDFB8\u64E7\uD845\uDC8A\u8218\uD846\uDC5E\u6A53\uD852\uDE65\uD852\uDE95\u447A\u8229\uD842\uDF0D\uD85A\uDE52\uD84F\uDD7E\u4FF9\uD845\uDCFD\u84E2\u8362\uD85A\uDF0A\uD852\uDDA7\uD84D\uDD30\uD845\uDF73\uD84F\uDDF8\u82AA\u691B\uD87E\uDD94\u41DB\"],\n[\"8f40\",\"\u854B\u82D0\u831A\uD843\uDE16\uD845\uDFB4\u36C1\uD84C\uDD7D\uD84D\uDD5A\u827B\u82E2\u8318\uD84F\uDE8B\uD85B\uDDA3\uD85A\uDF05\uD85A\uDF97\uD84D\uDDCE\u3DBF\u831D\u55EC\u8385\u450B\uD85B\uDDA5\u83AC\u83C1\u83D3\u347E\uD85B\uDED4\u6A57\u855A\u3496\uD85B\uDE42\uD84B\uDEEF\u8458\uD856\uDFE4\u8471\u3DD3\u44E4\u6AA7\u844A\uD84F\uDCB5\u7958\u84A8\uD85A\uDF96\uD85B\uDE77\uD85B\uDE43\u84DE\u840F\u8391\u44A0\u8493\u84E4\uD857\uDC91\u4240\uD857\uDCC0\u4543\u8534\u5AF2\uD85B\uDE99\u4527\u8573\u4516\u67BF\u8616\"],\n[\"8fa1\",\"\uD861\uDE25\uD861\uDE3B\u85C1\uD85C\uDC88\u8602\uD845\uDD82\uD85C\uDCCD\uD87E\uDDB2\u456A\u8628\u3648\uD846\uDCA2\u53F7\uD85C\uDF9A\u867E\u8771\uD868\uDCF8\u87EE\uD84B\uDC27\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\uD85D\uDDE0\uD84F\uDDB9\uD85D\uDDE4\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\uD85D\uDF0F\u8987\u898A\u89A6\u89A9\u89A7\u89BC\uD862\uDE25\u89E7\uD85E\uDD24\uD85E\uDEBD\u8A9C\u7793\u91FE\u8A90\uD85E\uDE59\u7AE9\uD85E\uDF3A\uD84F\uDF8F\u4713\uD85E\uDF38\u717C\u8B0C\u8B1F\uD855\uDC30\uD855\uDD65\u8B3F\u8B4C\u8B4D\u8AA9\uD852\uDE7A\u8B90\u8B9B\u8AAF\uD845\uDEDF\u4615\u884F\u8C9B\uD85F\uDD54\uD85F\uDD8F\uD87E\uDDD4\u3725\uD85F\uDD53\u8CD6\uD85F\uDD98\uD85F\uDDBD\u8D12\u8D03\uD846\uDD10\u8CDB\u705C\u8D11\uD853\uDCC9\u3ED0\u8D77\"],\n[\"9040\",\"\u8DA9\uD860\uDC02\uD844\uDC14\uD852\uDD8A\u3B7C\uD860\uDDBC\uD85C\uDD0C\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\uD860\uDF65\uD861\uDC12\u8FA5\u9303\uD868\uDE9F\uD842\uDE50\u8FB3\u492A\uD862\uDDDE\uD861\uDD3D\uD84F\uDDBB\u5EF8\uD84C\uDE62\u8FF9\uD868\uDC14\uD861\uDEBC\uD861\uDD01\uD848\uDF25\u3980\uD85B\uDED7\u9037\uD861\uDD3C\uD85E\uDEBE\u9061\uD861\uDD6C\uD861\uDE0B\u90A8\uD861\uDF13\u90C4\uD861\uDEE6\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\uD862\uDD33\uD847\uDE89\u920E\u6C9F\u9241\u9262\uD855\uDDB9\u92B9\uD862\uDEC6\uD84F\uDC9B\uD862\uDF0C\uD855\uDDDB\"],\n[\"90a1\",\"\uD843\uDD31\u932C\u936B\uD862\uDEE1\uD862\uDFEB\u708F\u5AC3\uD862\uDEE2\uD862\uDEE5\u4965\u9244\uD862\uDFEC\uD863\uDC39\uD862\uDFFF\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\uD849\uDE7A\uD861\uDED8\uD844\uDE7C\uD84F\uDE2E\u49DF\u6C1C\u967B\u9696\u416C\u96A3\uD85B\uDED5\u61DA\u96B6\u78F5\uD862\uDEE0\u96BD\u53CC\u49A1\uD85B\uDCB8\uD840\uDE74\uD859\uDC10\uD864\uDCAF\uD864\uDCE5\uD852\uDED1\uD846\uDD15\uD84C\uDF0A\u9731\u8642\u9736\u4A0F\u453D\u4585\uD852\uDEE9\u7075\u5B41\u971B\u975C\uD864\uDDD5\u9757\u5B4A\uD864\uDDEB\u975F\u9425\u50D0\uD84C\uDCB7\uD84C\uDCBC\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\uD855\uDC6C\u97EE\u741C\uD865\uDC33\u97FF\u97F5\uD865\uDC1D\uD85E\uDD7A\u4AD1\u9834\u9833\u984B\u9866\u3B0E\uD85C\uDD75\u3D51\uD841\uDE30\uD850\uDD5C\"],\n[\"9140\",\"\uD855\uDF06\u98CA\u98B7\u98C8\u98C7\u4AFF\uD85B\uDD27\uD845\uDED3\u55B0\u98E1\u98E6\u98EC\u9378\u9939\uD852\uDE29\u4B72\uD866\uDC57\uD866\uDD05\u99F5\u9A0C\u9A3B\u9A10\u9A58\uD855\uDF25\u36C4\uD864\uDCB1\uD866\uDFD5\u9AE0\u9AE2\uD866\uDF05\u9AF4\u4C0E\u9B14\u9B2D\uD861\uDE00\u5034\u9B34\uD85A\uDDA8\u38C3\uD84C\uDC7D\u9B50\u9B40\uD867\uDD3E\u5A45\uD846\uDC63\u9B8E\uD850\uDE4B\u9C02\u9BFF\u9C0C\uD867\uDE68\u9DD4\uD867\uDFB7\uD868\uDD92\uD868\uDDAB\uD868\uDCE1\uD868\uDD23\uD868\uDDDF\u9D7E\u9D83\uD868\uDD34\u9E0E\u6888\"],\n[\"91a1\",\"\u9DC4\uD848\uDD5B\uD868\uDD93\uD868\uDE20\uD846\uDD3B\uD868\uDE33\u9D39\uD868\uDCB9\uD868\uDEB4\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\uD850\uDF64\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\uD863\uDC2B\u9F02\u9F08\u4B96\u9424\uD85B\uDDA2\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\uD864\uDC8B\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\uD852\uDD75\uD852\uDDBB\u7177\uD852\uDDF8\uD850\uDF48\uD852\uDE51\u739E\uD862\uDFDA\uD846\uDCFA\u799F\uD862\uDD7E\uD863\uDE36\u9369\u93F3\uD862\uDE44\u92EC\u9381\u93CB\uD862\uDD6C\uD851\uDCB9\u7217\u3EEB\u7772\u7A43\u70D0\uD851\uDC73\uD850\uDFF8\u717E\uD845\uDFEF\u70A3\uD846\uDCBE\uD84D\uDD99\u3EC7\uD846\uDC85\uD855\uDC2F\uD845\uDFF8\u3722\uD845\uDEFB\uD846\uDC39\u36E1\uD845\uDF74\uD846\uDCD1\uD857\uDF4B\u3723\uD845\uDEC0\u575B\uD852\uDE25\uD844\uDFFE\uD844\uDEA8\"],\n[\"9240\",\"\uD844\uDFC6\uD845\uDCB6\u8503\uD84D\uDEA6\u8503\u8455\uD852\uDD94\uD85C\uDD65\uD84F\uDE31\uD855\uDD5C\uD84F\uDEFB\uD85C\uDC52\u44F4\uD84D\uDEEE\uD866\uDD9D\uD85B\uDF26\u67F9\u3733\u3C15\u3DE7\u586C\uD846\uDD22\u6810\u4057\uD84D\uDF3F\uD850\uDCE1\uD850\uDC8B\uD850\uDD0F\uD85B\uDC21\u54CB\u569E\uD859\uDEB1\u5692\uD843\uDFDF\uD842\uDFA8\uD843\uDE0D\u93C6\uD862\uDF13\u939C\u4EF8\u512B\u3819\uD851\uDC36\u4EBC\uD841\uDC65\uD840\uDF7F\u4F4B\u4F8A\uD855\uDE51\u5A68\uD840\uDDAB\uD840\uDFCB\u3999\uD840\uDF0A\uD841\uDC14\u3435\u4F29\uD840\uDEC0\uD863\uDEB3\uD840\uDE75\u8ADA\uD840\uDE0C\u4E98\"],\n[\"92a1\",\"\u50CD\u510D\u4FA2\u4F03\uD852\uDE0E\uD84F\uDE8A\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\uD84D\uDD95\uD84F\uDE39\uD84F\uDEBF\u6D72\uD846\uDC84\uD84F\uDE89\u51A8\u51C3\uD841\uDDE0\u44DD\uD841\uDCA3\uD841\uDC92\uD841\uDC91\u8D7A\uD862\uDE9C\uD841\uDF0E\u5259\u52A4\uD842\uDC73\u52E1\u936E\u467A\u718C\uD850\uDF8C\uD843\uDC20\uD852\uDDAC\uD844\uDCE4\u69D1\uD843\uDE1D\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\uD852\uDEBC\uD850\uDC8D\u53D0\u3584\u720F\uD850\uDCC9\u55B4\uD840\uDF45\u54CD\uD842\uDFC6\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\uD862\uDE46\uD845\uDEFA\uD845\uDF6F\uD845\uDF10\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\uD856\uDD46\uD846\uDDF3\uD846\uDC61\uD850\uDE95\u36F5\u6D05\u7443\u5A21\uD857\uDE83\"],\n[\"9340\",\"\u5A81\uD862\uDFD7\uD841\uDC13\u93E0\u748C\uD844\uDF03\u7105\u4972\u9408\uD862\uDDFB\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\uD846\uDD96\uD846\uDD7C\uD84E\uDEEE\u5ECD\u5B4F\uD846\uDD03\uD846\uDD04\u3701\uD846\uDCA0\u36DD\uD845\uDEFE\u36D3\u812A\uD862\uDE47\uD847\uDDBA\uD84D\uDC72\uD862\uDDA8\u5F0C\u5F0E\uD846\uDD27\uD845\uDFAB\u5A6B\uD845\uDF3B\u5B44\u8614\uD85D\uDDFD\u8860\u607E\uD84A\uDC60\uD849\uDE2B\u5FDB\u3EB8\uD849\uDDAF\uD849\uDDBE\uD864\uDC88\uD85B\uDF73\u61C0\uD840\uDC3E\uD840\uDC46\uD849\uDE1B\u6199\u6198\u6075\uD84B\uDC9B\uD84B\uDD07\uD851\uDED4\uD864\uDD4D\"],\n[\"93a1\",\"\u6471\uD851\uDE65\uD84A\uDF6A\u3A29\uD84A\uDF22\uD84D\uDC50\uD866\uDCEA\uD84B\uDE78\u6337\uD869\uDC5B\u64B6\u6331\u63D1\uD852\uDDE3\uD84B\uDD67\u62A4\uD84B\uDCA1\u643B\u656B\u6972\u3BF4\uD84C\uDC8E\uD84C\uDEAD\uD852\uDD89\uD84C\uDEAB\u550D\uD84C\uDEE0\uD846\uDCD9\uD865\uDC3F\u66CE\uD84C\uDE89\uD84C\uDDB3\u3AE0\u4190\uD855\uDD84\uD862\uDF22\uD855\uDD8F\uD845\uDEFC\uD855\uDD5B\uD855\uDC25\u78EE\uD84C\uDD03\uD846\uDC2A\uD84C\uDE34\u3464\uD84C\uDE0F\uD84C\uDD82\uD850\uDEC9\u668E\uD85B\uDD24\u666B\u4B93\u6630\uD85E\uDC70\uD847\uDDEB\u6663\uD84C\uDED2\uD84C\uDEE1\u661E\uD856\uDC72\u38D1\uD84E\uDC3A\uD84D\uDFBC\u3B99\uD84D\uDFA2\uD84C\uDFFE\u74D0\u3B96\u678F\uD851\uDE2A\u68B6\u681E\u3BC4\u6ABE\u3863\uD84D\uDFD5\uD851\uDC87\u6A33\u6A52\u6AC9\u6B05\uD846\uDD12\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\uD84F\uDFC0\uD84F\uDC9A\u93A0\u92F2\uD862\uDFEA\uD862\uDECB\"],\n[\"9440\",\"\u9289\uD860\uDC1E\uD862\uDDDC\u9467\u6DA5\u6F0B\uD852\uDDEC\u6D67\uD84F\uDF7F\u3D8F\u6E04\uD850\uDC3C\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\uD850\uDF1A\uD850\uDE76\u70F1\u7250\u7287\u7294\uD851\uDF8F\uD851\uDF25\u5179\uD852\uDEA4\uD841\uDDEB\u747A\uD84F\uDEF8\uD84D\uDE5F\uD852\uDE4A\uD852\uDD17\uD857\uDFE1\u3F06\u3EB1\uD852\uDEDF\uD863\uDC23\uD84F\uDF35\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\uD85B\uDDEA\u4551\u7583\u3F63\uD853\uDCD9\uD853\uDD06\u3F58\u7555\u7673\uD869\uDDC6\u3B19\u7468\uD862\uDECC\uD852\uDDAB\uD852\uDD8E\u3AFB\"],\n[\"94a1\",\"\u3DCD\uD852\uDE4E\u3EFF\uD852\uDDC5\uD852\uDCF3\u91FA\u5732\u9342\uD862\uDEE3\uD846\uDC64\u50DF\uD854\uDE21\uD854\uDDE7\u7778\uD84C\uDE32\u770E\u770F\u777B\uD851\uDE97\uD84D\uDF81\u3A5E\uD852\uDCF0\u7438\u749B\u3EBF\uD852\uDEBA\uD852\uDEC7\u40C8\uD852\uDE96\uD858\uDDAE\u9307\uD855\uDD81\u781E\u788D\u7888\u78D2\u73D0\u7959\uD85D\uDF41\uD855\uDEE3\u410E\u799B\u8496\u79A5\u6A2D\uD84F\uDEFA\u7A3A\u79F4\u416E\uD845\uDEE6\u4132\u9235\u79F1\uD843\uDD4C\uD852\uDD8C\uD840\uDE99\uD84F\uDDBA\uD845\uDF6E\u3597\u556B\u3570\u36AA\uD840\uDDD4\uD843\uDC0D\u7AE2\u5A59\uD849\uDEF5\uD856\uDEAF\uD856\uDE9C\u5A0D\uD840\uDE5B\u78F0\u5A2A\uD856\uDFC6\u7AFE\u41F9\u7C5D\u7C6D\u4211\uD856\uDFB3\uD857\uDEBC\uD857\uDEA6\u7CCD\uD852\uDDF9\uD845\uDFB0\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\uD858\uDE61\"],\n[\"9540\",\"\uD858\uDD5C\uD85E\uDF48\u7D97\uD857\uDE82\u426A\uD85A\uDF75\uD842\uDD16\u67D6\uD840\uDC4E\uD84D\uDDCF\u57C4\uD859\uDC12\uD858\uDFF8\uD852\uDD62\u7FDD\u7B27\uD842\uDC2C\uD856\uDEE9\uD857\uDD43\u7B0C\uD857\uDE0E\u99E6\u8645\u9A63\u6A1C\uD84D\uDC3F\u39E2\uD852\uDDF7\uD859\uDDAD\u9A1F\uD859\uDDA0\u8480\uD85C\uDD27\uD85B\uDCD1\u44EA\u8137\u4402\u80C6\u8109\u8142\uD859\uDFB4\u98C3\uD85A\uDE42\u8262\u8265\uD85A\uDE51\u8453\uD85B\uDDA7\u8610\uD85C\uDE1B\u5A86\u417F\uD846\uDC40\u5B2B\uD846\uDCA1\u5AE4\uD846\uDCD8\u86A0\uD87E\uDDBC\uD84F\uDD8F\u882D\uD85D\uDC22\u5A02\"],\n[\"95a1\",\"\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\uD855\uDE83\u8954\uD85D\uDF85\uD85D\uDF84\uD862\uDFF5\uD862\uDFD9\uD862\uDF9C\uD862\uDDF9\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\uD865\uDC48\u5F4D\u922B\uD850\uDE84\u65D4\u7129\u70C4\uD846\uDC45\u9D6D\u8C9F\u8CE9\uD85F\uDDDC\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\uD853\uDC09\u8F30\u8F4A\u42F4\u6C58\u6FBB\uD848\uDF21\u489B\u6F79\u6E8B\uD845\uDFDA\u9BE9\u36B5\uD852\uDD2F\u90BB\u9097\u5571\u4906\u91BB\u9404\uD862\uDE4B\u4062\uD862\uDEFC\u9427\uD863\uDC1D\uD863\uDC3B\u84E5\u8A2B\u9599\u95A7\u9597\u9596\uD863\uDD34\u7445\u3EC2\uD852\uDCFF\uD852\uDE42\uD850\uDFEA\u3EE7\uD84C\uDE25\u968F\uD863\uDEE7\uD863\uDE66\uD863\uDE65\u3ECC\uD852\uDDED\uD852\uDE78\uD84F\uDFEE\u7412\u746B\u3EFC\u9741\uD864\uDCB0\"],\n[\"9640\",\"\u6847\u4A1D\uD864\uDC93\uD855\uDFDF\u975D\u9368\uD862\uDD89\uD863\uDC26\uD862\uDF2F\uD858\uDFBE\u92BA\u5B11\u8B69\u493C\u73F9\uD850\uDE1B\u979B\u9771\u9938\uD843\uDF26\u5DC1\uD862\uDFC5\uD852\uDEB2\u981F\uD865\uDCDA\u92F6\uD865\uDDD7\u91E5\u44C0\uD862\uDF50\uD852\uDE67\uD862\uDF64\u98DC\uD862\uDE45\u3F00\u922A\u4925\u8414\u993B\u994D\uD85E\uDF06\u3DFD\u999B\u4B6F\u99AA\u9A5C\uD862\uDF65\uD856\uDCC8\u6A8F\u9A21\u5AFE\u9A2F\uD866\uDCF1\u4B90\uD866\uDD48\u99BC\u4BBD\u4B97\u937D\u5872\uD844\uDF02\u5822\uD852\uDDB8\"],\n[\"96a1\",\"\uD845\uDCE8\u7844\uD849\uDF1F\uD84F\uDDB8\u68C5\u3D7D\u9458\u3927\u6150\uD849\uDF81\uD84A\uDD6B\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\uD867\uDE2D\u9B9F\uD868\uDDF5\uD868\uDCFE\u9D21\u4CAE\uD850\uDD04\u9E18\u4CB0\u9D0C\uD868\uDDB4\uD868\uDCED\uD868\uDCF3\uD866\uDD2F\u9DA5\u84BD\uD85B\uDE12\uD85B\uDFDF\uD85A\uDF82\u85FC\u4533\uD85B\uDDA4\uD85B\uDE84\uD85B\uDDF0\u8420\u85EE\uD85B\uDE00\uD84D\uDFD7\uD858\uDC64\u79E2\uD84D\uDD9C\uD84D\uDE40\u492D\uD852\uDDDE\u3D62\u93DB\u92BE\u9348\uD840\uDEBF\u78B9\u9277\u944D\u4FE4\u3440\u9064\uD855\uDD5D\u783D\u7854\u78B6\u784B\uD845\uDF57\uD84C\uDDC9\uD852\uDD41\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\uD850\uDDB5\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\uD850\uDDAC\u71EB\uD85B\uDC40\uD853\uDF97\u5B28\uD845\uDFB5\uD862\uDE49\"],\n[\"9740\",\"\u610C\u5ACE\u5A0B\u42BC\uD851\uDC88\u372C\u4B7B\uD862\uDDFC\u93BB\u93B8\uD846\uDCD6\uD843\uDF1D\u8472\uD85B\uDCC0\uD845\uDC13\uD850\uDEFA\uD84B\uDC26\uD850\uDFC1\u5994\uD84F\uDDB7\uD859\uDF41\u7DA8\uD858\uDD5B\uD858\uDCA4\uD852\uDDB9\uD852\uDD8B\uD862\uDDFA\u92E5\u73E2\u3EE9\u74B4\uD862\uDF63\uD846\uDC9F\u3EE1\uD852\uDEB3\u6AD8\u73F3\u73FB\u3ED6\uD852\uDE3E\uD852\uDE94\uD845\uDFD9\uD852\uDE66\uD840\uDFA7\uD845\uDC24\uD852\uDDE5\u7448\uD852\uDD16\u70A5\uD852\uDD76\u9284\u73E6\u935F\uD841\uDCFE\u9331\uD862\uDECE\uD862\uDE16\u9386\uD862\uDFE7\uD855\uDDD5\u4935\uD862\uDE82\u716B\"],\n[\"97a1\",\"\uD852\uDD43\uD843\uDCFF\u56A4\uD841\uDE1A\uD842\uDFEB\uD843\uDCB8\u5502\u79C4\uD845\uDFFA\u7DFE\uD845\uDEC2\uD852\uDE50\uD846\uDC52\u452E\u9401\u370A\uD862\uDEC0\uD852\uDDAD\u59B0\uD846\uDCBF\uD846\uDC83\uD85D\uDC84\u5AA1\u36E2\uD84F\uDD5B\u36B0\u925F\u5A79\uD862\uDE81\uD846\uDC62\u9374\u3CCD\uD842\uDEB4\u4A96\u398A\u50F4\u3D69\u3D4C\uD844\uDF9C\u7175\u42FB\uD860\uDE18\u6E0F\uD864\uDCE4\u44EB\u6D57\uD85F\uDE4F\u7067\u6CAF\u3CD6\uD84F\uDFED\uD84F\uDE2D\u6E02\u6F0C\u3D6F\uD840\uDFF5\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\uD863\uDC1C\uD85A\uDFC0\u5812\u57C8\u36D6\uD845\uDC52\u70FE\uD850\uDF62\uD852\uDE71\uD84B\uDFE3\uD844\uDEB0\uD848\uDFBD\u68B9\u6967\uD844\uDF98\uD84D\uDCE5\uD85E\uDFF4\uD84D\uDEDF\uD862\uDE83\uD84D\uDFD6\uD84C\uDFFA\uD853\uDC9F\u6A1A\uD84D\uDEAD\uD85B\uDCB7\u843E\u44DF\u44CE\"],\n[\"9840\",\"\uD85B\uDD26\uD85B\uDD51\uD85B\uDC82\uD85B\uDFDE\u6F17\uD85C\uDD09\u833D\uD845\uDF3A\u83ED\uD85B\uDC80\uD85C\uDC53\uD845\uDFDB\u5989\u5A82\uD845\uDFB3\u5A61\u5A71\uD846\uDD05\uD850\uDDFC\u372D\u59EF\uD845\uDF3C\u36C7\u718E\u9390\u669A\uD850\uDEA5\u5A6E\u5A2B\uD850\uDE93\u6A2B\uD84F\uDEF9\uD85D\uDF36\uD851\uDC5B\uD850\uDECA\u711D\uD850\uDE59\uD862\uDDE1\u4FB0\uD85B\uDD28\u5CC2\uD851\uDCCE\uD85F\uDE4D\uD850\uDFBD\u6A0C\uD850\uDE56\uD844\uDF04\u70A6\u7133\uD850\uDFE9\u3DA5\u6CDF\uD87E\uDC25\uD852\uDE4F\u7E65\u59EB\u5D2F\u3DF3\u5F5C\uD852\uDE5D\uD845\uDFDF\u7DA4\u8426\"],\n[\"98a1\",\"\u5485\uD84E\uDEFA\uD84C\uDF00\uD840\uDE14\u577E\uD842\uDCD5\uD841\uDE19\u3FE5\uD847\uDF9E\uD868\uDEB6\u7003\uD864\uDD5B\u5D70\u738F\u7CD3\uD862\uDE59\uD865\uDC20\u4FC8\u7FE7\u72CD\u7310\uD85E\uDEF4\u7338\u7339\uD855\uDEF6\u7341\u7348\u3EA9\uD85E\uDF18\u906C\u71F5\uD852\uDCF2\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\uD853\uDF5C\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\uD855\uDD35\u7933\u6803\u7932\u4103\"],\n[\"9940\",\"\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\uD843\uDCCF\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A\"],\n[\"99a1\",\"\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\uD85E\uDD67\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF\"],\n[\"9a40\",\"\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\uD846\uDFC2\u9D49\u9C3A\"],\n[\"9aa1\",\"\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\uD840\uDC94\uD840\uDEB7\uD840\uDFA0\u691A\u94C3\u59AC\uD841\uDCD7\u5840\u94C1\u37B9\uD841\uDDD5\uD841\uDE15\uD841\uDE76\uD845\uDEBA\u5757\u7173\uD842\uDEC2\uD842\uDECD\uD842\uDFBF\u546A\uD87E\uDC3B\uD842\uDFCB\u549E\uD842\uDFFB\uD843\uDC3B\uD843\uDC53\uD843\uDC65\uD843\uDC7C\u60E7\uD843\uDC8D\u567A\uD843\uDCB5\uD843\uDCDD\uD843\uDCED\uD843\uDD6F\uD843\uDDB2\uD843\uDDC8\u6955\u9C2F\u87A5\uD843\uDE04\uD843\uDE0E\uD843\uDED7\uD843\uDF90\uD843\uDF2D\uD843\uDE73\u5C20\uD843\uDFBC\u5E0B\uD844\uDC5C\uD844\uDC4F\uD844\uDC76\u671E\uD844\uDC7B\uD844\uDC88\uD844\uDC96\u3647\uD844\uDCBF\uD844\uDCD3\uD844\uDD2F\uD844\uDD3B\u5364\u84AD\uD844\uDEE3\uD844\uDF75\uD844\uDF36\u8B81\uD845\uDD77\uD845\uDE19\uD845\uDFC3\uD845\uDFC7\u4E78\u70BB\uD846\uDC2D\uD846\uDD6A\"],\n[\"9b40\",\"\uD846\uDE2D\uD846\uDE45\uD847\uDC2A\uD847\uDC70\uD847\uDCAC\uD847\uDEC8\u62C3\uD847\uDED5\uD847\uDF15\u7198\u6855\uD848\uDC45\u69E9\u36C8\uD848\uDE7C\uD848\uDFD7\uD848\uDFFA\uD849\uDF2A\uD84A\uDC71\uD84A\uDD4F\u82FD\uD84A\uDD67\uD84A\uDD93\uD84A\uDED5\u89A5\uD84A\uDEE8\u8FA0\uD84A\uDF0E\u97B8\uD84A\uDF3F\u9847\u9ABD\uD84B\uDC4C\"],\n[\"9b62\",\"\uD84B\uDC88\uD84B\uDCB7\uD856\uDFE8\uD84B\uDD08\uD84B\uDD12\uD84B\uDDB7\uD84B\uDD95\uD84B\uDE42\uD84B\uDF74\uD84B\uDFCC\uD84C\uDC33\uD84C\uDC66\uD84C\uDF1F\uD84C\uDFDE\u5FB1\u6648\u66BF\uD85E\uDE79\uD84D\uDD67\uD84D\uDDF3\u7201\uD852\uDDBA\u77D7\uD84D\uDE1A\uD84D\uDF16\u7E87\uD840\uDF46\u58B5\u670E\"],\n[\"9ba1\",\"\u6918\uD84E\uDEA7\uD85D\uDE57\uD857\uDFE2\uD84F\uDE11\uD84F\uDEB9\uD85D\uDDFE\uD848\uDC9A\u48D0\u4AB8\uD850\uDD19\uD862\uDE9A\uD850\uDEEE\uD850\uDF0D\uD850\uDC3B\uD850\uDF34\uD850\uDF96\uD852\uDE45\uD841\uDDCA\u51D2\uD841\uDE11\u599F\uD847\uDEA8\u3BBE\uD84F\uDCFF\uD851\uDC04\uD851\uDCD6\u5788\uD851\uDE74\u399B\uD851\uDF2F\uD861\uDDE8\uD866\uDDC9\u3762\uD848\uDDC3\u8B5E\uD862\uDF4E\u99D6\uD852\uDC12\uD852\uDCFB\uD852\uDE15\u7209\uD852\uDEC0\uD843\uDC78\u5965\uD853\uDEA5\uD853\uDF86\uD841\uDF79\u8EDA\uD854\uDC2C\u528F\u573F\u7171\uD854\uDE99\uD855\uDC19\uD84F\uDF4A\uD852\uDEA7\u55BC\uD855\uDC46\uD855\uDC6E\uD85A\uDF52\u91D4\u3473\uD855\uDD3F\uD85D\uDE32\uD855\uDD5E\u4718\uD855\uDD62\uD855\uDD66\uD855\uDFC7\uD852\uDD3F\uD856\uDC5D\u5066\u34FB\uD84C\uDFCC\u60DE\uD856\uDD03\u477C\uD862\uDD48\uD856\uDEAE\uD856\uDF89\uD857\uDC06\uD847\uDD90\u57A1\u7151\u6FB6\uD858\uDD02\uD85F\uDC12\u9056\uD858\uDDB2\uD853\uDF9A\u8B62\uD859\uDC02\uD859\uDC4A\"],\n[\"9c40\",\"\u5D5B\uD85A\uDFF7\u8F36\uD859\uDC84\uD846\uDD1C\u8AEA\uD852\uDDF6\uD859\uDC88\uD84F\uDFEF\uD859\uDD12\u4BC0\uD859\uDDBF\uD859\uDEB5\uD849\uDF1B\u9465\uD855\uDFE1\u6195\u5A27\uD87E\uDCCD\u4FBB\u56B9\uD851\uDD21\uD859\uDEFC\u4E6A\uD852\uDD34\u9656\u6D8F\uD85B\uDCBD\u3618\u8977\uD859\uDF99\uD85A\uDC6E\uD859\uDC11\uD85A\uDC5E\u71DF\uD85A\uDCC7\u7B42\uD864\uDCC0\uD842\uDE11\uD85A\uDD26\u9104\uD85A\uDD39\u7A45\u9DF0\uD85A\uDDFA\u9A26\uD85A\uDE2D\u365F\uD859\uDC69\uD840\uDC21\u7983\uD85A\uDE34\uD85A\uDF5B\u5D2C\uD84D\uDD19\u83CF\uD85A\uDF9D\u46D0\uD85B\uDCA4\u753B\u8865\uD85B\uDDAE\u58B6\"],\n[\"9ca1\",\"\u371C\uD849\uDD8D\uD85C\uDC4B\uD85C\uDDCD\u3C54\uD85C\uDE80\uD85C\uDE85\u9281\uD848\uDD7A\uD85C\uDE8B\u9330\uD85C\uDEE6\uD852\uDDD0\u6C39\u949F\uD85D\uDC50\uD843\uDEF8\u8827\u88F5\uD84A\uDD26\uD861\uDC73\uD845\uDFB1\u6EB8\uD852\uDE2A\uD846\uDC20\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\uD867\uDCAD\uD866\uDCA4\u8943\uD85D\uDFCC\uD85E\uDC58\u56D6\u40DF\uD845\uDE0A\u39A1\uD84D\uDF2F\uD860\uDCE8\uD844\uDFC5\u71AD\u8366\uD85E\uDDDD\uD864\uDDA8\u5A67\u4CB7\uD85C\uDCAF\uD862\uDDAB\uD85E\uDDFD\uD85E\uDE0A\uD85E\uDF0B\uD85F\uDD66\uD850\uDD7A\u7B43\u797E\uD860\uDC09\u6FB5\uD868\uDEDF\u6A03\uD860\uDF18\u53A2\uD85B\uDE07\u93BF\u6836\u975D\uD860\uDD6F\uD860\uDC23\uD85A\uDDB5\uD844\uDFED\uD84C\uDE2F\uD860\uDC48\u5D85\uD863\uDC30\uD860\uDC83\u5715\u9823\uD862\uDD49\u5DAB\uD852\uDD88\u65BE\u69D5\u53D2\uD852\uDEA5\uD84F\uDF81\u3C11\u6736\uD860\uDC90\uD860\uDCF4\uD860\uDD2E\uD847\uDFA1\uD860\uDD4F\"],\n[\"9d40\",\"\uD860\uDD89\uD860\uDDAF\uD860\uDE1A\uD860\uDF06\uD860\uDF2F\uD860\uDF8A\u35CA\uD861\uDC68\uD861\uDEAA\u48FA\u63E6\uD862\uDD56\u7808\u9255\uD862\uDDB8\u43F2\uD862\uDDE7\u43DF\uD862\uDDE8\uD862\uDF46\uD862\uDFD4\u59F8\uD863\uDC09\u8F0B\uD863\uDFC5\uD864\uDCEC\u7B51\uD864\uDD10\uD864\uDD3C\u3DF7\uD864\uDD5E\uD852\uDECA\u8FD0\u728F\u568B\uD865\uDCE7\uD865\uDDE9\uD865\uDDB0\uD865\uDDB8\uD865\uDF32\uD866\uDCD1\uD866\uDD49\uD866\uDD6A\uD866\uDDC3\uD866\uDE28\uD866\uDF0E\uD867\uDD5A\uD867\uDD9B\u7E9F\uD867\uDEF8\uD867\uDF23\u4CA4\u9547\uD868\uDE93\u71A2\uD868\uDEFF\u4D91\u9012\uD869\uDDCB\u4D9C\uD843\uDC9C\u8FBE\u55C1\"],\n[\"9da1\",\"\u8FBA\uD849\uDCB0\u8FB9\uD852\uDE93\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\uD862\uDF2C\uD85E\uDC9D\u373A\u8E80\uD845\uDFF5\uD860\uDC24\uD862\uDF6C\uD862\uDF99\uD85E\uDE3E\uD859\uDEAF\u3DEB\uD85D\uDE55\uD84F\uDCB7\uD855\uDE35\uD856\uDD56\u4E9A\uD857\uDE81\uD858\uDE58\u56BF\uD843\uDE6D\u8E0E\u5B6D\uD84F\uDE88\uD853\uDC9E\u63DE\u62D0\uD845\uDFF6\uD846\uDC7B\u6530\u562D\uD857\uDC4A\u541A\uD854\uDF11\u3DC6\uD867\uDD98\u4C7D\u5622\u561E\u7F49\uD857\uDED8\u5975\uD84F\uDD40\u8770\u4E1C\uD843\uDFEA\uD843\uDD49\uD84D\uDEBA\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\uD843\uDE9D\u35CE\u5605\u55F1\u66F1\uD860\uDEE2\u362D\u7534\u55F0\u55BA\u5497\u5572\uD843\uDC41\uD843\uDC96\u5ED0\uD854\uDD48\uD843\uDE76\uD84B\uDC62\"],\n[\"9e40\",\"\uD843\uDEA2\u9EAB\u7D5A\u55DE\uD844\uDC75\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\uD84A\uDF43\u9C72\uD84B\uDEB3\u519A\u34DF\uD843\uDDA7\u51A7\u544D\u551E\u5513\u7666\u8E2D\uD85A\uDC8A\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\uD844\uDCC1\u44EC\u7304\uD851\uDF06\u5B90\u830B\uD85A\uDC93\u567B\uD849\uDEF4\uD85F\uDD2F\uD850\uDDA3\uD85F\uDD73\uD85B\uDED0\uD85C\uDEB6\u9170\uD844\uDDD9\u9208\uD84F\uDCFC\uD869\uDEA9\uD843\uDEAC\uD843\uDEF9\u7266\uD847\uDCA2\u474E\uD853\uDFC2\uD85F\uDFF9\uD843\uDFEB\u40FA\"],\n[\"9ea1\",\"\u9C5D\u651F\uD84B\uDDA0\u48F3\uD851\uDFE0\uD867\uDD7C\uD843\uDFEC\uD843\uDE0A\u6062\uD85D\uDDA3\uD843\uDFED\"],\n[\"9ead\",\"\uD858\uDC48\uD844\uDD87\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\uD851\uDE18\u589A\uD852\uDF6E\u822D\u544B\u57AA\uD856\uDE95\uD842\uDD79\"],\n[\"9ec5\",\"\u3A52\uD849\uDC65\u7374\uD867\uDEAC\u4D09\u9BED\uD84F\uDCFE\uD867\uDF30\u4C5B\uD853\uDFA9\uD865\uDD9E\uD867\uDFDE\u845C\uD84F\uDDB6\uD85C\uDEB2\uD859\uDFB3\uD84D\uDF20\u632E\u7D25\uD84F\uDEF7\uD84F\uDE2C\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\uD841\uDC8E\u7640\u5AF0\uD843\uDEB6\u787A\uD85F\uDF2E\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\uD869\uDC34\u9E85\u4CE1\u75F9\u37FB\u6119\uD84C\uDCDA\uD850\uDFF2\"],\n[\"9ef5\",\"\u565D\uD844\uDEA9\u57A7\uD852\uDD63\uD867\uDE06\u5234\uD85C\uDCAE\u35AD\u6C4A\u9D7C\"],\n[\"9f40\",\"\u7C56\u9B39\u57DE\uD845\uDF6C\u5C53\u64D3\uD865\uDCD0\uD858\uDF35\uD85C\uDD64\u86AD\uD843\uDD28\uD85B\uDD22\uD852\uDEE2\uD843\uDD71\"],\n[\"9f4f\",\"\u51FE\uD847\uDF0F\u5D8E\u9703\uD847\uDDD1\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\uD852\uDD3E\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130\"],\n[\"9fa1\",\"\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\uD845\uDF6D\u99DA\u5273\"],\n[\"9fae\",\"\u9159\u9681\u915C\"],\n[\"9fb2\",\"\u9151\uD863\uDE97\u637F\uD85B\uDD23\u6ACA\u5611\u918E\u757A\u6285\uD840\uDFFC\u734F\u7C70\uD857\uDC21\uD84F\uDCFD\"],\n[\"9fc1\",\"\uD852\uDD19\u76D6\u9B9D\u4E2A\uD843\uDCD4\u83BE\u8842\"],\n[\"9fc9\",\"\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\uD840\uDDF2\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3\"],\n[\"9fdb\",\"\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14\"],\n[\"9fe7\",\"\u6BFA\u8818\u7F78\"],\n[\"9feb\",\"\u5620\uD869\uDE4A\u8E77\u9F53\"],\n[\"9ff0\",\"\u8DD4\u8E4F\u9E1C\u8E01\u6282\uD860\uDF7D\u8E28\u8E75\u7AD3\uD852\uDE77\u7A3E\u78D8\u6CEA\u8A67\u7607\"],\n[\"a040\",\"\uD862\uDE5A\u9F26\u6CCE\u87D6\u75C3\uD868\uDEB2\u7853\uD87E\uDC40\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\uD852\uDEBB\u862F\u5FBA\u88A0\u44B7\"],\n[\"a055\",\"\uD846\uDC3B\uD85B\uDE05\"],\n[\"a058\",\"\u8A7E\uD849\uDD1B\"],\n[\"a05b\",\"\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5\"],\n[\"a063\",\"\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\uD858\uDD59\u6159\u4C04\u9E96\u617D\"],\n[\"a073\",\"\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\uD84C\uDFF5\u6364\u6802\u35D2\"],\n[\"a0a1\",\"\u5D57\uD862\uDFC2\u8FDA\uD863\uDE39\"],\n[\"a0a6\",\"\u50D9\uD847\uDD46\u7906\u5332\u9638\uD843\uDF3B\u4065\"],\n[\"a0ae\",\"\u77FE\"],\n[\"a0b0\",\"\u7CC2\uD857\uDF1A\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\uD85D\uDC86\u805B\u74F0\u8103\u7724\u8989\uD859\uDFCC\u7553\uD85B\uDED1\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6\"],\n[\"a0d4\",\"\u89A9\u7468\u6DB9\u87C1\uD850\uDC11\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077\"],\n[\"a0e2\",\"\u7F71\uD862\uDF2D\u7250\u60E9\u4B7E\u5220\u3C18\uD84F\uDCC7\uD857\uDED7\uD85D\uDE56\uD855\uDD31\uD846\uDD44\uD844\uDEFE\uD866\uDD03\uD85B\uDDDC\uD85C\uDCAD\u5CC1\uD858\uDDAD\uD862\uDE0F\uD84D\uDE77\uD840\uDCEE\uD85A\uDC46\uD853\uDF0E\u4562\u5B1F\uD858\uDF4C\u9F50\u9EA6\uD858\uDE6B\"],\n[\"a3c0\",\"\u2400\",31,\"\u2421\"],\n[\"c6a1\",\"\u2460\",9,\"\u2474\",9,\"\u2170\",9,\"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\u00A8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041\",23],\n[\"c740\",\"\u3059\",58,\"\u30A1\u30A2\u30A3\u30A4\"],\n[\"c7a1\",\"\u30A5\",81,\"\u0410\",5,\"\u0401\u0416\",4],\n[\"c840\",\"\u041B\",26,\"\u0451\u0436\",25,\"\u21E7\u21B8\u21B9\u31CF\uD840\uDCCC\u4E5A\uD840\uDC8A\u5202\u4491\"],\n[\"c8a1\",\"\u9FB0\u5188\u9FB1\uD85D\uDE07\"],\n[\"c8cd\",\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3\"],\n[\"c8f5\",\"\u0283\u0250\u025B\u0254\u0275\u0153\u00F8\u014B\u028A\u026A\"],\n[\"f9fe\",\"\uFFED\"],\n[\"fa40\",\"\uD841\uDD47\u92DB\uD841\uDDDF\uD84F\uDFC5\u854C\u42B5\u73EF\u51B5\u3649\uD852\uDD42\uD862\uDDE4\u9344\uD846\uDDDB\u82EE\uD84F\uDCC8\u783C\u6744\u62DF\uD852\uDD33\uD862\uDDAA\uD840\uDEA0\uD85A\uDFB3\uD844\uDF05\u4FAB\uD849\uDCED\u5008\uD85B\uDD29\uD85E\uDE84\uD84D\uDE00\uD852\uDEB1\uD849\uDD13\u5029\uD840\uDF7E\u5FA4\uD840\uDF80\uD840\uDF47\u6EDB\uD841\uDC1F\u507D\u5101\u347A\u510E\u986C\u3743\u8416\uD852\uDDA4\uD841\uDC87\u5160\uD84C\uDFB4\u516A\uD842\uDFFF\uD848\uDCFC\uD840\uDEE5\uD849\uDD30\uD841\uDD8E\uD84C\uDE33\uD846\uDD83\u5B82\u877D\uD841\uDDB3\uD84F\uDC99\u51B2\u51B8\"],\n[\"faa1\",\"\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\uD852\uDEA6\u51B3\u51E2\u5342\u51ED\u83CD\u693E\uD84D\uDF2D\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\uD85A\uDF13\u5305\uD862\uDEDE\u5549\u6ED9\uD84F\uDF80\uD842\uDD54\uD84F\uDFEC\u5333\u5344\uD842\uDFE2\u6CCB\uD845\uDF26\u681B\u73D5\u604A\u3EAA\u38CC\uD845\uDEE8\u71DD\u44A2\u536D\u5374\uD861\uDEAB\u537E\u537F\uD845\uDD96\uD845\uDE13\u77E6\u5393\uD862\uDE9B\u53A0\u53AB\u53AE\u73A7\uD855\uDF72\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\uD842\uDF8F\u53E0\uD84F\uDFEB\uD84B\uDDA3\u53F6\uD843\uDC77\u5413\u7079\u552B\u6657\u6D5B\u546D\uD85A\uDF53\uD843\uDD74\u555D\u548F\u54A4\u47A6\uD845\uDF0D\uD843\uDEDD\u3DB4\uD843\uDD4D\"],\n[\"fb40\",\"\uD862\uDDBC\uD849\uDE98\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\uD846\uDCD7\uD850\uDC3A\u4552\uD851\uDC35\u66B3\uD844\uDCB4\u5637\u66CD\uD84C\uDE8A\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\uD862\uDF66\u3623\uD844\uDE4F\u5746\uD850\uDDA5\u6C6E\u708B\u5742\u36B1\uD85B\uDC7E\u57E6\uD845\uDC16\u5803\uD845\uDC54\uD850\uDF63\u5826\uD852\uDFF5\u585C\u58AA\u3561\u58E0\u58DC\uD844\uDE3C\u58FB\u5BFF\u5743\uD868\uDD50\uD850\uDE78\u93D3\u35A1\u591F\u68A6\u36C3\u6E59\"],\n[\"fba1\",\"\uD845\uDE3E\u5A24\u5553\uD845\uDE92\u8505\u59C9\uD843\uDD4E\uD85B\uDC81\uD85B\uDD2A\uD845\uDFDC\u59D9\uD845\uDFFB\uD845\uDFB2\uD85B\uDDA6\u6D71\uD846\uDC28\uD845\uDED5\u59F9\uD85B\uDE45\u5AAB\u5A63\u36E6\uD852\uDDA9\u5A77\u3708\u5A96\u7465\u5AD3\uD85B\uDFA1\uD849\uDD54\u3D85\uD846\uDD11\u3732\uD845\uDEB8\u5E83\u52D0\u5B76\u6588\u5B7C\uD85E\uDE0E\u4004\u485D\uD840\uDE04\u5BD5\u6160\uD846\uDE34\uD856\uDDCC\uD841\uDDA5\u5BF3\u5B9D\u4D10\u5C05\uD846\uDF44\u5C13\u73CE\u5C14\uD847\uDCA5\uD85A\uDF28\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\uD847\uDDF9\uD847\uDE37\u5D10\u5D18\u5D46\uD847\uDEA4\u5CBA\u5DD7\u82FC\u382D\uD852\uDD01\uD848\uDC49\uD848\uDD73\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\uD851\uDCBC\uD843\uDCD3\u53A6\u4EB7\u5ED0\u53A8\uD845\uDF71\u5E09\u5EF4\uD861\uDC82\"],\n[\"fc40\",\"\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\uD840\uDDC1\uD87E\uDC94\u3ADE\u48AE\uD844\uDF3A\u5F3A\uD85A\uDC88\uD848\uDFD0\u5F58\uD849\uDC71\u5F63\u97BD\uD85B\uDE6E\u5F72\u9340\uD862\uDE36\u5FA7\u5DB6\u3D5F\uD854\uDE50\uD847\uDF6A\uD85C\uDCF8\uD849\uDE68\u91D6\uD840\uDE9E\uD862\uDE29\u6031\u6685\uD846\uDC77\u3963\u3DC7\u3639\u5790\uD849\uDFB4\u7971\u3E40\u609E\u60A4\u60B3\uD852\uDD82\uD852\uDD8F\uD85E\uDE53\u74A4\u50E1\u5AA0\u6164\u8424\u6142\uD87E\uDCA6\uD85B\uDED2\u6181\u51F4\uD841\uDE56\u6187\u5BAA\uD84F\uDFB7\"],\n[\"fca1\",\"\uD84A\uDC5F\u61D3\uD862\uDF9D\uD866\uDD5D\u61D0\u3932\uD84A\uDD80\uD84A\uDCC1\u6023\u615C\u651E\u638B\uD840\uDD18\u62C5\uD845\uDF70\u62D5\uD84B\uDE0D\u636C\uD852\uDDDF\u3A17\u6438\u63F8\uD844\uDF8E\uD845\uDFFC\u6490\u6F8A\uD84B\uDE36\u9814\uD850\uDC8C\uD855\uDF1D\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\uD852\uDE28\uD852\uDE23\u6585\u656D\u655F\uD84C\uDC7E\u65B5\uD852\uDD40\u4B37\u65D1\u40D8\uD846\uDC29\u65E0\u65E3\u5FDF\uD84D\uDC00\u6618\uD84C\uDDF7\uD84C\uDDF8\u6644\uD84C\uDDA4\uD84C\uDDA5\u664B\uD843\uDE75\u6667\uD854\uDDE6\u6673\u6674\uD847\uDE3D\uD84C\uDE31\uD861\uDDF4\uD84C\uDDC8\uD854\uDF13\u77C5\uD84A\uDCF7\u99A4\u6702\uD850\uDF9C\uD852\uDE21\u3B2B\u69FA\uD84D\uDFC2\u675E\u6767\u6762\uD850\uDDCD\uD864\uDCED\u67D7\u44E9\u6822\u6E50\u923C\u6801\uD84C\uDFE6\uD85B\uDDA0\u685D\"],\n[\"fd40\",\"\uD84D\uDC6F\u69E1\u6A0B\uD862\uDEDF\u6973\u68C3\uD84D\uDDCD\u6901\u6900\u3D32\u3A01\uD84D\uDE3C\u3B80\u67AC\u6961\uD862\uDE4A\u42FC\u6936\u6998\u3BA1\uD840\uDFC9\u8363\u5090\u69F9\uD84D\uDE59\uD848\uDD2A\u6A45\uD84D\uDF03\u6A9D\u3BF3\u67B1\u6AC8\uD864\uDD9C\u3C0D\u6B1D\uD842\uDD23\u60DE\u6B35\u6B74\uD849\uDFCD\u6EB5\uD84E\uDEDB\uD840\uDFB5\uD846\uDD58\u3740\u5421\uD84E\uDF5A\u6BE1\uD84F\uDEFC\u6BDC\u6C37\uD849\uDC8B\uD852\uDCF1\uD85A\uDF51\u6C5A\u8226\u6C79\uD84F\uDDBC\u44C5\uD84F\uDDBD\uD850\uDDA4\uD852\uDD0C\uD852\uDD00\"],\n[\"fda1\",\"\uD84F\uDCC9\u36E5\u3CEB\uD843\uDD32\u9B83\uD84C\uDDF9\uD849\uDC91\u7F8F\u6837\uD85B\uDD25\uD85B\uDDA1\uD85B\uDDEB\u6D96\u6D5C\u6E7C\u6F04\uD852\uDD7F\uD850\uDC85\uD85B\uDE72\u8533\uD85B\uDF74\u51C7\u6C9C\u6E1D\u842E\uD862\uDF21\u6E2F\uD84F\uDE2F\u7453\uD84F\uDF82\u79CC\u6E4F\u5A91\uD84C\uDC4B\u6FF8\u370D\u6F9D\uD84F\uDE30\u6EFA\uD845\uDC97\uD850\uDC3D\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\uD864\uDD70\u3D3B\u6F9F\uD850\uDD44\u6FD3\uD850\uDC91\uD850\uDD55\uD850\uDC39\uD84F\uDFF0\uD84F\uDFB4\uD850\uDD3F\u51DF\uD850\uDD56\uD850\uDD57\uD850\uDD40\uD858\uDDDD\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\uD850\uDE77\u712B\u7145\u5A88\u714A\u716E\u5C9C\uD850\uDF65\u714F\u9362\uD850\uDEC1\u712C\uD851\uDC5A\uD852\uDE27\uD852\uDE22\u71BA\uD862\uDFE8\u70BD\u720E\"],\n[\"fe40\",\"\u9442\u7215\u5911\u9443\u7224\u9341\uD855\uDE05\u722E\u7240\uD852\uDD74\u68BD\u7255\u7257\u3E55\uD84C\uDC44\u680D\u6F3D\u7282\u732A\u732B\uD852\uDC23\uD862\uDC2B\u48ED\uD862\uDC04\u7328\u732E\u73CF\u73AA\uD843\uDC3A\uD85A\uDE2E\u73C9\u7449\uD850\uDDE2\uD845\uDEE7\uD852\uDE24\u6623\u36C5\uD852\uDDB7\uD852\uDD8D\uD852\uDDFB\u73F7\u7415\u6903\uD852\uDE26\u7439\uD841\uDDC3\u3ED7\u745C\uD84A\uDCAD\u7460\uD863\uDEB2\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\uD852\uDE8C\"],\n[\"fea1\",\"\uD850\uDD5F\uD852\uDE79\uD862\uDF8F\u5B46\uD863\uDC03\uD846\uDC9E\u74C8\uD846\uDD88\u750E\u74E9\u751E\uD863\uDED9\uD846\uDE4B\u5BD7\uD863\uDEAC\u9385\u754D\u754A\u7567\u756E\uD853\uDF82\u3F04\uD853\uDD13\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\uD858\uDFF5\u7690\u81EF\u37F8\uD85A\uDD11\uD85A\uDD0E\u76A1\u76A5\u76B7\u76CC\uD85B\uDF9F\u8462\uD854\uDC9D\uD854\uDD7D\uD847\uDE1C\u771E\u7726\u7740\u64AF\uD854\uDE20\u7758\uD84C\uDEAC\u77AF\uD862\uDD64\uD862\uDD68\uD845\uDEC1\u77F4\u7809\uD844\uDF76\uD852\uDE12\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\uD855\uDDE0\u78D7\u7934\u78B1\uD85D\uDE0C\u8FB8\u8884\uD862\uDF2B\uD858\uDC83\uD849\uDE1C\u7986\u8900\u6902\u7980\uD856\uDC57\u799D\uD85E\uDF39\u793C\u79A9\u6E2A\uD85C\uDD26\u3EA8\u79C6\uD864\uDD0D\u79D4\"]\n]\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'\u20AC': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [0xa2cc],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n \n // Additional Public API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n\n\n // Not published yet.\n iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n var original = undefined; // Place to keep original methods.\n\n // Node authors rewrote Buffer internals to make it compatible with\n // Uint8Array and we cannot patch key functions since then.\n // Note: this does use older Buffer API on a purpose\n iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n iconv.extendNodeEncodings = function extendNodeEncodings() {\n if (original) return;\n original = {};\n\n if (!iconv.supportsNodeEncodingsExtension) {\n console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n return;\n }\n\n var nodeNativeEncodings = {\n 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n };\n\n Buffer.isNativeEncoding = function(enc) {\n return enc && nodeNativeEncodings[enc.toLowerCase()];\n }\n\n // -- SlowBuffer -----------------------------------------------------------\n var SlowBuffer = require('buffer').SlowBuffer;\n\n original.SlowBufferToString = SlowBuffer.prototype.toString;\n SlowBuffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.SlowBufferWrite = SlowBuffer.prototype.write;\n SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n }\n\n // -- Buffer ---------------------------------------------------------------\n\n original.BufferIsEncoding = Buffer.isEncoding;\n Buffer.isEncoding = function(encoding) {\n return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n }\n\n original.BufferByteLength = Buffer.byteLength;\n Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferByteLength.call(this, str, encoding);\n\n // Slow, I know, but we don't have a better way yet.\n return iconv.encode(str, encoding).length;\n }\n\n original.BufferToString = Buffer.prototype.toString;\n Buffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.BufferWrite = Buffer.prototype.write;\n Buffer.prototype.write = function(string, offset, length, encoding) {\n var _offset = offset, _length = length, _encoding = encoding;\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n\n // TODO: Set _charsWritten.\n }\n\n\n // -- Readable -------------------------------------------------------------\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n original.ReadableSetEncoding = Readable.prototype.setEncoding;\n Readable.prototype.setEncoding = function setEncoding(enc, options) {\n // Use our own decoder, it has the same interface.\n // We cannot use original function as it doesn't handle BOM-s.\n this._readableState.decoder = iconv.getDecoder(enc, options);\n this._readableState.encoding = enc;\n }\n\n Readable.prototype.collect = iconv._collect;\n }\n }\n\n // Remove iconv-lite Node primitive extensions.\n iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n if (!iconv.supportsNodeEncodingsExtension)\n return;\n if (!original)\n throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n delete Buffer.isNativeEncoding;\n\n var SlowBuffer = require('buffer').SlowBuffer;\n\n SlowBuffer.prototype.toString = original.SlowBufferToString;\n SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n Buffer.isEncoding = original.BufferIsEncoding;\n Buffer.byteLength = original.BufferByteLength;\n Buffer.prototype.toString = original.BufferToString;\n Buffer.prototype.write = original.BufferWrite;\n\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n Readable.prototype.setEncoding = original.ReadableSetEncoding;\n delete Readable.prototype.collect;\n }\n\n original = undefined;\n }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n // Load streaming support in Node v0.10+\n var nodeVerArr = nodeVer.split(\".\").map(Number);\n if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n require(\"./streams\")(iconv);\n }\n\n // Load Node primitive extensions.\n require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n", "/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n var listeners = stream.listeners('data')\n\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].name === 'ondata') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n if (!stream) {\n throw new TypeError('argument stream is required')\n }\n\n if (typeof stream.unpipe === 'function') {\n // new-style\n stream.unpipe()\n return\n }\n\n // Node.js 0.8 hack\n if (!hasPipeDataListeners(stream)) {\n return\n }\n\n var listener\n var listeners = stream.listeners('close')\n\n for (var i = 0; i < listeners.length; i++) {\n listener = listeners[i]\n\n if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n continue\n }\n\n // invoke the listener\n listener.call(stream)\n }\n}\n", "/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n if (!encoding) return null\n\n try {\n return iconv.getDecoder(encoding)\n } catch (e) {\n // error getting decoder\n if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n // the encoding was not found\n throw createError(415, 'specified encoding unsupported', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n var done = callback\n var opts = options || {}\n\n // light validation\n if (stream === undefined) {\n throw new TypeError('argument stream is required')\n } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {\n throw new TypeError('argument stream must be a stream')\n }\n\n if (options === true || typeof options === 'string') {\n // short cut for encoding\n opts = {\n encoding: options\n }\n }\n\n if (typeof options === 'function') {\n done = options\n opts = {}\n }\n\n // validate callback is a function, if provided\n if (done !== undefined && typeof done !== 'function') {\n throw new TypeError('argument callback must be a function')\n }\n\n // require the callback without promises\n if (!done && !global.Promise) {\n throw new TypeError('argument callback is required')\n }\n\n // get encoding\n var encoding = opts.encoding !== true\n ? opts.encoding\n : 'utf-8'\n\n // convert the limit to an integer\n var limit = bytes.parse(opts.limit)\n\n // convert the expected length to an integer\n var length = opts.length != null && !isNaN(opts.length)\n ? parseInt(opts.length, 10)\n : null\n\n if (done) {\n // classic callback style\n return readStream(stream, encoding, length, limit, wrap(done))\n }\n\n return new Promise(function executor (resolve, reject) {\n readStream(stream, encoding, length, limit, function onRead (err, buf) {\n if (err) return reject(err)\n resolve(buf)\n })\n })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n // unpipe everything from the stream\n unpipe(stream)\n\n // pause stream\n if (typeof stream.pause === 'function') {\n stream.pause()\n }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n var complete = false\n var sync = true\n\n // check the length and limit options.\n // note: we intentionally leave the stream paused,\n // so users should handle the stream themselves.\n if (limit !== null && length !== null && length > limit) {\n return done(createError(413, 'request entity too large', {\n expected: length,\n length: length,\n limit: limit,\n type: 'entity.too.large'\n }))\n }\n\n // streams1: assert request encoding is buffer.\n // streams2+: assert the stream encoding is buffer.\n // stream._decoder: streams1\n // state.encoding: streams2\n // state.decoder: streams2, specifically < 0.10.6\n var state = stream._readableState\n if (stream._decoder || (state && (state.encoding || state.decoder))) {\n // developer error\n return done(createError(500, 'stream encoding should not be set', {\n type: 'stream.encoding.set'\n }))\n }\n\n if (typeof stream.readable !== 'undefined' && !stream.readable) {\n return done(createError(500, 'stream is not readable', {\n type: 'stream.not.readable'\n }))\n }\n\n var received = 0\n var decoder\n\n try {\n decoder = getDecoder(encoding)\n } catch (err) {\n return done(err)\n }\n\n var buffer = decoder\n ? ''\n : []\n\n // attach listeners\n stream.on('aborted', onAborted)\n stream.on('close', cleanup)\n stream.on('data', onData)\n stream.on('end', onEnd)\n stream.on('error', onEnd)\n\n // mark sync section complete\n sync = false\n\n function done () {\n var args = new Array(arguments.length)\n\n // copy arguments\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n // mark complete\n complete = true\n\n if (sync) {\n process.nextTick(invokeCallback)\n } else {\n invokeCallback()\n }\n\n function invokeCallback () {\n cleanup()\n\n if (args[0]) {\n // halt the stream on error\n halt(stream)\n }\n\n callback.apply(null, args)\n }\n }\n\n function onAborted () {\n if (complete) return\n\n done(createError(400, 'request aborted', {\n code: 'ECONNABORTED',\n expected: length,\n length: length,\n received: received,\n type: 'request.aborted'\n }))\n }\n\n function onData (chunk) {\n if (complete) return\n\n received += chunk.length\n\n if (limit !== null && received > limit) {\n done(createError(413, 'request entity too large', {\n limit: limit,\n received: received,\n type: 'entity.too.large'\n }))\n } else if (decoder) {\n buffer += decoder.write(chunk)\n } else {\n buffer.push(chunk)\n }\n }\n\n function onEnd (err) {\n if (complete) return\n if (err) return done(err)\n\n if (length !== null && received !== length) {\n done(createError(400, 'request size did not match content length', {\n expected: length,\n length: length,\n received: received,\n type: 'request.size.invalid'\n }))\n } else {\n var string = decoder\n ? buffer + (decoder.end() || '')\n : Buffer.concat(buffer)\n done(null, string)\n }\n }\n\n function cleanup () {\n buffer = null\n\n stream.removeListener('aborted', onAborted)\n stream.removeListener('data', onData)\n stream.removeListener('end', onEnd)\n stream.removeListener('error', onEnd)\n stream.removeListener('close', cleanup)\n }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n try {\n return require('async_hooks')\n } catch (e) {\n return {}\n }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n var res\n\n // create anonymous resource\n if (asyncHooks.AsyncResource) {\n res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n }\n\n // incompatible node.js\n if (!res || !res.runInAsyncScope) {\n return fn\n }\n\n // return bound function\n return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n if (!Array.isArray(stuff))\n throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n var cleanups = []\n\n for (var i = 0; i < stuff.length; i++) {\n var arr = stuff[i]\n\n if (!Array.isArray(arr) || arr.length < 2)\n throw new TypeError('each array member must be [ee, events...]')\n\n var ee = arr[0]\n\n for (var j = 1; j < arr.length; j++) {\n var event = arr[j]\n var fn = listener(event, callback)\n\n // listen to the event\n ee.on(event, fn)\n // push this listener to the list of cleanups\n cleanups.push({\n ee: ee,\n event: event,\n fn: fn,\n })\n }\n }\n\n function callback() {\n cleanup()\n done.apply(null, arguments)\n }\n\n function cleanup() {\n var x\n for (var i = 0; i < cleanups.length; i++) {\n x = cleanups[i]\n x.ee.removeListener(x.event, x.fn)\n }\n }\n\n function thunk(fn) {\n done = fn\n }\n\n thunk.cancel = cleanup\n\n return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n return function onevent(arg1) {\n var args = new Array(arguments.length)\n var ee = this\n var err = event === 'error'\n ? arg1\n : null\n\n // copy args to prevent arguments escaping scope\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n done(err, ee, event, args)\n }\n}\n", "/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished (msg, listener) {\n if (isFinished(msg) !== false) {\n defer(listener, null, msg)\n return msg\n }\n\n // attach the listener to the message\n attachListener(msg, wrap(listener))\n\n return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished (msg) {\n var socket = msg.socket\n\n if (typeof msg.finished === 'boolean') {\n // OutgoingMessage\n return Boolean(msg.finished || (socket && !socket.writable))\n }\n\n if (typeof msg.complete === 'boolean') {\n // IncomingMessage\n return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n }\n\n // don't know\n return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener (msg, callback) {\n var eeMsg\n var eeSocket\n var finished = false\n\n function onFinish (error) {\n eeMsg.cancel()\n eeSocket.cancel()\n\n finished = true\n callback(error)\n }\n\n // finished on first message event\n eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n function onSocket (socket) {\n // remove listener\n msg.removeListener('socket', onSocket)\n\n if (finished) return\n if (eeMsg !== eeSocket) return\n\n // finished on first socket event\n eeSocket = first([[socket, 'error', 'close']], onFinish)\n }\n\n if (msg.socket) {\n // socket already assigned\n onSocket(msg.socket)\n return\n }\n\n // wait for socket to be assigned\n msg.on('socket', onSocket)\n\n if (msg.socket === undefined) {\n // istanbul ignore next: node.js 0.8 patch\n patchAssignSocket(msg, onSocket)\n }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener (msg, listener) {\n var attached = msg.__onFinished\n\n // create a private single listener with queue\n if (!attached || !attached.queue) {\n attached = msg.__onFinished = createListener(msg)\n attachFinishedListener(msg, attached)\n }\n\n attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener (msg) {\n function listener (err) {\n if (msg.__onFinished === listener) msg.__onFinished = null\n if (!listener.queue) return\n\n var queue = listener.queue\n listener.queue = null\n\n for (var i = 0; i < queue.length; i++) {\n queue[i](err, msg)\n }\n }\n\n listener.queue = []\n\n return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket (res, callback) {\n var assignSocket = res.assignSocket\n\n if (typeof assignSocket !== 'function') return\n\n // res.on('socket', callback) is broken in 0.8\n res.assignSocket = function _assignSocket (socket) {\n assignSocket.call(this, socket)\n callback(socket)\n }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n try {\n return require('async_hooks')\n } catch (e) {\n return {}\n }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n var res\n\n // create anonymous resource\n if (asyncHooks.AsyncResource) {\n res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n }\n\n // incompatible node.js\n if (!res || !res.runInAsyncScope) {\n return fn\n }\n\n // return bound function\n return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar destroy = require('destroy')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar unpipe = require('unpipe')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read (req, res, next, parse, debug, options) {\n var length\n var opts = options\n var stream\n\n // flag as parsed\n req._body = true\n\n // read options\n var encoding = opts.encoding !== null\n ? opts.encoding\n : null\n var verify = opts.verify\n\n try {\n // get the content stream\n stream = contentstream(req, debug, opts.inflate)\n length = stream.length\n stream.length = undefined\n } catch (err) {\n return next(err)\n }\n\n // set raw-body options\n opts.length = length\n opts.encoding = verify\n ? null\n : encoding\n\n // assert charset is supported\n if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n charset: encoding.toLowerCase(),\n type: 'charset.unsupported'\n }))\n }\n\n // read body\n debug('read body')\n getBody(stream, opts, function (error, body) {\n if (error) {\n var _error\n\n if (error.type === 'encoding.unsupported') {\n // echo back charset\n _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n charset: encoding.toLowerCase(),\n type: 'charset.unsupported'\n })\n } else {\n // set status code on error\n _error = createError(400, error)\n }\n\n // unpipe from stream and destroy\n if (stream !== req) {\n unpipe(req)\n destroy(stream, true)\n }\n\n // read off entire request\n dump(req, function onfinished () {\n next(createError(400, _error))\n })\n return\n }\n\n // verify\n if (verify) {\n try {\n debug('verify body')\n verify(req, res, body, encoding)\n } catch (err) {\n next(createError(403, err, {\n body: body,\n type: err.type || 'entity.verify.failed'\n }))\n return\n }\n }\n\n // parse\n var str = body\n try {\n debug('parse body')\n str = typeof body !== 'string' && encoding !== null\n ? iconv.decode(body, encoding)\n : body\n req.body = parse(str)\n } catch (err) {\n next(createError(400, err, {\n body: str,\n type: err.type || 'entity.parse.failed'\n }))\n return\n }\n\n next()\n })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream (req, debug, inflate) {\n var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n var length = req.headers['content-length']\n var stream\n\n debug('content-encoding \"%s\"', encoding)\n\n if (inflate === false && encoding !== 'identity') {\n throw createError(415, 'content encoding unsupported', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n\n switch (encoding) {\n case 'deflate':\n stream = zlib.createInflate()\n debug('inflate body')\n req.pipe(stream)\n break\n case 'gzip':\n stream = zlib.createGunzip()\n debug('gunzip body')\n req.pipe(stream)\n break\n case 'identity':\n stream = req\n stream.length = length\n break\n default:\n throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n\n return stream\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump (req, callback) {\n if (onFinished.isFinished(req)) {\n callback(null)\n } else {\n onFinished(req, callback)\n req.resume()\n }\n}\n", "/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = >\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n * TEXT = \n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = \n * LF = \n * SP = \n * SHT = \n * CTL = \n * OCTET = \n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first = ALPHA / DIGIT\n * restricted-name-chars = ALPHA / DIGIT / \"!\" / \"#\" /\n * \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n * ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n * ; specify a structured syntax suffix\n * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z\n * DIGIT = %x30-39 ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var subtype = obj.subtype\n var suffix = obj.suffix\n var type = obj.type\n\n if (!type || !typeNameRegExp.test(type)) {\n throw new TypeError('invalid type')\n }\n\n if (!subtype || !subtypeNameRegExp.test(subtype)) {\n throw new TypeError('invalid subtype')\n }\n\n // format as type/subtype\n var string = type + '/' + subtype\n\n // append +suffix\n if (suffix) {\n if (!typeNameRegExp.test(suffix)) {\n throw new TypeError('invalid suffix')\n }\n\n string += '+' + suffix\n }\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!tokenRegExp.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n if (typeof string === 'object') {\n string = getcontenttype(string)\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = string.indexOf(';')\n var type = index !== -1\n ? string.substr(0, index)\n : string\n\n var key\n var match\n var obj = splitType(type)\n var params = {}\n var value\n\n paramRegExp.lastIndex = index\n\n while (match = paramRegExp.exec(string)) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(qescRegExp, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n obj.parameters = params\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n if (typeof obj.getHeader === 'function') {\n // res-like\n return obj.getHeader('content-type')\n }\n\n if (typeof obj.headers === 'object') {\n // req-like\n return obj.headers && obj.headers['content-type']\n }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n var str = String(val)\n\n // no need to quote tokens\n if (tokenRegExp.test(str)) {\n return str\n }\n\n if (str.length > 0 && !textRegExp.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n var match = typeRegExp.exec(string.toLowerCase())\n\n if (!match) {\n throw new TypeError('invalid media type')\n }\n\n var type = match[1]\n var subtype = match[2]\n var suffix\n\n // suffix after last +\n var index = subtype.lastIndexOf('+')\n if (index !== -1) {\n suffix = subtype.substr(index + 1)\n subtype = subtype.substr(0, index)\n }\n\n var obj = {\n type: type,\n subtype: subtype,\n suffix: suffix\n }\n\n return obj\n}\n", "{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphalforms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/ace+cbor\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/activity+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamcontrol+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/at+jwt\": {\n \"source\": \"iana\"\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n \"source\": \"iana\"\n },\n \"application/atsc-held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/atsc-rsat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsat\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xcs\"]\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/captive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/city+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clr\": {\n \"source\": \"iana\"\n },\n \"application/clue+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cpl\"]\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cwt\": {\n \"source\": \"iana\"\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpp\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/dns+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dns-message\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dbk\"]\n },\n \"application/dots+cbor\": {\n \"source\": \"iana\"\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es\",\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/elm+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/elm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.cap+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emotionml\"]\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/express\": {\n \"source\": \"iana\",\n \"extensions\": [\"exp\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fdt\"]\n },\n \"application/fhir+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/flexfec\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/gltf-buffer\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"its\"]\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jscalendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lgr\"]\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lpf+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpf\"]\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mipc\": {\n \"source\": \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/mmt-aei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musd\"]\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/multipart-core\": {\n \"source\": \"iana\"\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\",\n \"extensions\": [\"nq\"]\n },\n \"application/n-triples\": {\n \"source\": \"iana\",\n \"extensions\": [\"nt\"]\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/node\": {\n \"source\": \"iana\",\n \"extensions\": [\"cjs\"]\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n \"source\": \"iana\"\n },\n \"application/oblivious-dns-message\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/oscore\": {\n \"source\": \"iana\"\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p21\": {\n \"source\": \"iana\"\n },\n \"application/p21+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"relo\"]\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pem-certificate-chain\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\"]\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.cyn\": {\n \"source\": \"iana\",\n \"charset\": \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\",\"owl\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sls\"]\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif-external-properties+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sbe\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n \"source\": \"iana\"\n },\n \"application/senml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml-etch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sensml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/sensml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sensml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sep+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\",\n \"extensions\": [\"siv\",\"sieve\"]\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/sipc\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"srx\"]\n },\n \"application/spdx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ssml\"]\n },\n \"application/stix+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/swid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/taxii+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/td+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/tetra_isi\": {\n \"source\": \"iana\"\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n \"source\": \"iana\"\n },\n \"application/tlsrpt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/token-introspection+jwt\": {\n \"source\": \"iana\"\n },\n \"application/toml\": {\n \"compressible\": true,\n \"extensions\": [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\",\n \"extensions\": [\"trig\"]\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttml\"]\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/tzif\": {\n \"source\": \"iana\"\n },\n \"application/tzif-leap\": {\n \"source\": \"iana\"\n },\n \"application/ubjson\": {\n \"compressible\": false,\n \"extensions\": [\"ubj\"]\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gtpc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ngap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n \"source\": \"iana\"\n },\n \"application/vnd.age\": {\n \"source\": \"iana\",\n \"extensions\": [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.android.ota\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.aplextor.warrp+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n \"source\": \"iana\",\n \"extensions\": [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n \"source\": \"iana\",\n \"extensions\": [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n \"source\": \"iana\",\n \"extensions\": [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bpf3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csl\"]\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.crypto-shade-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cyclonedx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.d3m-dataset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dbf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.exstream-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hl7v2+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las\": {\n \"source\": \"iana\"\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.leap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.loom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\",\n \"extensions\": [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nebumind.line\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\",\n \"extensions\": [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.seis+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shopkick+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.syft+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.veryant.thin\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wif\"]\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n \"extensions\": [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n \"extensions\": [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n \"extensions\": [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-keepass2\": {\n \"extensions\": [\"kdbx\"]\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-pki-message\": {\n \"source\": \"iana\"\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/xliff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xsl\",\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"application/zstd\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/aac\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\",\n \"extensions\": [\"amr\"]\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/flexfec\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/mhas\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxmf\"]\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/scip\": {\n \"source\": \"iana\"\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sofa\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/tsvcis\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/usac\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\",\n \"extensions\": [\"exr\"]\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/avci\": {\n \"source\": \"iana\",\n \"extensions\": [\"avci\"]\n },\n \"image/avcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"avcs\"]\n },\n \"image/avif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"avif\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\",\n \"extensions\": [\"drle\"]\n },\n \"image/emf\": {\n \"source\": \"iana\",\n \"extensions\": [\"emf\"]\n },\n \"image/fits\": {\n \"source\": \"iana\",\n \"extensions\": [\"fits\"]\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/heic\": {\n \"source\": \"iana\",\n \"extensions\": [\"heic\"]\n },\n \"image/heic-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heics\"]\n },\n \"image/heif\": {\n \"source\": \"iana\",\n \"extensions\": [\"heif\"]\n },\n \"image/heif-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heifs\"]\n },\n \"image/hej2k\": {\n \"source\": \"iana\",\n \"extensions\": [\"hej2\"]\n },\n \"image/hsj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"hsj2\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\",\n \"extensions\": [\"jls\"]\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jph\": {\n \"source\": \"iana\",\n \"extensions\": [\"jph\"]\n },\n \"image/jphc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jhc\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/jxr\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxr\"]\n },\n \"image/jxra\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxra\"]\n },\n \"image/jxrs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxrs\"]\n },\n \"image/jxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxs\"]\n },\n \"image/jxsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsc\"]\n },\n \"image/jxsi\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsi\"]\n },\n \"image/jxss\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxss\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/ktx2\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx2\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\",\n \"extensions\": [\"pti\"]\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\",\n \"extensions\": [\"t38\"]\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tif\",\"tiff\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\",\n \"extensions\": [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-dds\": {\n \"compressible\": true,\n \"extensions\": [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n \"source\": \"iana\",\n \"extensions\": [\"b16\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcx\"]\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmf\"]\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\",\n \"extensions\": [\"3mf\"]\n },\n \"model/e57\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/mtl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mtl\"]\n },\n \"model/obj\": {\n \"source\": \"iana\",\n \"extensions\": [\"obj\"]\n },\n \"model/step\": {\n \"source\": \"iana\"\n },\n \"model/step+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"stpx\"]\n },\n \"model/step+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpxz\"]\n },\n \"model/stl\": {\n \"source\": \"iana\",\n \"extensions\": [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\",\n \"extensions\": [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.sap.vds\": {\n \"source\": \"iana\",\n \"extensions\": [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\",\n \"extensions\": [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3dv\"]\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\"\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/cql\": {\n \"source\": \"iana\"\n },\n \"text/cql-expression\": {\n \"source\": \"iana\"\n },\n \"text/cql-identifier\": {\n \"source\": \"iana\"\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fhirpath\": {\n \"source\": \"iana\"\n },\n \"text/flexfec\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/gff3\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"compressible\": true,\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mdx\": {\n \"compressible\": true,\n \"extensions\": [\"mdx\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shaclc\": {\n \"source\": \"iana\"\n },\n \"text/shex\": {\n \"source\": \"iana\",\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/spdx\": {\n \"source\": \"iana\",\n \"extensions\": [\"spdx\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n \"source\": \"iana\",\n \"extensions\": [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.gml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.hans\": {\n \"source\": \"iana\"\n },\n \"text/vnd.hgl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sosi\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"compressible\": true,\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/av1\": {\n \"source\": \"iana\"\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/ffv1\": {\n \"source\": \"iana\"\n },\n \"video/flexfec\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\",\n \"extensions\": [\"m4s\"]\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/jxsv\": {\n \"source\": \"iana\"\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/scip\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vc2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/vp9\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n", "/*!\n * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar typer = require('media-typer')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n var i\n var types = types_\n\n // remove parameters and normalize\n var val = tryNormalizeType(value)\n\n // no type or invalid\n if (!val) {\n return false\n }\n\n // support flattened arguments\n if (types && !Array.isArray(types)) {\n types = new Array(arguments.length - 1)\n for (i = 0; i < types.length; i++) {\n types[i] = arguments[i + 1]\n }\n }\n\n // no types, return the content type\n if (!types || !types.length) {\n return val\n }\n\n var type\n for (i = 0; i < types.length; i++) {\n if (mimeMatch(normalize(type = types[i]), val)) {\n return type[0] === '+' || type.indexOf('*') !== -1\n ? val\n : type\n }\n }\n\n // no matches\n return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n return req.headers['transfer-encoding'] !== undefined ||\n !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * this.is('html'); // => 'html'\n * this.is('text/html'); // => 'text/html'\n * this.is('text/*', 'application/json'); // => 'text/html'\n *\n * // When Content-Type is application/json\n * this.is('json', 'urlencoded'); // => 'json'\n * this.is('application/json'); // => 'application/json'\n * this.is('html', 'application/*'); // => 'application/json'\n *\n * this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n var types = types_\n\n // no body\n if (!hasbody(req)) {\n return null\n }\n\n // support flattened arguments\n if (arguments.length > 2) {\n types = new Array(arguments.length - 1)\n for (var i = 0; i < types.length; i++) {\n types[i] = arguments[i + 1]\n }\n }\n\n // request content type\n var value = req.headers['content-type']\n\n return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n * var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize (type) {\n if (typeof type !== 'string') {\n // invalid type\n return false\n }\n\n switch (type) {\n case 'urlencoded':\n return 'application/x-www-form-urlencoded'\n case 'multipart':\n return 'multipart/*'\n }\n\n if (type[0] === '+') {\n // \"+json\" -> \"*/*+json\" expando\n return '*/*' + type\n }\n\n return type.indexOf('/') === -1\n ? mime.lookup(type)\n : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch (expected, actual) {\n // invalid type\n if (expected === false) {\n return false\n }\n\n // split types\n var actualParts = actual.split('/')\n var expectedParts = expected.split('/')\n\n // invalid format\n if (actualParts.length !== 2 || expectedParts.length !== 2) {\n return false\n }\n\n // validate type\n if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n return false\n }\n\n // validate suffix wildcard\n if (expectedParts[1].substr(0, 2) === '*+') {\n return expectedParts[1].length <= actualParts[1].length + 1 &&\n expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)\n }\n\n // validate subtype\n if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n return false\n }\n\n return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType (value) {\n // parse the type\n var type = typer.parse(value)\n\n // remove the parameters\n type.parameters = undefined\n\n // reformat it\n return typer.format(type)\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType (value) {\n if (!value) {\n return null\n }\n\n try {\n return normalizeType(value)\n } catch (err) {\n return null\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n * ws = *(\n * %x20 / ; Space\n * %x09 / ; Horizontal tab\n * %x0A / ; Line feed or New line\n * %x0D ) ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\nvar JSON_SYNTAX_CHAR = '#'\nvar JSON_SYNTAX_REGEXP = /#+/g\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json (options) {\n var opts = options || {}\n\n var limit = typeof opts.limit === 'undefined' || opts.limit === null\n ? 102400 // 100kb default\n : bytes.parse(opts.limit)\n var inflate = opts.inflate !== false\n var reviver = opts.reviver\n var strict = opts.strict !== false\n var type = opts.type || 'application/json'\n var verify = opts.verify || false\n\n if (limit === null) {\n throw new TypeError('option limit \"' + String(opts.limit) + '\" is invalid')\n }\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (body) {\n if (body.length === 0) {\n // special-case empty json body, as it's a common client-side mistake\n // TODO: maybe make this configurable or part of \"strict\" option\n return {}\n }\n\n if (strict) {\n var first = firstchar(body)\n\n if (first !== '{' && first !== '[') {\n debug('strict violation')\n throw createStrictSyntaxError(body, first)\n }\n }\n\n try {\n debug('parse json')\n return JSON.parse(body, reviver)\n } catch (e) {\n throw normalizeJsonSyntaxError(e, {\n message: e.message,\n stack: e.stack\n })\n }\n }\n\n return function jsonParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // assert charset per RFC 7159 sec 8.1\n var charset = getCharset(req) || 'utf-8'\n if (charset.slice(0, 4) !== 'utf-') {\n debug('invalid charset')\n next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n charset: charset,\n type: 'charset.unsupported'\n }))\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError (str, char) {\n var index = str.indexOf(char)\n var partial = ''\n\n if (index !== -1) {\n partial = str.substring(0, index) + new Array(str.length - index + 1).join(JSON_SYNTAX_CHAR)\n }\n\n try {\n JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n } catch (e) {\n return normalizeJsonSyntaxError(e, {\n message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {\n return str.substring(index, index + placeholder.length)\n }),\n stack: e.stack\n })\n }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar (str) {\n var match = FIRST_CHAR_REGEXP.exec(str)\n\n return match\n ? match[1]\n : undefined\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError (error, obj) {\n var keys = Object.getOwnPropertyNames(error)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n if (key !== 'stack' && key !== 'message') {\n delete error[key]\n }\n }\n\n // replace stack before message for Node.js 0.10 and below\n error.stack = obj.stack.replace(error.message, obj.message)\n error.message = obj.message\n\n return error\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw (options) {\n var opts = options || {}\n\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit === 'undefined' || opts.limit === null\n ? 102400 // 100kb default\n : bytes.parse(opts.limit)\n var type = opts.type || 'application/octet-stream'\n var verify = opts.verify || false\n\n if (limit === null) {\n throw new TypeError('option limit \"' + String(opts.limit) + '\" is invalid')\n }\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (buf) {\n return buf\n }\n\n return function rawParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n encoding: null,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text (options) {\n var opts = options || {}\n\n var defaultCharset = opts.defaultCharset || 'utf-8'\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit === 'undefined' || opts.limit === null\n ? 102400 // 100kb default\n : bytes.parse(opts.limit)\n var type = opts.type || 'text/plain'\n var verify = opts.verify || false\n\n if (limit === null) {\n throw new TypeError('option limit \"' + String(opts.limit) + '\" is invalid')\n }\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (buf) {\n return buf\n }\n\n return function textParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // get charset\n var charset = getCharset(req) || defaultCharset\n\n // read\n read(req, res, next, parse, debug, {\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "module.exports = require('util').inspect;\n", "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n __proto__: null,\n 'double': '\"',\n single: \"'\"\n};\nvar quoteREs = {\n __proto__: null,\n 'double': /([\"\\\\])/g,\n single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n /* eslint-env browser */\n if (typeof window !== 'undefined' && obj === window) {\n return '{ [object Window] }';\n }\n if (\n (typeof globalThis !== 'undefined' && obj === globalThis)\n || (typeof global !== 'undefined' && obj === global)\n ) {\n return '{ [object globalThis] }';\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var style = opts.quoteStyle || defaultStyle;\n var quoteChar = quotes[style];\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '"');\n}\n\nfunction canTrustToString(obj) {\n return !toStringTag || !(typeof obj === 'object' && (toStringTag in obj || typeof obj[toStringTag] !== 'undefined'));\n}\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && canTrustToString(obj); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && canTrustToString(obj); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && canTrustToString(obj); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && canTrustToString(obj); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && canTrustToString(obj); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && canTrustToString(obj); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && canTrustToString(obj); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n quoteRE.lastIndex = 0;\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n", "'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType} Channel */\n\t/** @typedef {Parameters[0]} K */\n\t/** @typedef {Parameters[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && $o && !$o.next) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable} */ ($o), key, value);\n\t\t}\n\t};\n\treturn channel;\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {(thisArg: Map, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {(thisArg: Map, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {(thisArg: Map, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {(thisArg: Map, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {(thisArg: Map) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType} Channel */\n\t/** @typedef {Parameters[0]} K */\n\t/** @typedef {Parameters[1]} V */\n\n\t/** @type {Map | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {(thisArg: WeakMap, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {(thisArg: WeakMap, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {(thisArg: WeakMap, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {(thisArg: WeakMap, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType} Channel */\n\t\t/** @typedef {Parameters[0]} K */\n\t\t/** @typedef {Parameters[1]} V */\n\n\t\t/** @type {WeakMap | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n", "'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tvar keyDesc = key && Object(key) === key\n\t\t\t\t\t? 'the given object key'\n\t\t\t\t\t: inspect(key);\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + keyDesc);\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\n\treturn channel;\n};\n", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n", "'use strict';\n\nvar formats = require('./formats');\nvar getSideChannel = require('side-channel');\nvar defineProperty = require('es-define-property');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\n// Track objects created from arrayLimit overflow using side-channel\n// Stores the current max numeric index for O(1) lookup\nvar overflowChannel = getSideChannel();\n\nvar markOverflow = function markOverflow(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex);\n return obj;\n};\n\nvar isOverflow = function isOverflow(obj) {\n return overflowChannel.has(obj);\n};\n\nvar getMaxIndex = function getMaxIndex(obj) {\n return overflowChannel.get(obj);\n};\n\nvar setMaxIndex = function setMaxIndex(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex);\n};\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array[array.length] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted[compacted.length] = obj[j];\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? { __proto__: null } : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar setProperty = function setProperty(obj, key, value) {\n if (key === '__proto__' && defineProperty) {\n defineProperty(obj, key, {\n configurable: true,\n enumerable: true,\n value: value,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object' && typeof source !== 'function') {\n if (isArray(target)) {\n var nextIndex = target.length;\n if (options && typeof options.arrayLimit === 'number' && nextIndex >= options.arrayLimit) {\n if (options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n return markOverflow(arrayToObject(target.concat(source), options), nextIndex);\n }\n target[nextIndex] = source;\n } else if (target && typeof target === 'object') {\n if (isOverflow(target)) {\n // Add at next numeric index for overflow objects\n var newIndex = getMaxIndex(target) + 1;\n target[newIndex] = source;\n setMaxIndex(target, newIndex);\n } else if (options && options.strictMerge) {\n return [target, source];\n } else if (\n (options && (options.plainObjects || options.allowPrototypes))\n || !has.call(Object.prototype, source)\n ) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n if (isOverflow(source)) {\n // Create new object with target at 0, source values shifted by 1\n var sourceKeys = Object.keys(source);\n var result = options && options.plainObjects\n ? { __proto__: null, 0: target }\n : { 0: target };\n for (var m = 0; m < sourceKeys.length; m++) {\n var oldKey = parseInt(sourceKeys[m], 10);\n result[oldKey + 1] = source[sourceKeys[m]];\n }\n return markOverflow(result, getMaxIndex(source) + 1);\n }\n var combined = [target].concat(source);\n if (options && typeof options.arrayLimit === 'number' && combined.length > options.arrayLimit) {\n if (options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n return markOverflow(arrayToObject(combined, options), combined.length - 1);\n }\n return combined;\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target[target.length] = item;\n }\n } else {\n target[i] = item;\n }\n });\n if (options && typeof options.arrayLimit === 'number' && target.length > options.arrayLimit) {\n if (options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n return markOverflow(arrayToObject(target, options), target.length - 1);\n }\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n setProperty(acc, key, merge(acc[key], value, options));\n } else {\n setProperty(acc, key, value);\n }\n\n if (isOverflow(source) && !isOverflow(acc)) {\n markOverflow(acc, getMaxIndex(source));\n }\n if (isOverflow(acc)) {\n var keyNum = parseInt(key, 10);\n if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) {\n setMaxIndex(acc, keyNum);\n }\n }\n\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n setProperty(acc, key, source[key]);\n return acc;\n }, target);\n};\n\nvar decode = function (str, defaultDecoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var j = 0; j < string.length; j += limit) {\n var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n if (j + limit < string.length) {\n var last = segment.charCodeAt(segment.length - 1);\n if (last >= 0xD800 && last <= 0xDBFF) {\n segment = segment.slice(0, -1);\n j -= 1;\n }\n }\n var arr = [];\n\n for (var i = 0; i < segment.length; ++i) {\n var c = segment.charCodeAt(i);\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n arr[arr.length] = hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n out += arr.join('');\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = getSideChannel();\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && !refs.has(val)) {\n queue[queue.length] = { obj: obj, prop: key };\n refs.set(val, true);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b, arrayLimit, plainObjects, throwOnLimitExceeded) {\n // If 'a' is already an overflow object, add to it\n if (isOverflow(a)) {\n if (throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + arrayLimit + ' element' + (arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n // spread `b` one level, matching the `[].concat(a, b)` used below, so a\n // collection appended to an already-overflowed object is flattened\n // rather than nested under a single index\n var bValues = isArray(b) ? b : [b];\n var newIndex = getMaxIndex(a);\n for (var i = 0; i < bValues.length; ++i) {\n newIndex += 1;\n a[newIndex] = bValues[i];\n }\n setMaxIndex(a, newIndex);\n return a;\n }\n\n var result = [].concat(a, b);\n if (result.length > arrayLimit) {\n if (throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + arrayLimit + ' element' + (arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n return markOverflow(arrayToObject(result, { plainObjects: plainObjects }), result.length - 1);\n }\n return result;\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped[mapped.length] = fn(val[i]);\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isOverflow: isOverflow,\n isRegExp: isRegExp,\n markOverflow: markOverflow,\n maybeMap: maybeMap,\n merge: merge\n};\n", "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n commaRoundTrip: false,\n delimiter: '&',\n depth: Infinity,\n encode: true,\n encodeDotInKeys: false,\n encoder: utils.encode,\n encodeValuesOnly: false,\n filter: void undefined,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel,\n depth,\n currentDepth\n) {\n var obj = object;\n\n if (currentDepth > depth) {\n throw new RangeError('Input depth exceeded depth option of ' + depth);\n }\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n obj = typeof filter === 'function' ? filter(prefix, obj) : obj;\n\n if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return formatter(encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix);\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = utils.maybeMap(obj, function (v) {\n return v == null ? v : encoder(v);\n });\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n if (allowEmptyArrays && isArray(obj) && obj.length === 0 && Object.keys(obj).length === 0) {\n return adjustedPrefix + '[]';\n }\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && key && typeof key.value !== 'undefined'\n ? key.value\n : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\\./g, '%2E') : String(key);\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel,\n depth,\n currentDepth + 1\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n var arrayFormat;\n if (opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = defaults.arrayFormat;\n }\n\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n depth: typeof opts.depth === 'number' ? opts.depth : defaults.depth,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (typeof key === 'undefined' || key === null) {\n continue;\n }\n\n var value = obj[key];\n\n if (options.skipNulls && value === null) {\n continue;\n }\n\n var encodedKey = options.encodeDotInKeys ? String(key).replace(/\\./g, '%2E') : String(key);\n\n pushToArray(keys, stringify(\n value,\n encodedKey,\n generateArrayPrefix,\n commaRoundTrip,\n options.allowEmptyArrays,\n options.strictNullHandling,\n options.skipNulls,\n options.encodeDotInKeys,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel,\n options.depth,\n 0\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B' + options.delimiter;\n } else {\n // encodeURIComponent('\u2713')\n prefix += 'utf8=%E2%9C%93' + options.delimiter;\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n", "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowEmptyArrays: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decodeDotInKeys: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n duplicates: 'combine',\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictDepth: false,\n strictMerge: true,\n strictNullHandling: false,\n throwOnLimitExceeded: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options, currentArrayLength) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n if (options.throwOnLimitExceeded) {\n var commaCount = 0;\n var commaIndex = val.indexOf(',');\n while (commaIndex > -1) {\n commaCount += 1;\n if (commaCount >= options.arrayLimit) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n commaIndex = val.indexOf(',', commaIndex + 1);\n }\n }\n return val.split(',');\n }\n\n if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the \u2713 character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the \u2713 character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('\u2713')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = { __proto__: null };\n\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n\n var limit = options.parameterLimit === Infinity ? void undefined : options.parameterLimit;\n var parts = cleanStr.split(\n options.delimiter,\n options.throwOnLimitExceeded && typeof limit !== 'undefined' ? limit + 1 : limit\n );\n\n if (options.throwOnLimitExceeded && typeof limit !== 'undefined' && parts.length > limit) {\n throw new RangeError('Parameter limit exceeded. Only ' + limit + ' parameter' + (limit === 1 ? '' : 's') + ' allowed.');\n }\n\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key;\n var val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n\n if (key !== null) {\n val = utils.maybeMap(\n parseArrayValue(\n part.slice(pos + 1),\n options,\n isArray(obj[key]) ? obj[key].length : 0\n ),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(String(val));\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (options.comma && isArray(val) && val.length > options.arrayLimit) {\n val = utils.combine([], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);\n }\n\n if (key !== null) {\n var existing = has.call(obj, key);\n if (existing && (options.duplicates === 'combine' || part.indexOf('[]=') > -1)) {\n obj[key] = utils.combine(\n obj[key],\n val,\n options.arrayLimit,\n options.plainObjects,\n options.throwOnLimitExceeded\n );\n } else if (!existing || options.duplicates === 'last') {\n obj[key] = val;\n }\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var currentArrayLength = 0;\n if (chain.length > 0 && chain[chain.length - 1] === '[]') {\n var parentKey = chain.slice(0, -1).join('');\n currentArrayLength = Array.isArray(val) && val[parentKey] ? val[parentKey].length : 0;\n }\n\n var leaf = valuesParsed ? val : parseArrayValue(val, options, currentArrayLength);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n if (utils.isOverflow(leaf)) {\n // leaf is already an overflow object, preserve it\n obj = leaf;\n } else {\n obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n ? []\n : utils.combine(\n [],\n leaf,\n options.arrayLimit,\n options.plainObjects,\n options.throwOnLimitExceeded\n );\n }\n } else {\n obj = options.plainObjects ? { __proto__: null } : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n var index = parseInt(decodedRoot, 10);\n var isValidArrayIndex = !isNaN(index)\n && root !== decodedRoot\n && String(index) === decodedRoot\n && index >= 0\n && options.parseArrays;\n if (!options.parseArrays && decodedRoot === '') {\n obj = { 0: leaf };\n } else if (isValidArrayIndex && index < options.arrayLimit) {\n obj = [];\n obj[index] = leaf;\n } else if (isValidArrayIndex && options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n } else if (isValidArrayIndex) {\n obj[index] = leaf;\n utils.markOverflow(obj, index);\n } else if (decodedRoot !== '__proto__') {\n obj[decodedRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\n// Split a key like \"a[b][c[]]\" into ['a', '[b]', '[c[]]'] while preserving\n// qs parse semantics for depth/prototype guards.\nvar splitKeyIntoSegments = function splitKeyIntoSegments(originalKey, options) {\n var key = options.allowDots ? originalKey.replace(/\\.([^.[]+)/g, '[$1]') : originalKey;\n\n // depth <= 0 keeps the whole key as one segment\n if (options.depth <= 0) {\n if (!options.plainObjects && has.call(Object.prototype, key)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n return [key];\n }\n\n var segments = [];\n\n // parent before the first '[' (may be empty if key starts with '[')\n var first = key.indexOf('[');\n var parent = first >= 0 ? key.slice(0, first) : key;\n if (parent) {\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n segments[segments.length] = parent;\n }\n\n var n = key.length;\n var open = first;\n var collected = 0;\n\n while (open >= 0 && collected < options.depth) {\n var level = 1;\n var i = open + 1;\n var close = -1;\n\n // balance nested '[' and ']' inside this bracket group using a nesting level counter\n while (i < n && close < 0) {\n var cu = key.charCodeAt(i);\n if (cu === 0x5B) { // '['\n level += 1;\n } else if (cu === 0x5D) { // ']'\n level -= 1;\n if (level === 0) {\n close = i; // found matching close; loop will exit by condition\n }\n }\n i += 1;\n }\n\n if (close < 0) {\n // Unterminated group: wrap the raw remainder in one bracket pair so it stays\n // a single literal segment (e.g. \"[[]b\" -> \"[[]b]\"); we do not infer missing ']'.\n segments[segments.length] = '[' + key.slice(open) + ']';\n return segments;\n }\n\n var seg = key.slice(open, close + 1);\n // prototype guard for the content of this group\n var content = seg.slice(1, -1);\n if (!options.plainObjects && has.call(Object.prototype, content) && !options.allowPrototypes) {\n return;\n }\n\n segments[segments.length] = seg;\n collected += 1;\n\n // find the next '[' after this balanced group\n open = key.indexOf('[', close + 1);\n }\n\n if (open >= 0) {\n if (options.strictDepth === true) {\n throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n }\n\n segments[segments.length] = '[' + key.slice(open) + ']';\n }\n\n return segments;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n var keys = splitKeyIntoSegments(givenKey, options);\n\n if (!keys) {\n return;\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n if (typeof opts.throwOnLimitExceeded !== 'undefined' && typeof opts.throwOnLimitExceeded !== 'boolean') {\n throw new TypeError('`throwOnLimitExceeded` option must be a boolean');\n }\n\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n throw new TypeError('The duplicates option must be either combine, first, or last');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n duplicates: duplicates,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n strictMerge: typeof opts.strictMerge === 'boolean' ? !!opts.strictMerge : defaults.strictMerge,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === 'boolean' ? opts.throwOnLimitExceeded : false\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? { __proto__: null } : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? { __proto__: null } : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n", "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar deprecate = require('depd')('body-parser')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null)\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded (options) {\n var opts = options || {}\n\n // notice because option default will flip in next major\n if (opts.extended === undefined) {\n deprecate('undefined extended: provide extended option')\n }\n\n var extended = opts.extended !== false\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit === 'undefined' || opts.limit === null\n ? 102400 // 100kb default\n : bytes.parse(opts.limit)\n var type = opts.type || 'application/x-www-form-urlencoded'\n var verify = opts.verify || false\n\n if (limit === null) {\n throw new TypeError('option limit \"' + String(opts.limit) + '\" is invalid')\n }\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate query parser\n var queryparse = extended\n ? extendedparser(opts)\n : simpleparser(opts)\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (body) {\n return body.length\n ? queryparse(body)\n : {}\n }\n\n return function urlencodedParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // assert charset\n var charset = getCharset(req) || 'utf-8'\n if (charset !== 'utf-8') {\n debug('invalid charset')\n next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n charset: charset,\n type: 'charset.unsupported'\n }))\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n debug: debug,\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser (options) {\n var parameterLimit = options.parameterLimit !== undefined\n ? options.parameterLimit\n : 1000\n var depth = options.depth !== undefined ? options.depth : 32\n var parse = parser('qs')\n\n if (isNaN(parameterLimit) || parameterLimit < 1) {\n throw new TypeError('option parameterLimit must be a positive number')\n }\n\n if (isNaN(depth) || depth < 0) {\n throw new TypeError('option depth must be a zero or a positive number')\n }\n\n if (isFinite(parameterLimit)) {\n parameterLimit = parameterLimit | 0\n }\n\n return function queryparse (body) {\n var paramCount = parameterCount(body, parameterLimit)\n\n if (paramCount === undefined) {\n debug('too many parameters')\n throw createError(413, 'too many parameters', {\n type: 'parameters.too.many'\n })\n }\n\n var arrayLimit = Math.max(100, paramCount)\n\n debug('parse extended urlencoding')\n try {\n return parse(body, {\n allowPrototypes: true,\n arrayLimit: arrayLimit,\n depth: depth,\n strictDepth: true,\n parameterLimit: parameterLimit\n })\n } catch (err) {\n if (err instanceof RangeError) {\n throw createError(400, 'The input exceeded the depth', {\n type: 'querystring.parse.rangeError'\n })\n } else {\n throw err\n }\n }\n }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount (body, limit) {\n var count = 0\n var index = -1\n\n do {\n count++\n if (count > limit) {\n return undefined\n }\n index = body.indexOf('&', index + 1)\n } while (index !== -1)\n\n return count\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser (name) {\n var mod = parsers[name]\n\n if (mod !== undefined) {\n return mod.parse\n }\n\n // this uses a switch for static require analysis\n switch (name) {\n case 'qs':\n mod = require('qs')\n break\n case 'querystring':\n mod = require('querystring')\n break\n }\n\n // store to prevent invoking require()\n parsers[name] = mod\n\n return mod.parse\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser (options) {\n var parameterLimit = options.parameterLimit !== undefined\n ? options.parameterLimit\n : 1000\n var parse = parser('querystring')\n\n if (isNaN(parameterLimit) || parameterLimit < 1) {\n throw new TypeError('option parameterLimit must be a positive number')\n }\n\n if (isFinite(parameterLimit)) {\n parameterLimit = parameterLimit | 0\n }\n\n return function queryparse (body) {\n var paramCount = parameterCount(body, parameterLimit)\n\n if (paramCount === undefined) {\n debug('too many parameters')\n throw createError(413, 'too many parameters', {\n type: 'parameters.too.many'\n })\n }\n\n debug('parse urlencoding')\n return parse(body, undefined, undefined, { maxKeys: parameterLimit })\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('body-parser')\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null)\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser,\n 'bodyParser: use individual json/urlencoded middlewares')\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('json')\n})\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('raw')\n})\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser (options) {\n // use default type for parsers\n var opts = Object.create(options || null, {\n type: {\n configurable: true,\n enumerable: true,\n value: undefined,\n writable: true\n }\n })\n\n var _urlencoded = exports.urlencoded(opts)\n var _json = exports.json(opts)\n\n return function bodyParser (req, res, next) {\n _json(req, res, function (err) {\n if (err) return next(err)\n _urlencoded(req, res, next)\n })\n }\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter (name) {\n return function get () {\n return loadParser(name)\n }\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser (parserName) {\n var parser = parsers[parserName]\n\n if (parser !== undefined) {\n return parser\n }\n\n // this uses a switch for static require analysis\n switch (parserName) {\n case 'json':\n parser = require('./lib/types/json')\n break\n case 'raw':\n parser = require('./lib/types/raw')\n break\n case 'text':\n parser = require('./lib/types/text')\n break\n case 'urlencoded':\n parser = require('./lib/types/urlencoded')\n break\n }\n\n // store to prevent invoking require()\n return (parsers[parserName] = parser)\n}\n", "/*!\n * merge-descriptors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = merge\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Merge the property descriptors of `src` into `dest`\n *\n * @param {object} dest Object to add descriptors to\n * @param {object} src Object to clone descriptors from\n * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties\n * @returns {object} Reference to dest\n * @public\n */\n\nfunction merge (dest, src, redefine) {\n if (!dest) {\n throw new TypeError('argument dest is required')\n }\n\n if (!src) {\n throw new TypeError('argument src is required')\n }\n\n if (redefine === undefined) {\n // Default to true\n redefine = true\n }\n\n Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName (name) {\n if (!redefine && hasOwnProperty.call(dest, name)) {\n // Skip descriptor\n return\n }\n\n // Copy descriptor\n var descriptor = Object.getOwnPropertyDescriptor(src, name)\n Object.defineProperty(dest, name, descriptor)\n })\n\n return dest\n}\n", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x23-\\x3B\\x3D\\x3F-\\x5F\\x61-\\x7A\\x7C\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n return String(url)\n .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n var url = req.url\n\n if (url === undefined) {\n // URL is undefined\n return undefined\n }\n\n var parsed = req._parsedUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n var url = req.originalUrl\n\n if (typeof url !== 'string') {\n // Fallback\n return parseurl(req)\n }\n\n var parsed = req._parsedOriginalUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n return parse(str)\n }\n\n var pathname = str\n var query = null\n var search = null\n\n // This takes the regexp from https://github.com/joyent/node/pull/7878\n // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n // And unrolls it into a for loop\n for (var i = 1; i < str.length; i++) {\n switch (str.charCodeAt(i)) {\n case 0x3f: /* ? */\n if (search === null) {\n pathname = str.substring(0, i)\n query = str.substring(i + 1)\n search = str.substring(i)\n }\n break\n case 0x09: /* \\t */\n case 0x0a: /* \\n */\n case 0x0c: /* \\f */\n case 0x0d: /* \\r */\n case 0x20: /* */\n case 0x23: /* # */\n case 0xa0:\n case 0xfeff:\n return parse(str)\n }\n }\n\n var url = Url !== undefined\n ? new Url()\n : {}\n\n url.path = str\n url.href = str\n url.pathname = pathname\n\n if (search !== null) {\n url.query = query\n url.search = search\n }\n\n return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n return typeof parsedUrl === 'object' &&\n parsedUrl !== null &&\n (Url === undefined || parsedUrl instanceof Url) &&\n parsedUrl._raw === url\n}\n", "/*!\n * finalhandler\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n var body = escapeHtml(message)\n .replace(NEWLINE_REGEXP, '
')\n .replace(DOUBLE_SPACE_REGEXP, '  ')\n\n return '\\n' +\n '\\n' +\n '\\n' +\n '\\n' +\n 'Error\\n' +\n '\\n' +\n '\\n' +\n '
' + body + '
\\n' +\n '\\n' +\n '\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n var opts = options || {}\n\n // get environment\n var env = opts.env || process.env.NODE_ENV || 'development'\n\n // get error callback\n var onerror = opts.onerror\n\n return function (err) {\n var headers\n var msg\n var status\n\n // ignore 404 on in-flight response\n if (!err && headersSent(res)) {\n debug('cannot 404 after headers sent')\n return\n }\n\n // unhandled error\n if (err) {\n // respect status code from error\n status = getErrorStatusCode(err)\n\n if (status === undefined) {\n // fallback to status code on response\n status = getResponseStatusCode(res)\n } else {\n // respect headers from error\n headers = getErrorHeaders(err)\n }\n\n // get error message\n msg = getErrorMessage(err, status, env)\n } else {\n // not found\n status = 404\n msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n }\n\n debug('default %s', status)\n\n // schedule onerror callback\n if (err && onerror) {\n defer(onerror, err, req, res)\n }\n\n // cannot actually respond\n if (headersSent(res)) {\n debug('cannot %d after headers sent', status)\n if (req.socket) {\n req.socket.destroy()\n }\n return\n }\n\n // send response\n send(req, res, status, headers, msg)\n }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n if (!err.headers || typeof err.headers !== 'object') {\n return undefined\n }\n\n var headers = Object.create(null)\n var keys = Object.keys(err.headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n headers[key] = err.headers[key]\n }\n\n return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n var msg\n\n if (env !== 'production') {\n // use err.stack, which typically includes err.message\n msg = err.stack\n\n // fallback to err.toString() when possible\n if (!msg && typeof err.toString === 'function') {\n msg = err.toString()\n }\n }\n\n return msg || statuses.message[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n // check err.status\n if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n return err.status\n }\n\n // check err.statusCode\n if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n return err.statusCode\n }\n\n return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n try {\n return parseUrl.original(req).pathname\n } catch (e) {\n return 'resource'\n }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n var status = res.statusCode\n\n // default status code to 500 if outside valid range\n if (typeof status !== 'number' || status < 400 || status > 599) {\n status = 500\n }\n\n return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n function write () {\n // response body\n var body = createHtmlDocument(message)\n\n // response status\n res.statusCode = status\n\n if (req.httpVersionMajor < 2) {\n res.statusMessage = statuses.message[status]\n }\n\n // remove any content headers\n res.removeHeader('Content-Encoding')\n res.removeHeader('Content-Language')\n res.removeHeader('Content-Range')\n\n // response headers\n setHeaders(res, headers)\n\n // security headers\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n\n // standard headers\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n res.end(body, 'utf8')\n }\n\n if (isFinished(req)) {\n write()\n return\n }\n\n // unpipe everything from the request\n unpipe(req)\n\n // flush the request\n onFinished(req, write)\n req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n if (!headers) {\n return\n }\n\n var keys = Object.keys(headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n", "'use strict'\n\n/**\n * Expose `arrayFlatten`.\n */\nmodule.exports = arrayFlatten\n\n/**\n * Recursive flatten function with depth.\n *\n * @param {Array} array\n * @param {Array} result\n * @param {Number} depth\n * @return {Array}\n */\nfunction flattenWithDepth (array, result, depth) {\n for (var i = 0; i < array.length; i++) {\n var value = array[i]\n\n if (depth > 0 && Array.isArray(value)) {\n flattenWithDepth(value, result, depth - 1)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Recursive flatten function. Omitting depth is slightly faster.\n *\n * @param {Array} array\n * @param {Array} result\n * @return {Array}\n */\nfunction flattenForever (array, result) {\n for (var i = 0; i < array.length; i++) {\n var value = array[i]\n\n if (Array.isArray(value)) {\n flattenForever(value, result)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Flatten an array, with the ability to define a depth.\n *\n * @param {Array} array\n * @param {Number} depth\n * @return {Array}\n */\nfunction arrayFlatten (array, depth) {\n if (depth == null) {\n return flattenForever(array, [])\n }\n\n return flattenWithDepth(array, [], depth)\n}\n", "/**\n * Expose `pathToRegexp`.\n */\n\nmodule.exports = pathToRegexp;\n\n/**\n * Match matching groups in a regular expression.\n */\nvar MATCHING_GROUP_REGEXP = /\\\\.|\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param {String|RegExp|Array} path\n * @param {Array} keys\n * @param {Object} options\n * @return {RegExp}\n * @api private\n */\n\nfunction pathToRegexp(path, keys, options) {\n options = options || {};\n keys = keys || [];\n var strict = options.strict;\n var end = options.end !== false;\n var flags = options.sensitive ? '' : 'i';\n var lookahead = options.lookahead !== false;\n var extraOffset = 0;\n var keysOffset = keys.length;\n var i = 0;\n var name = 0;\n var pos = 0;\n var backtrack = '';\n var m;\n\n if (path instanceof RegExp) {\n while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {\n if (m[0][0] === '\\\\') continue;\n\n keys.push({\n name: m[1] || name++,\n optional: false,\n offset: m.index\n });\n }\n\n return path;\n }\n\n if (Array.isArray(path)) {\n // Map array parts into regexps and return their source. We also pass\n // the same keys and options instance into every generation to get\n // consistent matching groups before we join the sources together.\n path = path.map(function (value) {\n return pathToRegexp(value, keys, options).source;\n });\n\n return new RegExp(path.join('|'), flags);\n }\n\n if (typeof path !== 'string') {\n throw new TypeError('path must be a string, array of strings, or regular expression');\n }\n\n path = path.replace(\n /\\\\.|(\\/)?(\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?|[.*]|\\/\\(/g,\n function (match, slash, format, key, capture, star, optional, offset) {\n if (match[0] === '\\\\') {\n backtrack += match;\n pos += 2;\n return match;\n }\n\n if (match === '.') {\n backtrack += '\\\\.';\n extraOffset += 1;\n pos += 1;\n return '\\\\.';\n }\n\n if (slash || format) {\n backtrack = '';\n } else {\n backtrack += path.slice(pos, offset);\n }\n\n pos = offset + match.length;\n\n if (match === '*') {\n backtrack = '';\n extraOffset += 3;\n return '(.*)';\n }\n\n if (match === '/(') {\n backtrack += '/';\n extraOffset += 2;\n return '/(?:';\n }\n\n slash = slash || '';\n format = format ? '\\\\.' : '';\n optional = optional || '';\n capture = capture ?\n capture.replace(/\\\\.|\\*/, function (m) { return m === '*' ? '(.*)' : m; }) :\n (backtrack ? '((?:(?!/|' + backtrack + ').)+?)' : '([^/' + format + ']+?)');\n\n keys.push({\n name: key,\n optional: !!optional,\n offset: offset + extraOffset\n });\n\n var result = '(?:'\n + format + slash + capture\n + (star ? '((?:[/' + format + '].+?)?)' : '')\n + ')'\n + optional;\n\n backtrack = '';\n extraOffset += result.length - match.length;\n\n return result;\n });\n\n // This is a workaround for handling unnamed matching groups.\n while (m = MATCHING_GROUP_REGEXP.exec(path)) {\n if (m[0][0] === '\\\\') continue;\n\n if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {\n keys.splice(keysOffset + i, 0, {\n name: name++, // Unnamed matching groups must be consistently linear.\n optional: false,\n offset: m.index\n });\n }\n\n i++;\n }\n\n path += strict ? '' : path[path.length - 1] === '/' ? '?' : '/?';\n\n // If the path is non-ending, match until the end or a slash.\n if (end) {\n path += '$';\n } else if (path[path.length - 1] !== '/') {\n path += lookahead ? '(?=/|$)' : '(?:/|$)';\n }\n\n return new RegExp('^' + path, flags);\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar pathRegexp = require('path-to-regexp');\nvar debug = require('debug')('express:router:layer');\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Layer;\n\nfunction Layer(path, options, fn) {\n if (!(this instanceof Layer)) {\n return new Layer(path, options, fn);\n }\n\n debug('new %o', path)\n var opts = options || {};\n\n this.handle = fn;\n this.name = fn.name || '';\n this.params = undefined;\n this.path = undefined;\n this.regexp = pathRegexp(path, this.keys = [], opts);\n\n // set fast path flags\n this.regexp.fast_star = path === '*'\n this.regexp.fast_slash = path === '/' && opts.end === false\n}\n\n/**\n * Handle the error for the layer.\n *\n * @param {Error} error\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_error = function handle_error(error, req, res, next) {\n var fn = this.handle;\n\n if (fn.length !== 4) {\n // not a standard error handler\n return next(error);\n }\n\n try {\n fn(error, req, res, next);\n } catch (err) {\n next(err);\n }\n};\n\n/**\n * Handle the request for the layer.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_request = function handle(req, res, next) {\n var fn = this.handle;\n\n if (fn.length > 3) {\n // not a standard request handler\n return next();\n }\n\n try {\n fn(req, res, next);\n } catch (err) {\n next(err);\n }\n};\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nLayer.prototype.match = function match(path) {\n var match\n\n if (path != null) {\n // fast path non-ending match for / (any path matches)\n if (this.regexp.fast_slash) {\n this.params = {}\n this.path = ''\n return true\n }\n\n // fast path for * (everything matched in a param)\n if (this.regexp.fast_star) {\n this.params = {'0': decode_param(path)}\n this.path = path\n return true\n }\n\n // match the path\n match = this.regexp.exec(path)\n }\n\n if (!match) {\n this.params = undefined;\n this.path = undefined;\n return false;\n }\n\n // store values\n this.params = {};\n this.path = match[0]\n\n var keys = this.keys;\n var params = this.params;\n\n for (var i = 1; i < match.length; i++) {\n var key = keys[i - 1];\n var prop = key.name;\n var val = decode_param(match[i])\n\n if (val !== undefined || !(hasOwnProperty.call(params, prop))) {\n params[prop] = val;\n }\n }\n\n return true;\n};\n\n/**\n * Decode param value.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction decode_param(val) {\n if (typeof val !== 'string' || val.length === 0) {\n return val;\n }\n\n try {\n return decodeURIComponent(val);\n } catch (err) {\n if (err instanceof URIError) {\n err.message = 'Failed to decode param \\'' + val + '\\'';\n err.status = err.statusCode = 400;\n }\n\n throw err;\n }\n}\n", "/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n return method.toLowerCase();\n });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n return [\n 'get',\n 'post',\n 'put',\n 'head',\n 'delete',\n 'options',\n 'trace',\n 'copy',\n 'lock',\n 'mkcol',\n 'move',\n 'purge',\n 'propfind',\n 'proppatch',\n 'unlock',\n 'report',\n 'mkactivity',\n 'checkout',\n 'merge',\n 'm-search',\n 'notify',\n 'subscribe',\n 'unsubscribe',\n 'patch',\n 'search',\n 'connect'\n ];\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:router:route');\nvar flatten = require('array-flatten');\nvar Layer = require('./layer');\nvar methods = require('methods');\n\n/**\n * Module variables.\n * @private\n */\n\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Route;\n\n/**\n * Initialize `Route` with the given `path`,\n *\n * @param {String} path\n * @public\n */\n\nfunction Route(path) {\n this.path = path;\n this.stack = [];\n\n debug('new %o', path)\n\n // route handlers for various http methods\n this.methods = {};\n}\n\n/**\n * Determine if the route handles a given method.\n * @private\n */\n\nRoute.prototype._handles_method = function _handles_method(method) {\n if (this.methods._all) {\n return true;\n }\n\n // normalize name\n var name = typeof method === 'string'\n ? method.toLowerCase()\n : method\n\n if (name === 'head' && !this.methods['head']) {\n name = 'get';\n }\n\n return Boolean(this.methods[name]);\n};\n\n/**\n * @return {Array} supported HTTP methods\n * @private\n */\n\nRoute.prototype._options = function _options() {\n var methods = Object.keys(this.methods);\n\n // append automatic head\n if (this.methods.get && !this.methods.head) {\n methods.push('head');\n }\n\n for (var i = 0; i < methods.length; i++) {\n // make upper case\n methods[i] = methods[i].toUpperCase();\n }\n\n return methods;\n};\n\n/**\n * dispatch req, res into this route\n * @private\n */\n\nRoute.prototype.dispatch = function dispatch(req, res, done) {\n var idx = 0;\n var stack = this.stack;\n var sync = 0\n\n if (stack.length === 0) {\n return done();\n }\n var method = typeof req.method === 'string'\n ? req.method.toLowerCase()\n : req.method\n\n if (method === 'head' && !this.methods['head']) {\n method = 'get';\n }\n\n req.route = this;\n\n next();\n\n function next(err) {\n // signal to exit route\n if (err && err === 'route') {\n return done();\n }\n\n // signal to exit router\n if (err && err === 'router') {\n return done(err)\n }\n\n // max sync stack\n if (++sync > 100) {\n return setImmediate(next, err)\n }\n\n var layer = stack[idx++]\n\n // end of layers\n if (!layer) {\n return done(err)\n }\n\n if (layer.method && layer.method !== method) {\n next(err)\n } else if (err) {\n layer.handle_error(err, req, res, next);\n } else {\n layer.handle_request(req, res, next);\n }\n\n sync = 0\n }\n};\n\n/**\n * Add a handler for all HTTP verbs to this route.\n *\n * Behaves just like middleware and can respond or call `next`\n * to continue processing.\n *\n * You can use multiple `.all` call to add multiple handlers.\n *\n * function check_something(req, res, next){\n * next();\n * };\n *\n * function validate_user(req, res, next){\n * next();\n * };\n *\n * route\n * .all(validate_user)\n * .all(check_something)\n * .get(function(req, res, next){\n * res.send('hello world');\n * });\n *\n * @param {function} handler\n * @return {Route} for chaining\n * @api public\n */\n\nRoute.prototype.all = function all() {\n var handles = flatten(slice.call(arguments));\n\n for (var i = 0; i < handles.length; i++) {\n var handle = handles[i];\n\n if (typeof handle !== 'function') {\n var type = toString.call(handle);\n var msg = 'Route.all() requires a callback function but got a ' + type\n throw new TypeError(msg);\n }\n\n var layer = Layer('/', {}, handle);\n layer.method = undefined;\n\n this.methods._all = true;\n this.stack.push(layer);\n }\n\n return this;\n};\n\nmethods.forEach(function(method){\n Route.prototype[method] = function(){\n var handles = flatten(slice.call(arguments));\n\n for (var i = 0; i < handles.length; i++) {\n var handle = handles[i];\n\n if (typeof handle !== 'function') {\n var type = toString.call(handle);\n var msg = 'Route.' + method + '() requires a callback function but got a ' + type\n throw new Error(msg);\n }\n\n debug('%s %o', method, this.path)\n\n var layer = Layer('/', {}, handle);\n layer.method = method;\n\n this.methods[method] = true;\n this.stack.push(layer);\n }\n\n return this;\n };\n});\n", "/**\n * Merge object b with object a.\n *\n * var a = { foo: 'bar' }\n * , b = { bar: 'baz' };\n *\n * merge(a, b);\n * // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n if (a && b) {\n for (var key in b) {\n a[key] = b[key];\n }\n }\n return a;\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Route = require('./route');\nvar Layer = require('./layer');\nvar methods = require('methods');\nvar mixin = require('utils-merge');\nvar debug = require('debug')('express:router');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar parseUrl = require('parseurl');\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar objectRegExp = /^\\[object (\\S+)\\]$/;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Initialize a new `Router` with the given `options`.\n *\n * @param {Object} [options]\n * @return {Router} which is a callable function\n * @public\n */\n\nvar proto = module.exports = function(options) {\n var opts = options || {};\n\n function router(req, res, next) {\n router.handle(req, res, next);\n }\n\n // mixin Router class functions\n setPrototypeOf(router, proto)\n\n router.params = {};\n router._params = [];\n router.caseSensitive = opts.caseSensitive;\n router.mergeParams = opts.mergeParams;\n router.strict = opts.strict;\n router.stack = [];\n\n return router;\n};\n\n/**\n * Map the given param placeholder `name`(s) to the given callback.\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the same signature as middleware, the only difference\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * Just like in middleware, you must either respond to the request or call next\n * to avoid stalling the request.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * return next(err);\n * } else if (!user) {\n * return next(new Error('failed to load user'));\n * }\n * req.user = user;\n * next();\n * });\n * });\n *\n * @param {String} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\nproto.param = function param(name, fn) {\n // param logic\n if (typeof name === 'function') {\n deprecate('router.param(fn): Refactor to use path params');\n this._params.push(name);\n return;\n }\n\n // apply param functions\n var params = this._params;\n var len = params.length;\n var ret;\n\n if (name[0] === ':') {\n deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.slice(1)) + ', fn) instead')\n name = name.slice(1)\n }\n\n for (var i = 0; i < len; ++i) {\n if (ret = params[i](name, fn)) {\n fn = ret;\n }\n }\n\n // ensure we end up with a\n // middleware function\n if ('function' !== typeof fn) {\n throw new Error('invalid param() call for ' + name + ', got ' + fn);\n }\n\n (this.params[name] = this.params[name] || []).push(fn);\n return this;\n};\n\n/**\n * Dispatch a req, res into the router.\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n var self = this;\n\n debug('dispatching %s %s', req.method, req.url);\n\n var idx = 0;\n var protohost = getProtohost(req.url) || ''\n var removed = '';\n var slashAdded = false;\n var sync = 0\n var paramcalled = {};\n\n // store options for OPTIONS request\n // only used if OPTIONS request\n var options = [];\n\n // middleware and routes\n var stack = self.stack;\n\n // manage inter-router variables\n var parentParams = req.params;\n var parentUrl = req.baseUrl || '';\n var done = restore(out, req, 'baseUrl', 'next', 'params');\n\n // setup next layer\n req.next = next;\n\n // for options requests, respond with a default if nothing else responds\n if (req.method === 'OPTIONS') {\n done = wrap(done, function(old, err) {\n if (err || options.length === 0) return old(err);\n sendOptionsResponse(res, options, old);\n });\n }\n\n // setup basic req values\n req.baseUrl = parentUrl;\n req.originalUrl = req.originalUrl || req.url;\n\n next();\n\n function next(err) {\n var layerError = err === 'route'\n ? null\n : err;\n\n // remove added slash\n if (slashAdded) {\n req.url = req.url.slice(1)\n slashAdded = false;\n }\n\n // restore altered req.url\n if (removed.length !== 0) {\n req.baseUrl = parentUrl;\n req.url = protohost + removed + req.url.slice(protohost.length)\n removed = '';\n }\n\n // signal to exit router\n if (layerError === 'router') {\n setImmediate(done, null)\n return\n }\n\n // no more matching layers\n if (idx >= stack.length) {\n setImmediate(done, layerError);\n return;\n }\n\n // max sync stack\n if (++sync > 100) {\n return setImmediate(next, err)\n }\n\n // get pathname of request\n var path = getPathname(req);\n\n if (path == null) {\n return done(layerError);\n }\n\n // find next matching layer\n var layer;\n var match;\n var route;\n\n while (match !== true && idx < stack.length) {\n layer = stack[idx++];\n match = matchLayer(layer, path);\n route = layer.route;\n\n if (typeof match !== 'boolean') {\n // hold on to layerError\n layerError = layerError || match;\n }\n\n if (match !== true) {\n continue;\n }\n\n if (!route) {\n // process non-route handlers normally\n continue;\n }\n\n if (layerError) {\n // routes do not match with a pending error\n match = false;\n continue;\n }\n\n var method = req.method;\n var has_method = route._handles_method(method);\n\n // build up automatic options response\n if (!has_method && method === 'OPTIONS') {\n appendMethods(options, route._options());\n }\n\n // don't even bother matching route\n if (!has_method && method !== 'HEAD') {\n match = false;\n }\n }\n\n // no match\n if (match !== true) {\n return done(layerError);\n }\n\n // store route for dispatch on change\n if (route) {\n req.route = route;\n }\n\n // Capture one-time layer values\n req.params = self.mergeParams\n ? mergeParams(layer.params, parentParams)\n : layer.params;\n var layerPath = layer.path;\n\n // this should be done for the layer\n self.process_params(layer, paramcalled, req, res, function (err) {\n if (err) {\n next(layerError || err)\n } else if (route) {\n layer.handle_request(req, res, next)\n } else {\n trim_prefix(layer, layerError, layerPath, path)\n }\n\n sync = 0\n });\n }\n\n function trim_prefix(layer, layerError, layerPath, path) {\n if (layerPath.length !== 0) {\n // Validate path is a prefix match\n if (layerPath !== path.slice(0, layerPath.length)) {\n next(layerError)\n return\n }\n\n // Validate path breaks on a path separator\n var c = path[layerPath.length]\n if (c && c !== '/' && c !== '.') return next(layerError)\n\n // Trim off the part of the url that matches the route\n // middleware (.use stuff) needs to have the path stripped\n debug('trim prefix (%s) from url %s', layerPath, req.url);\n removed = layerPath;\n req.url = protohost + req.url.slice(protohost.length + removed.length)\n\n // Ensure leading slash\n if (!protohost && req.url[0] !== '/') {\n req.url = '/' + req.url;\n slashAdded = true;\n }\n\n // Setup base URL (no trailing slash)\n req.baseUrl = parentUrl + (removed[removed.length - 1] === '/'\n ? removed.substring(0, removed.length - 1)\n : removed);\n }\n\n debug('%s %s : %s', layer.name, layerPath, req.originalUrl);\n\n if (layerError) {\n layer.handle_error(layerError, req, res, next);\n } else {\n layer.handle_request(req, res, next);\n }\n }\n};\n\n/**\n * Process any parameters for the layer.\n * @private\n */\n\nproto.process_params = function process_params(layer, called, req, res, done) {\n var params = this.params;\n\n // captured parameters from the layer, keys and values\n var keys = layer.keys;\n\n // fast track\n if (!keys || keys.length === 0) {\n return done();\n }\n\n var i = 0;\n var name;\n var paramIndex = 0;\n var key;\n var paramVal;\n var paramCallbacks;\n var paramCalled;\n\n // process params in order\n // param callbacks can be async\n function param(err) {\n if (err) {\n return done(err);\n }\n\n if (i >= keys.length ) {\n return done();\n }\n\n paramIndex = 0;\n key = keys[i++];\n name = key.name;\n paramVal = req.params[name];\n paramCallbacks = params[name];\n paramCalled = called[name];\n\n if (paramVal === undefined || !paramCallbacks) {\n return param();\n }\n\n // param previously called with same value or error occurred\n if (paramCalled && (paramCalled.match === paramVal\n || (paramCalled.error && paramCalled.error !== 'route'))) {\n // restore value\n req.params[name] = paramCalled.value;\n\n // next param\n return param(paramCalled.error);\n }\n\n called[name] = paramCalled = {\n error: null,\n match: paramVal,\n value: paramVal\n };\n\n paramCallback();\n }\n\n // single param callbacks\n function paramCallback(err) {\n var fn = paramCallbacks[paramIndex++];\n\n // store updated value\n paramCalled.value = req.params[key.name];\n\n if (err) {\n // store error\n paramCalled.error = err;\n param(err);\n return;\n }\n\n if (!fn) return param();\n\n try {\n fn(req, res, paramCallback, paramVal, key.name);\n } catch (e) {\n paramCallback(e);\n }\n }\n\n param();\n};\n\n/**\n * Use the given middleware function, with optional path, defaulting to \"/\".\n *\n * Use (like `.all`) will run for any http METHOD, but it will not add\n * handlers for those methods so OPTIONS requests will not consider `.use`\n * functions even if they could respond.\n *\n * The other difference is that _route_ path is stripped and not visible\n * to the handler function. The main effect of this feature is that mounted\n * handlers can operate without any code changes regardless of the \"prefix\"\n * pathname.\n *\n * @public\n */\n\nproto.use = function use(fn) {\n var offset = 0;\n var path = '/';\n\n // default path to '/'\n // disambiguate router.use([fn])\n if (typeof fn !== 'function') {\n var arg = fn;\n\n while (Array.isArray(arg) && arg.length !== 0) {\n arg = arg[0];\n }\n\n // first arg is the path\n if (typeof arg !== 'function') {\n offset = 1;\n path = fn;\n }\n }\n\n var callbacks = flatten(slice.call(arguments, offset));\n\n if (callbacks.length === 0) {\n throw new TypeError('Router.use() requires a middleware function')\n }\n\n for (var i = 0; i < callbacks.length; i++) {\n var fn = callbacks[i];\n\n if (typeof fn !== 'function') {\n throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))\n }\n\n // add the middleware\n debug('use %o %s', path, fn.name || '')\n\n var layer = new Layer(path, {\n sensitive: this.caseSensitive,\n strict: false,\n end: false\n }, fn);\n\n layer.route = undefined;\n\n this.stack.push(layer);\n }\n\n return this;\n};\n\n/**\n * Create a new Route for the given path.\n *\n * Each route contains a separate middleware stack and VERB handlers.\n *\n * See the Route api documentation for details on adding handlers\n * and middleware to routes.\n *\n * @param {String} path\n * @return {Route}\n * @public\n */\n\nproto.route = function route(path) {\n var route = new Route(path);\n\n var layer = new Layer(path, {\n sensitive: this.caseSensitive,\n strict: this.strict,\n end: true\n }, route.dispatch.bind(route));\n\n layer.route = route;\n\n this.stack.push(layer);\n return route;\n};\n\n// create Router#VERB functions\nmethods.concat('all').forEach(function(method){\n proto[method] = function(path){\n var route = this.route(path)\n route[method].apply(route, slice.call(arguments, 1));\n return this;\n };\n});\n\n// append methods to a list of methods\nfunction appendMethods(list, addition) {\n for (var i = 0; i < addition.length; i++) {\n var method = addition[i];\n if (list.indexOf(method) === -1) {\n list.push(method);\n }\n }\n}\n\n// get pathname of request\nfunction getPathname(req) {\n try {\n return parseUrl(req).pathname;\n } catch (err) {\n return undefined;\n }\n}\n\n// Get get protocol + host for a URL\nfunction getProtohost(url) {\n if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {\n return undefined\n }\n\n var searchIndex = url.indexOf('?')\n var pathLength = searchIndex !== -1\n ? searchIndex\n : url.length\n var fqdnIndex = url.slice(0, pathLength).indexOf('://')\n\n return fqdnIndex !== -1\n ? url.substring(0, url.indexOf('/', 3 + fqdnIndex))\n : undefined\n}\n\n// get type for error message\nfunction gettype(obj) {\n var type = typeof obj;\n\n if (type !== 'object') {\n return type;\n }\n\n // inspect [[Class]] for objects\n return toString.call(obj)\n .replace(objectRegExp, '$1');\n}\n\n/**\n * Match path to a layer.\n *\n * @param {Layer} layer\n * @param {string} path\n * @private\n */\n\nfunction matchLayer(layer, path) {\n try {\n return layer.match(path);\n } catch (err) {\n return err;\n }\n}\n\n// merge params with parent params\nfunction mergeParams(params, parent) {\n if (typeof parent !== 'object' || !parent) {\n return params;\n }\n\n // make copy of parent for base\n var obj = mixin({}, parent);\n\n // simple non-numeric merging\n if (!(0 in params) || !(0 in parent)) {\n return mixin(obj, params);\n }\n\n var i = 0;\n var o = 0;\n\n // determine numeric gaps\n while (i in params) {\n i++;\n }\n\n while (o in parent) {\n o++;\n }\n\n // offset numeric indices in params before merge\n for (i--; i >= 0; i--) {\n params[i + o] = params[i];\n\n // create holes for the merge when necessary\n if (i < o) {\n delete params[i];\n }\n }\n\n return mixin(obj, params);\n}\n\n// restore obj props after function\nfunction restore(fn, obj) {\n var props = new Array(arguments.length - 2);\n var vals = new Array(arguments.length - 2);\n\n for (var i = 0; i < props.length; i++) {\n props[i] = arguments[i + 2];\n vals[i] = obj[props[i]];\n }\n\n return function () {\n // restore vals\n for (var i = 0; i < props.length; i++) {\n obj[props[i]] = vals[i];\n }\n\n return fn.apply(this, arguments);\n };\n}\n\n// send an OPTIONS response\nfunction sendOptionsResponse(res, options, next) {\n try {\n var body = options.join(',');\n res.set('Allow', body);\n res.send(body);\n } catch (err) {\n next(err);\n }\n}\n\n// wrap a function\nfunction wrap(old, fn) {\n return function proxy() {\n var args = new Array(arguments.length + 1);\n\n args[0] = old;\n for (var i = 0, len = arguments.length; i < len; i++) {\n args[i + 1] = arguments[i];\n }\n\n fn.apply(this, args);\n };\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Initialization middleware, exposing the\n * request and response to each other, as well\n * as defaulting the X-Powered-By header field.\n *\n * @param {Function} app\n * @return {Function}\n * @api private\n */\n\nexports.init = function(app){\n return function expressInit(req, res, next){\n if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');\n req.res = res;\n res.req = req;\n req.next = next;\n\n setPrototypeOf(req, app.request)\n setPrototypeOf(res, app.response)\n\n res.locals = res.locals || Object.create(null);\n\n next();\n };\n};\n\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar merge = require('utils-merge')\nvar parseUrl = require('parseurl');\nvar qs = require('qs');\n\n/**\n * @param {Object} options\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function query(options) {\n var opts = merge({}, options)\n var queryparse = qs.parse;\n\n if (typeof options === 'function') {\n queryparse = options;\n opts = undefined;\n }\n\n if (opts !== undefined && opts.allowPrototypes === undefined) {\n // back-compat for qs module\n opts.allowPrototypes = true;\n }\n\n return function query(req, res, next){\n if (!req.query) {\n var val = parseUrl(req).query;\n req.query = queryparse(val, opts);\n }\n\n next();\n };\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:view');\nvar path = require('path');\nvar fs = require('fs');\n\n/**\n * Module variables.\n * @private\n */\n\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar extname = path.extname;\nvar join = path.join;\nvar resolve = path.resolve;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = View;\n\n/**\n * Initialize a new `View` with the given `name`.\n *\n * Options:\n *\n * - `defaultEngine` the default template engine name\n * - `engines` template engine require() cache\n * - `root` root path for view lookup\n *\n * @param {string} name\n * @param {object} options\n * @public\n */\n\nfunction View(name, options) {\n var opts = options || {};\n\n this.defaultEngine = opts.defaultEngine;\n this.ext = extname(name);\n this.name = name;\n this.root = opts.root;\n\n if (!this.ext && !this.defaultEngine) {\n throw new Error('No default engine was specified and no extension was provided.');\n }\n\n var fileName = name;\n\n if (!this.ext) {\n // get extension from default engine name\n this.ext = this.defaultEngine[0] !== '.'\n ? '.' + this.defaultEngine\n : this.defaultEngine;\n\n fileName += this.ext;\n }\n\n if (!opts.engines[this.ext]) {\n // load engine\n var mod = this.ext.slice(1)\n debug('require \"%s\"', mod)\n\n // default engine export\n var fn = require(mod).__express\n\n if (typeof fn !== 'function') {\n throw new Error('Module \"' + mod + '\" does not provide a view engine.')\n }\n\n opts.engines[this.ext] = fn\n }\n\n // store loaded engine\n this.engine = opts.engines[this.ext];\n\n // lookup path\n this.path = this.lookup(fileName);\n}\n\n/**\n * Lookup view by the given `name`\n *\n * @param {string} name\n * @private\n */\n\nView.prototype.lookup = function lookup(name) {\n var path;\n var roots = [].concat(this.root);\n\n debug('lookup \"%s\"', name);\n\n for (var i = 0; i < roots.length && !path; i++) {\n var root = roots[i];\n\n // resolve the path\n var loc = resolve(root, name);\n var dir = dirname(loc);\n var file = basename(loc);\n\n // resolve the file\n path = this.resolve(dir, file);\n }\n\n return path;\n};\n\n/**\n * Render with the given options.\n *\n * @param {object} options\n * @param {function} callback\n * @private\n */\n\nView.prototype.render = function render(options, callback) {\n debug('render \"%s\"', this.path);\n this.engine(this.path, options, callback);\n};\n\n/**\n * Resolve the file within the given directory.\n *\n * @param {string} dir\n * @param {string} file\n * @private\n */\n\nView.prototype.resolve = function resolve(dir, file) {\n var ext = this.ext;\n\n // .\n var path = join(dir, file);\n var stat = tryStat(path);\n\n if (stat && stat.isFile()) {\n return path;\n }\n\n // /index.\n path = join(dir, basename(file, ext), 'index' + ext);\n stat = tryStat(path);\n\n if (stat && stat.isFile()) {\n return path;\n }\n};\n\n/**\n * Return a stat, maybe.\n *\n * @param {string} path\n * @return {fs.Stats}\n * @private\n */\n\nfunction tryStat(path) {\n debug('stat \"%s\"', path);\n\n try {\n return fs.statSync(path);\n } catch (e) {\n return undefined;\n }\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", "/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename\nvar Buffer = require('safe-buffer').Buffer\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = >\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n * TEXT = \n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = \n * LF = \n * SP = \n * HT = \n * CTL = \n * OCTET = \n * @private\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = \n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = Buffer.from(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode (char) {\n return '%' + String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n", "/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n if (entity.length === 0) {\n // fast-path empty\n return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n }\n\n // compute hash of entity\n var hash = crypto\n .createHash('sha1')\n .update(entity, 'utf8')\n .digest('base64')\n .substring(0, 27)\n\n // compute length of entity\n var len = typeof entity === 'string'\n ? Buffer.byteLength(entity, 'utf8')\n : entity.length\n\n return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n if (entity == null) {\n throw new TypeError('argument entity is required')\n }\n\n // support fs.Stats object\n var isStats = isstats(entity)\n var weak = options && typeof options.weak === 'boolean'\n ? options.weak\n : isStats\n\n // validate argument\n if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n }\n\n // generate entity tag\n var tag = isStats\n ? stattag(entity)\n : entitytag(entity)\n\n return weak\n ? 'W/' + tag\n : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n // genuine fs.Stats\n if (typeof Stats === 'function' && obj instanceof Stats) {\n return true\n }\n\n // quack quack\n return obj && typeof obj === 'object' &&\n 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n 'ino' in obj && typeof obj.ino === 'number' &&\n 'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n var mtime = stat.mtime.getTime().toString(16)\n var size = stat.size.toString(16)\n\n return '\"' + size + '-' + mtime + '\"'\n}\n", "/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n // fields\n var modifiedSince = reqHeaders['if-modified-since']\n var noneMatch = reqHeaders['if-none-match']\n\n // unconditional request\n if (!modifiedSince && !noneMatch) {\n return false\n }\n\n // Always return stale when Cache-Control: no-cache\n // to support end-to-end reload requests\n // https://tools.ietf.org/html/rfc2616#section-14.9.4\n var cacheControl = reqHeaders['cache-control']\n if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n return false\n }\n\n // if-none-match\n if (noneMatch && noneMatch !== '*') {\n var etag = resHeaders['etag']\n\n if (!etag) {\n return false\n }\n\n var etagStale = true\n var matches = parseTokenList(noneMatch)\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i]\n if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n etagStale = false\n break\n }\n }\n\n if (etagStale) {\n return false\n }\n }\n\n // if-modified-since\n if (modifiedSince) {\n var lastModified = resHeaders['last-modified']\n var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n if (modifiedStale) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n // istanbul ignore next: guard against date.js Date.parse patching\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(str.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(str.substring(start, end))\n\n return list\n}\n", "{\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/bdoc\":[\"bdoc\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/font-tdpfr\":[\"pfr\"],\"application/font-woff\":[],\"application/font-woff2\":[],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/prs.cww\":[\"cww\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[],\"application/x-msdownload\":[\"com\",\"bat\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"wmf\",\"emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[],\"audio/adpcm\":[\"adp\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mp3\":[],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[],\"audio/webm\":[\"weba\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[],\"audio/x-wav\":[],\"audio/xm\":[\"xm\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/apng\":[\"apng\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/ief\":[\"ief\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/ktx\":[\"ktx\"],\"image/png\":[\"png\"],\"image/prs.btif\":[\"btif\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/tiff\":[\"tiff\",\"tif\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/webp\":[\"webp\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[],\"image/x-pcx\":[\"pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.vtu\":[\"vtu\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"x3db\",\"x3dbz\"],\"model/x3d+vrml\":[\"x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/hjson\":[\"hjson\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/slim\":[\"slim\",\"slm\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/vtt\":[\"vtt\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"text/xml\":[],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/webm\":[\"webm\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]}", "var path = require('path');\nvar fs = require('fs');\n\nfunction Mime() {\n // Map of extension -> mime type\n this.types = Object.create(null);\n\n // Map of mime type -> extension\n this.extensions = Object.create(null);\n}\n\n/**\n * Define mimetype -> extension mappings. Each key is a mime-type that maps\n * to an array of extensions associated with the type. The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * @param map (Object) type definitions\n */\nMime.prototype.define = function (map) {\n for (var type in map) {\n var exts = map[type];\n for (var i = 0; i < exts.length; i++) {\n if (process.env.DEBUG_MIME && this.types[exts[i]]) {\n console.warn((this._loading || \"define()\").replace(/.*\\//, ''), 'changes \"' + exts[i] + '\" extension type from ' +\n this.types[exts[i]] + ' to ' + type);\n }\n\n this.types[exts[i]] = type;\n }\n\n // Default extension is the first one we encounter\n if (!this.extensions[type]) {\n this.extensions[type] = exts[0];\n }\n }\n};\n\n/**\n * Load an Apache2-style \".types\" file\n *\n * This may be called multiple times (it's expected). Where files declare\n * overlapping types/extensions, the last file wins.\n *\n * @param file (String) path of file to load.\n */\nMime.prototype.load = function(file) {\n this._loading = file;\n // Read file and split into lines\n var map = {},\n content = fs.readFileSync(file, 'ascii'),\n lines = content.split(/[\\r\\n]+/);\n\n lines.forEach(function(line) {\n // Clean up whitespace/comments, and split into fields\n var fields = line.replace(/\\s*#.*|^\\s*|\\s*$/g, '').split(/\\s+/);\n map[fields.shift()] = fields;\n });\n\n this.define(map);\n\n this._loading = null;\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.lookup = function(path, fallback) {\n var ext = path.replace(/^.*[\\.\\/\\\\]/, '').toLowerCase();\n\n return this.types[ext] || fallback || this.default_type;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.extension = function(mimeType) {\n var type = mimeType.match(/^\\s*([^;\\s]*)(?:;|\\s|$)/)[1].toLowerCase();\n return this.extensions[type];\n};\n\n// Default instance\nvar mime = new Mime();\n\n// Define built-in types\nmime.define(require('./types.json'));\n\n// Default type\nmime.default_type = mime.lookup('bin');\n\n//\n// Additional API specific to the default instance\n//\n\nmime.Mime = Mime;\n\n/**\n * Lookup a charset based on mime type.\n */\nmime.charsets = {\n lookup: function(mimeType, fallback) {\n // Assume text types are utf8\n return (/^text\\/|^application\\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback;\n }\n};\n\nmodule.exports = mime;\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string')\n }\n\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n", "/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar deprecate = require('depd')('send')\nvar destroy = require('destroy')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\nmodule.exports.mime = mime\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n Stream.call(this)\n\n var opts = options || {}\n\n this.options = opts\n this.path = path\n this.req = req\n\n this._acceptRanges = opts.acceptRanges !== undefined\n ? Boolean(opts.acceptRanges)\n : true\n\n this._cacheControl = opts.cacheControl !== undefined\n ? Boolean(opts.cacheControl)\n : true\n\n this._etag = opts.etag !== undefined\n ? Boolean(opts.etag)\n : true\n\n this._dotfiles = opts.dotfiles !== undefined\n ? opts.dotfiles\n : 'ignore'\n\n if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n }\n\n this._hidden = Boolean(opts.hidden)\n\n if (opts.hidden !== undefined) {\n deprecate('hidden: use dotfiles: \\'' + (this._hidden ? 'allow' : 'ignore') + '\\' instead')\n }\n\n // legacy support\n if (opts.dotfiles === undefined) {\n this._dotfiles = undefined\n }\n\n this._extensions = opts.extensions !== undefined\n ? normalizeList(opts.extensions, 'extensions option')\n : []\n\n this._immutable = opts.immutable !== undefined\n ? Boolean(opts.immutable)\n : false\n\n this._index = opts.index !== undefined\n ? normalizeList(opts.index, 'index option')\n : ['index.html']\n\n this._lastModified = opts.lastModified !== undefined\n ? Boolean(opts.lastModified)\n : true\n\n this._maxage = opts.maxAge || opts.maxage\n this._maxage = typeof this._maxage === 'string'\n ? ms(this._maxage)\n : Number(this._maxage)\n this._maxage = !isNaN(this._maxage)\n ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n : 0\n\n this._root = opts.root\n ? resolve(opts.root)\n : null\n\n if (!this._root && opts.from) {\n this.from(opts.from)\n }\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Enable or disable etag generation.\n *\n * @param {Boolean} val\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.etag = deprecate.function(function etag (val) {\n this._etag = Boolean(val)\n debug('etag %s', this._etag)\n return this\n}, 'send.etag: pass etag as option')\n\n/**\n * Enable or disable \"hidden\" (dot) files.\n *\n * @param {Boolean} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.hidden = deprecate.function(function hidden (val) {\n this._hidden = Boolean(val)\n this._dotfiles = undefined\n debug('hidden %s', this._hidden)\n return this\n}, 'send.hidden: use dotfiles option')\n\n/**\n * Set index `paths`, set to a falsy\n * value to disable index support.\n *\n * @param {String|Boolean|Array} paths\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.index = deprecate.function(function index (paths) {\n var index = !paths ? [] : normalizeList(paths, 'paths argument')\n debug('index %o', paths)\n this._index = index\n return this\n}, 'send.index: pass index as option')\n\n/**\n * Set root `path`.\n *\n * @param {String} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.root = function root (path) {\n this._root = resolve(String(path))\n debug('root %s', this._root)\n return this\n}\n\nSendStream.prototype.from = deprecate.function(SendStream.prototype.root,\n 'send.from: pass root as option')\n\nSendStream.prototype.root = deprecate.function(SendStream.prototype.root,\n 'send.root: pass root as option')\n\n/**\n * Set max-age to `maxAge`.\n *\n * @param {Number} maxAge\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.maxage = deprecate.function(function maxage (maxAge) {\n this._maxage = typeof maxAge === 'string'\n ? ms(maxAge)\n : Number(maxAge)\n this._maxage = !isNaN(this._maxage)\n ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n : 0\n debug('max-age %d', this._maxage)\n return this\n}, 'send.maxage: pass maxAge as option')\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n // emit if listeners instead of responding\n if (hasListeners(this, 'error')) {\n return this.emit('error', createHttpError(status, err))\n }\n\n var res = this.res\n var msg = statuses.message[status] || String(status)\n var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n // clear existing headers\n clearHeaders(res)\n\n // add error headers\n if (err && err.headers) {\n setHeaders(res, err.headers)\n }\n\n // send basic response\n res.statusCode = status\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n return this.req.headers['if-match'] ||\n this.req.headers['if-unmodified-since'] ||\n this.req.headers['if-none-match'] ||\n this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n var req = this.req\n var res = this.res\n\n // if-match\n var match = req.headers['if-match']\n if (match) {\n var etag = res.getHeader('ETag')\n return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n }))\n }\n\n // if-unmodified-since\n var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n if (!isNaN(unmodifiedSince)) {\n var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n return isNaN(lastModified) || lastModified > unmodifiedSince\n }\n\n return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n var res = this.res\n\n res.removeHeader('Content-Encoding')\n res.removeHeader('Content-Language')\n res.removeHeader('Content-Length')\n res.removeHeader('Content-Range')\n res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n var res = this.res\n debug('not modified')\n this.removeContentHeaderFields()\n res.statusCode = 304\n res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n var err = new Error('Can\\'t set headers after they are sent.')\n debug('headers already sent')\n this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n var statusCode = this.res.statusCode\n return (statusCode >= 200 && statusCode < 300) ||\n statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n switch (error.code) {\n case 'ENAMETOOLONG':\n case 'ENOENT':\n case 'ENOTDIR':\n this.error(404, error)\n break\n default:\n this.error(500, error)\n break\n }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n return fresh(this.req.headers, {\n etag: this.res.getHeader('ETag'),\n 'last-modified': this.res.getHeader('Last-Modified')\n })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n var ifRange = this.req.headers['if-range']\n\n if (!ifRange) {\n return true\n }\n\n // if-range as etag\n if (ifRange.indexOf('\"') !== -1) {\n var etag = this.res.getHeader('ETag')\n return Boolean(etag && ifRange.indexOf(etag) !== -1)\n }\n\n // if-range as modified date\n var lastModified = this.res.getHeader('Last-Modified')\n return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n var res = this.res\n\n if (hasListeners(this, 'directory')) {\n this.emit('directory', res, path)\n return\n }\n\n if (this.hasTrailingSlash()) {\n this.error(403)\n return\n }\n\n var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n // redirect\n res.statusCode = 301\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.setHeader('Location', loc)\n res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n // root path\n var root = this._root\n\n // references\n this.res = res\n\n // decode the path\n var path = decode(this.path)\n if (path === -1) {\n this.error(400)\n return res\n }\n\n // null byte(s)\n if (~path.indexOf('\\0')) {\n this.error(400)\n return res\n }\n\n var parts\n if (root !== null) {\n // normalize\n if (path) {\n path = normalize('.' + sep + path)\n }\n\n // malicious path\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = path.split(sep)\n\n // join / normalize from optional root dir\n path = normalize(join(root, path))\n } else {\n // \"..\" is malicious without \"root\"\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = normalize(path).split(sep)\n\n // resolve the path\n path = resolve(path)\n }\n\n // dotfile handling\n if (containsDotFile(parts)) {\n var access = this._dotfiles\n\n // legacy support\n if (access === undefined) {\n access = parts[parts.length - 1][0] === '.'\n ? (this._hidden ? 'allow' : 'ignore')\n : 'allow'\n }\n\n debug('%s dotfile \"%s\"', access, path)\n switch (access) {\n case 'allow':\n break\n case 'deny':\n this.error(403)\n return res\n case 'ignore':\n default:\n this.error(404)\n return res\n }\n }\n\n // index file support\n if (this._index.length && this.hasTrailingSlash()) {\n this.sendIndex(path)\n return res\n }\n\n this.sendFile(path)\n return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n var len = stat.size\n var options = this.options\n var opts = {}\n var res = this.res\n var req = this.req\n var ranges = req.headers.range\n var offset = options.start || 0\n\n if (headersSent(res)) {\n // impossible to send now\n this.headersAlreadySent()\n return\n }\n\n debug('pipe \"%s\"', path)\n\n // set header fields\n this.setHeader(path, stat)\n\n // set content-type\n this.type(path)\n\n // conditional GET support\n if (this.isConditionalGET()) {\n if (this.isPreconditionFailure()) {\n this.error(412)\n return\n }\n\n if (this.isCachable() && this.isFresh()) {\n this.notModified()\n return\n }\n }\n\n // adjust len to start/end options\n len = Math.max(0, len - offset)\n if (options.end !== undefined) {\n var bytes = options.end - offset + 1\n if (len > bytes) len = bytes\n }\n\n // Range support\n if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n // parse\n ranges = parseRange(len, ranges, {\n combine: true\n })\n\n // If-Range support\n if (!this.isRangeFresh()) {\n debug('range stale')\n ranges = -2\n }\n\n // unsatisfiable\n if (ranges === -1) {\n debug('range unsatisfiable')\n\n // Content-Range\n res.setHeader('Content-Range', contentRange('bytes', len))\n\n // 416 Requested Range Not Satisfiable\n return this.error(416, {\n headers: { 'Content-Range': res.getHeader('Content-Range') }\n })\n }\n\n // valid (syntactically invalid/multiple ranges are treated as a regular response)\n if (ranges !== -2 && ranges.length === 1) {\n debug('range %j', ranges)\n\n // Content-Range\n res.statusCode = 206\n res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n // adjust for requested range\n offset += ranges[0].start\n len = ranges[0].end - ranges[0].start + 1\n }\n }\n\n // clone options\n for (var prop in options) {\n opts[prop] = options[prop]\n }\n\n // set read options\n opts.start = offset\n opts.end = Math.max(offset, offset + len - 1)\n\n // content-length\n res.setHeader('Content-Length', len)\n\n // HEAD support\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n var i = 0\n var self = this\n\n debug('stat \"%s\"', path)\n fs.stat(path, function onstat (err, stat) {\n if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {\n // not found, check extensions\n return next(err)\n }\n if (err) return self.onStatError(err)\n if (stat.isDirectory()) return self.redirect(path)\n self.emit('file', path, stat)\n self.send(path, stat)\n })\n\n function next (err) {\n if (self._extensions.length <= i) {\n return err\n ? self.onStatError(err)\n : self.error(404)\n }\n\n var p = path + '.' + self._extensions[i++]\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n var i = -1\n var self = this\n\n function next (err) {\n if (++i >= self._index.length) {\n if (err) return self.onStatError(err)\n return self.error(404)\n }\n\n var p = join(path, self._index[i])\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n\n next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n var self = this\n var res = this.res\n\n // pipe\n var stream = fs.createReadStream(path, options)\n this.emit('stream', stream)\n stream.pipe(res)\n\n // cleanup\n function cleanup () {\n destroy(stream, true)\n }\n\n // response finished, cleanup\n onFinished(res, cleanup)\n\n // error handling\n stream.on('error', function onerror (err) {\n // clean up stream early\n cleanup()\n\n // error\n self.onStatError(err)\n })\n\n // end\n stream.on('end', function onend () {\n self.emit('end')\n })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n var res = this.res\n\n if (res.getHeader('Content-Type')) return\n\n var type = mime.lookup(path)\n\n if (!type) {\n debug('no content-type')\n return\n }\n\n var charset = mime.charsets.lookup(type)\n\n debug('content-type %s', type)\n res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''))\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n var res = this.res\n\n this.emit('headers', res, path, stat)\n\n if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n debug('accept ranges')\n res.setHeader('Accept-Ranges', 'bytes')\n }\n\n if (this._cacheControl && !res.getHeader('Cache-Control')) {\n var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n if (this._immutable) {\n cacheControl += ', immutable'\n }\n\n debug('cache-control %s', cacheControl)\n res.setHeader('Cache-Control', cacheControl)\n }\n\n if (this._lastModified && !res.getHeader('Last-Modified')) {\n var modified = stat.mtime.toUTCString()\n debug('modified %s', modified)\n res.setHeader('Last-Modified', modified)\n }\n\n if (this._etag && !res.getHeader('ETag')) {\n var val = etag(stat)\n debug('etag %s', val)\n res.setHeader('ETag', val)\n }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n var headers = getHeaderNames(res)\n\n for (var i = 0; i < headers.length; i++) {\n res.removeHeader(headers[i])\n }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n for (var i = 0; i < str.length; i++) {\n if (str[i] !== '/') {\n break\n }\n }\n\n return i > 1\n ? '/' + str.substr(i)\n : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i]\n if (part.length > 1 && part[0] === '.') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n return '\\n' +\n '\\n' +\n '\\n' +\n '\\n' +\n '' + title + '\\n' +\n '\\n' +\n '\\n' +\n '
' + body + '
\\n' +\n '\\n' +\n '\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n if (!err) {\n return createError(status)\n }\n\n return err instanceof Error\n ? createError(status, err, { expose: false })\n : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n try {\n return decodeURIComponent(path)\n } catch (err) {\n return -1\n }\n}\n\n/**\n * Get the header names on a respnse.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames (res) {\n return typeof res.getHeaderNames !== 'function'\n ? Object.keys(res._headers || {})\n : res.getHeaderNames()\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n var list = [].concat(val || [])\n\n for (var i = 0; i < list.length; i++) {\n if (typeof list[i] !== 'string') {\n throw new TypeError(name + ' must be array of strings or false')\n }\n }\n\n return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n\n return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n var keys = Object.keys(headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n", "/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = forwarded\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded (req) {\n if (!req) {\n throw new TypeError('argument req is required')\n }\n\n // simple header parsing\n var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')\n var socketAddr = getSocketAddr(req)\n var addrs = [socketAddr].concat(proxyAddrs)\n\n // return all addresses\n return addrs\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr (req) {\n return req.socket\n ? req.socket.remoteAddress\n : req.connection.remoteAddress\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse (header) {\n var end = header.length\n var list = []\n var start = header.length\n\n // gather addresses, backwards\n for (var i = header.length - 1; i >= 0; i--) {\n switch (header.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i\n }\n break\n case 0x2c: /* , */\n if (start !== end) {\n list.push(header.substring(start, end))\n }\n start = end = i\n break\n default:\n start = i\n break\n }\n }\n\n // final address\n if (start !== end) {\n list.push(header.substring(start, end))\n }\n\n return list\n}\n", "(function() {\n var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n ipaddr = {};\n\n root = this;\n\n if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n module.exports = ipaddr;\n } else {\n root['ipaddr'] = ipaddr;\n }\n\n matchCIDR = function(first, second, partSize, cidrBits) {\n var part, shift;\n if (first.length !== second.length) {\n throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n }\n part = 0;\n while (cidrBits > 0) {\n shift = partSize - cidrBits;\n if (shift < 0) {\n shift = 0;\n }\n if (first[part] >> shift !== second[part] >> shift) {\n return false;\n }\n cidrBits -= partSize;\n part += 1;\n }\n return true;\n };\n\n ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n var k, len, rangeName, rangeSubnets, subnet;\n if (defaultName == null) {\n defaultName = 'unicast';\n }\n for (rangeName in rangeList) {\n rangeSubnets = rangeList[rangeName];\n if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n rangeSubnets = [rangeSubnets];\n }\n for (k = 0, len = rangeSubnets.length; k < len; k++) {\n subnet = rangeSubnets[k];\n if (address.kind() === subnet[0].kind()) {\n if (address.match.apply(address, subnet)) {\n return rangeName;\n }\n }\n }\n }\n return defaultName;\n };\n\n ipaddr.IPv4 = (function() {\n function IPv4(octets) {\n var k, len, octet;\n if (octets.length !== 4) {\n throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n }\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n }\n }\n this.octets = octets;\n }\n\n IPv4.prototype.kind = function() {\n return 'ipv4';\n };\n\n IPv4.prototype.toString = function() {\n return this.octets.join(\".\");\n };\n\n IPv4.prototype.toNormalizedString = function() {\n return this.toString();\n };\n\n IPv4.prototype.toByteArray = function() {\n return this.octets.slice(0);\n };\n\n IPv4.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv4') {\n throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n }\n return matchCIDR(this.octets, other.octets, 8, cidrRange);\n };\n\n IPv4.prototype.SpecialRanges = {\n unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n };\n\n IPv4.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv4.prototype.toIPv4MappedAddress = function() {\n return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n };\n\n IPv4.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, octet, stop, zeros, zerotable;\n zerotable = {\n 0: 8,\n 128: 7,\n 192: 6,\n 224: 5,\n 240: 4,\n 248: 3,\n 252: 2,\n 254: 1,\n 255: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 3; k >= 0; i = k += -1) {\n octet = this.octets[i];\n if (octet in zerotable) {\n zeros = zerotable[octet];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 8) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 32 - cidr;\n };\n\n return IPv4;\n\n })();\n\n ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n ipv4Regexes = {\n fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n };\n\n ipaddr.IPv4.parser = function(string) {\n var match, parseIntAuto, part, shift, value;\n parseIntAuto = function(string) {\n if (string[0] === \"0\" && string[1] !== \"x\") {\n return parseInt(string, 8);\n } else {\n return parseInt(string);\n }\n };\n if (match = string.match(ipv4Regexes.fourOctet)) {\n return (function() {\n var k, len, ref, results;\n ref = match.slice(1, 6);\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseIntAuto(part));\n }\n return results;\n })();\n } else if (match = string.match(ipv4Regexes.longValue)) {\n value = parseIntAuto(match[1]);\n if (value > 0xffffffff || value < 0) {\n throw new Error(\"ipaddr: address outside defined range\");\n }\n return ((function() {\n var k, results;\n results = [];\n for (shift = k = 0; k <= 24; shift = k += 8) {\n results.push((value >> shift) & 0xff);\n }\n return results;\n })()).reverse();\n } else {\n return null;\n }\n };\n\n ipaddr.IPv6 = (function() {\n function IPv6(parts, zoneId) {\n var i, k, l, len, part, ref;\n if (parts.length === 16) {\n this.parts = [];\n for (i = k = 0; k <= 14; i = k += 2) {\n this.parts.push((parts[i] << 8) | parts[i + 1]);\n }\n } else if (parts.length === 8) {\n this.parts = parts;\n } else {\n throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n }\n ref = this.parts;\n for (l = 0, len = ref.length; l < len; l++) {\n part = ref[l];\n if (!((0 <= part && part <= 0xffff))) {\n throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n }\n }\n if (zoneId) {\n this.zoneId = zoneId;\n }\n }\n\n IPv6.prototype.kind = function() {\n return 'ipv6';\n };\n\n IPv6.prototype.toString = function() {\n return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n };\n\n IPv6.prototype.toRFC5952String = function() {\n var bestMatchIndex, bestMatchLength, match, regex, string;\n regex = /((^|:)(0(:|$)){2,})/g;\n string = this.toNormalizedString();\n bestMatchIndex = 0;\n bestMatchLength = -1;\n while ((match = regex.exec(string))) {\n if (match[0].length > bestMatchLength) {\n bestMatchIndex = match.index;\n bestMatchLength = match[0].length;\n }\n }\n if (bestMatchLength < 0) {\n return string;\n }\n return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n };\n\n IPv6.prototype.toByteArray = function() {\n var bytes, k, len, part, ref;\n bytes = [];\n ref = this.parts;\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n bytes.push(part >> 8);\n bytes.push(part & 0xff);\n }\n return bytes;\n };\n\n IPv6.prototype.toNormalizedString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.toFixedLengthString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16).padStart(4, '0'));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv6') {\n throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n }\n return matchCIDR(this.parts, other.parts, 16, cidrRange);\n };\n\n IPv6.prototype.SpecialRanges = {\n unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n };\n\n IPv6.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv6.prototype.isIPv4MappedAddress = function() {\n return this.range() === 'ipv4Mapped';\n };\n\n IPv6.prototype.toIPv4Address = function() {\n var high, low, ref;\n if (!this.isIPv4MappedAddress()) {\n throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n }\n ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n };\n\n IPv6.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, part, stop, zeros, zerotable;\n zerotable = {\n 0: 16,\n 32768: 15,\n 49152: 14,\n 57344: 13,\n 61440: 12,\n 63488: 11,\n 64512: 10,\n 65024: 9,\n 65280: 8,\n 65408: 7,\n 65472: 6,\n 65504: 5,\n 65520: 4,\n 65528: 3,\n 65532: 2,\n 65534: 1,\n 65535: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 7; k >= 0; i = k += -1) {\n part = this.parts[i];\n if (part in zerotable) {\n zeros = zerotable[part];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 16) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 128 - cidr;\n };\n\n return IPv6;\n\n })();\n\n ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n zoneIndex = \"%[0-9a-z]{1,}\";\n\n ipv6Regexes = {\n zoneIndex: new RegExp(zoneIndex, 'i'),\n \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n };\n\n expandIPv6 = function(string, parts) {\n var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n if (string.indexOf('::') !== string.lastIndexOf('::')) {\n return null;\n }\n zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n if (zoneId) {\n zoneId = zoneId.substring(1);\n string = string.replace(/%.+$/, '');\n }\n colonCount = 0;\n lastColon = -1;\n while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n colonCount++;\n }\n if (string.substr(0, 2) === '::') {\n colonCount--;\n }\n if (string.substr(-2, 2) === '::') {\n colonCount--;\n }\n if (colonCount > parts) {\n return null;\n }\n replacementCount = parts - colonCount;\n replacement = ':';\n while (replacementCount--) {\n replacement += '0:';\n }\n string = string.replace('::', replacement);\n if (string[0] === ':') {\n string = string.slice(1);\n }\n if (string[string.length - 1] === ':') {\n string = string.slice(0, -1);\n }\n parts = (function() {\n var k, len, ref, results;\n ref = string.split(\":\");\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseInt(part, 16));\n }\n return results;\n })();\n return {\n parts: parts,\n zoneId: zoneId\n };\n };\n\n ipaddr.IPv6.parser = function(string) {\n var addr, k, len, match, octet, octets, zoneId;\n if (ipv6Regexes['native'].test(string)) {\n return expandIPv6(string, 8);\n } else if (match = string.match(ipv6Regexes['transitional'])) {\n zoneId = match[6] || '';\n addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n if (addr.parts) {\n octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n return null;\n }\n }\n addr.parts.push(octets[0] << 8 | octets[1]);\n addr.parts.push(octets[2] << 8 | octets[3]);\n return {\n parts: addr.parts,\n zoneId: addr.zoneId\n };\n }\n }\n return null;\n };\n\n ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n return this.parser(string) !== null;\n };\n\n ipaddr.IPv4.isValid = function(string) {\n var e;\n try {\n new this(this.parser(string));\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n return true;\n } else {\n return false;\n }\n };\n\n ipaddr.IPv6.isValid = function(string) {\n var addr, e;\n if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n return false;\n }\n try {\n addr = this.parser(string);\n new this(addr.parts, addr.zoneId);\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.parse = function(string) {\n var parts;\n parts = this.parser(string);\n if (parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(parts);\n };\n\n ipaddr.IPv6.parse = function(string) {\n var addr;\n addr = this.parser(string);\n if (addr.parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(addr.parts, addr.zoneId);\n };\n\n ipaddr.IPv4.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 32) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n };\n\n ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n var filledOctetCount, j, octets;\n prefix = parseInt(prefix);\n if (prefix < 0 || prefix > 32) {\n throw new Error('ipaddr: invalid IPv4 prefix length');\n }\n octets = [0, 0, 0, 0];\n j = 0;\n filledOctetCount = Math.floor(prefix / 8);\n while (j < filledOctetCount) {\n octets[j] = 255;\n j++;\n }\n if (filledOctetCount < 4) {\n octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n }\n return new this(octets);\n };\n\n ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv6.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 128) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n };\n\n ipaddr.isValid = function(string) {\n return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n };\n\n ipaddr.parse = function(string) {\n if (ipaddr.IPv6.isValid(string)) {\n return ipaddr.IPv6.parse(string);\n } else if (ipaddr.IPv4.isValid(string)) {\n return ipaddr.IPv4.parse(string);\n } else {\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n }\n };\n\n ipaddr.parseCIDR = function(string) {\n var e;\n try {\n return ipaddr.IPv6.parseCIDR(string);\n } catch (error1) {\n e = error1;\n try {\n return ipaddr.IPv4.parseCIDR(string);\n } catch (error1) {\n e = error1;\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n }\n }\n };\n\n ipaddr.fromByteArray = function(bytes) {\n var length;\n length = bytes.length;\n if (length === 4) {\n return new ipaddr.IPv4(bytes);\n } else if (length === 16) {\n return new ipaddr.IPv6(bytes);\n } else {\n throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n }\n };\n\n ipaddr.process = function(string) {\n var addr;\n addr = this.parse(string);\n if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n return addr.toIPv4Address();\n } else {\n return addr;\n }\n };\n\n}).call(this);\n", "/*!\n * proxy-addr\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = proxyaddr\nmodule.exports.all = alladdrs\nmodule.exports.compile = compile\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded')\nvar ipaddr = require('ipaddr.js')\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/\nvar isip = ipaddr.isValid\nvar parseip = ipaddr.parse\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n linklocal: ['169.254.0.0/16', 'fe80::/10'],\n loopback: ['127.0.0.1/8', '::1/128'],\n uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n}\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs (req, trust) {\n // get addresses\n var addrs = forwarded(req)\n\n if (!trust) {\n // Return all addresses\n return addrs\n }\n\n if (typeof trust !== 'function') {\n trust = compile(trust)\n }\n\n for (var i = 0; i < addrs.length - 1; i++) {\n if (trust(addrs[i], i)) continue\n\n addrs.length = i + 1\n }\n\n return addrs\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile (val) {\n if (!val) {\n throw new TypeError('argument is required')\n }\n\n var trust\n\n if (typeof val === 'string') {\n trust = [val]\n } else if (Array.isArray(val)) {\n trust = val.slice()\n } else {\n throw new TypeError('unsupported trust argument')\n }\n\n for (var i = 0; i < trust.length; i++) {\n val = trust[i]\n\n if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n continue\n }\n\n // Splice in pre-defined range\n val = IP_RANGES[val]\n trust.splice.apply(trust, [i, 1].concat(val))\n i += val.length - 1\n }\n\n return compileTrust(compileRangeSubnets(trust))\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets (arr) {\n var rangeSubnets = new Array(arr.length)\n\n for (var i = 0; i < arr.length; i++) {\n rangeSubnets[i] = parseipNotation(arr[i])\n }\n\n return rangeSubnets\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust (rangeSubnets) {\n // Return optimized function based on length\n var len = rangeSubnets.length\n return len === 0\n ? trustNone\n : len === 1\n ? trustSingle(rangeSubnets[0])\n : trustMulti(rangeSubnets)\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation (note) {\n var pos = note.lastIndexOf('/')\n var str = pos !== -1\n ? note.substring(0, pos)\n : note\n\n if (!isip(str)) {\n throw new TypeError('invalid IP address: ' + str)\n }\n\n var ip = parseip(str)\n\n if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n // Store as IPv4\n ip = ip.toIPv4Address()\n }\n\n var max = ip.kind() === 'ipv6'\n ? 128\n : 32\n\n var range = pos !== -1\n ? note.substring(pos + 1, note.length)\n : null\n\n if (range === null) {\n range = max\n } else if (DIGIT_REGEXP.test(range)) {\n range = parseInt(range, 10)\n } else if (ip.kind() === 'ipv4' && isip(range)) {\n range = parseNetmask(range)\n } else {\n range = null\n }\n\n if (range <= 0 || range > max) {\n throw new TypeError('invalid range on address: ' + note)\n }\n\n return [ip, range]\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask (netmask) {\n var ip = parseip(netmask)\n var kind = ip.kind()\n\n return kind === 'ipv4'\n ? ip.prefixLengthFromSubnetMask()\n : null\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr (req, trust) {\n if (!req) {\n throw new TypeError('req argument is required')\n }\n\n if (!trust) {\n throw new TypeError('trust argument is required')\n }\n\n var addrs = alladdrs(req, trust)\n var addr = addrs[addrs.length - 1]\n\n return addr\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone () {\n return false\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti (subnets) {\n return function trust (addr) {\n if (!isip(addr)) return false\n\n var ip = parseip(addr)\n var ipconv\n var kind = ip.kind()\n\n for (var i = 0; i < subnets.length; i++) {\n var subnet = subnets[i]\n var subnetip = subnet[0]\n var subnetkind = subnetip.kind()\n var subnetrange = subnet[1]\n var trusted = ip\n\n if (kind !== subnetkind) {\n if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n // Incompatible IP addresses\n continue\n }\n\n if (!ipconv) {\n // Convert IP to match subnet IP kind\n ipconv = subnetkind === 'ipv4'\n ? ip.toIPv4Address()\n : ip.toIPv4MappedAddress()\n }\n\n trusted = ipconv\n }\n\n if (trusted.match(subnetip, subnetrange)) {\n return true\n }\n }\n\n return false\n }\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle (subnet) {\n var subnetip = subnet[0]\n var subnetkind = subnetip.kind()\n var subnetisipv4 = subnetkind === 'ipv4'\n var subnetrange = subnet[1]\n\n return function trust (addr) {\n if (!isip(addr)) return false\n\n var ip = parseip(addr)\n var kind = ip.kind()\n\n if (kind !== subnetkind) {\n if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n // Incompatible IP addresses\n return false\n }\n\n // Convert IP to match subnet IP kind\n ip = subnetisipv4\n ? ip.toIPv4Address()\n : ip.toIPv4MappedAddress()\n }\n\n return ip.match(subnetip, subnetrange)\n }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @api private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar contentType = require('content-type');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar mime = require('send').mime;\nvar etag = require('etag');\nvar proxyaddr = require('proxy-addr');\nvar qs = require('qs');\nvar querystring = require('querystring');\n\n/**\n * Return strong ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.etag = createETagGenerator({ weak: false })\n\n/**\n * Return weak ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.wetag = createETagGenerator({ weak: true })\n\n/**\n * Check if `path` looks absolute.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nexports.isAbsolute = function(path){\n if ('/' === path[0]) return true;\n if (':' === path[1] && ('\\\\' === path[2] || '/' === path[2])) return true; // Windows device path\n if ('\\\\\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path\n};\n\n/**\n * Flatten the given `arr`.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nexports.flatten = deprecate.function(flatten,\n 'utils.flatten: use array-flatten npm module instead');\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function(type){\n return ~type.indexOf('/')\n ? acceptParams(type)\n : { value: mime.lookup(type), params: {} };\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function(types){\n var ret = [];\n\n for (var i = 0; i < types.length; ++i) {\n ret.push(exports.normalizeType(types[i]));\n }\n\n return ret;\n};\n\n/**\n * Generate Content-Disposition header appropriate for the filename.\n * non-ascii filenames are urlencoded and a filename* parameter is added\n *\n * @param {String} filename\n * @return {String}\n * @api private\n */\n\nexports.contentDisposition = deprecate.function(contentDisposition,\n 'utils.contentDisposition: use content-disposition npm module instead');\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams (str) {\n var parts = str.split(/ *; */);\n var ret = { value: parts[0], quality: 1, params: {} }\n\n for (var i = 1; i < parts.length; ++i) {\n var pms = parts[i].split(/ *= */);\n if ('q' === pms[0]) {\n ret.quality = parseFloat(pms[1]);\n } else {\n ret.params[pms[0]] = pms[1];\n }\n }\n\n return ret;\n}\n\n/**\n * Compile \"etag\" value to function.\n *\n * @param {Boolean|String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileETag = function(val) {\n var fn;\n\n if (typeof val === 'function') {\n return val;\n }\n\n switch (val) {\n case true:\n case 'weak':\n fn = exports.wetag;\n break;\n case false:\n break;\n case 'strong':\n fn = exports.etag;\n break;\n default:\n throw new TypeError('unknown value for etag function: ' + val);\n }\n\n return fn;\n}\n\n/**\n * Compile \"query parser\" value to function.\n *\n * @param {String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileQueryParser = function compileQueryParser(val) {\n var fn;\n\n if (typeof val === 'function') {\n return val;\n }\n\n switch (val) {\n case true:\n case 'simple':\n fn = querystring.parse;\n break;\n case false:\n fn = newObject;\n break;\n case 'extended':\n fn = parseExtendedQueryString;\n break;\n default:\n throw new TypeError('unknown value for query parser function: ' + val);\n }\n\n return fn;\n}\n\n/**\n * Compile \"proxy trust\" value to function.\n *\n * @param {Boolean|String|Number|Array|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileTrust = function(val) {\n if (typeof val === 'function') return val;\n\n if (val === true) {\n // Support plain true/false\n return function(){ return true };\n }\n\n if (typeof val === 'number') {\n // Support trusting hop count\n return function(a, i){ return i < val };\n }\n\n if (typeof val === 'string') {\n // Support comma-separated values\n val = val.split(',')\n .map(function (v) { return v.trim() })\n }\n\n return proxyaddr.compile(val || []);\n}\n\n/**\n * Set the charset in a given Content-Type string.\n *\n * @param {String} type\n * @param {String} charset\n * @return {String}\n * @api private\n */\n\nexports.setCharset = function setCharset(type, charset) {\n if (!type || !charset) {\n return type;\n }\n\n // parse type\n var parsed = contentType.parse(type);\n\n // set charset\n parsed.parameters.charset = charset;\n\n // format type\n return contentType.format(parsed);\n};\n\n/**\n * Create an ETag generator function, generating ETags with\n * the given options.\n *\n * @param {object} options\n * @return {function}\n * @private\n */\n\nfunction createETagGenerator (options) {\n return function generateETag (body, encoding) {\n var buf = !Buffer.isBuffer(body)\n ? Buffer.from(body, encoding)\n : body\n\n return etag(buf, options)\n }\n}\n\n/**\n * Parse an extended query string with qs.\n *\n * @param {String} str\n * @return {Object}\n * @private\n */\n\nfunction parseExtendedQueryString(str) {\n return qs.parse(str, {\n allowPrototypes: true,\n arrayLimit: 1000\n });\n}\n\n/**\n * Return new empty object.\n *\n * @return {Object}\n * @api private\n */\n\nfunction newObject() {\n return {};\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar finalhandler = require('finalhandler');\nvar Router = require('./router');\nvar methods = require('methods');\nvar middleware = require('./middleware/init');\nvar query = require('./middleware/query');\nvar debug = require('debug')('express:application');\nvar View = require('./view');\nvar http = require('http');\nvar compileETag = require('./utils').compileETag;\nvar compileQueryParser = require('./utils').compileQueryParser;\nvar compileTrust = require('./utils').compileTrust;\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar merge = require('utils-merge');\nvar resolve = require('path').resolve;\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\nvar slice = Array.prototype.slice;\n\n/**\n * Application prototype.\n */\n\nvar app = exports = module.exports = {};\n\n/**\n * Variable for trust proxy inheritance back-compat\n * @private\n */\n\nvar trustProxyDefaultSymbol = '@@symbol:trust_proxy_default';\n\n/**\n * Initialize the server.\n *\n * - setup default configuration\n * - setup default middleware\n * - setup route reflection methods\n *\n * @private\n */\n\napp.init = function init() {\n this.cache = {};\n this.engines = {};\n this.settings = {};\n\n this.defaultConfiguration();\n};\n\n/**\n * Initialize application configuration.\n * @private\n */\n\napp.defaultConfiguration = function defaultConfiguration() {\n var env = process.env.NODE_ENV || 'development';\n\n // default settings\n this.enable('x-powered-by');\n this.set('etag', 'weak');\n this.set('env', env);\n this.set('query parser', 'extended');\n this.set('subdomain offset', 2);\n this.set('trust proxy', false);\n\n // trust proxy inherit back-compat\n Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n configurable: true,\n value: true\n });\n\n debug('booting in %s mode', env);\n\n this.on('mount', function onmount(parent) {\n // inherit trust proxy\n if (this.settings[trustProxyDefaultSymbol] === true\n && typeof parent.settings['trust proxy fn'] === 'function') {\n delete this.settings['trust proxy'];\n delete this.settings['trust proxy fn'];\n }\n\n // inherit protos\n setPrototypeOf(this.request, parent.request)\n setPrototypeOf(this.response, parent.response)\n setPrototypeOf(this.engines, parent.engines)\n setPrototypeOf(this.settings, parent.settings)\n });\n\n // setup locals\n this.locals = Object.create(null);\n\n // top-most app is mounted at /\n this.mountpath = '/';\n\n // default locals\n this.locals.settings = this.settings;\n\n // default configuration\n this.set('view', View);\n this.set('views', resolve('views'));\n this.set('jsonp callback name', 'callback');\n\n if (env === 'production') {\n this.enable('view cache');\n }\n\n Object.defineProperty(this, 'router', {\n get: function() {\n throw new Error('\\'app.router\\' is deprecated!\\nPlease see the 3.x to 4.x migration guide for details on how to update your app.');\n }\n });\n};\n\n/**\n * lazily adds the base router if it has not yet been added.\n *\n * We cannot add the base router in the defaultConfiguration because\n * it reads app settings which might be set after that has run.\n *\n * @private\n */\napp.lazyrouter = function lazyrouter() {\n if (!this._router) {\n this._router = new Router({\n caseSensitive: this.enabled('case sensitive routing'),\n strict: this.enabled('strict routing')\n });\n\n this._router.use(query(this.get('query parser fn')));\n this._router.use(middleware.init(this));\n }\n};\n\n/**\n * Dispatch a req, res pair into the application. Starts pipeline processing.\n *\n * If no callback is provided, then default error handlers will respond\n * in the event of an error bubbling through the stack.\n *\n * @private\n */\n\napp.handle = function handle(req, res, callback) {\n var router = this._router;\n\n // final handler\n var done = callback || finalhandler(req, res, {\n env: this.get('env'),\n onerror: logerror.bind(this)\n });\n\n // no routes\n if (!router) {\n debug('no routes defined on app');\n done();\n return;\n }\n\n router.handle(req, res, done);\n};\n\n/**\n * Proxy `Router#use()` to add middleware to the app router.\n * See Router#use() documentation for details.\n *\n * If the _fn_ parameter is an express app, then it will be\n * mounted at the _route_ specified.\n *\n * @public\n */\n\napp.use = function use(fn) {\n var offset = 0;\n var path = '/';\n\n // default path to '/'\n // disambiguate app.use([fn])\n if (typeof fn !== 'function') {\n var arg = fn;\n\n while (Array.isArray(arg) && arg.length !== 0) {\n arg = arg[0];\n }\n\n // first arg is the path\n if (typeof arg !== 'function') {\n offset = 1;\n path = fn;\n }\n }\n\n var fns = flatten(slice.call(arguments, offset));\n\n if (fns.length === 0) {\n throw new TypeError('app.use() requires a middleware function')\n }\n\n // setup router\n this.lazyrouter();\n var router = this._router;\n\n fns.forEach(function (fn) {\n // non-express app\n if (!fn || !fn.handle || !fn.set) {\n return router.use(path, fn);\n }\n\n debug('.use app under %s', path);\n fn.mountpath = path;\n fn.parent = this;\n\n // restore .app property on req and res\n router.use(path, function mounted_app(req, res, next) {\n var orig = req.app;\n fn.handle(req, res, function (err) {\n setPrototypeOf(req, orig.request)\n setPrototypeOf(res, orig.response)\n next(err);\n });\n });\n\n // mounted an app\n fn.emit('mount', this);\n }, this);\n\n return this;\n};\n\n/**\n * Proxy to the app `Router#route()`\n * Returns a new `Route` instance for the _path_.\n *\n * Routes are isolated middleware stacks for specific paths.\n * See the Route api docs for details.\n *\n * @public\n */\n\napp.route = function route(path) {\n this.lazyrouter();\n return this._router.route(path);\n};\n\n/**\n * Register the given template engine callback `fn`\n * as `ext`.\n *\n * By default will `require()` the engine based on the\n * file extension. For example if you try to render\n * a \"foo.ejs\" file Express will invoke the following internally:\n *\n * app.engine('ejs', require('ejs').__express);\n *\n * For engines that do not provide `.__express` out of the box,\n * or if you wish to \"map\" a different extension to the template engine\n * you may use this method. For example mapping the EJS template engine to\n * \".html\" files:\n *\n * app.engine('html', require('ejs').renderFile);\n *\n * In this case EJS provides a `.renderFile()` method with\n * the same signature that Express expects: `(path, options, callback)`,\n * though note that it aliases this method as `ejs.__express` internally\n * so if you're using \".ejs\" extensions you don't need to do anything.\n *\n * Some template engines do not follow this convention, the\n * [Consolidate.js](https://github.com/tj/consolidate.js)\n * library was created to map all of node's popular template\n * engines to follow this convention, thus allowing them to\n * work seamlessly within Express.\n *\n * @param {String} ext\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.engine = function engine(ext, fn) {\n if (typeof fn !== 'function') {\n throw new Error('callback function required');\n }\n\n // get file extension\n var extension = ext[0] !== '.'\n ? '.' + ext\n : ext;\n\n // store engine\n this.engines[extension] = fn;\n\n return this;\n};\n\n/**\n * Proxy to `Router#param()` with one added api feature. The _name_ parameter\n * can be an array of names.\n *\n * See the Router#param() docs for more details.\n *\n * @param {String|Array} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.param = function param(name, fn) {\n this.lazyrouter();\n\n if (Array.isArray(name)) {\n for (var i = 0; i < name.length; i++) {\n this.param(name[i], fn);\n }\n\n return this;\n }\n\n this._router.param(name, fn);\n\n return this;\n};\n\n/**\n * Assign `setting` to `val`, or return `setting`'s value.\n *\n * app.set('foo', 'bar');\n * app.set('foo');\n * // => \"bar\"\n *\n * Mounted servers inherit their parent server's settings.\n *\n * @param {String} setting\n * @param {*} [val]\n * @return {Server} for chaining\n * @public\n */\n\napp.set = function set(setting, val) {\n if (arguments.length === 1) {\n // app.get(setting)\n var settings = this.settings\n\n while (settings && settings !== Object.prototype) {\n if (hasOwnProperty.call(settings, setting)) {\n return settings[setting]\n }\n\n settings = Object.getPrototypeOf(settings)\n }\n\n return undefined\n }\n\n debug('set \"%s\" to %o', setting, val);\n\n // set value\n this.settings[setting] = val;\n\n // trigger matched settings\n switch (setting) {\n case 'etag':\n this.set('etag fn', compileETag(val));\n break;\n case 'query parser':\n this.set('query parser fn', compileQueryParser(val));\n break;\n case 'trust proxy':\n this.set('trust proxy fn', compileTrust(val));\n\n // trust proxy inherit back-compat\n Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n configurable: true,\n value: false\n });\n\n break;\n }\n\n return this;\n};\n\n/**\n * Return the app's absolute pathname\n * based on the parent(s) that have\n * mounted it.\n *\n * For example if the application was\n * mounted as \"/admin\", which itself\n * was mounted as \"/blog\" then the\n * return value would be \"/blog/admin\".\n *\n * @return {String}\n * @private\n */\n\napp.path = function path() {\n return this.parent\n ? this.parent.path() + this.mountpath\n : '';\n};\n\n/**\n * Check if `setting` is enabled (truthy).\n *\n * app.enabled('foo')\n * // => false\n *\n * app.enable('foo')\n * app.enabled('foo')\n * // => true\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.enabled = function enabled(setting) {\n return Boolean(this.set(setting));\n};\n\n/**\n * Check if `setting` is disabled.\n *\n * app.disabled('foo')\n * // => true\n *\n * app.enable('foo')\n * app.disabled('foo')\n * // => false\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.disabled = function disabled(setting) {\n return !this.set(setting);\n};\n\n/**\n * Enable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.enable = function enable(setting) {\n return this.set(setting, true);\n};\n\n/**\n * Disable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.disable = function disable(setting) {\n return this.set(setting, false);\n};\n\n/**\n * Delegate `.VERB(...)` calls to `router.VERB(...)`.\n */\n\nmethods.forEach(function(method){\n app[method] = function(path){\n if (method === 'get' && arguments.length === 1) {\n // app.get(setting)\n return this.set(path);\n }\n\n this.lazyrouter();\n\n var route = this._router.route(path);\n route[method].apply(route, slice.call(arguments, 1));\n return this;\n };\n});\n\n/**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n *\n * @param {String} path\n * @param {Function} ...\n * @return {app} for chaining\n * @public\n */\n\napp.all = function all(path) {\n this.lazyrouter();\n\n var route = this._router.route(path);\n var args = slice.call(arguments, 1);\n\n for (var i = 0; i < methods.length; i++) {\n route[methods[i]].apply(route, args);\n }\n\n return this;\n};\n\n// del -> delete alias\n\napp.del = deprecate.function(app.delete, 'app.del: Use app.delete instead');\n\n/**\n * Render the given view `name` name with `options`\n * and a callback accepting an error and the\n * rendered template string.\n *\n * Example:\n *\n * app.render('email', { name: 'Tobi' }, function(err, html){\n * // ...\n * })\n *\n * @param {String} name\n * @param {Object|Function} options or fn\n * @param {Function} callback\n * @public\n */\n\napp.render = function render(name, options, callback) {\n var cache = this.cache;\n var done = callback;\n var engines = this.engines;\n var opts = options;\n var renderOptions = {};\n var view;\n\n // support callback function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n // merge app.locals\n merge(renderOptions, this.locals);\n\n // merge options._locals\n if (opts._locals) {\n merge(renderOptions, opts._locals);\n }\n\n // merge options\n merge(renderOptions, opts);\n\n // set .cache unless explicitly provided\n if (renderOptions.cache == null) {\n renderOptions.cache = this.enabled('view cache');\n }\n\n // primed cache\n if (renderOptions.cache) {\n view = cache[name];\n }\n\n // view\n if (!view) {\n var View = this.get('view');\n\n view = new View(name, {\n defaultEngine: this.get('view engine'),\n root: this.get('views'),\n engines: engines\n });\n\n if (!view.path) {\n var dirs = Array.isArray(view.root) && view.root.length > 1\n ? 'directories \"' + view.root.slice(0, -1).join('\", \"') + '\" or \"' + view.root[view.root.length - 1] + '\"'\n : 'directory \"' + view.root + '\"'\n var err = new Error('Failed to lookup view \"' + name + '\" in views ' + dirs);\n err.view = view;\n return done(err);\n }\n\n // prime the cache\n if (renderOptions.cache) {\n cache[name] = view;\n }\n }\n\n // render\n tryRender(view, renderOptions, done);\n};\n\n/**\n * Listen for connections.\n *\n * A node `http.Server` is returned, with this\n * application (which is a `Function`) as its\n * callback. If you wish to create both an HTTP\n * and HTTPS server you may do so with the \"http\"\n * and \"https\" modules as shown here:\n *\n * var http = require('http')\n * , https = require('https')\n * , express = require('express')\n * , app = express();\n *\n * http.createServer(app).listen(80);\n * https.createServer({ ... }, app).listen(443);\n *\n * @return {http.Server}\n * @public\n */\n\napp.listen = function listen() {\n var server = http.createServer(this);\n return server.listen.apply(server, arguments);\n};\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n /* istanbul ignore next */\n if (this.get('env') !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Try rendering a view.\n * @private\n */\n\nfunction tryRender(view, options, callback) {\n try {\n view.render(options, callback);\n } catch (err) {\n callback(err);\n }\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var charset = parseCharset(accepts[i].trim(), i);\n\n if (charset) {\n accepts[j++] = charset;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n var match = simpleCharsetRegExp.exec(str);\n if (!match) return null;\n\n var charset = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n charset: charset,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(charset, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n var s = 0;\n if(spec.charset.toLowerCase() === charset.toLowerCase()){\n s |= 1;\n } else if (spec.charset !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n // RFC 2616 sec 14.2: no header = *\n var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all charsets\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullCharset);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getCharsetPriority(type, accepts, index);\n });\n\n // sorted list of accepted charsets\n return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n var accepts = accept.split(',');\n var hasIdentity = false;\n var minQuality = 1;\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var encoding = parseEncoding(accepts[i].trim(), i);\n\n if (encoding) {\n accepts[j++] = encoding;\n hasIdentity = hasIdentity || specify('identity', encoding);\n minQuality = Math.min(minQuality, encoding.q || 1);\n }\n }\n\n if (!hasIdentity) {\n /*\n * If identity doesn't explicitly appear in the accept-encoding header,\n * it's added to the list of acceptable encoding with the lowest q\n */\n accepts[j++] = {\n encoding: 'identity',\n q: minQuality,\n i: i\n };\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n var match = simpleEncodingRegExp.exec(str);\n if (!match) return null;\n\n var encoding = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';');\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n encoding: encoding,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(encoding, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n var s = 0;\n if(spec.encoding.toLowerCase() === encoding.toLowerCase()){\n s |= 1;\n } else if (spec.encoding !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided) {\n var accepts = parseAcceptEncoding(accept || '');\n\n if (!provided) {\n // sorted list of all encodings\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullEncoding);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getEncodingPriority(type, accepts, index);\n });\n\n // sorted list of accepted encodings\n return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var language = parseLanguage(accepts[i].trim(), i);\n\n if (language) {\n accepts[j++] = language;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n var match = simpleLanguageRegExp.exec(str);\n if (!match) return null;\n\n var prefix = match[1]\n var suffix = match[2]\n var full = prefix\n\n if (suffix) full += \"-\" + suffix;\n\n var q = 1;\n if (match[3]) {\n var params = match[3].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].split('=');\n if (p[0] === 'q') q = parseFloat(p[1]);\n }\n }\n\n return {\n prefix: prefix,\n suffix: suffix,\n q: q,\n i: i,\n full: full\n };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(language, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n var p = parseLanguage(language)\n if (!p) return null;\n var s = 0;\n if(spec.full.toLowerCase() === p.full.toLowerCase()){\n s |= 4;\n } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n s |= 2;\n } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n s |= 1;\n } else if (spec.full !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n // RFC 2616 sec 14.4: no header = *\n var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all languages\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullLanguage);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getLanguagePriority(type, accepts, index);\n });\n\n // sorted list of accepted languages\n return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n var accepts = splitMediaTypes(accept);\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n accepts[j++] = mediaType;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n var match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n var params = Object.create(null);\n var q = 1;\n var subtype = match[2];\n var type = match[1];\n\n if (match[3]) {\n var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (var j = 0; j < kvps.length; j++) {\n var pair = kvps[j];\n var key = pair[0].toLowerCase();\n var val = pair[1];\n\n // get the value, unwrapping quotes\n var value = val && val[0] === '\"' && val[val.length - 1] === '\"'\n ? val.substr(1, val.length - 2)\n : val;\n\n if (key === 'q') {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n var p = parseMediaType(type);\n var s = 0;\n\n if (!p) {\n return null;\n }\n\n if(spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4\n } else if(spec.type != '*') {\n return null;\n }\n\n if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2\n } else if(spec.subtype != '*') {\n return null;\n }\n\n var keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (keys.every(function (k) {\n return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n })) {\n s |= 1\n } else {\n return null\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n }\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n // RFC 2616 sec 14.2: no header = */*\n var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullType);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n var count = 0;\n var index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n var index = str.indexOf('=');\n var key;\n var val;\n\n if (index === -1) {\n key = str;\n } else {\n key = str.substr(0, index);\n val = str.substr(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n var accepts = accept.split(',');\n\n for (var i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(accepts[j]) % 2 == 0) {\n accepts[++j] = accepts[i];\n } else {\n accepts[j] += ',' + accepts[i];\n }\n }\n\n // trim accepts\n accepts.length = j + 1;\n\n return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n var parameters = str.split(';');\n\n for (var i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(parameters[j]) % 2 == 0) {\n parameters[++j] = parameters[i];\n } else {\n parameters[j] += ';' + parameters[i];\n }\n }\n\n // trim parameters\n parameters.length = j + 1;\n\n for (var i = 0; i < parameters.length; i++) {\n parameters[i] = parameters[i].trim();\n }\n\n return parameters;\n}\n", "/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nvar preferredCharsets = require('./lib/charset')\nvar preferredEncodings = require('./lib/encoding')\nvar preferredLanguages = require('./lib/language')\nvar preferredMediaTypes = require('./lib/mediaType')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n if (!(this instanceof Negotiator)) {\n return new Negotiator(request);\n }\n\n this.request = request;\n}\n\nNegotiator.prototype.charset = function charset(available) {\n var set = this.charsets(available);\n return set && set[0];\n};\n\nNegotiator.prototype.charsets = function charsets(available) {\n return preferredCharsets(this.request.headers['accept-charset'], available);\n};\n\nNegotiator.prototype.encoding = function encoding(available) {\n var set = this.encodings(available);\n return set && set[0];\n};\n\nNegotiator.prototype.encodings = function encodings(available) {\n return preferredEncodings(this.request.headers['accept-encoding'], available);\n};\n\nNegotiator.prototype.language = function language(available) {\n var set = this.languages(available);\n return set && set[0];\n};\n\nNegotiator.prototype.languages = function languages(available) {\n return preferredLanguages(this.request.headers['accept-language'], available);\n};\n\nNegotiator.prototype.mediaType = function mediaType(available) {\n var set = this.mediaTypes(available);\n return set && set[0];\n};\n\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;\n", "/*!\n * accepts\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Negotiator = require('negotiator')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts (req) {\n if (!(this instanceof Accepts)) {\n return new Accepts(req)\n }\n\n this.headers = req.headers\n this.negotiator = new Negotiator(req)\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * this.types('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * this.types('html');\n * // => \"html\"\n * this.types('text/html');\n * // => \"text/html\"\n * this.types('json', 'text');\n * // => \"json\"\n * this.types('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * this.types('image/png');\n * this.types('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * this.types(['html', 'json']);\n * this.types('html', 'json');\n * // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type =\nAccepts.prototype.types = function (types_) {\n var types = types_\n\n // support flattened arguments\n if (types && !Array.isArray(types)) {\n types = new Array(arguments.length)\n for (var i = 0; i < types.length; i++) {\n types[i] = arguments[i]\n }\n }\n\n // no types, return all requested types\n if (!types || types.length === 0) {\n return this.negotiator.mediaTypes()\n }\n\n // no accept header, return first given type\n if (!this.headers.accept) {\n return types[0]\n }\n\n var mimes = types.map(extToMime)\n var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))\n var first = accepts[0]\n\n return first\n ? types[mimes.indexOf(first)]\n : false\n}\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n * ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding =\nAccepts.prototype.encodings = function (encodings_) {\n var encodings = encodings_\n\n // support flattened arguments\n if (encodings && !Array.isArray(encodings)) {\n encodings = new Array(arguments.length)\n for (var i = 0; i < encodings.length; i++) {\n encodings[i] = arguments[i]\n }\n }\n\n // no encodings, return all requested encodings\n if (!encodings || encodings.length === 0) {\n return this.negotiator.encodings()\n }\n\n return this.negotiator.encodings(encodings)[0] || false\n}\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n * ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset =\nAccepts.prototype.charsets = function (charsets_) {\n var charsets = charsets_\n\n // support flattened arguments\n if (charsets && !Array.isArray(charsets)) {\n charsets = new Array(arguments.length)\n for (var i = 0; i < charsets.length; i++) {\n charsets[i] = arguments[i]\n }\n }\n\n // no charsets, return all requested charsets\n if (!charsets || charsets.length === 0) {\n return this.negotiator.charsets()\n }\n\n return this.negotiator.charsets(charsets)[0] || false\n}\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n * ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang =\nAccepts.prototype.langs =\nAccepts.prototype.language =\nAccepts.prototype.languages = function (languages_) {\n var languages = languages_\n\n // support flattened arguments\n if (languages && !Array.isArray(languages)) {\n languages = new Array(arguments.length)\n for (var i = 0; i < languages.length; i++) {\n languages[i] = arguments[i]\n }\n }\n\n // no languages, return all requested languages\n if (!languages || languages.length === 0) {\n return this.negotiator.languages()\n }\n\n return this.negotiator.languages(languages)[0] || false\n}\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime (type) {\n return type.indexOf('/') === -1\n ? mime.lookup(type)\n : type\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction validMime (type) {\n return typeof type === 'string'\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar accepts = require('accepts');\nvar deprecate = require('depd')('express');\nvar isIP = require('net').isIP;\nvar typeis = require('type-is');\nvar http = require('http');\nvar fresh = require('fresh');\nvar parseRange = require('range-parser');\nvar parse = require('parseurl');\nvar proxyaddr = require('proxy-addr');\n\n/**\n * Request prototype.\n * @public\n */\n\nvar req = Object.create(http.IncomingMessage.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = req\n\n/**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n *\n * @param {String} name\n * @return {String}\n * @public\n */\n\nreq.get =\nreq.header = function header(name) {\n if (!name) {\n throw new TypeError('name argument is required to req.get');\n }\n\n if (typeof name !== 'string') {\n throw new TypeError('name must be a string to req.get');\n }\n\n var lc = name.toLowerCase();\n\n switch (lc) {\n case 'referer':\n case 'referrer':\n return this.headers.referrer\n || this.headers.referer;\n default:\n return this.headers[lc];\n }\n};\n\n/**\n * To do: update docs.\n *\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single MIME type string\n * such as \"application/json\", an extension name\n * such as \"json\", a comma-delimited list such as \"json, html, text/plain\",\n * an argument list such as `\"json\", \"html\", \"text/plain\"`,\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given, the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"\n * req.accepts('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * req.accepts('image/png');\n * req.accepts('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * req.accepts(['html', 'json']);\n * req.accepts('html', 'json');\n * req.accepts('html, json');\n * // => \"json\"\n *\n * @param {String|Array} type(s)\n * @return {String|Array|Boolean}\n * @public\n */\n\nreq.accepts = function(){\n var accept = accepts(this);\n return accept.types.apply(accept, arguments);\n};\n\n/**\n * Check if the given `encoding`s are accepted.\n *\n * @param {String} ...encoding\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsEncodings = function(){\n var accept = accepts(this);\n return accept.encodings.apply(accept, arguments);\n};\n\nreq.acceptsEncoding = deprecate.function(req.acceptsEncodings,\n 'req.acceptsEncoding: Use acceptsEncodings instead');\n\n/**\n * Check if the given `charset`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...charset\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsCharsets = function(){\n var accept = accepts(this);\n return accept.charsets.apply(accept, arguments);\n};\n\nreq.acceptsCharset = deprecate.function(req.acceptsCharsets,\n 'req.acceptsCharset: Use acceptsCharsets instead');\n\n/**\n * Check if the given `lang`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...lang\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsLanguages = function(){\n var accept = accepts(this);\n return accept.languages.apply(accept, arguments);\n};\n\nreq.acceptsLanguage = deprecate.function(req.acceptsLanguages,\n 'req.acceptsLanguage: Use acceptsLanguages instead');\n\n/**\n * Parse Range header field, capping to the given `size`.\n *\n * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n * the case of a byte range this is of course the total number of bytes. If the\n * Range header field is not given `undefined` is returned, `-1` when unsatisfiable,\n * and `-2` when syntactically invalid.\n *\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n * will be combined into a single range.\n *\n * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n * should respond with 4 users when available, not 3.\n *\n * @param {number} size\n * @param {object} [options]\n * @param {boolean} [options.combine=false]\n * @return {number|array}\n * @public\n */\n\nreq.range = function range(size, options) {\n var range = this.get('Range');\n if (!range) return;\n return parseRange(size, range, options);\n};\n\n/**\n * Return the value of param `name` when present or `defaultValue`.\n *\n * - Checks route placeholders, ex: _/user/:id_\n * - Checks body params, ex: id=12, {\"id\":12}\n * - Checks query string params, ex: ?id=12\n *\n * To utilize request bodies, `req.body`\n * should be an object. This can be done by using\n * the `bodyParser()` middleware.\n *\n * @param {String} name\n * @param {Mixed} [defaultValue]\n * @return {String}\n * @public\n */\n\nreq.param = function param(name, defaultValue) {\n var params = this.params || {};\n var body = this.body || {};\n var query = this.query || {};\n\n var args = arguments.length === 1\n ? 'name'\n : 'name, default';\n deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead');\n\n if (null != params[name] && params.hasOwnProperty(name)) return params[name];\n if (null != body[name]) return body[name];\n if (null != query[name]) return query[name];\n\n return defaultValue;\n};\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains the given mime `type`.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * req.is('html');\n * req.is('text/html');\n * req.is('text/*');\n * // => true\n *\n * // When Content-Type is application/json\n * req.is('json');\n * req.is('application/json');\n * req.is('application/*');\n * // => true\n *\n * req.is('html');\n * // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nreq.is = function is(types) {\n var arr = types;\n\n // support flattened arguments\n if (!Array.isArray(types)) {\n arr = new Array(arguments.length);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = arguments[i];\n }\n }\n\n return typeis(this, arr);\n};\n\n/**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the \"trust proxy\"\n * setting trusts the socket address, the\n * \"X-Forwarded-Proto\" header field will be trusted\n * and used if present.\n *\n * If you're running behind a reverse proxy that\n * supplies https for you this may be enabled.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'protocol', function protocol(){\n var proto = this.connection.encrypted\n ? 'https'\n : 'http';\n var trust = this.app.get('trust proxy fn');\n\n if (!trust(this.connection.remoteAddress, 0)) {\n return proto;\n }\n\n // Note: X-Forwarded-Proto is normally only ever a\n // single value, but this is to be safe.\n var header = this.get('X-Forwarded-Proto') || proto\n var index = header.indexOf(',')\n\n return index !== -1\n ? header.substring(0, index).trim()\n : header.trim()\n});\n\n/**\n * Short-hand for:\n *\n * req.protocol === 'https'\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'secure', function secure(){\n return this.protocol === 'https';\n});\n\n/**\n * Return the remote address from the trusted proxy.\n *\n * The is the remote address on the socket unless\n * \"trust proxy\" is set.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'ip', function ip(){\n var trust = this.app.get('trust proxy fn');\n return proxyaddr(this, trust);\n});\n\n/**\n * When \"trust proxy\" is set, trusted proxy addresses + client.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream and \"proxy1\" and\n * \"proxy2\" were trusted.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'ips', function ips() {\n var trust = this.app.get('trust proxy fn');\n var addrs = proxyaddr.all(this, trust);\n\n // reverse the order (to farthest -> closest)\n // and remove socket address\n addrs.reverse().pop()\n\n return addrs\n});\n\n/**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain of\n * the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting \"subdomain offset\".\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'subdomains', function subdomains() {\n var hostname = this.hostname;\n\n if (!hostname) return [];\n\n var offset = this.app.get('subdomain offset');\n var subdomains = !isIP(hostname)\n ? hostname.split('.').reverse()\n : [hostname];\n\n return subdomains.slice(offset);\n});\n\n/**\n * Short-hand for `url.parse(req.url).pathname`.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'path', function path() {\n return parse(this).pathname;\n});\n\n/**\n * Parse the \"Host\" header field to a hostname.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'hostname', function hostname(){\n var trust = this.app.get('trust proxy fn');\n var host = this.get('X-Forwarded-Host');\n\n if (!host || !trust(this.connection.remoteAddress, 0)) {\n host = this.get('Host');\n } else if (host.indexOf(',') !== -1) {\n // Note: X-Forwarded-Host is normally only ever a\n // single value, but this is to be safe.\n host = host.substring(0, host.indexOf(',')).trimRight()\n }\n\n if (!host) return;\n\n // IPv6 literal support\n var offset = host[0] === '['\n ? host.indexOf(']') + 1\n : 0;\n var index = host.indexOf(':', offset);\n\n return index !== -1\n ? host.substring(0, index)\n : host;\n});\n\n// TODO: change req.host to return host in next major\n\ndefineGetter(req, 'host', deprecate.function(function host(){\n return this.hostname;\n}, 'req.host: Use req.hostname instead'));\n\n/**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'fresh', function(){\n var method = this.method;\n var res = this.res\n var status = res.statusCode\n\n // GET, HEAD, or QUERY for weak freshness validation only\n if ('GET' !== method && 'HEAD' !== method && 'QUERY' !== method) return false;\n\n // 2xx or 304 as per rfc2616 14.26\n if ((status >= 200 && status < 300) || 304 === status) {\n return fresh(this.headers, {\n 'etag': res.get('ETag'),\n 'last-modified': res.get('Last-Modified')\n })\n }\n\n return false;\n});\n\n/**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'stale', function stale(){\n return !this.fresh;\n});\n\n/**\n * Check if the request was an _XMLHttpRequest_.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'xhr', function xhr(){\n var val = this.get('X-Requested-With') || '';\n return val.toLowerCase() === 'xmlhttprequest';\n});\n\n/**\n * Helper function for creating a getter on an object.\n *\n * @param {Object} obj\n * @param {String} name\n * @param {Function} getter\n * @private\n */\nfunction defineGetter(obj, name, getter) {\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: true,\n get: getter\n });\n}\n", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String|NodeJS.ArrayBufferView|crypto.KeyObject} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n if ('string' !== typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n if (null == secret) throw new TypeError(\"Secret key must be provided.\");\n return val + '.' + crypto\n .createHmac('sha256', secret)\n .update(val)\n .digest('base64')\n .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String|NodeJS.ArrayBufferView|crypto.KeyObject} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(val, secret){\n if ('string' !== typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n if (null == secret) throw new TypeError(\"Secret key must be provided.\");\n var str = val.slice(0, val.lastIndexOf('.'))\n , mac = exports.sign(str, secret);\n \n return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str){\n return crypto.createHash('sha1').update(str).digest('hex');\n}\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\nvar __hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n * \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n * \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n * ; US-ASCII characters excluding CTLs,\n * ; whitespace DQUOTE, comma, semicolon,\n * ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value = \n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * =