https://wutheringwaves.gg/wp-content/plugins/dotgg-game/common/js/async/7635.1c20b1e0970a2a3b8e59.js
1"use strict";(self.webpackChunkallyourbasedotgg=self.webpackChunkallyourbasedotgg||[]).push([[7635],{27635(e,t,n){n.d(t,{y:()=>Ce});var i=n(15073),a=n(58468),o=n(14510),r=n(9299),l=n(4738),d=n(70994),s=n(91181),c=n(89629),h=n(53794),p=n(63679),f=n(90023),u=n(23051),g=n(63099),x=n(76521),w=n(28297),m=n(12434);function v({cardId:e,sub:t,children:n}){(0,s.Yx)();const a=(0,x.pr)(e),o=(0,i.Y)(u._,{id:e,w:58,radius:5});return(0,i.FD)(b,{children:[a?.slug?(0,i.Y)(y,{href:`${m.Ay.BASE_URL}cards/${a.slug}/`,"data-native":!0,title:`Open ${a.name}`,children:o}):o,(0,i.FD)($,{children:[(0,i.FD)(Y,{children:[(0,i.Y)(D,{children:a?.name??e}),a?.rarity&&(0,i.Y)(u.Y,{rarity:a.rarity,size:15}),a?.setId&&(0,i.FD)(F,{children:[a.setId," · ",a.number]})]}),(0,i.Y)(A,{children:t})]}),n]})}const b=p.Ay.div` 2 display: flex; 3 align-items: center; 4 gap: 16px; 5 margin-bottom: 10px; 6 padding: 12px 16px; 7 background: var(--theme-palette-color-8); 8 border: 1px solid var(--theme-palette-color-5); 9 border-radius: 10px; 10 @media only screen and ${w.E0} { 11 gap: 12px; 12 padding: 10px 12px; 13 } 14`,y=p.Ay.a` 15 flex: none; 16 display: block; 17`,$=p.Ay.div` 18 flex: 1 0 160px; 19 min-width: 0; 20 display: flex; 21 flex-direction: column; 22 gap: 4px; 23`,Y=p.Ay.div` 24 display: flex; 25 align-items: center; 26 gap: 9px; 27 min-width: 0; 28 flex-wrap: wrap; 29`,D=p.Ay.span` 30 font-size: 18px; 31 font-weight: 800; 32 color: var(--theme-palette-color-4); 33`,F=p.Ay.span` 34 font-size: 12.5px; 35 color: ${g.gN}; 36 white-space: nowrap; 37`,A=p.Ay.div` 38 font-size: 12.5px; 39 color: ${g.gN}; 40`,_=p.I4.div` 41 width: 100%; 42 box-sizing: border-box; 43 background: var(--theme-palette-color-8); 44 border: 1px solid var(--theme-palette-color-5); 45 border-radius: 10px; 46 overflow: hidden; 47`,k=p.I4.div` 48 display: flex; 49 align-items: center; 50 gap: 10px; 51 min-height: 44px; 52 padding: 6px 16px; 53 border-bottom: 1px solid var(--theme-palette-color-5); 54 @media only screen and (max-width: 700px) { 55 flex-wrap: wrap; 56 padding: 6px 12px; 57 } 58`,W=p.I4.span` 59 flex: none; 60 font-size: 10.5px; 61 font-weight: 700; 62 letter-spacing: 0.07em; 63 text-transform: uppercase; 64 color: ${g.gN}; 65 @media only screen and (max-width: 700px) { 66 width: 100%; 67 } 68`,I=p.I4.div` 69 display: flex; 70 flex-direction: column; 71 > [data-phone-row]:last-child { 72 border-bottom: none; 73 } 74`,N=p.I4.div` 75 padding: 8px 12px 10px; 76 border-top: 1px solid var(--theme-palette-color-5); 77 > * { 78 width: 100%; 79 text-decoration: none; 80 } 81`,L=p.I4.div` 82 text-align: center; 83 padding: 20px; 84 color: var(--theme-palette-color-3); 85 font-size: 14px; 86`;var C=n(92667),P=n(26983),z=n(99379);const T="trade-lang-filter";function J(e){return(e.trader_langs??"").split(",").filter(e=>""!==e)}function K(e){if(void 0===(0,P.Tf)())return[];const t=function(e){return{card:e.card,foil:e.foil,standard:e.standard,total:e.total,extra_data:e.extra_data,trade:e.available,wish:e.wished}}(e);return(0,P.Kf)(t,(0,P.Pi)(t)).map(e=>({code:e.code,count:e.count}))}function R(e){return[...new Set([...K(e).map(e=>e.code),...J(e)])]}function S({lang:e,counts:t,onChange:n,labelled:a=!1}){return t.length<2?null:(0,i.FD)(j,{"aria-label":"Filter traders by card language",$labelled:a,children:[a&&(0,i.Y)(g.eN,{$tone:"faint",children:"Language"}),(0,i.Y)(C.$7,{type:"button",$on:""===e,"aria-pressed":""===e,onClick:()=>n(""),children:a?"Any":"Any language"}),t.map(t=>(0,i.FD)(C.$7,{type:"button",$on:e===t.code,"aria-pressed":e===t.code,title:`${t.traders} trader${1===t.traders?"":"s"} hold it in ${(0,z.nd)(t.code)}`,onClick:()=>n(e===t.code?"":t.code),children:[(0,z.nd)(t.code),!a&&(0,i.Y)("b",{children:t.traders})]},t.code))]})}const j=(0,p.Ay)(C.ND)` 87 flex: ${e=>e.$labelled?"0 1 auto":"1"}; 88`;function E(e){return e.total<2||e.isPhone?null:(0,i.Y)(C.$7,{type:"button",$on:e.activeFirst,"aria-pressed":e.activeFirst,onClick:()=>e.onActiveFirst(!e.activeFirst),children:"Active first"})}function O(e){return(0,i.FD)(i.FK,{children:[(0,i.FD)(U,{children:[(0,i.Y)(f.$,{ariaLabel:"Which listings",value:e.isWishlist?"wish":"trade",onChange:t=>e.onWishlist("wish"===t),options:[{value:"trade",label:"Trade Offers"},{value:"wish",label:"Wishlists"}]}),(0,i.Y)(g.qR,{}),(0,i.Y)(E,{...e}),(0,i.FD)(g.Pk,{"aria-live":"polite",children:[(0,i.Y)("b",{children:e.shown===e.total?e.shown:`${e.shown} of ${e.total}`})," listing",1===e.total?"":"s"]})]}),(0,i.Y)(v,{cardId:e.cardId,sub:e.isWishlist?"Who wants this card":"Who has this card for trade",children:!e.isWishlist&&!e.isPhone&&(0,i.Y)(S,{labelled:!0,lang:e.lang,counts:e.counts,onChange:e.onLang})})]})}function M({widget:e,...t}){if(!(e||t.isPhone&&!t.isWishlist&&t.counts.length>1))return null;const n=t.shown;return(0,i.FD)(k,{children:[e&&(0,i.FD)(W,{children:[n," ",t.isWishlist?`wishlist${1===n?"":"s"} for`:`trader${1===n?"":"s"} ${1===n?"has":"have"}`," ",t.cardName]}),!t.isWishlist&&(0,i.Y)(S,{lang:t.lang,counts:t.counts,onChange:t.onLang}),e&&(0,i.Y)(E,{...t})]})}const U=(0,p.Ay)(g.M7)` 89 margin: 10px 0; 90`;var V=n(39131),Z=n(1748),q=n(23244),G=n(8251);function X({listing:e,variant:t}){const n=(0,a.Kr)(()=>{const n=K(e);if(n.some(e=>"en"!==e.code))return"inline"===t?n.filter(e=>"en"!==e.code):n;const i=J(e);return"inline"===t?i.filter(e=>"en"!==e).map(e=>({code:e,count:0})):(i.length>0?i:["en"]).map(e=>({code:e,count:0}))},[e,t]);if(0===n.length)return null;const o=n.map(e=>`${(0,P.VZ)(e.code)?.label??e.code}${e.count>0?` Ã${e.count}`:""}`).join(", ");return"column"===t?(0,i.FD)(B,{title:o,children:[n.slice(0,2).map(e=>(0,i.Y)(g.Ds,{children:(0,P.VZ)(e.code)?.label??(0,z.nd)(e.code)},e.code)),n.length>2&&(0,i.FD)(g.Ds,{children:["+",n.length-2]})]}):(0,i.Y)(B,{title:(0,G.TL)(n.map(e=>e.code)),children:n.slice(0,3).map(e=>(0,i.FD)(q.jE,{children:[(0,z.nd)(e.code),e.count>0&&(0,i.Y)("b",{children:e.count})]},e.code))})}const B=p.Ay.span` 91 display: inline-flex; 92 flex: none; 93 align-items: center; 94 vertical-align: middle; 95 gap: 5px; 96 min-width: 0; 97`;var H=n(78187),Q=n(53887),ee=n(70213);function te({handle:e,shown:t,onReveal:n,wide:a=!1}){return""===e?(0,i.Y)(ne,{type:"button",disabled:!0,title:"This trader has no Discord set",$wide:a,children:a?"No Discord":"not set"}):(0,i.Y)(ne,{type:"button",$shown:t,$wide:a,title:t?"Tap to copy":"Tap to show the Discord handle",onClick:()=>{t?(0,x.t1)(e,"Discord handle"):n()},children:t?(0,i.FD)(i.FK,{children:[(0,i.Y)(ee.bz,{}),(0,i.Y)(ie,{children:e})]}):a?"Show Discord":"Discord"})}const ne=p.Ay.button` 98 display: inline-flex; 99 align-items: center; 100 justify-content: center; 101 gap: 6px; 102 max-width: 165px; 103 height: 36px; 104 padding: 0 12px; 105 min-width: ${e=>e.$wide?118:84}px; 106 border: 1px ${e=>e.$wide&&!e.$shown?"dashed":"solid"} 107 ${e=>e.$shown?"var(--theme-palette-color-1)":"var(--theme-palette-color-5)"}; 108 border-radius: 6px; 109 background: none; 110 font-family: inherit; 111 font-size: 12.5px; 112 font-weight: 600; 113 color: ${e=>e.$shown?"var(--theme-palette-color-4)":"var(--theme-palette-color-3)"}; 114 cursor: pointer; 115 &:disabled { 116 opacity: 0.45; 117 cursor: default; 118 } 119 svg { 120 flex: none; 121 } 122 @media only screen and ${w.E0} { 123 height: ${44}px; 124 } 125 @media only screen and ${w.Ab} { 126 min-width: 88px; 127 } 128`,ie=p.Ay.span` 129 overflow: hidden; 130 text-overflow: ellipsis; 131 white-space: nowrap; 132`;function ae(e){const t=Number(e.last_active??0)||0;if(t>0)return{text:(0,x.DS)(t),fresh:(0,x.tJ)(t,3)};const n=oe(e);if(n<=0)return{text:"",fresh:!1};const i=(0,x.vx)(n);return{text:"now"===i?"listed just now":`listed ${i}`,fresh:!1}}function oe(e){const t=Number(function(e){const t=e.extra_data;if(null===t||"object"!=typeof t)return null;const n=Object.getOwnPropertyDescriptor(t,"listingTime")?.value;return"string"==typeof n||"number"==typeof n?n:null}(e)??0)||0,n=t>1e11?t/1e3:t;return Math.max(Number(e.last_active??0)||0,n)}function re({listing:e,index:t,isWishlist:n,revealed:a,onReveal:o,onTrade:r,own:l}){const d=ae(e);return(0,i.Y)(Z.jP,{dense:!0,accent:l,title:(0,i.FD)(le,{children:[(0,i.Y)(de,{href:(0,Q.Lp)(e.nickname,n?"wishlist":"trade"),children:l?"You":e.nickname}),!n&&(0,i.Y)(se,{children:(0,i.Y)(X,{listing:e,variant:"inline"})})]}),meta:[(0,i.Y)(H.u,{normal:n?+e.wished:+e.available,foil:n?+(e.wished_foil??0):+(e.available_foil??0),suffix:n?"wanted":"for trade"},"count"),""!==d.text?(0,i.Y)(ce,{$fresh:d.fresh,children:d.text},"active"):null],action:l?(0,i.Y)(fe,{as:"a",href:"/collection/",children:"Edit"}):(0,i.FD)(he,{children:[r&&(0,i.Y)(pe,{type:"button",onClick:r,title:`Propose a trade to ${e.nickname}`,children:"Trade"}),(0,i.Y)(te,{handle:e.discord??"",shown:a.includes(t),onReveal:()=>o(t)})]})})}const le=p.Ay.span` 133 display: flex; 134 align-items: center; 135 gap: 6px; 136 min-width: 0; 137`,de=p.Ay.a` 138 min-width: 0; 139 overflow: hidden; 140 text-overflow: ellipsis; 141 color: inherit; 142 text-decoration: none; 143 &:hover { 144 color: inherit; 145 } 146`,se=p.Ay.span` 147 display: inline-flex; 148 flex: none; 149 @media only screen and (max-width: 340px) { 150 display: none; 151 } 152`,ce=p.Ay.span` 153 color: ${e=>e.$fresh?g.nX.good:"inherit"}; 154`,he=p.Ay.div` 155 display: flex; 156 gap: 6px; 157`,pe=(0,p.Ay)(C.wo)` 158 min-width: 64px; 159 padding: 0 12px; 160`,fe=(0,p.Ay)(C.LP)` 161 min-width: 84px; 162 text-decoration: none; 163`;var ue=n(16435);function ge({listing:e,isWishlist:t,shown:n,onReveal:a,onTrade:o,own:r}){const l=ae(e),d="0"===e.accepting;return(0,i.FD)(be,{$wish:t,$own:r,children:[(0,i.FD)(ye,{children:[(0,i.Y)(ue.KD,{nickname:e.nickname,list:t?"wishlist":"trade",label:r?"You":void 0,size:14}),d&&(0,i.Y)(g.vu,{$tone:"warn",children:"not taking offers"}),e.note&&(0,i.FD)($e,{children:["â",e.note,"â"]})]}),!t&&(0,i.Y)("div",{children:(0,i.Y)(X,{listing:e,variant:"column"})}),(0,i.Y)(Ye,{$tone:l.fresh?"good":void 0,children:l.text||"â"}),(0,i.Y)(Ye,{children:(0,i.Y)(H.u,{normal:t?+e.wished:+e.available,foil:t?+(e.wished_foil??0):+(e.available_foil??0),suffix:xe(e,t)})}),(0,i.Y)(De,{children:r?(0,i.Y)(C.LP,{as:"a",href:"/collection/",children:"Edit my listing"}):(0,i.FD)(i.FK,{children:[(0,i.Y)(C.wo,{type:"button",onClick:o,disabled:!o,title:`Propose a trade to ${e.nickname}`,children:"Trade"}),(0,i.Y)(te,{handle:e.discord??"",shown:n,onReveal:a,wide:!0})]})})]})}function xe(e,t){return t?"wanted":1===+e.available+ +(e.available_foil??0)?"copy":"copies"}function we({isWishlist:e}){return(0,i.FD)(ve,{$wish:e,children:[(0,i.Y)("span",{children:e?"Wisher":"Trader"}),!e&&(0,i.Y)("span",{children:"Languages"}),(0,i.Y)("span",{children:"Last active"}),(0,i.Y)("span",{children:e?"Wanted":"For trade"}),(0,i.Y)("span",{"aria-label":"Actions"})]})}const me=p.Ay.div` 164 display: grid; 165 grid-template-columns: ${e=>e.$wish?"minmax(0,1fr) 116px 84px 244px":"minmax(0,1fr) 140px 116px 84px 244px"}; 166 gap: 12px; 167 align-items: center; 168 padding: 10px 16px; 169`,ve=(0,p.Ay)(me)` 170 padding: 8px 16px; 171 border-bottom: 1px solid var(--theme-palette-color-5); 172 font-size: 10.5px; 173 font-weight: 700; 174 letter-spacing: 0.07em; 175 text-transform: uppercase; 176 color: ${g.gN}; 177`,be=(0,p.Ay)(me)` 178 border-bottom: 1px solid ${g.vU}; 179 &:hover { 180 background: color-mix(in srgb, var(--theme-palette-color-5) 18%, transparent); 181 } 182 box-shadow: ${e=>e.$own?"inset 3px 0 0 var(--theme-palette-color-1)":"none"}; 183 &:last-child { 184 border-bottom: none; 185 } 186`,ye=p.Ay.div` 187 display: flex; 188 align-items: center; 189 gap: 8px; 190 min-width: 0; 191`,$e=p.Ay.span` 192 min-width: 0; 193 font-size: 12.5px; 194 font-style: italic; 195 color: ${g.gN}; 196 overflow: hidden; 197 text-overflow: ellipsis; 198 white-space: nowrap; 199`,Ye=p.Ay.div` 200 font-size: 12.5px; 201 > span > span:first-child { 202 color: var(--theme-palette-color-4); 203 font-weight: 700; 204 } 205 font-weight: ${e=>e.$tone?600:400}; 206 color: ${e=>e.$tone?g.nX.good:"var(--theme-palette-color-3)"}; 207`,De=p.Ay.div` 208 display: flex; 209 gap: 8px; 210 justify-content: flex-end; 211 > a { 212 text-decoration: none; 213 } 214`;var Fe=n(47957),Ae=n(81616);function _e({cardId:e,cardName:t,listed:n,wanted:o}){const r=(0,Ae.h3)(),d=(0,l.x3)(),[s,c]=(0,a.J0)(!1),[h,p]=(0,a.J0)(!1),f=r?.collection?.f
214ind(t=>t.card===e),u=h||(+(f?.wish??0)||0)>0||(+(f?.wish_foil??0)||0)>0,g=0===n&&0===o?(0,i.FD)(i.FK,{children:["Nobody lists ",t," for trade yet."]}):(0,i.FD)(i.FK,{children:[(0,i.FD)("b",{children:[o," player",1===o?"":"s"]})," ","want",1===o?"s":""," ",t," ·"," ",(0,i.FD)("b",{children:[n," list",1===n?"s":""," it"]})," ","for trade"]});return(0,i.FD)(ke,{children:[(0,i.FD)(We,{children:[g,0===n&&d&&!u&&(0,i.Y)(Ie,{children:" Wishlist it and your bell tells you when someone does."})]}),(0,i.FD)(Ne,{children:[d&&(u?(0,i.Y)(Le,{children:"â On your wishlist"}):(0,i.Y)(C.LP,{type:"button",disabled:s,onClick:()=>{c(!0),(0,Fe.P)([{card:e,wish:1}],`Wishlist from the ${t} trade listings`).then(e=>{c(!1),e&&p(!0)})},children:s?"Addingâ¦":"Add to wishlist"})),(0,i.Y)(C.wo,{as:"a",href:"/trade/matches/",children:d?"My trade matches":"Find trades"})]})]})}const ke=p.Ay.div` 215 display: flex; 216 align-items: center; 217 flex-wrap: wrap; 218 gap: 8px 12px; 219 padding: 10px 16px; 220 border-bottom: 1px solid var(--theme-palette-color-5); 221 @media only screen and ${w.E0} { 222 padding: 8px 12px; 223 } 224`,We=p.Ay.div` 225 flex: 1 1 220px; 226 min-width: 0; 227 font-size: 13px; 228 line-height: 1.4; 229 color: var(--theme-palette-color-3); 230 b { 231 color: var(--theme-palette-color-4); 232 font-weight: 700; 233 } 234`,Ie=p.Ay.span` 235 color: color-mix(in srgb, var(--theme-palette-color-3) 80%, transparent); 236`,Ne=p.Ay.div` 237 display: flex; 238 align-items: center; 239 gap: 8px; 240 margin-left: auto; 241 > a, 242 > button { 243 white-space: nowrap; 244 } 245`,Le=p.Ay.span` 246 font-size: 12.5px; 247 font-weight: 600; 248 color: var(--dotgg-accent-text, var(--theme-palette-color-1)); 249 white-space: nowrap; 250`,Ce=e=>{const[t,n]=(0,a.J0)([]),[p,f]=(0,a.J0)(null),[u,g]=(0,a.J0)([]),[w,m]=(0,a.J0)(window.location.search.includes("wishlisted")),[v,b]=(0,a.J0)(!0),[y,$]=(0,a.J0)(30),[Y,D]=(0,a.J0)(null),F=(0,d.Zp)(),A=(0,h.WS)(),k=String(window.DotGGUser??"");(0,s.Yx)();const W=(0,x.pr)(e.cardID)?.name??e.cardID;(0,a.vJ)(()=>{(0,o.u)(e.cardID).then(e=>{f({listed:e.filter(e=>+e.available+ +(e.available_foil??0)>0).length,wanted:e.filter(e=>+e.wished+ +(e.wished_foil??0)>0).length});const t=e.filter(e=>{const t=+e.wished+ +(e.wished_foil??0),n=+e.available+ +(e.available_foil??0);return w?t>0:n>0}).map(e=>{try{e.extra_data=JSON.parse(e.extra_data)}catch(e){}return e});n(t),g([])}).catch(e=>{(0,c.N7)(e,"tradeCardWidget")})},[e.cardID,w]);const z=(0,a.Kr)(()=>{const e=e=>w?+e.wished+ +(e.wished_foil??0):+e.available+ +(e.available_foil??0);return[...t].sort((t,n)=>v?oe(n)-oe(t):e(n)-e(t)||oe(n)-oe(t))},[t,v,w]),{lang:K,setLang:S,counts:j,shown:E}=function(e){const[t,n]=(0,a.J0)(()=>(0,l.Ri)(T)??""),i=(0,a.Kr)(()=>{const t=new Map;for(const n of e)for(const e of R(n))t.set(e,(t.get(e)??0)+1);return P.hF.filter(e=>t.has(e.code)).map(e=>({code:e.code,traders:t.get(e.code)??0}))},[e]),o=i.some(e=>e.code===t)?t:"",r=(0,a.Kr)(()=>""===o?e:e.filter(e=>R(e).includes(o)),[e,o]);return{lang:o,setLang:e=>{(0,l.TV)(T,e,30),n(e)},counts:i,shown:r}}(z),U=w?z:E,Z=t=>{const n=Number(t.user_id??0);if(n&&String(n)!==k&&"0"!==t.accepting)return()=>{if(!(0,l.x3)())return void(window.location.href="/trade/matches/");const i=w?0===+t.wished&&+(t.wished_foil??0)>0:0===+t.available&&+(t.available_foil??0)>0,a=[{card:e.cardID,qty:1,foil:i?1:0}];D({user:{user_id:n,nickname:t.nickname,discord:t.discord??"",friend_code:"",note:t.note??"",langs:J(t),accepting:!0,last_active:Number(t.last_active??0)||0},...w?{give:a,get:[]}:{get:a,give:[]}})}},q=!e.widget,G=e.widget?12:y,X=U.slice(0,G),B=e=>""!==k&&String(e.user_id??"")===k,H=e=>g(t=>[...t,e]),Q={cardId:e.cardID,cardName:W,isPhone:A,isWishlist:w,onWishlist:m,activeFirst:v,onActiveFirst:b,total:z.length,shown:U.length,lang:K,onLang:S,counts:j};return(0,i.FD)(r.t,{justhide:!0,children:[q&&(0,i.Y)(O,{...Q}),(0,i.FD)(_,{children:[(0,i.Y)(M,{...Q,widget:!q}),p&&(0,i.Y)(_e,{cardId:e.cardID,cardName:W,listed:p.listed,wanted:p.wanted}),0===U.length?p&&p.listed+p.wanted===0?null:(0,i.FD)(L,{children:["No ",w?"wishlist":"trade"," listings found for this card."]}):A?(0,i.Y)(I,{children:X.map((e,t)=>(0,i.Y)(re,{listing:e,index:t,isWishlist:w,revealed:u,onReveal:H,onTrade:Z(e),own:B(e)},`${e.user_id??e.nickname}-${t}`))}):(0,i.FD)("div",{children:[(0,i.Y)(we,{isWishlist:w}),X.map((e,t)=>(0,i.Y)(ge,{listing:e,isWishlist:w,shown:u.includes(t),onReveal:()=>H(t),onTrade:Z(e),own:B(e)},`${e.user_id??e.nickname}-${t}`))]}),U.length>G&&(0,i.Y)(N,{children:e.widget?(0,i.FD)(C.LP,{as:"a",href:`/trade/card/${e.cardID}`,children:["See all ",U.length," ",w?"wishlists":"traders"]}):(0,i.FD)(C.LP,{type:"button",onClick:()=>$(U.length),children:["Load ",U.length-G," more ",w?"wishlists":"traders"]})})]}),Y&&(0,i.Y)(V.l,{target:Y,onClose:()=>D(null),onOpen:e=>{D(null),F(`/trade/inbox/${e}/`)}})]})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.