1import{r as l,j as a}from"./react-BGHvZxdX.js";import{q as E,S as C,E as S,F as h,T as z,W as j,X as p,b as A,c0 as k,fx as R,ck as P,I as F,B as $,bR as B,s as u,fy as O,ag as q,d as D,O as W}from"./workbench-shared-DT5eicUP.js";import{c as M,b as V,a as H,d as L,f as _,p as g,e as w,g as K,i as G,h as X}from"./announcementDisplay-DtuUTxz3.js";import J from"./TermsOfServicePage-DhYGFrTX.js";import Q from"./PrivacyPolicyPage-qzWK7pky.js";import{R as U}from"./RichTextEditor-slhb2TYT.js";import{l as Y,m as Z,a as aa,n as ta,o as ea}from"./WorkbenchApp-CJyShsB2.js";import"./LegalDocument-CbrjkbT-.js";import{a as na,c as ca}from"./index-hkmirror2.js";import"./index-CCjgVym0.js";/* empty css */function oa(t){return G(g(t),X)}function ra(t){const n=_(g(t.title)),c=w(t.title);return n?`${n} · ${c}`:c}function T(){const[t,n]=l.useState([]),[c,x]=l.useState(!0),[i,m]=l.useState(null),o=l.useRef(null);l.useEffect(()=>{let e=!1;return(async()=>{x(!0);try{const s=await E("/api/announcements",{skipAuth:!0}),b=await s.json();!e&&s.ok&&Array.isArray(b)?n([...b].sort((d,f)=>M({title:d.title,date:d.date},{title:f.title,date:f.date}))):e||n([])}catch{e||n([])}finally{e||x(!1)}})(),()=>{e=!0}},[]),l.useEffect(()=>{if(!t.length){m(null);return}m(e=>e!=null&&t.some(s=>s.id===e)?e:t[0].id)},[t]);const r=l.useMemo(()=>t.find(e=>e.id===i)??null,[t,i]),I=l.useMemo(()=>r?V(H(L(r.content))):[],[r]);return l.useEffect(()=>{o.current&&(o.current.scrollTop=0)},[i]),c?a.jsx("div",{className:"ann-changelog",children:a.jsx("div",{className:"ann-changelog__loading",children:a.jsx(C,{})})}):t.length?a.jsx("div",{className:"ann-changelog",children:a.jsxs("div",{className:"ann-changelog__layout",children:[a.jsxs("aside",{className:"ann-changelog__catalog","aria-label":"çæ¬ç®å½",children:[a.jsxs("div",{className:"ann-changelog__catalog-head",children:[a.jsx("h2",{className:"ann-changelog__catalog-title",children:"æ´æ°ç®å½"}),a.jsx("p",{className:"ann-changelog__catalog-hint",children:"çæ¬å·æ ¼å¼ï¼v主.次.修订.çä¿®"})]}),a.jsx("div",{className:"ann-changelog__catalog-scroll",children:a.jsx("ul",{className:"ann-changelog__catalog-list",children:t.map(e=>{const s=e.id===i,b=_(g(e.title))??e.date,d=w(e.title),f=oa(e.title);return a.jsx("li",{className:"ann-changelog__catalog-item",children:a.jsxs("button",{type:"button",className:`ann-changelog__catalog-btn${s?" is-active":""}`,"aria-current":s?"true":void 0,onClick:()=>m(e.id),children:[a.jsxs("span",{className:"ann-changelog__catalog-main",children:[a.jsx("span",{className:"ann-changelog__catalog-version",children:b}),d?a.jsx("span",{className:"ann-changelog__catalog-summary",title:d,children:d}):null,a.jsx("span",{className:"ann-changelog__catalog-date",children:K(e.date)})]}),a.jsx("span",{className:`ann-changelog__catalog-current${f?"":" is-placeholder"}`,"aria-hidden":f?void 0:!0,children:"å½åçæ¬"})]})},e.id)})})})]}),a.jsx("main",{ref:o,className:"ann-changelog__detail","aria-live":"polite",children:r?a.jsxs(a.Fragment,{children:[a.jsx("h2",{className:"ann-changelog__detail-title",children:ra(r)}),a.jsxs("ul",{className:"ann-changelog__detail-meta",children:[a.jsxs("li",{children:[a.jsx("strong",{children:"å叿¥æï¼"}),a.jsx("time",{dateTime:r.date,children:r.date})]}),g(r.title)?a.jsxs("li",{children:[a.jsx("strong",{children:"åå¸çæ¬ï¼"}),_(g(r.title))]}):null,a.jsxs("li",{children:[a.jsx("strong",{children:"æ´æ°ç±»åï¼"}),r.type]})]}),a.jsx("hr",{className:"ann-changelog__detail-divider"}),a.jsx("h3",{className:"ann-changelog__detail-section-title",children:"è¯¥çæ¬ä¸»è¦æ´æ°å¦ä¸ï¼"}),a.jsx("ul",{className:"ann-changelog__detail-list",children:I.map(e=>a.jsx("li",{children:e},e))})]}):a.jsx("div",{className:"ann-changelog__detail-empty",children:"è¯·éæ©å·¦ä¾§çæ¬æ¥ç详æ "})})]})}):a.jsx("div",{className:"ann-changelog",children:a.jsx("div",{className:"ann-changelog__loading",children:a.jsx(S,{description:"ææ çæ¬å ¬å"})})})}const{Title:y,Paragraph:la}=z,sa="[email protected]",ia="zhenchengoffer",da=[{value:"bug",label:"ææ¯ä¸åè½å¼å¸¸ (Bug)"},{value:"feature",label:"产å建议ä¸åè½éæ±"},{value:"account",label:"è´¦å·ãæéä¸å¥é¤"},{value:"business",label:"åå¡å使´½è°"},{value:"other",label:"å ¶ä»é®é¢"}];function v({value:t,label:n}){const c=async()=>{try{await navigator.clipboard.writeText(t),u.success("å·²å¤å¶å°åªè´´æ¿")}catch{u.error("å¤å¶å¤±è´¥ï¼è¯·æå¨éæ©å¤å¶")}};return a.jsxs("div",{className:"contact-copy-field",children:[n&&a.jsx("div",{className:"contact-copy-field__label",children:n}),a.jsxs("div",{className:"contact-copy-field__row",children:[a.jsx("span",{className:"contact-copy-field__value",children:t}),a.jsx("button",{type:"button",className:"contact-copy-field__btn",onClick:c,"aria-label":"å¤å¶",children:a.jsx(O,{})})]})]})}function ha(){const[t]=h.useForm(),n=async c=>{console.log("Feedback submitted:",c),u.success("å·¥åå·²æäº¤ï¼æä»¬ä¼å°½å¿«å¤çã"),t.resetFields()};return a.jsxs("div",{className:"contact-page",children:[a.jsx("style",{children:` 2 .contact-page { 3 max-width: 1040px; 4 margin: 0 auto; 5 padding: 4px 0 40px; 6 } 7 .contact-channel-card { 8 height: 100%; 9 background: #ffffff; 10 border-radius: 20px; 11 border: 1px solid rgba(0, 0, 0, 0.06); 12 box-shadow: 0 4px 20px -8px rgba(0, 0, 0, 0.08); 13 padding: 28px 28px 24px; 14 display: flex; 15 flex-direction: column; 16 } 17 .contact-channel-card__head { 18 display: flex; 19 gap: 14px; 20 align-items: center; 21 flex-shrink: 0; 22 } 23 .contact-channel-card__icon { 24 width: 48px; 25 height: 48px; 26 border-radius: 14px; 27 display: flex; 28 align-items: center; 29 justify-content: center; 30 flex-shrink: 0; 31 font-size: 22px; 32 } 33 .contact-channel-card__icon--mail { 34 background: #f3e8ff; 35 color: #7c3aed; 36 } 37 .contact-channel-card__icon--wechat { 38 background: #ecfdf5; 39 color: #07c160; 40 } 41 .contact-channel-card__title { 42 font-size: 17px; 43 font-weight: 700; 44 color: #1d1d1f; 45 margin: 0; 46 line-height: 1.3; 47 } 48 .contact-channel-card__desc { 49 font-size: 13px; 50 color: #86868b; 51 line-height: 1.6; 52 margin: 0; 53 min-height: calc(13px * 1.6 * 2); 54 } 55 .contact-channel-card__badge { 56 margin-left: auto; 57 flex-shrink: 0; 58 padding: 4px 10px; 59 border-radius: 999px; 60 background: #ecfdf5; 61 border: 1px solid rgba(7, 193, 96, 0.2); 62 font-size: 12px; 63 font-weight: 600; 64 color: #059669; 65 } 66 .contact-channel-card__body { 67 flex: 1; 68 display: flex; 69 flex-direction: column; 70 justify-content: flex-start; 71 gap: 12px; 72 padding: 20px 0 0; 73 min-height: 0; 74 } 75 .contact-channel-card__footer { 76 display: flex; 77 align-items: center; 78 justify-content: flex-start; 79 gap: 12px; 80 margin-top: auto; 81 padding-top: 16px; 82 border-top: 1px solid rgba(0, 0, 0, 0.05); 83 font-size: 12px; 84 color: #86868b; 85 flex-wrap: wrap; 86 flex-shrink: 0; 87 } 88 .contact-channel-card__footer-item { 89 display: inline-flex; 90 align-items: center; 91 gap: 6px; 92 } 93 .contact-copy-field { 94 margin-top: 0; 95 } 96 .contact-copy-field__label { 97 font-size: 12px; 98 color: #86868b; 99 margin-bottom: 6px; 100 } 101 .contact-copy-field__row { 102 display: flex; 103 align-items: center; 104 gap: 8px; 105 padding: 10px 12px; 106 background: #ffffff; 107 border-radius: 12px; 108 border: 1px solid rgba(0, 0, 0, 0.08); 109 } 110 .contact-copy-field__value { 111 flex: 1; 112 min-width: 0; 113 font-size: 14px; 114 font-weight: 600; 115 color: #1d1d1f; 116 word-break: break-all; 117 } 118 .contact-copy-field__btn { 119 flex-shrink: 0; 120 width: 32px; 121 height: 32px; 122 border: none; 123 border-radius: 8px; 124 background: #ffffff; 125 color: #86868b; 126 cursor: pointer; 127 display: flex; 128 align-items: center; 129 justify-content: center; 130 transition: all 0.15s ease; 131 box-shadow: 0 1px 2px rgba(0,0,0,0.06); 132 } 133 .contact-copy-field__btn:hover { 134 color: #1d1d1f; 135 background: #fafafa; 136 } 137 .contact-qr-card { 138 height: 100%; 139 background: #ffffff; 140 border-radius: 20px; 141 border: 1px solid rgba(0, 0, 0, 0.06); 142 box-shadow: 0 4px 20px -8px rgba(0, 0, 0, 0.08); 143 padding: 0; 144 overflow: hidden; 145 display: flex; 146 min-height: 220px; 147 } 148 .contact-qr-card img { 149 width: 100%; 150 height: 100%; 151 flex: 1; 152 display: block; 153 object-fit: cover; 154 object-position: center; 155 } 156 .contact-ticket-card { 157 background: #ffffff; 158 border-radius: 20px; 159 border: 1px solid rgba(0, 0, 0, 0.06); 160 box-shadow: 0 4px 20px -8px rgba(0, 0, 0, 0.08); 161 padding: 32px 36px 36px; 162 } 163 .contact-ticket-card__head { 164 margin-bottom: 28px; 165 } 166 .contact-ticket-form .ant-form-item-label > label { 167 color: #1d1d1f !important; 168 font-weight: 600; 169 font-size: 13px; 170 } 171 .contact-ticket-form .ant-select-selector, 172 .contact-ticket-form .ant-input { 173 border-radius: 12px !important; 174 border-color: rgba(0, 0, 0, 0.08) !important; 175 background: #ffffff !important; 176 box-shadow: none !important; 177 } 178 .contact-ticket-form .ant-select-selector:hover, 179 .contact-ticket-form .ant-input:hover { 180 border-color: rgba(0, 0, 0, 0.14) !important; 181 } 182 .contact-ticket-form .ant-select-focused .ant-select-selector, 183 .contact-ticket-form .ant-input:focus { 184 border-color: rgba(0, 0, 0, 0.22) !important; 185 box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.04) !important; 186 } 187 .contact-ticket-form .ant-form-item { 188 margin-bottom: 20px; 189 } 190 @media (max-width: 768px) { 191 .contact-ticket-card { 192 padding: 24px 20px 28px; 193 } 194 .contact-qr-card { 195 min-height: 280px; 196 } 197 } 198 199 /* é»å¤ï¼èç³»æä»¬ */ 200 html[data-zc-theme="dark"] .contact-page .ant-typography, 201 html[data-zc-theme="dark"] .contact-channel-card__title, 202 html[data-zc-theme="dark"] .contact-channel-card__desc, 203 html[data-zc-theme="dark"] .contact-channel-card__footer, 204 html[data-zc-theme="dark"] .contact-copy-field__label, 205 html[data-zc-theme="dark"] .contact-copy-field__value { 206 color: #ffffff !important; 207 } 208 html[data-zc-theme="dark"] .contact-channel-card, 209 html[data-zc-theme="dark"] .contact-qr-card, 210 html[data-zc-theme="dark"] .contact-ticket-card { 211 background: #000000 !important; 212 border-color: rgba(255, 255, 255, 0.12) !important; 213 box-shadow: none !important; 214 color: #ffffff !important; 215 } 216 html[data-zc-theme="dark"] .contact-channel-card__footer { 217 border-top-color: rgba(255, 255, 255, 0.1) !important; 218 } 219 html[data-zc-theme="dark"] .contact-copy-field__row, 220 html[data-zc-theme="dark"] .contact-copy-field__btn { 221 background: #0a0a0a !important; 222 border-color: rgba(255, 255, 255, 0.14) !important; 223 color: #ffffff !important; 224 box-shadow: none !important; 225 } 226 html[data-zc-theme="dark"] .contact-copy-field__btn:hover { 227 background: #141414 !important; 228 color: #ffffff !important; 229 } 230 html[data-zc-theme="dark"] .contact-channel-card__icon--mail { 231 background: #1c1c1e !important; 232 color: #c4b5fd !important; 233 } 234 html[data-zc-theme="dark"] .contact-channel-card__icon--wechat { 235 background: #1c1c1e !important; 236 color: #34c759 !important; 237 } 238 html[data-zc-theme="dark"] .contact-channel-card__badge { 239 background: #0a0a0a !important; 240 border-color: rgba(52, 199, 89, 0.35) !important; 241 } 242 html[data-zc-theme="dark"] .contact-ticket-form .ant-form-item-label > label { 243 color: #ffffff !important; 244 } 245 html[data-zc-theme="dark"] .contact-ticket-form .ant-select-selector, 246 html[data-zc-theme="dark"] .contact-ticket-form .ant-input { 247 background: #0a0a0a !important; 248 border-color: rgba(255, 255, 255, 0.14) !important; 249 color: #ffffff !important; 250 } 251 html[data-zc-theme="dark"] .contact-ticket-form .ant-select-selection-item, 252 html[data-zc-theme="dark"] .contact-ticket-form .ant-select-selection-
252placeholder { 253 color: #ffffff !important; 254 } 255 `}),a.jsx(y,{level:4,style:{marginBottom:24,textAlign:"center",fontSize:28,fontWeight:700,letterSpacing:"-0.02em",lineHeight:1.25,color:"#1d1d1f"},children:"èç³»æä»¬"}),a.jsxs(j,{gutter:[20,20],style:{marginBottom:28},align:"stretch",children:[a.jsx(p,{xs:24,md:12,lg:8,children:a.jsxs("div",{className:"contact-channel-card",children:[a.jsxs("div",{className:"contact-channel-card__head",children:[a.jsx("div",{className:"contact-channel-card__icon contact-channel-card__icon--mail",children:a.jsx(A,{})}),a.jsx("div",{children:a.jsx("h3",{className:"contact-channel-card__title",children:"å塿´½è°ä¸æ¯æé®ç®±"})})]}),a.jsxs("div",{className:"contact-channel-card__body",children:[a.jsx("p",{className:"contact-channel-card__desc",children:"éç¨äºäº§åå¨è¯¢ã大åä¼ä¸å使´½è°ãè´¦å·å®å¶ä¸æéå¼å¸¸çé®é¢ã"}),a.jsx(v,{value:sa})]}),a.jsx("div",{className:"contact-channel-card__footer",children:a.jsxs("span",{className:"contact-channel-card__footer-item",children:[a.jsx(k,{}),"工使¥ä¼å å¤ç · 12 å°æ¶å åå¤"]})})]})}),a.jsx(p,{xs:24,md:12,lg:8,children:a.jsxs("div",{className:"contact-channel-card",children:[a.jsxs("div",{className:"contact-channel-card__head",children:[a.jsx("div",{className:"contact-channel-card__icon contact-channel-card__icon--wechat",children:a.jsx(R,{})}),a.jsx("div",{style:{flex:1,minWidth:0},children:a.jsx("h3",{className:"contact-channel-card__title",children:"微信ä¸å±å®¢æ"})})]}),a.jsxs("div",{className:"contact-channel-card__body",children:[a.jsx("p",{className:"contact-channel-card__desc",children:"æ«ç ææç´¢æ·»å 微信ï¼è·å峿¶ççãä½¿ç¨æå¯¼åææ°ä¼æ ã"}),a.jsx(v,{value:ia})]}),a.jsx("div",{className:"contact-channel-card__footer",children:a.jsxs("span",{className:"contact-channel-card__footer-item",children:[a.jsx(k,{}),"æå¡æ¶é´ï¼å·¥ä½æ¥ 9:00 â 18:00"]})})]})}),a.jsx(p,{xs:24,md:24,lg:8,children:a.jsx("div",{className:"contact-qr-card",children:a.jsx("img",{src:"/wechat-qr.png",alt:"微信客æäºç»´ç "})})})]}),a.jsxs("div",{className:"contact-ticket-card",children:[a.jsxs("div",{className:"contact-ticket-card__head",children:[a.jsx(y,{level:4,style:{margin:"0 0 8px",fontSize:18,fontWeight:700,color:"#1d1d1f"},children:"æäº¤å¨çº¿æå¡å·¥å"}),a.jsx(la,{style:{margin:0,fontSize:13,color:"#86868b",lineHeight:1.65,maxWidth:520},children:"请尽å¯è½è¯¦ç»æè¿°éå°çåºæ¯ä¸å¤ç°æ¥éª¤ï¼æ¹ä¾¿æä»¬çææ¯å·¥ç¨å¸å¿«éå®ä½è§£å³ã"})]}),a.jsxs(h,{form:t,layout:"vertical",className:"contact-ticket-form",onFinish:n,size:"large",requiredMark:!0,initialValues:{category:"bug"},children:[a.jsxs(j,{gutter:24,children:[a.jsx(p,{xs:24,md:10,children:a.jsx(h.Item,{name:"category",label:"é®é¢åç±»",rules:[{required:!0,message:"è¯·éæ©é®é¢åç±»"}],children:a.jsx(P,{options:da})})}),a.jsx(p,{xs:24,md:14,children:a.jsx(h.Item,{name:"subject",label:"å·¥å主é¢",rules:[{required:!0,message:"请è¾å ¥å·¥å主é¢"}],children:a.jsx(F,{placeholder:"请ç®è¦æ¦æ¬æ¨éå°çé®é¢æå»ºè®®ï¼å¦ï¼å¯¼åº PDF æ ¼å¼éä¹±ï¼"})})})]}),a.jsx(h.Item,{name:"content",label:"详ç»è¯´æä¸å¤ç°æ¥éª¤",rules:[{required:!0,message:"请è¾å ¥è¯¦ç»å 容"}],children:a.jsx(U,{variant:"apple",minHeight:260,placeholder:"请æè¿°é®é¢åºæ¯ãæä½æ¥éª¤ãææç»æä¸å®é 表ç°ï¼å¦ææªå¾é¾æ¥å¯ä¸å¹¶éä¸"})}),a.jsx(h.Item,{style:{marginBottom:0,marginTop:8},children:a.jsx($,{type:"primary",htmlType:"submit",icon:a.jsx(B,{}),style:{borderRadius:12,height:44,paddingInline:32,fontSize:14,fontWeight:600,background:"#1d1d1f",border:"none"},children:"æäº¤å·¥å"})})]})]})]})}const{Title:N}=z,ma={terms:a.jsx(J,{}),privacy:a.jsx(Q,{})},fa={terms:a.jsx(W,{}),privacy:a.jsx(D,{})},pa={contact:a.jsx(ha,{}),announcements:a.jsx(T,{})};function wa(){const t=na(),{tab:n}=ca(),c=Y(n?`/docs/${n}`:"/docs");l.useEffect(()=>{(!n||!Z(n))&&t(aa(c),{replace:!0})},[n,c,t]);const x=o=>{t(`/docs/${o}`)},i=ta.map(o=>({key:o.key,label:a.jsxs("span",{className:"docs-legal-tabs__label",children:[fa[o.key],o.label]}),children:ma[o.key]})),m=c==="announcements";return a.jsxs("div",{className:`page-container${m?" page-container--announcements":""}`,style:{position:"relative",paddingTop:16,minHeight:"100%",maxWidth:1480,margin:"0 auto",overflow:"hidden"},children:[a.jsx("style",{children:` 256 .page-container--announcements { 257 /* åå¡ç¨åºå®è§å£é«åº¦ï¼é¡µé¢æ¬èº«ä¸è¦è·çæ£æåé« */ 258 overflow: hidden !important; 259 width: 100%; 260 box-sizing: border-box; 261 } 262 /* ç¦æ¢å¤å± content-area åºæ»å¨æ¡ï¼å¦åæ»å¨æ¡æ¾é伿´é¡µåçª
262 */ 263 .zc-workbench-shell .content-area:has(.page-container--announcements) { 264 overflow: hidden !important; 265 } 266 .docs-legal-shell { 267 padding: 0 12px 40px; 268 } 269 .docs-legal-shell--announcements { 270 padding-bottom: 8px; 271 } 272 .docs-legal-shell--announcements .docs-section-title { 273 margin-bottom: 12px !important; 274 } 275 .docs-section-title { 276 letter-spacing: -0.02em; 277 margin-bottom: 16px !important; 278 text-align: center; 279 color: #1d1d1f !important; 280 font-size: 28px !important; 281 font-weight: 700 !important; 282 line-height: 1.25 !important; 283 } 284 .docs-legal-tabs .ant-tabs-nav { 285 margin-bottom: 20px !important; 286 } 287 .docs-legal-tabs .ant-tabs-nav::before { 288 border-bottom-color: rgba(15, 23, 42, 0.08) !important; 289 } 290 .docs-legal-tabs .ant-tabs-tab { 291 padding: 12px 4px !important; 292 font-size: 16px; 293 color: #64748b; 294 } 295 .docs-legal-tabs .ant-tabs-tab-active .ant-tabs-tab-btn { 296 color: #1d1d1f !important; 297 font-weight: 700; 298 } 299 .docs-legal-tabs .ant-tabs-ink-bar { 300 background: #1d1d1f !important; 301 height: 3px !important; 302 } 303 .docs-legal-tabs__label { 304 display: inline-flex; 305 align-items: center; 306 gap: 8px; 307 } 308 html[data-zc-theme="dark"] .docs-section-title { 309 color: #ffffff !important; 310 } 311 html[data-zc-theme="dark"] .docs-legal-tabs .ant-tabs-nav::before { 312 border-bottom-color: rgba(255, 255, 255, 0.12) !important; 313 } 314 html[data-zc-theme="dark"] .docs-legal-tabs .ant-tabs-tab { 315 color: rgba(255, 255, 255, 0.65) !important; 316 } 317 html[data-zc-theme="dark"] .docs-legal-tabs .ant-tabs-tab-active .ant-tabs-tab-btn { 318 color: #ffffff !important; 319 } 320 html[data-zc-theme="dark"] .docs-legal-tabs .ant-tabs-ink-bar { 321 background: #ffffff !important; 322 } 323 `}),a.jsx("div",{style:{position:"relative",zIndex:1},children:ea(c)?c==="announcements"?a.jsxs("div",{className:"docs-legal-shell docs-legal-shell--announcements",children:[a.jsx(N,{level:4,className:"docs-section-title",children:"çæ¬å ¬å"}),a.jsx(T,{})]}):a.jsx("div",{style:{padding:"0 32px 32px"},children:pa[c]}):a.jsxs("div",{className:"docs-legal-shell",children:[a.jsx(N,{level:4,className:"docs-section-title",children:"åè®®ä¸æ¿ç"}),a.jsx(q,{className:"docs-legal-tabs",activeKey:c,onChange:x,items:i,size:"large",centered:!0})]})})]})}export{wa 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.