> For the complete documentation index, see [llms.txt](https://docs.xft.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.xft.finance/bitnet/clearing-and-settlement/etfs/phantom-shares.md).

# Phantom shares

Problem: System allows more ownership claims (entitlements, E) than real shares (S). This inflates phantom supply, suppressing price.

Why:

1. Cash-in-lieu = ETF creation without delivering stock.
2. CNS netting = hides the resulting failure-to-deliver in pooled obligations.
3. Phantom entitlements are treated as "locatable" inventory.
4. Loop repeats using its own IOUs as feedstock.

Result: E > S. The gap (E - S) is phantom supply. Price discovery breaks. Risk accumulates in hidden failures until forced settlement (buy‑in or squeeze).

COUNTERPARTIES

DTC: Holds real shares (static at 100)

AP: Initiates creation, uses cash-in-lieu

ETF: Issues shares, books receivables

NSCC CNS: Netting engine that hides failures

Broker: Credits phantom entitlements to accounts

Market: Where phantom claims circulate

### How It Works

**Setup:** GME has 100 real shares at DTC. All entitlements start matched 1:1.

**The Loop:**

1. **AP needs GME** — wants to create ETF basket requiring 10 GME
2. **Can't locate** — no shares available to borrow/deliver
3. **Pays cash** — $1000 substituted for 10 GME (cash-in-lieu)
4. **ETF created** — fund issues shares, books "GME receivable" (IOU)
5. **Phantom born** — buyer's broker credits 10 GME exposure. Now 110 entitlements, still 100 real shares. Gap = 10 phantom.
6. **CNS nets** — NSCC pools all obligations, anonymizes the fail, resets 13-day clock. Loop repeats.

***

### Flow of Funds (Creation)

```
Buyer $1000 → Broker → Market Maker → AP
                                      ↓
                              Cash-in-lieu $1000 → ETF Custodian
                                      ↓
                              ETF shares ← ETF Issuer (books GME receivable)
                                      ↓
                              ETF shares → MM → Broker → Buyer
                                      ↓
                              Buyer holds claim on GME exposure
                              GME never moved. Phantom created.
```

***

### How Each Factor Contributes

| Mechanism              | Role in Phantom Creation                                                                            |
| ---------------------- | --------------------------------------------------------------------------------------------------- |
| **Cash-in-lieu**       | Decouples creation from delivery. ETF shares minted without underlying.                             |
| **Short selling**      | Each short creates +1 entitlement (buyer) while original holder keeps theirs. E = S + SI.           |
| **CNS netting**        | Pools gross obligations → net. Hides which trade failed. Reduces forced delivery to \~10% of gross. |
| **Derivatives**        | Options MM exception: can naked short to hedge. Married puts reset FTD clocks.                      |
| **OTC/Dark pools**     | 60%+ volume off-exchange. Less transparency. Easier to internalize without delivery.                |
| **Securities lending** | Same share lent multiple times. Phantom entitlements become "locatable" for next short.             |
| **T+1 settlement**     | Rolling window lets obligations persist. New creates stack before old ones settle.                  |

***

### CNS Netting: The Enabler

**Without CNS:**

* Broker A owes 100 shares to Broker B
* Broker B owes 100 shares to Broker A
* **Both must deliver 100 shares each**

**With CNS (90% netting):**

* NSCC nets: 100 - 100 = 0
* **Zero shares physically move**
* Both sides credit entitlements to customers anyway

**Result:** Gross trading volume explodes while physical delivery stays minimal. Entitlements multiply. Phantoms accumulate. The gap between E and S widens until forced buy-in (rare) or squeeze.

***

### The Recursive Force

```
Cash-in-lieu creates phantom
        ↓
Phantom credited as real entitlement
        ↓
Entitlement lendable/locatable
        ↓
Borrowed for next short sale
        ↓
Short sale creates another entitlement
        ↓
Demand triggers more ETF creates
        ↓
More cash-in-lieu → more phantoms
        ↓
        ↺ LOOP
```

**CNS ensures the loop never breaks** by masking delivery failures in a pooled net position.

<details>

<summary>index.html</summary>

{% code expandable="true" %}

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>GME Phantom Shares via ETF Cash-in-Lieu + CNS</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font:11px Arial,sans-serif;background:#f0f0f0;color:#000;padding:8px}
.wrap{max-width:1050px;margin:0 auto;background:#fff;border:1px solid #999;padding:10px}
h1{font-size:12px;background:#333;color:#fff;padding:6px 8px;margin:-10px -10px 10px -10px}
.grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:8px}
.grid2{display:grid;grid-template-columns:2fr 1fr;gap:8px;margin-bottom:8px}
.box{border:1px solid #000;background:#fff}
.box-head{background:#ddd;border-bottom:1px solid #000;padding:4px 6px;font-weight:700;font-size:10px}
.box-body{padding:6px}
.row{display:flex;justify-content:space-between;padding:2px 0;border-bottom:1px solid #eee}
.row:last-child{border-bottom:none}
.row.head{font-weight:700;background:#f5f5f5;padding:4px 0;border-bottom:1px solid #ccc}
.row.total{background:#ffffcc;font-weight:700;border-top:2px solid #000;margin-top:4px;padding-top:4px}
.row.warn span:last-child{color:#c00}
.val{font-weight:700}
.small{font-size:10px;color:#666}
.controls{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:8px;padding:6px;background:#f9f9f9;border:1px solid #ccc}
button{font:11px Arial,sans-serif;padding:5px 12px;border:1px solid #000;background:#fff;cursor:pointer}
button:hover{background:#000;color:#fff}
input{font:11px Arial,sans-serif;width:60px;padding:3px;border:1px solid #999;text-align:right}
label{font-size:10px;display:flex;align-items:center;gap:3px}
.chain{display:flex;align-items:center;justify-content:center;gap:4px;padding:8px;background:#f5f5f5;border:1px solid #ccc;margin-bottom:8px}
.step{padding:4px 8px;border:1px solid #000;font-size:10px;background:#fff}
.step.on{background:#000;color:#fff}
.arrow{font-size:12px}
.meters{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:8px}
.meter{border:1px solid #000;padding:6px;text-align:center;background:#fff}
.meter-lbl{font-size:9px;color:#666;margin-bottom:2px}
.meter-val{font-size:20px;font-weight:700}
.meter-val.warn{color:#c00}
.meter-bar{height:4px;background:#eee;margin-top:4px;border:1px solid #ccc}
.meter-fill{height:100%;background:#000;width:0%;transition:width .2s}
.meter-fill.warn{background:#c00}
.arena{border:1px solid #000;height:140px;position:relative;background:#fafafa;margin-bottom:8px}
.pool{position:absolute;bottom:0;width:100%;display:flex;justify-content:space-around;padding:8px}
.poolbox{border:1px solid #000;background:#fff;width:30%;padding:8px;text-align:center}
.poolbox-lbl{font-size:9px;color:#666}
.poolbox-val{font-size:14px;font-weight:700}
.token{position:absolute;width:14px;height:14px;border:1px solid #000;font-size:9px;display:flex;align-items:center;justify-content:center;transition:all .4s ease-out}
.t-cash{background:#cfc}
.t-ent{background:#ffc;border-style:dashed}
.t-ftd{background:#fcc}
.flow{position:absolute;top:35%;left:50%;transform:translate(-50%,-50%);font-weight:700;font-size:11px;opacity:0;transition:opacity .15s}
.flow.on{opacity:1}
.status{position:absolute;top:6px;left:8px;font-size:10px}
.log{border:1px solid #000;max-height:120px;overflow-y:auto}
.log table{width:100%;border-collapse:collapse;font-size:10px}
.log th,.log td{border:1px solid #ccc;padding:3px 5px}
.log th{background:#ddd;position:sticky;top:0}
.log td{background:#fff}
.log .r{text-align:right}
.formula{font-size:10px;color:#666;padding:6px;background:#f9f9f9;border:1px solid #ccc;margin-top:8px}
.formula b{color:#000}
</style>
</head>
<body>
<div class="wrap">
<h1>GME PHANTOM SHARES — ETF CASH-IN-LIEU + NSCC CNS NETTING</h1>

<div class="controls">
  <button id="stepBtn">Step</button>
  <button id="runBtn">Run</button>
  <button id="stopBtn">Stop</button>
  <button id="resetBtn">Reset</button>
  <label>Basket:<input id="pB" type="number" value="10" min="1"></label>
  <label>Cash$:<input id="pC" type="number" value="1000" min="0"></label>
  <label>Cover%:<input id="pCov" type="number" value="0" min="0" max="100"></label>
  <label>Net%:<input id="pNet" type="number" value="90" min="0" max="100"></label>
  <label>Speed:<input id="pSpd" type="number" value="400" min="50"></label>
  <span class="small">Cycle: <b id="cyc">0</b></span>
</div>

<div class="chain">
  <div class="step" data-i="0">AP needs GME</div><div class="arrow">→</div>
  <div class="step" data-i="1">Can't locate</div><div class="arrow">→</div>
  <div class="step" data-i="2">Pays cash</div><div class="arrow">→</div>
  <div class="step" data-i="3">ETF created</div><div class="arrow">→</div>
  <div class="step" data-i="4">Phantom born</div><div class="arrow">→</div>
  <div class="step" data-i="5">CNS nets</div><div class="arrow">↺</div>
</div>

<div class="meters">
  <div class="meter"><div class="meter-lbl">REAL SHARES (S)</div><div class="meter-val" id="mS">100</div><div class="meter-bar"><div class="meter-fill" id="bS"></div></div></div>
  <div class="meter"><div class="meter-lbl">ENTITLEMENTS (E)</div><div class="meter-val" id="mE">100</div><div class="meter-bar"><div class="meter-fill" id="bE"></div></div></div>
  <div class="meter"><div class="meter-lbl">PHANTOM (E-S)</div><div class="meter-val warn" id="mP">0</div><div class="meter-bar"><div class="meter-fill warn" id="bP"></div></div></div>
  <div class="meter"><div class="meter-lbl">RECEIVABLE</div><div class="meter-val warn" id="mR">0</div><div class="meter-bar"><div class="meter-fill warn" id="bR"></div></div></div>
  <div class="meter"><div class="meter-lbl">CNS NET DELIV</div><div class="meter-val" id="mN">0</div><div class="meter-bar"><div class="meter-fill" id="bN"></div></div></div>
</div>

<div class="grid2">
  <div class="arena" id="arena">
    <div class="status" id="status">Ready</div>
    <div class="flow" id="flow"></div>
    <div class="pool">
      <div class="poolbox"><div class="poolbox-lbl">DTC VAULT</div><div class="poolbox-val"><span id="pDtc">100</span> real</div></div>
      <div class="poolbox"><div class="poolbox-lbl">CNS POOL</div><div class="poolbox-val"><span id="pCns">0</span> receivable</div></div>
      <div class="poolbox"><div class="poolbox-lbl">MARKET</div><div class="poolbox-val"><span id="pMkt">100</span> claims</div></div>
    </div>
  </div>
  <div class="log" id="logWrap">
    <table><thead><tr><th>t</th><th>Action</th><th class="r">ΔE</th><th class="r">ΔR</th><th class="r">Net</th></tr></thead><tbody id="log"></tbody></table>
  </div>
</div>

<div class="grid">
  <div class="box">
    <div class="box-head">A. SHARES OUTSTANDING</div>
    <div class="box-body">
      <div class="row"><span>GME Issued (S)</span><span class="val" id="aS">100</span></div>
      <div class="row"><span>Held at DTC</span><span class="val" id="aDtc">100</span></div>
      <div class="row"><span>Entitlements (E)</span><span class="val" id="aE">100</span></div>
      <div class="row"><span>— Real-backed</span><span id="aReal">100</span></div>
      <div class="row warn"><span>— Phantom</span><span id="aPhantom">0</span></div>
      <div class="row total"><span>Overage %</span><span id="aOver">0%</span></div>
    </div>
  </div>
  <div class="box">
    <div class="box-head">B. NSCC CNS LEDGER</div>
    <div class="box-body">
      <div class="row"><span>Gross Receivable</span><span class="val" id="bGross">0</span></div>
      <div class="row"><span>Netting Factor</span><span id="bNetF">90%</span></div>
      <div class="row"><span>Net Required Delivery</span><span class="val" id="bNet">0</span></div>
      <div class="row"><span>Cash Collateral</span><span id="bCash">$0</span></div>
      <div class="row total warn"><span>Hidden FTDs</span><span id="bFtd">0</span></div>
    </div>
  </div>
  <div class="box">
    <div class="box-head">C. ETF FUND BALANCE</div>
    <div class="box-body">
      <div class="row"><span>GME Shares Held</span><span id="cHeld">0</span></div>
      <div class="row"><span>GME Receivable</span><span class="val" id="cRecv">0</span></div>
      <div class="row"><span>Cash-in-Lieu</span><span id="cCash">$0</span></div>
      <div class="row"><span>Baskets Created</span><span id="cBask">0</span></div>
      <div class="row total"><span>NAV Exposure</span><span id="cNav">0</span></div>
    </div>
  </div>
</div>

<div class="grid">
  <div class="box">
    <div class="box-head">D. MARKET BALANCE</div>
    <div class="box-body">
      <div class="row"><span>Assets (Real S)</span><span id="dAsset">100</span></div>
      <div class="row"><span>Liabilities (E)</span><span id="dLiab">100</span></div>
      <div class="row warn"><span>Unmatched Claims</span><span id="dUnmatch">0</span></div>
      <div class="row total"><span>Integrity Gap</span><span id="dGap">0%</span></div>
    </div>
  </div>
  <div class="box">
    <div class="box-head">E. CORE PARTIES</div>
    <div class="box-body small">
      <div class="row"><span>DTC</span><span>Depository (real shares)</span></div>
      <div class="row"><span>NSCC CNS</span><span>Nets settlements</span></div>
      <div class="row"><span>AP</span><span>Creates/redeems ETF</span></div>
      <div class="row"><span>ETF Issuer</span><span>Issues shares, books recv</span></div>
      <div class="row"><span>MM/Broker</span><span>Routes orders, lends</span></div>
    </div>
  </div>
  <div class="box">
    <div class="box-head">F. CORE DATA</div>
    <div class="box-body small">
      <div class="row"><span>S (Shares Outstanding)</span><span>Fixed real supply</span></div>
      <div class="row"><span>E (Entitlements)</span><span>S + Short Interest</span></div>
      <div class="row"><span>SI (Short Interest)</span><span>Borrowed claims</span></div>
      <div class="row"><span>Phantom = E - S</span><span>Excess claims</span></div>
      <div class="row"><span>FTD/Receivable</span><span>Undelivered stock</span></div>
    </div>
  </div>
</div>

<div class="formula">
  <b>RECURSION:</b> Cash-in-lieu → E<sub>t+1</sub> = E<sub>t</sub> + Basket (S unchanged) → Phantom grows → 
  Claims lendable → More shorts → More creates → <b>Loop ↺</b><br>
  <b>CNS MASK:</b> Net = Gross × (1 - NetFactor) — Netting hides gross obligations, reducing forced delivery
</div>

</div>

<script>
const $=id=>document.getElementById(id);
const arena=$('arena');
let S={s:100,e:100,r:0,cash:0,bask:0,t:0,tick:0,busy:false,run:false};
let timer=null;

function P(){
  return{
    b:Math.max(1,+$('pB').value||10),
    c:Math.max(0,+$('pC').value||1000),
    cov:Math.max(0,Math.min(100,+$('pCov').value||0)),
    net:Math.max(0,Math.min(100,+$('pNet').value||90)),
    spd:Math.max(50,+$('pSpd').value||400)
  };
}

function chain(i){
  document.querySelectorAll('.step').forEach(s=>s.classList.remove('on'));
  const el=document.querySelector('.step[data-i="'+i+'"]');
  if(el)el.classList.add('on');
}

function flash(t){
  const f=$('flow');f.textContent=t;f.classList.add('on');
  setTimeout(()=>f.classList.remove('on'),200);
}

function tok(cls,ch,x,y){
  const d=document.createElement('div');
  d.className='token '+cls;d.textContent=ch;
  d.style.left=x+'px';d.style.top=y+'px';
  arena.appendChild(d);return d;
}

function mv(d,x,y){
  return new Promise(r=>{
    setTimeout(()=>{d.style.left=x+'px';d.style.top=y+'px'},10);
    setTimeout(r,420);
  });
}

function rm(d){d.style.opacity='0';setTimeout(()=>d.remove(),200)}

function log(a,dE,dR,net){
  const tr=document.createElement('tr');
  tr.innerHTML=`<td>${S.t}</td><td>${a}</td><td class="r">${dE>=0?'+':''}${dE}</td><td class="r">${dR>=0?'+':''}${dR}</td><td class="r">${net}</td>`;
  $('log').prepend(tr);
}

function calcNet(){
  const{net}=P();
  return Math.round(S.r*(1-net/100));
}

function upd(){
  const p=Math.max(0,S.e-S.s);
  const n=calcNet();
  const{net}=P();

  $('cyc').textContent=Math.floor(S.tick/6);
  $('mS').textContent=S.s;
  $('mE').textContent=S.e;
  $('mP').textContent=p;
  $('mR').textContent=S.r;
  $('mN').textContent=n;

  $('bS').style.width='100%';
  $('bE').style.width=Math.min(100,S.e/S.s*50)+'%';
  $('bP').style.width=Math.min(100,p/S.s*100)+'%';
  $('bR').style.width=Math.min(100,S.r/S.s*100)+'%';
  $('bN').style.width=Math.min(100,n/S.s*100)+'%';

  $('pDtc').textContent=S.s;
  $('pCns').textContent=S.r;
  $('pMkt').textContent=S.e;

  // A
  $('aS').textContent=S.s;
  $('aDtc').textContent=S.s;
  $('aE').textContent=S.e;
  $('aReal').textContent=S.s;
  $('aPhantom').textContent=p;
  $('aOver').textContent=Math.round((S.e-S.s)/S.s*100)+'%';

  // B
  $('bGross').textContent=S.r;
  $('bNetF').textContent=net+'%';
  $('bNet').textContent=n;
  $('bCash').textContent='$'+S.cash;
  $('bFtd').textContent=S.r;

  // C
  $('cHeld').textContent=0;
  $('cRecv').textContent=S.r;
  $('cCash').textContent='$'+S.cash;
  $('cBask').textContent=S.bask;
  $('cNav').textContent=S.r;

  // D
  $('dAsset').textContent=S.s;
  $('dLiab').textContent=S.e;
  $('dUnmatch').textContent=p;
  $('dGap').textContent=Math.round(p/S.s*100)+'%';
}

async function step(){
  if(S.busy)return;
  S.busy=true;
  const{b,c,cov}=P();
  const i=S.tick%6;
  chain(i);

  if(i===0){
    $('status').textContent='AP needs '+b+' GME for basket';
    flash('NEED GME');
    log('AP initiates create',0,0,calcNet());
  }
  if(i===1){
    $('status').textContent='Locate fails — GME unavailable';
    flash('LOCATE FAIL');
    log('Cannot locate GME',0,0,calcNet());
  }
  if(i===2){
    $('status').textContent='AP pays $'+c+' cash-in-lieu';
    flash('$'+c+' CASH');
    const t=tok('t-cash','$',420,15);
    await mv(t,420,70);rm(t);
    S.cash+=c;
    log('Cash-in-lieu delivered',0,0,calcNet());
  }
  if(i===3){
    $('status').textContent='ETF created — books GME receivable';
    flash('ETF ISSUED');
    S.bask++;
    log('ETF shares issued',0,0,calcNet());
  }
  if(i===4){
    $('status').textContent='+'+b+' phantom entitlements';
    flash('+'+b+' PHANTOM');
    S.e+=b;S.r+=b;
    for(let k=0;k<Math.min(4,b);k++){
      const t=tok('t-ent','?',380+k*20,15);
      mv(t,500+k*18,70).then(()=>setTimeout(()=>rm(t),600));
    }
    log('Entitlements created',b,b,calcNet());
  }
  if(i===5){
    const covered=Math.round(S.r*cov/100);
    S.r=Math.max(0,S.r-covered);
    $('status').textContent='CNS nets — cover '+cov+'%';
    flash('CNS NETS');
    log('CNS netting cycle',0,-covered,calcNet());
  }

  S.t++;S.tick++;
  upd();
  S.busy=false;
}

async function loop(){
  if(!S.run)return;
  await step();
  timer=setTimeout(loop,P().spd);
}

function run(){if(S.run)return;S.run=true;loop()}
function stop(){S.run=false;clearTimeout(timer)}
function reset(){
  stop();
  S={s:100,e:100,r:0,cash:0,bask:0,t:0,tick:0,busy:false,run:false};
  $('log').innerHTML='';
  $('status').textContent='Ready';
  chain(-1);upd();
}

$('stepBtn').onclick=step;
$('runBtn').onclick=run;
$('stopBtn').onclick=stop;
$('resetBtn').onclick=reset;
upd();
</script>
</body>
</html>
```

{% endcode %}

v1

</details>

<details>

<summary>simple</summary>

{% code expandable="true" %}

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>GME Phantom Claims (Cash-in-Lieu + CNS)</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font:12px Arial,Helvetica,sans-serif;background:#f4f4f4;color:#000;padding:10px}
.wrap{max-width:900px;margin:0 auto;background:#fff;border:2px solid #000}
.hdr{background:#000;color:#fff;padding:10px 12px;font-weight:700}
.main{padding:10px 12px}
.controls{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:8px;background:#f0f0f0;border:1px solid #000;margin-bottom:10px}
button,input{font:12px Arial,Helvetica,sans-serif;border:1px solid #000;background:#fff;padding:6px 10px}
button:hover{background:#000;color:#fff}
input{width:80px;text-align:right}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px}
.kpi{border:1px solid #000}
.kpi .t{background:#e9e9e9;border-bottom:1px solid #000;padding:6px 8px;font-size:11px;font-weight:700}
.kpi .v{padding:10px 8px;font-size:22px;font-weight:700;text-align:center}
.kpi .v.bad{background:#fff0f0;color:#c00}
.panel{border:1px solid #000;margin-bottom:10px}
.panel .t{background:#000;color:#fff;padding:6px 8px;font-size:11px;font-weight:700}
.panel .b{padding:8px}
.flow{font-size:11px;line-height:1.4}
.flow .line{padding:3px 0;border-top:1px solid #eee}
.flow .line:first-child{border-top:none}
.note{background:#fffbe6;border:1px solid #000;padding:8px;font-size:11px;line-height:1.35}
.log{border:1px solid #000;max-height:160px;overflow:auto}
table{width:100%;border-collapse:collapse;font-size:11px}
th,td{border:1px solid #ccc;padding:4px 6px}
th{background:#eee;position:sticky;top:0;text-align:left}
td.r{text-align:right}
.bad{color:#c00;font-weight:700}
.small{font-size:11px;color:#333}
</style>
</head>
<body>
<div class="wrap">
  <div class="hdr">GME PHANTOM CLAIMS — ETF CASH-IN-LIEU + CNS NETTING</div>
  <div class="main">

    <div class="controls">
      <button id="stepBtn">Step</button>
      <button id="runBtn">Run</button>
      <button id="stopBtn">Stop</button>
      <button id="resetBtn">Reset</button>
      <span class="small">Basket GME</span><input id="pB" type="number" value="10" min="1">
      <span class="small">Cash $</span><input id="pC" type="number" value="1000" min="0">
      <span class="small">CNS net %</span><input id="pNet" type="number" value="90" min="0" max="100">
      <span class="small">Cycle</span><span id="cyc" class="small" style="font-weight:700">0</span>
    </div>

    <div class="kpis">
      <div class="kpi"><div class="t">REAL SHARES (S)</div><div class="v" id="kS">100</div></div>
      <div class="kpi"><div class="t">TOTAL CLAIMS (E)</div><div class="v" id="kE">100</div></div>
      <div class="kpi"><div class="t">ETF IOU (RECEIVABLE)</div><div class="v bad" id="kR">0</div></div>
      <div class="kpi"><div class="t">PHANTOM (E − S)</div><div class="v bad" id="kP">0</div></div>
    </div>

    <div class="panel">
      <div class="t">FLOW OF FUNDS (CREATION)</div>
      <div class="b flow">
        <div class="line"><b>1)</b> Buyer → Broker → MM/AP (cash)</div>
        <div class="line"><b>2)</b> AP pays <span id="cashLbl" class="bad">$1000</span> cash-in-lieu → ETF Custodian</div>
        <div class="line"><b>3)</b> ETF Issuer mints ETF shares → AP/MM → Broker → Buyer</div>
        <div class="line"><b>Missing:</b> AP does <span class="bad">not</span> deliver GME; ETF books “<span id="iouLbl" class="bad">10 GME IOU</span>”</div>
      </div>
    </div>

    <div class="note" id="status">Ready.</div>

    <div class="log" style="margin-top:10px">
      <table>
        <thead><tr><th>t</th><th>Action</th><th class="r">ΔClaims</th><th class="r">ΔIOU</th><th class="r">CNS net due</th></tr></thead>
        <tbody id="log"></tbody>
      </table>
    </div>

  </div>
</div>

<script>
const $=id=>document.getElementById(id);

let st={ S:100, E:100, R:0, t:0, phase:0, run:false, timer:null };

function P(){
  return{
    b:Math.max(1, +$('pB').value||10),
    c:Math.max(0, +$('pC').value||1000),
    net:Math.max(0, Math.min(100, +$('pNet').value||90))
  };
}

function netDue(){
  const { net } = P();
  return Math.round(st.R * (1 - net/100));
}

function logRow(action,dE,dR,net){
  const tr=document.createElement('tr');
  tr.innerHTML=`<td>${st.t}</td><td>${action}</td><td class="r">${dE>=0?'+':''}${dE}</td><td class="r">${dR>=0?'+':''}${dR}</td><td class="r">${net}</td>`;
  $('log').prepend(tr);
}

function upd(){
  const { b,c } = P();
  const phantom=Math.max(0, st.E - st.S);

  $('kS').textContent=st.S;
  $('kE').textContent=st.E;
  $('kR').textContent=st.R;
  $('kP').textContent=phantom;

  $('cashLbl').textContent='$'+c;
  $('iouLbl').textContent=b+' GME IOU';
  $('cyc').textContent=Math.floor(st.t/4);
}

function step(){
  const { b,c,net } = P();
  const i = st.phase % 4;

  if(i===0){
    $('status').textContent=`AP needs ${b} GME for ETF creation; can't locate/deliver.`;
    logRow('Need GME (no locate)',0,0,netDue());
  }
  if(i===1){
    $('status').textContent=`AP pays $${c} cash-in-lieu; creation continues anyway.`;
    logRow('Cash-in-lieu paid',0,0,netDue());
  }
  if(i===2){
    st.E += b;
    st.R += b;
    $('status').textContent=`ETF mints shares; ETF now has a ${b} GME IOU; market claims +${b}.`;
    logRow('Mint vs IOU',b,b,netDue());
  }
  if(i===3){
    const nd = netDue();
    $('status').textContent=`CNS nets trades. Net shares due now ≈ ${nd} (netting % = ${net}%).`;
    logRow('CNS netting',0,0,nd);
  }

  st.t++;
  st.phase++;
  upd();
}

function run(){
  if(st.run) return;
  st.run=true;
  (function loop(){
    if(!st.run) return;
    step();
    st.timer=setTimeout(loop,450);
  })();
}

function stop(){ st.run=false; clearTimeout(st.timer); }

function reset(){
  stop();
  st={ S:100, E:100, R:0, t:0, phase:0, run:false, timer:null };
  $('log').innerHTML='';
  $('status').textContent='Ready.';
  upd();
}

$('stepBtn').onclick=step;
$('runBtn').onclick=run;
$('stopBtn').onclick=stop;
$('resetBtn').onclick=reset;

upd();
</script>
</body>
</html>

```

{% endcode %}

</details>

<details>

<summary>simple</summary>

{% code expandable="true" %}

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>GME Phantom Claims (Cash-in-Lieu + CNS)</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font:12px Arial,Helvetica,sans-serif;background:#f4f4f4;color:#000;padding:10px}
.wrap{max-width:900px;margin:0 auto;background:#fff;border:2px solid #000}
.hdr{background:#000;color:#fff;padding:10px 12px;font-weight:700}
.main{padding:10px 12px}
.controls{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:8px;background:#f0f0f0;border:1px solid #000;margin-bottom:10px}
button,input{font:12px Arial,Helvetica,sans-serif;border:1px solid #000;background:#fff;padding:6px 10px}
button:hover{background:#000;color:#fff}
input{width:80px;text-align:right}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px}
.kpi{border:1px solid #000}
.kpi .t{background:#e9e9e9;border-bottom:1px solid #000;padding:6px 8px;font-size:11px;font-weight:700}
.kpi .v{padding:10px 8px;font-size:22px;font-weight:700;text-align:center}
.kpi .v.bad{background:#fff0f0;color:#c00}
.panel{border:1px solid #000;margin-bottom:10px}
.panel .t{background:#000;color:#fff;padding:6px 8px;font-size:11px;font-weight:700}
.panel .b{padding:8px}
.flow{font-size:11px;line-height:1.4}
.flow .line{padding:3px 0;border-top:1px solid #eee}
.flow .line:first-child{border-top:none}
.note{background:#fffbe6;border:1px solid #000;padding:8px;font-size:11px;line-height:1.35}
.log{border:1px solid #000;max-height:160px;overflow:auto}
table{width:100%;border-collapse:collapse;font-size:11px}
th,td{border:1px solid #ccc;padding:4px 6px}
th{background:#eee;position:sticky;top:0;text-align:left}
td.r{text-align:right}
.bad{color:#c00;font-weight:700}
.small{font-size:11px;color:#333}
</style>
</head>
<body>
<div class="wrap">
  <div class="hdr">GME PHANTOM CLAIMS — ETF CASH-IN-LIEU + CNS NETTING</div>
  <div class="main">

    <div class="controls">
      <button id="stepBtn">Step</button>
      <button id="runBtn">Run</button>
      <button id="stopBtn">Stop</button>
      <button id="resetBtn">Reset</button>
      <span class="small">Basket GME</span><input id="pB" type="number" value="10" min="1">
      <span class="small">Cash $</span><input id="pC" type="number" value="1000" min="0">
      <span class="small">CNS net %</span><input id="pNet" type="number" value="90" min="0" max="100">
      <span class="small">Cycle</span><span id="cyc" class="small" style="font-weight:700">0</span>
    </div>

    <div class="kpis">
      <div class="kpi"><div class="t">REAL SHARES (S)</div><div class="v" id="kS">100</div></div>
      <div class="kpi"><div class="t">TOTAL CLAIMS (E)</div><div class="v" id="kE">100</div></div>
      <div class="kpi"><div class="t">ETF IOU (RECEIVABLE)</div><div class="v bad" id="kR">0</div></div>
      <div class="kpi"><div class="t">PHANTOM (E − S)</div><div class="v bad" id="kP">0</div></div>
    </div>

    <div class="panel">
      <div class="t">FLOW OF FUNDS (CREATION)</div>
      <div class="b flow">
        <div class="line"><b>1)</b> Buyer → Broker → MM/AP (cash)</div>
        <div class="line"><b>2)</b> AP pays <span id="cashLbl" class="bad">$1000</span> cash-in-lieu → ETF Custodian</div>
        <div class="line"><b>3)</b> ETF Issuer mints ETF shares → AP/MM → Broker → Buyer</div>
        <div class="line"><b>Missing:</b> AP does <span class="bad">not</span> deliver GME; ETF books “<span id="iouLbl" class="bad">10 GME IOU</span>”</div>
      </div>
    </div>

    <div class="note" id="status">Ready.</div>

    <div class="log" style="margin-top:10px">
      <table>
        <thead><tr><th>t</th><th>Action</th><th class="r">ΔClaims</th><th class="r">ΔIOU</th><th class="r">CNS net due</th></tr></thead>
        <tbody id="log"></tbody>
      </table>
    </div>

  </div>
</div>

<script>
const $=id=>document.getElementById(id);

let st={ S:100, E:100, R:0, t:0, phase:0, run:false, timer:null };

function P(){
  return{
    b:Math.max(1, +$('pB').value||10),
    c:Math.max(0, +$('pC').value||1000),
    net:Math.max(0, Math.min(100, +$('pNet').value||90))
  };
}

function netDue(){
  const { net } = P();
  return Math.round(st.R * (1 - net/100));
}

function logRow(action,dE,dR,net){
  const tr=document.createElement('tr');
  tr.innerHTML=`<td>${st.t}</td><td>${action}</td><td class="r">${dE>=0?'+':''}${dE}</td><td class="r">${dR>=0?'+':''}${dR}</td><td class="r">${net}</td>`;
  $('log').prepend(tr);
}

function upd(){
  const { b,c } = P();
  const phantom=Math.max(0, st.E - st.S);

  $('kS').textContent=st.S;
  $('kE').textContent=st.E;
  $('kR').textContent=st.R;
  $('kP').textContent=phantom;

  $('cashLbl').textContent='$'+c;
  $('iouLbl').textContent=b+' GME IOU';
  $('cyc').textContent=Math.floor(st.t/4);
}

function step(){
  const { b,c,net } = P();
  const i = st.phase % 4;

  if(i===0){
    $('status').textContent=`AP needs ${b} GME for ETF creation; can't locate/deliver.`;
    logRow('Need GME (no locate)',0,0,netDue());
  }
  if(i===1){
    $('status').textContent=`AP pays $${c} cash-in-lieu; creation continues anyway.`;
    logRow('Cash-in-lieu paid',0,0,netDue());
  }
  if(i===2){
    st.E += b;
    st.R += b;
    $('status').textContent=`ETF mints shares; ETF now has a ${b} GME IOU; market claims +${b}.`;
    logRow('Mint vs IOU',b,b,netDue());
  }
  if(i===3){
    const nd = netDue();
    $('status').textContent=`CNS nets trades. Net shares due now ≈ ${nd} (netting % = ${net}%).`;
    logRow('CNS netting',0,0,nd);
  }

  st.t++;
  st.phase++;
  upd();
}

function run(){
  if(st.run) return;
  st.run=true;
  (function loop(){
    if(!st.run) return;
    step();
    st.timer=setTimeout(loop,450);
  })();
}

function stop(){ st.run=false; clearTimeout(st.timer); }

function reset(){
  stop();
  st={ S:100, E:100, R:0, t:0, phase:0, run:false, timer:null };
  $('log').innerHTML='';
  $('status').textContent='Ready.';
  upd();
}

$('stepBtn').onclick=step;
$('runBtn').onclick=run;
$('stopBtn').onclick=stop;
$('resetBtn').onclick=reset;

upd();
</script>
</body>
</html>

```

{% endcode %}

</details>
