\n \n
\n {{ name }}\n {{ size }}\n
\n';function v(t){const e=t.attachments.filter((t=>t.content)).map((t=>{const e=new Blob([t.content],{type:"application/octet-stream"}),n={name:t.displayName,size:T(t.content.byteLength).toString(),url:URL.createObjectURL(e)};return X(d,n)})),n=document.createDocumentFragment();return n.append(...e),n}var S='';function h(t,e){const n=t.attachments.filter((t=>t.embeddedMsgObj)).map((t=>{const n={name:t.displayName},i=X(S,n);return i.children[0].addEventListener("click",(()=>e(t.embeddedMsgObj))),i})),i=document.createDocumentFragment();return i.append(...n),i}var w="{{ name }} {{ email }}; ";function c(t){const e=P(t.content.toRecipients),n=P(t.content.ccRecipients),i=[],r=[];for(let s of t.recipients)e.has(s.name)?i.push(s):n.has(s.name)&&r.push(s);return[g(i),g(r)]}function g(t){const e=t.map((t=>{const e={name:t.name,email:t.email?`<${t.email}>`:""};return X(w,e)})),n=document.createDocumentFragment();return n.append(...e),n}function P(t){return t?new Set(t.endsWith("\0")?t.slice(0,-1).split("; "):t.split("; ")):new Set}var m='';function l(t,e){const[n,i]=c(t),r={title:t.content.subject,name:w0(t.content),date:g0(t.content),rawContent:t.content.body},s=X(m,r);return _(s,".msg-attachs",v(t),!1),_(s,".msg-embedded-msgs",h(t,e),!0),_(s,".msg-recip-to",n,!1),_(s,".msg-recip-cc",i,!1),s.querySelector(".msg-close-btn")?.addEventListener("click",(t=>{const e=t.currentTarget.closest(".msg"),n=e.parentElement;e.remove();const i=n.lastChild;i&&i.classList.remove("hidden")})),s}function _(t,e,n,i){const r=t.querySelector(e);r&&(0===n.children.length&&i?r.parentElement?.remove():r.replaceChildren(n))}function w0(t){let e=t.senderName??"";return t.senderEmail&&(e+=` <${t.senderEmail}>`),e}function g0(t){return t.date?.toLocaleString("en-US",{weekday:"short",month:"2-digit",day:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:"UTC",timeZoneName:"short"})??""}var y='{{ error }}';function n(t){return X(y,{error:t})}function Y(t,e){return(t+1)*e}function C(t,e,n,i){let r=Y(t,e.sectorSize);if(n=this.entries.length)return null;const i=this.entries[e];if(!i)return null;const r=this.compareName(t,i.entryName);if(r<0){const e=this.get(t,i.leftSiblingId,n);if(e)return e}else{if(!(r>0))return i;{const e=this.get(t,i.rightSiblingId,n);if(e)return e}}return n?this.get(t,i.childId,n):null}static getMiniStreamLocations(t,e){const n=[];for(;t<4294967294;)n.push(t),t=e[t];return n}static directoryEntry(t,e){const n=t.getUint16(e+64,!0),i=n>0?V.decode(new DataView(t.buffer,e,n-2)):"";e+=66;const r=t.getUint8(e);e+=1;const s=t.getUint8(e);e+=1;const a=t.getUint32(e,!0);e+=4;const o=t.getUint32(e,!0);e+=4;const c=t.getUint32(e,!0);e+=4;e+=16;const d=t.getUint32(e,!0);e+=4;const m=t.getBigUint64(e,!0);e+=8;const l=t.getBigUint64(e,!0);e+=8;const u=t.getUint32(e,!0);e+=4;const g=t.getBigUint64(e,!0);return e+=8,{entryName:i,entryNameLength:n,objectType:r,colorFlag:s,leftSiblingId:a,rightSiblingId:o,childId:c,clsid:"",stateBits:d,creationTime:m,modifiedTime:l,startingSectorLocation:u,streamSize:g}}print(){this.traverse(((t,e)=>console.log("\t".repeat(e),t.entryName)))}traverse(t){this.traverseFromRoot(0,0,t)}traverseFromRoot(t,e,n){if(t<0||t>=this.entries.length)return;const i=this.entries[t];i&&(this.traverseFromRoot(i.leftSiblingId,e,n),this.traverseFromRoot(i.rightSiblingId,e,n),n(i,e),this.traverseFromRoot(i.childId,e+1,n))}compareName(t,e){return t.lengthe.length?1:t.toUpperCase().localeCompare(e.toUpperCase())}}function p(t,e,n){const i=k(e),r=[];for(let s=0;s=4294967294)return;let s=this.header.sectorSize,a=this.fat;t.streamSize0;){if(o-c>=s){if(r=a[r],r>=4294967294)break;o=C(r,this.header,t.streamSize,this.directory.miniStreamLocations),c=o}let i=Math.min(n,Number(m));e(o,i),m-=BigInt(i),o+=i}}toString(){const t={header:this.header,difat:this.difat,fat:this.fat,miniFat:this.miniFat,directory:this.directory};return JSON.stringify(t,((t,e)=>"bigint"==typeof e?e.toString():e),"\t")}}var o={id:2,name:"PtypInteger16",size:2,multi:!1},i={id:3,name:"PtypInteger32",size:4,multi:!1},f={id:4,name:"PtypFloating32",size:4,multi:!1},t={id:5,name:"PtypFloating64",size:8,multi:!1},e={id:11,name:"PtypBoolean",size:1,multi:!1},x0={id:6,name:"PtypCurrency",size:8,multi:!1},Z0={id:7,name:"PtypFloatingTime",size:8,multi:!1},E={id:64,name:"PtypTime",size:8,multi:!1},B0={id:20,name:"PtypInteger64",size:8,multi:!1},q0={id:10,name:"PtypErrorCode",size:4,multi:!1},W={id:31,name:"PtypString",multi:!1},H0={id:30,name:"PtypString8",multi:!1},U={id:258,name:"PtypBinary",multi:!1},J0={id:72,name:"PtypGuid",size:16,multi:!1},z={id:13,name:"PtypObject",multi:!1},K0={id:4098,name:"PtypMultipleInteger16",size:2,multi:!0},L0={id:4099,name:"PtypMultipleInteger32",size:4,multi:!0},W0={id:4100,name:"PtypMultipleFloating32",size:4,multi:!0},Q0={id:4101,name:"PtypMultipleFloating64",size:8,multi:!0},$0={id:4102,name:"PtypMultipleCurrency",size:8,multi:!0},X0={id:4103,name:"PtypMultipleFloatingTime",size:8,multi:!0},Y0={id:4160,name:"PtypMultipleTime",size:8,multi:!0},D0={id:4168,name:"PtypMultipleGuid",size:16,multi:!0},G0={id:4116,name:"PtypMultipleInteger64",size:8,multi:!0},U0={id:4354,name:"PtypMultipleBinary",multi:!0},E0={id:4126,name:"PtypMultipleString8",multi:!0},z0={id:4127,name:"PtypMultipleString",multi:!0},_0={[o.id]:o,[i.id]:i,[f.id]:f,[t.id]:t,[e.id]:e,[x0.id]:x0,[Z0.id]:Z0,[E.id]:E,[B0.id]:B0,[q0.id]:q0,[W.id]:W,[H0.id]:H0,[U.id]:U,[J0.id]:J0,[z.id]:z,[K0.id]:K0,[L0.id]:L0,[W0.id]:W0,[Q0.id]:Q0,[$0.id]:$0,[X0.id]:X0,[Y0.id]:Y0,[D0.id]:D0,[G0.id]:G0,[U0.id]:U0,[E0.id]:E0,[z0.id]:z0},k0=[{id:"0E06",name:"date",type:E,source:1},{id:"0037",name:"subject",type:W,source:0},{id:"0c1a",name:"senderName",type:W,source:0},{id:"5d02",name:"senderEmail",type:W,source:0},{id:"1000",name:"body",type:W,source:0},{id:"1013",name:"bodyHTML",type:W,source:0},{id:"1009",name:"bodyRTF",type:U,source:0},{id:"007d",name:"headers",type:W,source:0},{id:"0E04",name:"toRecipients",type:W,source:0},{id:"0E03",name:"ccRecipients",type:W,source:0}],V0=[{id:"3703",name:"extension",type:W,source:0},{id:"3707",name:"fileName",type:W,source:0},{id:"370e",name:"mimeType",type:W,source:0},{id:"3A0C",name:"language",type:W,source:0},{id:"3001",name:"displayName",type:W,source:0},{id:"3701",name:"content",type:U,source:0},{id:"3701",name:"embeddedMsgObj",type:z,source:0}],b0=[{id:"3001",name:"name",type:W,source:0},{id:"39fe",name:"email",type:W,source:0}];function R(t,e){const n=t.directory.get(c0,e.childId,!1);if(!n)return null;let i;const r=new Map;return t.readStream(n,(e=>{const n=l0(t.view,e);r.set(n.propertyId.toString(16).toLowerCase().padStart(4,"0"),n)}),m0,(n=>(i=y0(t.view,n,e.entryName),i.size))),{header:i,data:r}}function l0(t,e){const n=t.getUint32(e,!0),i=_0[65535&n],r=n>>>16;e+=4;const s=t.getUint32(e,!0);e+=4;return{propertyType:i,propertyId:r,flags:s,valueOrSize:!i?.size||i?.multi?t.getUint32(e,!0):1==i.size?t.getUint8(e):2==i.size?t.getUint16(e,!0):4==i.size?t.getUint32(e,!0):t.getBigUint64(e,!0)}}function y0(t,e,n){if(["__attach","__recip"].some((t=>n.startsWith(t))))return{size:8};const i=e;e+=8;const r=t.getUint32(e,!0);e+=4;const s=t.getUint32(e,!0);e+=4;const a=t.getUint32(e,!0);e+=4;const o=t.getUint32(e,!0);return e+=4,n.startsWith("Root")&&(e+=8),{size:e-i,nextRecipientId:r,nextAttachmentId:s,recipientCount:a,attachmentCount:o}}var c0="__properties_version1.0",m0=16;function j0(t){const e=j.create(t);return M(e,e.directory.entries[0])}function M(t,e){return{file:t,content:n0(t,e,R(t,e)),attachments:p0(t,e),recipients:a0(t,e)}}function n0(t,e,n){return A0(t,k0,e,n)}function a0(t,e){return N0(t,e,b0,"recip")}function p0(t,e){return N0(t,e,V0,"attach")}function N0(t,e,n,i){const r=[];for(let s=0;s<2048;s++){const a=t.directory.get(`__${i}_version1.0_#${s.toString(16).padStart(8,"0")}`,e.childId,!1);if(!a)break;const o=R(t,a);r.push(A0(t,n,a,o))}return r}function A0(t,e,n,i){return e.reduce(((e,r)=>{if(0==r.source){const i=`__substg1.0_${r.id.padStart(4,"0")}${r.type.id.toString(16).padStart(4,"0")}`,s=t.directory.get(i,n.childId,!1);if(!s)return e;e[r.name]=r0(t,s,r.type)}else{const t=s0(i,r);if(!t)return e;e[r.name]=t}return e}),{})}function s0(t,e){const n=t.data.get(e.id.toLowerCase())?.valueOrSize;return n?e.type===E?new Date(Number(n/10000n)-116444736e5):n:""}function r0(t,e,n){switch(n){case W:{let n="";return t.readStream(e,((e,i)=>{n+=V.decode(new DataView(t.view.buffer,e,i))})),n}case U:{const n=new Uint8Array(Number(e.streamSize));let i=0;return t.readStream(e,((e,r)=>{const s=t.view.buffer.slice(e,e+r);n.set(new Uint8Array(s),i),i+=r})),new DataView(n.buffer)}case z:return e;default:return null}}async function R0(t){const e=await t[0].arrayBuffer(),n=document.getElementById("msg");M0(n,(()=>j0(new DataView(e))),(t=>n.replaceChildren(t)))}function M0(t,e,i){let r;try{const n=e();r=l(n,(e=>{M0(t,(()=>M(n.file,e)),(e=>{for(let e=0;e{const e=t.target;0!==e?.files?.length&&R0(e.files)})),I0.addEventListener("click",(t=>t.target.value=""));var C0=document.documentElement;C0.addEventListener("dragover",(t=>t.preventDefault())),C0.addEventListener("drop",(t=>{t.preventDefault();const e=t.dataTransfer.files;if(0==e.length)return;if(!e[0].name.endsWith(".msg"))return;document.getElementById("file").files=e,R0(e)}))