1import{_ as M,a as A}from"./DiJLFDDe.js";import L from"./BkdGuecj.js";import D from"./BZmDYlp_.js";import{E as T,_ as I,C as V,z as R,u as P,a7 as j,c as d,o as l,x as v,e as n,j as p,n as f,t as u,y as q,w as F,k as w,v as S,F as c,f as b,p as z,q as O,O as E}from"./2fJvMp9r.js";import{u as U}from"./DG2Q-0xs.js";import $ from"./Cbroc-Ng.js";import"./DijW1qqG.js";import"./DEw16_lV.js";const B=T("/image/nowda/wallet_logo.png"),J={id:"content",tabindex:"-1"},H={class:"nowda-mypage"},W={class:"container"},K={class:"summary-art","aria-hidden":"true"},Y=["src"],G={class:"summary-content"},Q={class:"summary-copy"},X={class:"summary-title"},Z={class:"summary-stats","aria-label":"ëì°ë¤ ì´ì© íí©"},x={class:"summary-stat"},ee={class:"summary-stat"},te={class:"summary-stat"},se={key:0,class:"nowda-block verify-block"},ne={class:"nft-icon","aria-hidden":"true"},ae={class:"nft-info"},oe={key:0},ie={key:0},re={key:1},de=["disabled"],le={key:2,class:"nft-card hometown-card"},ue={class:"nft-info"},ge=["href"],pe=["aria-label"],fe=["disabled","aria-label"],me={class:"modal-title"},ye={class:"modal-body"},ce={class:"modal-actions"},he={href:"https://wallet.pay.naver.com",target:"_blank",rel:"noopener",class:"btn-wallet-open"},ve=["disabled"],be={class:"records-block nowda-block"},we={class:"tab-menu"},Se={class:"date-filter"},Pe={class:"date-quick"},$e={class:"date-custom"},ke={key:0,class:"record-list"},Ne={class:"record-info"},Ce={class:"record-title"},_e={class:"record-date"},Me={class:"record-point"},Ae={key:0},Le={key:1},De={key:1,class:"empty-list"},Te={key:2,class:"paging"},Ie=["disabled"],Ve=["onClick"],Re=["disabled"],je={key:0,class:"record-list"},qe={class:"record-info"},Fe={class:"record-title"},ze={class:"record-date"},Oe={key:0},Ee={key:1},Ue={key:2},Be={key:3},Je={key:4},He={key:1,class:"empty-list"},We={key:2,class:"paging"},Ke=["disabled"],Ye=["onClick"],Ge=["disabled"],Qe={async setup(){const t=P(),s=z();return O({titleTemplate:"Visit Jeju : ë§ì´íì´ì§ - ì 주 NFT ëì§í¸ ê´ê´ì¦ ëì°ë¤(NOWDA)",meta:[{hid:"og:image",property:"og:image",content:"https://www.visitjeju.net/image/nowda/og_nowda.png",tagPriority:"high"},{hid:"og:image:secure_url",property:"og:image:secure_url",content:"https://www.visitjeju.net/image/nowda/og_nowda.png",tagPriority:"high"},{hid:"og:image:width",property:"og:image:width",content:"1200",tagPriority:"high"},{hid:"og:image:height",property:"og:image:height",content:"600",tagPriority:"high"}]}),{siteStore:t,sessionServiceStore:s}},components:{microTop:$},data(){return{nowdaStore:null,currentTab:"verify",dateRange:"3m",startDate:"",endDate:"",loading:!1,issuingNft:!1,nftModalOpen:!1,verifyList:[],verifyPointMapAll:{},pointList:[],verifyPaging:{currentPage:1,pageCount:0,totalCount:0,pageSize:10},pointPaging:{currentPage:1,pageCount:0,totalCount:0,pageSize:10}}},computed:{lang(){var t;return((t=this.siteStore)==null?void 0:t.siteId)||"kr"},userName(){var t,s;return((s=(t=this.nowdaStore)==null?void 0:t.user)==null?void 0:s.name)||""},maskedUserName(){const s=[...this.userName||""];return s.length===0?"":s.length===1?s[0]:s[0]+"*".repeat(s.length-1)},userBadgeText(){return this.maskedUserName?this.$i("nowda.mypage.userBadge").replace("{$name}",this.maskedUserName):""},userLevel(){var t,s;return((s=(t=this.nowdaStore)==null?void 0:t.user)==null?void 0:s.lvl)||
11},userLevelText(){return this.userLevel===2?"2ë¨ê³ (ì¤íì
)":"1ë¨ê³ (ì°ì»´)"},userSummaryLevel(){return Number(this.userLevel)===2?2:1},userSummaryTitle(){return`${this.maskedUserName||"íì"}ë, ëì§í¸ ê´ê´ì¦`},userSummaryCardSrc(){return`/image/nowda/renew/nowda_mypage_card_lv${this.userSummaryLevel}.jpg`},userPoint(){var t,s;return((s=(t=this.nowdaStore)==null?void 0:t.user)==null?void 0:s.point)||0},userVerifyCount(){var t,s;return((s=(t=this.nowdaStore)==null?void 0:t.user)==null?void 0:s.verifycnt)||0},nftIssued(){var t,s;return((s=(t=this.nowdaStore)==null?void 0:t.user)==null?void 0:s.nftIssued)||!1},nftIssuedAtText(){var s,r,i;const t=((r=(s=this.nowdaStore)==null?void 0:s.user)==null?void 0:r.nftIssuedAt)||((i=this.nowdaStore)==null?void 0:i.nftIssuedAt);return t?this.formatDateTime(t):""},verifyPageNumbers(){return this.getPageNumbers(this.verifyPaging)},pointPageNumbers(){return this.getPageNumbers(this.pointPaging)}},watch:{currentTab(){this.fetchCurrentTab()}},methods:{hasNftUserKey(t){return t!=null&&String(t).trim().length>0},setDateRange(t){this.dateRange=t;const s=new Date;if(this.endDate=this.formatDate(s),t==="1m")s.setMonth(s.getMonth()-1);else if(t==="3m")s.setMonth(s.getMonth()-3);else if(t==="6m")s.setMonth(s.getMonth()-6);else{this.startDate="",this.endDate="",this.fetchCurrentTab();return}this.startDate=this.formatDate(s),this.fetchCurrentTab()},formatDate(t){const s=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0");return`${s}-${r}-${i}`},formatDateTime(t){if(!t)return"-";if(Array.isArray(t)&&t.length>=3){const i=t[0],y=String(t[1]).padStart(2,"0"),m=String(t[2]).padStart(2,"0"),g=String(t[3]||0).padStart(2,"0"),e=String(t[4]||0).padStart(2,"0");return`${i}.${y}.${m} ${g}:${e}`}const s=String(t).replace(/[^0-9]/g,"");if(s.length>=12)return`${s.slice(0,4)}.${s.slice(4,6)}.${s.slice(6,8)} ${s.slice(8,10)}:${s.slice(10,12)}`;if(s.length>=10)return`${s.slice(0,4)}.${s.slice(4,6)}.${s.slice(6,8)} ${s.slice(8,10)}:00`;if(s.length>=8)return`${s.slice(0,4)}.${s.slice(4,6)}.${s.slice(6,8)}`;const r=new Date(t);if(!isNaN(r.getTime())){const i=r.getFullYear(),y=String(r.getMonth()+1).padStart(2,"0"),m=String(r.getDate()).padStart(2,"0"),g=String(r.getHours()).padStart(2,"0"),e=String(r.getMinutes()).padStart(2,"0");return`${i}.${y}.${m} ${g}:${e}`}return t},async refreshNowdaSession(){if(this.nowdaStore)try{const t=await this.fetch({api:"nowdaSession/me",query:{}}),s=(t==null?void 0:t.data)||t;this.nowdaStore.setSession(s)}catch(t){console.warn("[mypage] session fetch failed:",t.message)}},async issueNowdaNft(){if(!this.issuingNft){if(this.nftIssued){alert(this.$i("nowda.mypage.nft.alreadyIssued")),this.nftModalOpen=!1;return}this.issuingNft=!0;try{const t=await this.fetch({api:"vjDgtRgdId/issueNft",data:{}}),s=(t==null?void 0:t.data)||{};await this.refreshNowdaSession();const r=s.resultMessage||(String(s.result)==="200"?this.$i("nowda.mypage.nft.issueSuccess"):this.$i("nowda.mypage.nft.issueFailed"));alert(r),String(s.result)==="200"&&(this.nftModalOpen=!1)}catch(t){console.warn("[mypage] issueNft failed:",t.message),alert(this.$i("nowda.mypage.nft.issueFailed"))}finally{this.issuingNft=!1}}},openNftIssueModal(){if(!this.issuingNft){if(this.nftIssued){alert(this.$i("nowda.mypage.nft.modal.alreadyIssued"));return}this.nftModalOpen=!0}},closeNftIssueModal(){this.issuingNft||(this.nftModalOpen=!1)},async confirmNftIssueFromModal(){await this.issueNowdaNft()},getReferenceId(t){return t==null?"":typeof t=="object"?String(t.refId||t.id||t.value||""):String(t).split(" ")[0]},getVerifyPoint(t){const s=this.verifyPointMapAll[t.id];return s===void 0?null:s},getStoreLabel(t){return t.storecode?typeof t.storecode=="object"?t.storecode.label:t.storecode:t.title||t.place_name||"-"},getPageNumbers(t){const r=t.currentPage,i=t.pageCount,y=Math.max(1,r-Math.floor(5/2)),m=Math.min(i,y+5-1),g=[];for(let e=y;e<=m;e++)g.push(e);return g},getAprvStsValue(t){const s=t.aprv_sts;return s?typeof s=="object"?s.value:s:""},getAprvStsClass(t){const s=this.getAprvStsValue(t);return{PEND:"pending",APRV:"approved",RJCT:"rejected",CNCL:"canceled"}[s]||""},getAprvReqTypeLabel(t){const s={basic:"기본ì 립",approval:"ì¹ì¸ì 립",visit:"방문ì¸ì¦ì 립",revisit:"ì¬ë°©ë¬¸ì 립"},r=t.aprv_req_type;if(!r)return"-";const i=typeof r=="object"?r.value:r;return s[i]||i||"-"},getAprvFromTypeLabel(t){const s={plogging:"íë¡ê¹
ì°¸ì¬",good_store:"ì°©íê°ê² ì´ì©",hometown_love:"ê³ í¥ì¬ë 기ë¶",kareumstay:"카를ì¤í
ì´",wellness:"ì°ëì¤ ê´ê´ìí",esg:"ESG ê´ê´ìí"},r=t.aprv_req_from_type;if(!r)return t.title||"-";const i=typeof r=="object"?r.value:r;return s[i]||i||t.title||"-"},fetchCurrentTab(){var t,s;(s=(t=this.nowdaStore)==null?void 0:t.user)!=null&&s.id&&(this.currentTab==="verify"?this.fetchVerifyList(1):this.fetchPointList(1))},async fetchVerifyList(t){var s;this.loading=!0;try{const r={pageSize:10,page:t,sorting:"created desc",vj_dgt_rgd_id:this.nowdaStore.user.id},i=await this.fetch({api:"vjDgtRgdId/verificateList",query:r});((s=i==null?void 0:i.data)==null?void 0:s.result)==="200"&&(this.verifyList=i.data.items||[],this.verifyPaging={currentPage:i.data.currentPage||t,pageCount:i.data.pageCount||0,totalCount:i.data.totalCount||0,pageSize:i.data.pageSize||10},t===1&&await this.fetchVerifyPointMapAll())}catch(r){console.warn("[mypage] verifyList fetch failed:",r.message)}finally{this.loading=!1}},async fetchVerifyPointMapAll(){var t,s;this.verifyPointMapAll={};try{const r={pageSize:1e3,page:1,sorting:"created desc",vj_dgt_rgd_id:this.nowdaStore.user.id},i=await this.fetch({api:"vjDgtRgdId/aprvReqList",query:r});if(((t=i==null?void 0:i.data)==null?void 0:t.result)!=="200"){console.warn("[mypage] verifyPointMapAll fetch failed:",(s=i==null?void 0:i.data)==null?void 0:s.resultMessage);return}const y=i.data.items||[],m={};
1y.forEach(g=>{const e=this.getReferenceId(g.verificate_id);if(!e)return;const a=this.getAprvStsValue(g)==="APRV";m[e]!==void 0&&!a||(m[e]=g.aprv_req_pnt)}),this.verifyPointMapAll=m}catch(r){console.warn("[mypage] verifyPointMapAll fetch failed:",r.message)}},async fetchPointList(t){var s;this.loading=!0;try{const r={pageSize:10,page:t,sorting:"created desc",vj_dgt_rgd_id:this.nowdaStore.user.id},i=await this.fetch({api:"vjDgtRgdId/aprvReqList",query:r});((s=i==null?void 0:i.data)==null?void 0:s.result)==="200"&&(this.pointList=i.data.items||[],this.pointPaging={currentPage:i.data.currentPage||t,pageCount:i.data.pageCount||0,totalCount:i.data.totalCount||0,pageSize:i.data.pageSize||10})}catch(r){console.warn("[mypage] pointList fetch failed:",r.message)}finally{this.loading=!1}},goVerifyPage(t){t<1||t>this.verifyPaging.pageCount||this.fetchVerifyList(t)},goPointPage(t){t<1||t>this.pointPaging.pageCount||this.fetchPointList(t)},handleSearch(){this.fetchCurrentTab()}},async mounted(){var s;const t=U(this.$pinia);this.nowdaStore=t,(s=t.user)!=null&&s.id&&this.setDateRange("3m")},head(){return{titleTemplate:"Visit Jeju : ë§ì´íì´ì§ - ì 주 NFT ëì§í¸ ê´ê´ì¦ ëì°ë¤(NOWDA)"}}},Xe=Object.assign(Qe,{__name:"mypage",async setup(t){let s,r;const i=V(),{$fetcher:y}=R(),m=P(),g=i.query.menuId||(m.lang==="kr"?"DOM_200000000011218":"");return[s,r]=j(()=>E("nowdaMypageNavigation",()=>y([{api:"servicemenumng/getNavigation",retrieveKey:"navigationData",query:{menuid:g}}]))),await s,r(),(e,a)=>{const k=M,N=L,C=D,_=A;return l(),d(c,null,[v(k,{subClass:"on"}),v(N,{class:"nowda"}),n("div",J,[v($,{onmenu:"mypage"}),v(C,{class:"nowda"}),n("section",H,[n("div",W,[n("div",{class:f(["user-info-card user-summary","lv"+e.userSummaryLevel])},[n("div",K,[n("img",{src:e.userSummaryCardSrc,alt:""},null,8,Y)]),n("div",G,[n("div",Q,[n("strong",X,u(e.userSummaryTitle),1),a[17]||(a[17]=n("span",{class:"summary-subtitle"},"ì¤ëë ì 주 ì¬í ì¸ì¦í´ì.",-1))]),n("div",Z,[n("div",x,[n("strong",null,"LEVEL "+u(e.userSummaryLevel),1),a[18]||(a[18]=n("span",null,"ë¨ê³",-1))]),n("div",ee,[n("strong",null,u(e.userVerifyCount)+" í",1),a[19]||(a[19]=n("span",null,"ì´ ì¬ì©íì",-1))]),n("div",te,[n("strong",null,u(e.userPoint.toLocaleString())+" P",1),a[20]||(a[20]=n("span",null,"ëì°ë¤ í¬ì¸í¸",-1))])])])],2),e.nowdaStore&&e.nowdaStore.user?(l(),d("div",se,[n("h3",null,u(e.$i("nowda.mypage.verify.title")),1),n("p",null,u(e.$i("nowda.mypage.verify.guide")),1)])):p("",!0),e.nowdaStore&&e.nowdaStore.user?(l(),d("div",{key:1,class:f(["nft-art-block nft-card",{issued:e.nftIssued}])},[n("div",ne,u(e.nftIssued?"â":"NFT"),1),n("div",ae,[n("strong",null,u(e.$i("nowda.mypage.nftArt.title")),1),e.nftIssued?(l(),d("p",oe,[q(u(e.$i("nowda.mypage.nftArt.issued"))+" ",1),e.nftIssuedAtText?(l(),d("span",ie,u(e.nftIssuedAtText),1)):p("",!0)])):(l(),d("p",re,u(e.$i("nowda.mypage.nftArt.guide")),1))]),e.nftIssued?p("",!0):(l(),d("button",{key:0,type:"button",class:"btn-nft-art",disabled:e.issuingNft,onClick:a[0]||(a[0]=(...o)=>e.openNftIssueModal&&e.openNftIssueModal(...o))},u(e.issuingNft?e.$i("nowda.common.processing"):e.$i("nowda.mypage.nftArt.button")),9,de))],2)):p("",!0),e.nowdaStore&&e.nowdaStore.user?(l(),d("div",le,[n("div",ue,[n("strong",null,u(e.$i("nowda.mypage.hometownLove.title")),1),n("p",null,u(e.$i("nowda.mypage.hometownLove.guide")),1)]),n("a",{href:"/"+e.lang+"/nowda/pointForm?type=hometown_love",class:"btn-nft-art"},u(e.$i("nowda.mypage.hometownLove.button")),9,ge)])):p("",!0),e.nftModalOpen?(l(),d("div",{key:3,class:"nft-modal-backdrop",onClick:a[3]||(a[3]=F((...o)=>e.closeNftIssueModal&&e.closeNftIssueModal(...o),["self"]))},[n("div",{class:"nft-modal",role:"dialog","aria-modal":"true","aria-label":e.$i("nowda.mypage.nft.modal.title")},[n("button",{type:"button",class:"modal-close",disabled:e.issuingNft,"aria-label":e.$i("nowda.mypage.nft.modal.close"),onClick:a[1]||(a[1]=(...o)=>e.closeNftIssueModal&&e.closeNftIssueModal(...o))}," à ",8,fe),a[21]||(a[21]=n("div",{class:"modal-image"},[n("img",{src:B,alt:""})],-1)),n("h3",me,u(e.$i("nowda.mypage.nft.modal.title")),1),n("div",ye,[n("p",null,u(e.$i("nowda.mypage.nft.modal.guide1")),1),n("p",null,u(e.$i("nowda.mypage.nft.modal.guide2")),1),n("p",null,u(e.$i("nowda.mypage.nft.modal.guide3")),1)]),n("div",ce,[n("a",he,u(e.$i("nowda.mypage.nft.modal.openWallet")),1),n("button",{type:"button",class:"btn-issue-confirm",disabled:e.issuingNft,onClick:a[2]||(a[2]=(...o)=>e.confirmNftIssueFromModal&&e.confirmNftIssueFromModal(...o))},u(e.issuingNft?e.$i("nowda.mypage.nft.issuing"):e.$i("nowda.mypage.nft.modal.issueConfirm")),9,ve)])],8,pe)])):p("",!0),n("div",be,[n("h3",null,u(e.$i("nowda.mypage.records.title")),1),n("div",we,[n("button",{type:"button",class:f({on:e.currentTab==="verify"}),onClick:a[4]||(a[4]=o=>e.currentTab="verify")},"ì¸ì¦ 기ë¡",2),n("button",{type:"button",class:f({on:e.currentTab==="point"}),onClick:a[5]||(a[5]=o=>e.currentTab="point")},"í¬ì¸í¸ ë´ì",2)]),n("div",Se,[n("div",Pe,[n("button",{type:"button",class:f({on:e.dateRange==="1m"}),onClick:a[6]||(a[6]=o=>e.setDateRange("1m"))},"1ê°ì",2),n("button",{type:"button",class:f({on:e.dateRange==="3m"}),onClick:a[7]||(a[7]=o=>e.setDateRange("3m"))},"3ê°ì",2),n("button",{type:"button",class:f({on:e.dateRange==="6m"}),onClick:a[8]||(a[8]=o=>e.setDateRange("6m"))},"6ê°ì",2),n("button",{type:"button",class:f({on:e.dateRange==="all"}),onClick:a[9]||(a[9]=o=>e.setDateRange("all"))},"ì ì²´",2)]),n("div",$e,[w(n("input",{type:"date","onUpdate:modelValue":a[10]||(a[10]=o=>e.startDate=o)},null,512),[[S,e.startDate]]),a[22]||(a[22]=n("span",null,"~",-1)),w(n("input",{type:"date","onUpdate:modelValue":a[11]||(a[11]=o=>
1e.endDate=o)},null,512),[[S,e.endDate]]),n("button",{type:"button",class:"btn-search",onClick:a[12]||(a[12]=(...o)=>e.handleSearch&&e.handleSearch(...o))},"ì¡°í")])]),e.currentTab==="verify"?(l(),d(c,{key:0},[e.verifyList.length>0?(l(),d("ul",ke,[(l(!0),d(c,null,b(e.verifyList,(o,h)=>(l(),d("li",{key:"v"+h},[n("div",Ne,[a[23]||(a[23]=n("span",{class:"record-type"},"ê°ë§¹ì ì¸ì¦",-1)),n("strong",Ce,u(e.getStoreLabel(o)),1),n("span",_e,u(e.formatDateTime(o.created)),1)]),n("div",Me,[e.getVerifyPoint(o)!==null?(l(),d("strong",Ae,"+"+u(e.getVerifyPoint(o))+"P",1)):(l(),d("strong",Le,"-"))])]))),128))])):e.loading?p("",!0):(l(),d("div",De,[...a[24]||(a[24]=[n("p",null,"ì¸ì¦ 기ë¡ì´ ììµëë¤.",-1)])])),e.verifyPaging.pageCount>1?(l(),d("div",Te,[n("button",{type:"button",class:"btn-prev",disabled:e.verifyPaging.currentPage<=1,onClick:a[13]||(a[13]=o=>e.goVerifyPage(e.verifyPaging.currentPage-1))},"<",8,Ie),(l(!0),d(c,null,b(e.verifyPageNumbers,o=>(l(),d("button",{type:"button",key:"vp"+o,class:f({on:o===e.verifyPaging.currentPage}),onClick:h=>e.goVerifyPage(o)},u(o),11,Ve))),128)),n("button",{type:"button",class:"btn-next",disabled:e.verifyPaging.currentPage>=e.verifyPaging.pageCount,onClick:a[14]||(a[14]=o=>e.goVerifyPage(e.verifyPaging.currentPage+1))},">",8,Re)])):p("",!0)],64)):p("",!0),e.currentTab==="point"?(l(),d(c,{key:1},[e.pointList.length>0?(l(),d("ul",je,[(l(!0),d(c,null,b(e.pointList,(o,h)=>(l(),d("li",{key:"p"+h},[n("div",qe,[n("span",{class:f(["record-type",e.getAprvStsClass(o)])},u(e.getAprvReqTypeLabel(o)),3),n("strong",Fe,u(e.getAprvFromTypeLabel(o)),1),n("span",ze,u(e.formatDateTime(o.created)),1)]),n("div",{class:f(["record-point",e.getAprvStsClass(o)])},[e.getAprvStsValue(o)==="APRV"?(l(),d("strong",Oe,"+"+u(o.aprv_req_pnt||0)+"P",1)):e.getAprvStsValue(o)==="PEND"?(l(),d("strong",Ee,"ì¹ì¸ë기")):e.getAprvStsValue(o)==="RJCT"?(l(),d("strong",Ue,"ê±°ì ")):e.getAprvStsValue(o)==="CNCL"?(l(),d("strong",Be,"ìì²ì·¨ì")):(l(),d("strong",Je,u(o.aprv_req_pnt?"+"+o.aprv_req_pnt+"P":"-"),1))],2)]))),128))])):e.loading?p("",!0):(l(),d("div",He,[...a[25]||(a[25]=[n("p",null,"í¬ì¸í¸ ë´ìì´ ììµëë¤.",-1)])])),e.pointPaging.pageCount>1?(l(),d("div",We,[n("button",{type:"button",class:"btn-prev",disabled:e.pointPaging.currentPage<=1,onClick:a[15]||(a[15]=o=>e.goPointPage(e.pointPaging.currentPage-1))},"<",8,Ke),(l(!0),d(c,null,b(e.pointPageNumbers,o=>(l(),d("button",{type:"button",key:"pp"+o,class:f({on:o===e.pointPaging.currentPage}),onClick:h=>e.goPointPage(o)},u(o),11,Ye))),128)),n("button",{type:"button",class:"btn-next",disabled:e.pointPaging.currentPage>=e.pointPaging.pageCount,onClick:a[16]||(a[16]=o=>e.goPointPage(e.pointPaging.currentPage+1))},">",8,Ge)])):p("",!0)],64)):p("",!0)])])])]),v(_)],64)}}}),it=I(Xe,[["__scopeId","data-v-6839a8fe"]]);export{it as default};
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.