1"use strict";(self.webpackChunkwebclient_webpack=self.webpackChunkwebclient_webpack||[]).push([[5068],{58264(S,E,e){e.d(E,{O:()=>B});var d=e(67994),r=e(34124),p=e(34456),n=e(48503),g=e(28059),P=e(66531),a=e(36124);function D(i,u){1&i&&a.nrm(0,"field-input-concealed-password",5),2&i&&a.Y8G("maxlength",50)}function t(i,u){1&i&&a.nrm(0,"field-input-password",5),2&i&&a.Y8G("maxlength",50)}function y(i,u){1&i&&(a.EFF(0),a.nI1(1,"translate")),2&i&&a.JRh(a.bMT(1,1,"_i18n.PasswordWeak"))}let B=(()=>{class i{formGroup;passwordConcealed;static \u0275fac=function(C){return new(C||i)};static \u0275cmp=a.VBU({type:i,selectors:[["app-backup-options"]],inputs:{formGroup:"formGroup",passwordConcealed:"passwordConcealed"},decls:9,vars:2,consts:[[3,"formGroup"],["data-qa","recordings","label","_i18n.IncludeLocalRecordings","formControlName","Recordings"],["data-qa","disable-backup-compression","label","_i18n.DisableBackupCompression","formControlName","DisableBackupCompression","description","_i18n.DisableBackupCompressionNotice"],[1,"d-flex","flex-wrap","gap-2","align-items-center"],["data-qa","encrypt-backup","label","_i18n.BackupEncryptionPassword","formControlName","EncryptBackup",1,"mb-0"],["data-qa","encrypt-backup-password","formControlName","EncryptBackupPassword",1,"mb-0",3,"maxlength"],["controlName","EncryptBackupPassword","label","_i18n.BackupEncryptionPassword",1,"form-control-validation"],["valError","pattern"]],template:function(C,M){1&C&&(a.qex(0,0),a.nrm(1,"field-checkbox",1)(2,"field-checkbox",2),a.j41(3,"div",3),a.nrm(4,"field-checkbox",4),a.nVh(5,D,1,1,"field-input-concealed-password",5)(6,t,1,1,"field-input-password",5),a.k0s(),a.j41(7,"val-errors",6),a.DNE(8,y,2,3,"ng-template",7),a.k0s(),a.bVm()),2&C&&(a.Y8G("formGroup",M.formGroup),a.R7$(5),a.vxM(M.passwordConcealed?5:6))},dependencies:[d.t,r.$,p.X1,p.BC,p.cb,p.tU,p.j4,p.JD,g.VI,g.IH,P.p,n.D9],encapsulation:2})}return i})()},18540(S,E,e){e.d(E,{K:()=>k});var d=e(37580),r=e(66563),p=e(23124),n=e(34456),g=e(49855),P=e(28208),a=e(14669),D=e(93904),t=e(2654),y=e(91817),B=e(49074),i=e(30225),u=e(67994),h=e(14364),C=e(92967),M=e(28059),R=e(79676),T=e(58264),f=e(36124);function I(s,b){1&s&&(f.nrm(0,"field-checkbox",2),f.j41(1,"div",3)(2,"div",4)(3,"field-wrapper"),f.nrm(4,"app-schedule",5)(5,"val-errors",6),f.k0s()(),f.j41(6,"div",7)(7,"field-input-number",8),f.nrm(8,"val-errors",9),f.k0s()()()),2&s&&(f.R7$(4),f.Y8G("enableHourly",!0),f.R7$(3),f.Y8G("inlineLabel",!0)("min",1)("max",30))}let k=(()=>{class s extends p.m{backupsApi=(0,r.WQX)(P.t);cd=(0,r.WQX)(d.gRc);xapiError=(0,r.WQX)(D.Ko);destroy$=(0,r.WQX)(r.abz);buttons=g.P.OkCancel;initialValue;openedFromStorage=!1;form=new n.gE({ScheduleEnabled:new n.MJ(!1,{nonNullable:!0}),Rotation:new n.MJ(3,{nonNullable:!0}),Schedule:new n.MJ(null),Contents:new n.gE({Recordings:new n.MJ(!0,{nonNullable:!0}),EncryptBackup:new n.MJ(!1,{nonNullable:!0}),EncryptBackupPassword:new n.MJ({Value:""},{nonNullable:!0,validators:a.ln.map(a.ys)}),FQDN:new n.MJ(!0),CallHistory:new n.MJ(!0),License:new n.MJ(!0),PhoneProvisioning:new n.MJ(!0),Prompts:new n.MJ(!0),VoiceMails:new n.MJ(!0),DisableBackupCompression:new n.MJ(!1,{nonNullable:!0})})});validateBeforeSubmit=this.createDialogValidate(this.form,this.cd);get f(){return this.form.controls}ngOnInit(){const{Schedule:l,ScheduleEnabled:c,Contents:o,Rotation:m}=this.initialValue;this.form.patchValue({ScheduleEnabled:c??!1,Rotation:m??3,Schedule:l??null,Contents:{Recordings:o?.Recordings??!0,EncryptBackup:o?.EncryptBackup??!1,EncryptBackupPassword:o?.EncryptBackupPassword,DisableBackupCompression:o?.DisableBackupCompression??!1}}),(0,t.XP)(this.form).pipe((0,y.F)((_,v)=>_.ScheduleEnabled===v.ScheduleEnabled&&_.Contents?.EncryptBackup===v.Contents?.EncryptBackup),(0,B.pQ)(this.destroy$)).subscribe(_=>{(0,t.sS)([this.f.Schedule,this.f.Contents,this.f.Rotation],_.ScheduleEnabled),(0,t.TZ)(this.f.Contents.controls.EncryptBackupPassword,this.form.value.Contents?.EncryptBackup)})}submit$=()=>this.backupsApi.setBackupSettings({backupsSetBackupSettingsRequestBody:{settings:this.openedFromStorage?{Contents:this.form.value.Contents}:this.form.value}}).pipe(this.handleError(this.xapiError,this.cd,this.form));static \u0275fac=(()=>{let l;return function(o){return(l||(l=f.xGo(s)))(o||s)}})();static \u0275cmp=f.VBU({type:s,selectors:[["app-schedule-backup-modal"]],hostVars:2,hostBindings:function(c,o){2&c&&f.AVh("modal-lg",!0)},inputs:{initialValue:"initialValue",openedFromStorage:"openedFromStorage"},features:[f.Vt3],decls:3,vars:8,consts:[["header","_i18n.BackupScheduling",3,"buttons","waitRecalculationsBeforeSave","submit$","formGroup","validateBeforeSubmit"],[3,"formGroup","passwordConcealed"],["label","_i18n.BackupScheduleEnabled","formControlName","ScheduleEnabled"],[1,"row"],[1,"col-12"],["formControlName","Schedule",3,"enableHourly"],["controlName","Schedule"],[1,"col-6"],["label","_i18n.Rotation","formControlName","Rotation",3,"inlineLabel","min","max"],["controlName","Rotation"]],template:function(c,o){1&c&&(f.
1j41(0,"app-modal-dialog",0),f.nVh(1,I,9,4),f.nrm(2,"app-backup-options",1),f.k0s()),2&c&&(f.Y8G("buttons",o.buttons)("waitRecalculationsBeforeSave",!0)("submit$",o.submit$)("formGroup",o.form)("validateBeforeSubmit",o.validateBeforeSubmit),f.R7$(),f.vxM(o.openedFromStorage?-1:1),f.R7$(),f.Y8G("formGroup",o.form.controls.Contents)("passwordConcealed",!0))},dependencies:[i.p,n.X1,n.BC,n.cb,n.j4,n.JD,u.t,h.z,C.b,M.IH,R.B,T.O],encapsulation:2,changeDetection:0})}return s})()},89292(S,E,e){e.d(E,{s:()=>d});class d{cd;disabled=!1;touched=!1;onChange=p=>{};onTouched=()=>{};constructor(p){this.cd=p}registerOnChange(p){this.onChange=p}registerOnTouched(p){this.onTouched=p}markAsTouched(p=!1){(!this.touched||p)&&(this.onTouched(),this.touched=!0),this.cd.markForCheck()}setDisabledState(p){this.disabled=p,this.cd.markForCheck()}onBlur(p){this.markAsTouched(!0)}}},78484(S,E,e){e.d(E,{x:()=>k});var d=e(23124),r=e(30225),p=e(43269),n=e(66563),g=e(37580),P=e(34456),a=e(89292),D=e(44376),t=e(36124);let y=(()=>{class s extends D.d{getDirectoryInfo(l,c="body"){const o=l?.actionImportGetDirectoryInfoRequestBody;if(null==o)throw new Error("Required parameter actionImportGetDirectoryInfoRequestBody was null or undefined when calling getDirectoryInfo.");let m=this.defaultHeaders;m=this.configuration.addCredentialToHeaders("Application","Authorization",m,"Bearer ");const _=this.configuration.selectHeaderAccept(["application/json"]);void 0!==_&&(m=m.set("Accept",_));const O=this.configuration.selectHeaderContentType(["application/json"]);void 0!==O&&(m=m.set("Content-Type",O));let w="json";_&&(w=_.startsWith("text")?"text":this.configuration.isJsonMime(_)?"json":"blob");const{basePath:N,withCredentials:F}=this.configuration;return this.httpClient.request("post",`${N}/GetDirectoryInfo`,{body:o,responseType:w,...F?{withCredentials:F}:{},headers:m,observe:c})}getDirectoryInfoQuery(l,c="body",o=!1,m){if(null==l.actionImportGetDirectoryInfoRequestBody)throw new Error("Required parameter actionImportGetDirectoryInfoRequestBody was null or undefined when calling getDirectoryInfo.");return"/GetDirectoryInfo"}static \u0275fac=(()=>{let l;return function(o){return(l||(l=t.xGo(s)))(o||s)}})();static \u0275prov=n.jDH({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();var B=e(48503);const i=(s,b)=>b.path;function u(s,b){if(1&s){const l=t.RV6();t.j41(0,"li",5)(1,"a",6),t.bIt("click",function(o){const m=n.eBV(l),_=m.$implicit,v=m.$index,O=m.$count,w=t.XpG();return n.Njj(w.goToPath(o,_,v===O-1))}),t.EFF(2),t.k0s()()}if(2&s){const l=b.$implicit;t.AVh("active",b.$index===b.$count-1),t.R7$(2),t.JRh(l.crumb)}}function h(s,b){if(1&s&&(t.j41(0,"option",3),t.EFF(1),t.k0s()),2&s){const l=b.$implicit;t.Y8G("ngValue",l),t.R7$(),t.JRh(l)}}function C(s,b){1&s&&(t.j41(0,"p",4),t.EFF(1),t.nI1(2,"translate"),t.k0s()),2&s&&(t.R7$(),t.JRh(t.bMT(2,1,"_i18n.ErrorUnableToReadDirectory")))}function M(s){let b=s.replace(/\\/g,"/");for(;b.endsWith("/")&&b.length>1;)b=b.substring(0,b.length-1);return b}function T(s,b){return"."!==b&&".."!==b&&b?s?`${function R(s){return`${s}${s.endsWith("/")||s.endsWith("\\")?"":"/"}`}(s)}${b}`:b:s}let f=(()=>{class s extends a.s{directoriesApiService=(0,n.WQX)(y);basePath;breadCrumbs=[];filesystem;json;dir="";dirs=[];error;constructor(){super((0,n.WQX)(g.gRc))}updateBreadcrumbs(){const l=this.basePath??"",c=l.includes("/")?"/":"\\",o=l.split(c).filter(_=>!!_),m=o.map((_,v)=>({path:o.slice(0,v+1).join(c),crumb:_}));m.unshift({crumb:"..",path:""}),this.breadCrumbs=m,this.cd.markForCheck()}goToPath(l,c,o){l.preventDefault(),!o&&this.readDirectories(c.path)}readDirectories(l){this.directoriesApiService.getDirectoryInfo({actionImportGetDirectoryInfoRequestBody:{parameters:{Path:l,Filesystem:this.filesystem,Json:this.json}}}).subscribe({next:c=>{this.error=!1,this.basePath=M(c.Path??""),c.Dirs?.sort(),""!==this.basePath?(c.Dirs?.unshift(".."),this.dir=".."):this.filesystem===p.C.GoogleBucket||this.filesystem===p.C.SharePoint?(c.Dirs?.unshift("/"),this.dir="/"):this.dir=c.Dirs?c.Dirs[0]:"",this.dirs=c.Dirs??[],this.valueChanged(),this.updateBreadcrumbs()},error:()=>{this.error=!0,this.cd.markForCheck()}})}onKeyDown(l,c){l.stopPropagation(),"Enter"===l.code&&this.onDirectoryDblClick(c)}onDirectoryDblClick(l){let c;c=".."===l?this.basePath.substring(0,this.basePath.lastIndexOf("/"))+"/":T(this.basePath,l),this.readDirectories(c)}writeValue(l){null!=l&&(this.basePath=M(l),this.readDirectories(this.basePath),this.dir="",this.cd.markForCheck())}valueChanged(){this.onChange(T(this.basePath,this.dir))}static \u0275fac=function(c){return new(c||s)};static \u0275cmp=t.VBU({type:s,selectors:[["app-location-path"]],inputs:{filesystem:"filesystem",json:"json"},features:[t.Jv_([{provide:P.kq,useExisting:s,multi:!0}]),t.Vt3],decls:7,vars:2,consts:[[1,"breadcrumb"],[1,"breadcrumb-item",3,"active"],["size","10","data-qa","directory-list",1,"form-select","list-box","w-100",3,"dblclick","ngModelChange","keydown","ngModel"],["data-qa","directory",3,"ngValue"],["data-qa","read-error",1,"val-errors"],[1,"breadcrumb-item"],["href","#","type","button","data-qa","breadcrumb",3,"click"]],template:function(c,o){1&c&&(t.j41(0,"ol",0),t.Z7z(1,u,3,3,"li",1,i),t.k0s(),t.j41(3,"select",2),t.bIt("dblclick",function(){return o.onDirectoryDblClick(o.dir)}),t.mxI("ngModelChange",function(_){return t.DH7(o.dir,_)||(o.dir=_),_}),t.bIt("ngModelChange",function(){return o.valueChanged()})("keydown",function(_){return o.onKeyDown(_,o.dir)}),t.Z7z(4,h,2,2,"option",3,t.fX1),t.k0s(),t.nVh(6,C,3,3,"p",4)),2&c&&(t.R7$(),t.Dyx(o.breadCrumbs),t.R7$(2),t.R50("ngModel",o.dir),t.R7$(),t.Dyx(o.dirs),t.R7$(2),t.vxM(o.error?6:-1))},dependencies:[P.YN,P.xH,P.y7,P.wz,P.BC,P.vS,B.D9],encapsulation:2,changeDetection:0})}return s})();var I=e(49855);let k=(()=>{class s extends d.m{buttons=I.P.Ok;fileSystem=p.C.Local;path="";json;getPayload(){return this.path}static \u0275fac=(()=>{let l;return function(o){return(l||(l=t.xGo(s)))(o||s)}})();static \u0275cmp=t.VBU({type:s,selectors:[["ng-component"]],inputs:{fileSystem:"fileSystem",path:"path",json:"json"},features:[t.Vt3],decls:2,vars:4,consts:[["header","_i18n.SelectDirectory",3,"submitted","buttons"],[3,"ngModelChange","ngModel","json","filesystem"]],template:function(c,o){1&c&&(t.j41(0,"app-modal-dialog",0),t.bIt("submitted",function(){return o.onSubmit()}),t.j41(1,"app-location-path",1),t.mxI("ngModelChange",function(_){return t.DH7(o.path,_)||(o.path=_),_}),t.k0s()()),2&c&&(t.Y8G("buttons",o.buttons),t.R7$(),t.R50("ngModel",o.path),t.Y8G("json",o.json)("filesystem",o.fileSystem))},dependencies:[r.p,f,P.YN,P.BC,P.vS],encapsulation:2,changeDetection:0})}return s})()},64336(S,E,e){e.d(E,{C6:()=>D,Z3:()=>B,sP:()=>y,ut:()=>t,y$:()=>a});var d=e(43269),r=e(34456),p=e(14669),n=e(2654),g=e(45620);const a={FtpPath:[r.k0.required,(0,p.iM)("ftp://","ftps://","ftpes://"),p.QO,(0,p.hx)("ftp://","ftps://","ftpes://"),(0,p.IF)(!0)],NsPath:[r.k0.required,(0,p.iM)("smb://"),p.QO],SftpPath:[r.k0.required,p.QO,(0,p.iM)("sftp://"),(0,p.IF)(!0)],SharePointPath:[r.k0.required],LocalPath:[r.k0.required],GbJson:[r.k0.required],GbPath:[r.k0.required],S3Path:[r.k0.required],SftpHostKeyFingerprint:[r.k0.pattern(/^[A-Za-z0-9+/=]+$/)]};function D(i){const u=y(i);return new r.gE({SftpHostKeyFingerprint:new r.MJ(u.SftpHostKeyFingerprint,{nonNullable:!0,validators:a.SftpHostKeyFingerprint}),FileSystemType:new r.MJ(u.FileSystemType,{nonNullable:!0}),FtpPassword:new r.MJ(u.FtpPassword,{nonNullable:!0}),FtpPath:new r.MJ(u.FtpPath,{nonNullable:!0,validators:a.FtpPath}),FtpUser:new r.MJ(u.FtpUser,{nonNullable:!0}),GbJson:new r.MJ(u.GbJson,{nonNullable:!0,validators:a.GbJson}),GbPath:new r.MJ(u.GbPath,{nonNullable:!0,validators:a.GbPath}),LocalPath:new r.MJ(u.LocalPath,{nonNullable:!0,validators:a.LocalPath}),NsDomain:new r.MJ(u.NsDomain,{nonNullable:!0}),NsPassword:new r.MJ(u.NsPassword,{nonNullable:!0}),NsPath:new r.MJ(u.NsPath,{nonNullable:!0,validators:a.NsPath}),NsUser:new r.MJ(u.NsUser,{nonNullable:!0}),S3Path:new r.MJ(u.S3Path,{nonNullable:!0,validators:a.S3Path}),SftpPassword:new r.MJ(u.SftpPassword,{nonNullable:!0}),SftpPath:new r.MJ(u.SftpPath,{nonNullable:!0,validators:a.SftpPath}),SftpPrivateKey:new r.MJ(u.SftpPrivateKey,{nonNullable:!0}),SftpUser:new r.MJ(u.SftpUser,{nonNullable:!0}),SharePointPath:new r.MJ(u.SharePointPath,{nonNullable:!0,validators:a.SharePointPath}),FtpValidateCertificate:new r.MJ(u.FtpValidateCertificate,{nonNullable:!0})})}function t(i,u){if(i.disabled)return;const h=i.controls,C=h.FileSystemType.value;(0,n.sS)([h.FtpPath,h.FtpPassword,h.FtpUser,h.FtpValidateCertificate],C===d.C.Ftp),(0,n.sS)([h.GbJson,h.GbPath],C===d.
1C.GoogleBucket),(0,n.sS)([h.NsDomain,h.NsUser,h.NsPath,h.NsPassword],C===d.C.NetworkShare),(0,n.sS)([h.SftpPrivateKey,h.SftpPassword,h.SftpPath,h.SftpUser,h.SftpHostKeyFingerprint],C===d.C.Sftp),(0,n.TZ)(h.SharePointPath,C===d.C.SharePoint),(0,n.TZ)(h.S3Path,C===d.C.AmazonS3),(0,n.TZ)(h.LocalPath,C===d.C.Local&&u),(0,n.TZ)(h.GbPath,"VALID"===h.GbJson.status)}function y(i){const{GbJson:u,SftpPrivateKey:h,...C}=function P(i){return{SftpHostKeyFingerprint:i?.SftpHostKeyFingerprint??"",FileSystemType:i?.FileSystemType??d.C.Local,FtpPassword:i?.FtpPassword??{Value:""},FtpPath:i?.FtpPath??"",FtpUser:i?.FtpUser??"",GbJson:i?.GbJson??{Contents:""},GbPath:i?.GbPath??"",LocalPath:i?.LocalPath??"",NsDomain:i?.NsDomain??"",NsPassword:i?.NsPassword??{Value:""},NsPath:i?.NsPath??"",NsUser:i?.NsUser??"",S3Path:i?.S3Path??"",SftpPassword:i?.SftpPassword??{Value:""},SftpPath:i?.SftpPath??"",SftpPrivateKey:i?.SftpPrivateKey??{Contents:""},SftpUser:i?.SftpUser??"",SharePointPath:i?.SharePointPath??"",FtpValidateCertificate:i?.FtpValidateCertificate??!1}}(i);return{...C,GbJson:(0,g.s)(u),SftpPrivateKey:(0,g.s)(h)}}function B(i){const{GbJson:u,GbPath:h,SftpPrivateKey:C,...M}=i;return{...M,...M.FileSystemType===d.C.GoogleBucket&&{GbJson:(0,g.W)(u??{name:"",content:""}),GbPath:h||""},...M.FileSystemType===d.C.Sftp&&{SftpPrivateKey:(0,g.W)(C??{name:"",content:""})}}}},81289(S,E,e){e.d(E,{f:()=>p});var d=e(36124),r=e(66563);let p=(()=>{class n{static \u0275fac=function(a){return new(a||n)};static \u0275cmp=d.VBU({type:n,selectors:[["app-arrow-alt-circle-up-solid-icon"],["","app-arrow-alt-circle-up-solid-icon",""]],decls:2,vars:0,consts:[["xmlns","http://www.w3.org/2000/svg","viewBox","0 0 512 512"],["d","M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"]],template:function(a,D){1&a&&(r.qSk(),d.rj2(0,"svg",0),d.Hgh(1,"path",1),d.eux())},encapsulation:2})}return n})()},97600(S,E,e){e.d(E,{S:()=>p});var d=e(36124),r=e(66563);let p=(()=>{class n{static \u0275fac=function(a){return new(a||n)};static \u0275cmp=d.VBU({type:n,selectors:[["app-ellipsis-h-regular-icon"],["","app-ellipsis-h-regular-icon",""]],decls:2,vars:0,consts:[["xmlns","http://www.w3.org/2000/svg","viewBox","0 0 512 512"],["d","M304 256c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48 48 21.5 48 48zm120-48c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-336 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z"]],template:function(a,D){1&a&&(r.qSk(),d.rj2(0,"svg",0),d.Hgh(1,"path",1),d.eux())},encapsulation:2})}return n})()},31862(S,E,e){e.d(E,{Q:()=>p});var d=e(36124),r=e(66563);let p=(()=>{class n{static \u0275fac=function(a){return new(a||n)};static \u0275cmp=d.VBU({type:n,selectors:[["app-pencil-alt-solid-icon"],["","app-pencil-alt-solid-icon",""]],decls:2,vars:0,consts:[["xmlns","http://www.w3.org/2000/svg","viewBox","0 0 512 512"],["d","m497.9 142.1-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8 21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"]],template:function(a,D){1&a&&(r.qSk(),d.rj2(0,"svg",0),d.Hgh(1,"path",1),d.eux())},encapsulation:2})}return n})()}}]);
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.