diff options
Diffstat (limited to 'appl/demo/camera')
| -rw-r--r-- | appl/demo/camera/camera.b | 2557 | ||||
| -rw-r--r-- | appl/demo/camera/camera.dis | bin | 0 -> 37619 bytes | |||
| -rw-r--r-- | appl/demo/camera/camera.sbl | 6687 | ||||
| -rw-r--r-- | appl/demo/camera/camload.bit | bin | 0 -> 53700 bytes | |||
| -rw-r--r-- | appl/demo/camera/camproc.bit | bin | 0 -> 7650 bytes | |||
| -rw-r--r-- | appl/demo/camera/mkfile | 42 | ||||
| -rwxr-xr-x | appl/demo/camera/runcam.sh | 3 | ||||
| -rwxr-xr-x | appl/demo/camera/runcamlocal.sh | 3 | ||||
| -rw-r--r-- | appl/demo/camera/tkinterface.b | 2508 | ||||
| -rw-r--r-- | appl/demo/camera/tkinterface.dis | bin | 0 -> 56826 bytes | |||
| -rw-r--r-- | appl/demo/camera/tkinterface.sbl | 7950 |
11 files changed, 19750 insertions, 0 deletions
diff --git a/appl/demo/camera/camera.b b/appl/demo/camera/camera.b new file mode 100644 index 00000000..9bfff91b --- /dev/null +++ b/appl/demo/camera/camera.b @@ -0,0 +1,2557 @@ +implement Camera; + +include "sys.m"; + sys : Sys; +include "daytime.m"; + daytime: Daytime; +include "styx.m"; + styx: Styx; + Rmsg, Tmsg: import styx; +include "styxservers.m"; + styxservers: Styxservers; + Fid, Navigator, Navop: import styxservers; + Styxserver, Eexists, Eperm, Ebadfid, Enotdir, Enotfound, Ebadarg: import styxservers; + nametree: Nametree; + Tree: import nametree; +include "string.m"; + str : String; +include "draw.m"; +include "arg.m"; + +Camera : module { + init : fn (nil : ref Draw->Context, argv : list of string); +}; + +cdp_get_product_info: con 16r01; +cdp_get_image_specifications: con 16r02; +cdp_get_camera_status: con 16r03; +cdp_set_product_info: con 16r05; +cdp_get_camera_capabilities: con 16r10; +cdp_get_camera_state: con 16r11; +cdp_set_camera_state: con 16r12; +cdp_get_camera_defaults: con 16r13; +cdp_set_camera_defaults: con 16r14; +cdp_restore_camera_states: con 16r15; +cdp_get_scene_analysis: con 16r18; +cdp_get_power_mode: con 16r19; +cdp_set_power_mode: con 16r1a; +cdp_get_s1_mode: con 16r1d; +cdp_set_s1_mode: con 16r1e; +cdp_start_capture: con 16r30; +cdp_get_file_list: con 16r40; +cdp_get_new_file_list: con 16r41; +cdp_get_file_data: con 16r42; +cdp_erase_file: con 16r43; +cdp_get_storage_status: con 16r44; +cdp_set_file_data: con 16r47; +cdp_get_file_tag: con 16r48; +cdp_set_user_file_tag: con 16r49; +cdp_get_clock: con 16r70; +cdp_set_clock: con 16r71; +cdp_get_error: con 16r78; +cdp_get_interface_timeout: con 16r90; +cdp_set_interface_timeout: con 16r91; + +cdp_header_len: con 12; + +T_DIR: con 0; +T_CTL: con 1; +T_ABILITIES: con 2; +T_TIME: con 3; +T_JPGDIR: con 4; +T_JPG: con 5; +T_STORAGE: con 6; +T_POWER: con 7; +T_THUMB: con 8; +T_THUMBDIR: con 9; +T_STATE: con 10; +T_INTERFACE: con 11; + +MAXFILESIZE : con 5000000; +TIMEOUT : con 4000; + +nextjpgqid, nexttmbqid, dirqid, Qctl, Qabl, Qstore: int; +Qstate, Qtime, Qjpgdir, Qpwr, Qthumbdir, Qinterface : int; + +error_table := array [] of { + "No Error", + "Unimplemented", + "Unsupported Version", + "Application Timeout", + "Internal Error", + "Parameter Error", + "File System Null", + "File Not Found", + "Data Section Not Found", + "Invalid File Type", + "Unknown Drive", + "Drive Not Mounted", + "System Busy", + "Battery Low", +}; + +bintro := array [] of { + byte 16ra5, + byte 16r5a, + byte 16r00, + byte 16rc8, + byte 16r00, + byte 16r02, + byte 16rc9, +}; + +bak := array [] of { + byte 16r5a, # 2 byte header + byte 16ra5, + byte 16r55, # I/F Type + byte 16r00, # Comm Flag + byte 16r00, + byte 16r00, + byte 16r00, + byte 16r00, + byte 16r00, + byte 16r00, + byte 16r00, + byte 16r00, + byte 16r00, +}; + +pwl := array[] of { + byte 0, + byte 0, +}; + +pak := array [] of { + byte 0, + byte 0, +}; + +SERIAL, USB, IRDA: con (1<<iota); +BEACON, BEACONRESULT: con (1<<iota); + +Camera_adt: adt { + port_type: int; + port_num: int; + command: int; + mode: int; + fd: ref Sys->FD; + ctlfd: ref Sys->FD; + cdp: array of byte; + bufbytes: int; + baud: int; + dfs, hfs: int; # device and host frame sizes + stat: int; # eia status file +}; + +statopt := array[] of { + "status", + "stat", +}; + +DL_QUANTA: con 20000; + +TOUT: con -1729; + +Partialtag: adt { + offset, length, filesize: int; +}; + +Cfile: adt { + driveno: int; + pathname: array of byte; + dosname: array of byte; + filelength: int; + filestatus: int; + thumblength: int; + thumbqid: int; +}; + +Fitem : adt { + qid: Sys->Qid; + cf: Cfile; +}; + +C: Camera_adt; + +filelist: array of Fitem; +reslength: int; +currentstate := ""; +wait : int; +usecache := 0; +connected : int; +recon := 0; +verbosity := 4; +interfacepath := ""; +interfacepaths : array of string; +camname := ""; +gpid : int; + +init(nil : ref Draw->Context, argv : list of string) +{ + err: string; + sys = load Sys Sys->PATH; + gpid = sys->pctl(Sys->NEWPGRP, nil); + + str = load String String->PATH; + daytime = load Daytime Daytime->PATH; + + styx = load Styx Styx->PATH; + styx->init(); + styxservers = load Styxservers Styxservers->PATH; + styxservers->init(styx); + nametree = load Nametree Nametree->PATH; + nametree->init(); + arg := load Arg Arg->PATH; + + filelist = array[200] of Fitem; + C.port_num = 0; # XXXXX from argv + C.port_type = SERIAL; # Serial only for now + C.baud = 115200; + C.dfs = C.hfs = 1023; + C.cdp = array [DL_QUANTA] of byte; + C.mode = BEACON; + + ex.pnum = -1; + ex.offset = -1; + cachelist = nil; + + nextjpgqid = getqid(1, T_JPG); + nexttmbqid = getqid(1, T_THUMB); + dirqid = getqid(1,T_JPGDIR); + Qctl = getqid(Qroot,T_CTL); + Qabl = getqid(Qroot,T_ABILITIES); + Qstore = getqid(Qroot,T_STORAGE); + Qtime = getqid(Qroot,T_TIME); + Qstate = getqid(Qroot,T_STATE); + Qpwr = getqid(Qroot,T_POWER); + Qjpgdir = getqid(Qroot,T_JPGDIR); + Qthumbdir = getqid(Qroot,T_THUMBDIR); + Qinterface = getqid(Qroot,T_INTERFACE); + + camname = "Camera"; + extrafilelist: list of string = nil; + arg->init(argv); + arg->setusage("camera [-b baud] [-F framesize] [-f extrafiles] [-p port] [-n name] [-v verbosity]"); + while ((opt := arg->opt()) != 0) { + case opt { + 'n' => + camname = arg->earg(); + 'v' => + verbosity = int arg->earg(); + 'F' => + C.dfs = C.hfs = int arg->earg(); + 'b' => + C.baud = int arg->earg(); + 'p' => + C.port_num = int arg->earg(); + 'c' => + usecache = 1; + 'f' => + extrafilelist = arg->earg() :: extrafilelist; + * => + arg->usage(); + } + } + arg = nil; + interfacepaths = array[len extrafilelist] of string; + # sys->print("INTERFACEPATHS: %d\n", len extrafilelist); + for (i := 0; i < len interfacepaths; i++) { + interfacepaths[i] = hd extrafilelist; + # sys->print("INTERFACEPATH %d: %s\n", i, hd extrafilelist); + extrafilelist = tl extrafilelist; + } + + print(sys->sprint("Trying to connect to eia%d...\n",C.port_num),2); + case C.port_type { + SERIAL => + # open port and return fd + (C.fd, C.ctlfd, err) = serialport(C.port_num); + if (C.fd == nil) { + print("Could not open serial port\n",1); + exit; + } + USB => + ; + IRDA => + ; + * => + ; + } + if (connect() != 0) {; + print("Connection failed\n",1); + exit; + } + recon = 0; + print("Connected!\n",2); + set_interface_timeout(); + set_camera_properties(); + get_file_list(); + connected = 1; + ignoreabls = nil; + get_camera_capabilities(); + sync := chan of int; + spawn serveloop(sys->fildes(0), sync); + <-sync; +} + +set_camera_properties() +{ + for (i := 0; i < len set_camera_props; i++) + set_camera_state(set_camera_props[i].t0,set_camera_props[i].t1); +} + +set_camera_props := array[] of { + ("mcap", 0), + ("acpd", 65535), + ("actc", 65535), + ("btpd", 65535), + ("bttc", 65535), + ("flty", 1246774599), + ("ssvl", 0), +}; + +argval(argv: list of string, arg: string): string +{ + if (arg == "") return ""; + if (arg[0] != '-') arg = "-" + arg; + while (argv != nil) { + if (hd argv == arg && tl argv != nil && (hd tl argv)[0] != '-') + return tonext(tl argv); + argv = tl argv; + } + return ""; +} + +tonext(los: list of string): string +{ + s := ""; + while (los != nil) { + if ((hd los)[0] != '-') s += " " + hd los; + else break; + los = tl los; + } + if (s != "") s = s[1:]; + return s; +} + +int2hex(i:int): int +{ + i2 := 0; + s := string i; + for (k := 0; k < len s; k++) + i2 = (i2 * 16) + int s[k:k+1]; + return i2; +} + +connect(): int +{ + connected = 0; + datain := chan of array of byte; + pchan := chan of int; + tick := chan of int; + reset(C.ctlfd); + + spawn timer2(tick,TIMEOUT * 2); + tpid := <-tick; + + spawn beacon_intro(datain, pchan, C.fd); + pid := <- pchan; + # beacon phase + Beacon: for (;;) { + alt { + buf := <- datain => + # got some data + case C.mode { + BEACON => + if (beacon_ok(buf)) { + print("Got beacon\n",3); + beacon_ack(C); + spawn beacon_result(datain, pchan, C.fd); + pid = <-pchan; + C.mode = BEACONRESULT; + break; + } + else { + print("resetting\n",3); + reset(C.ctlfd); + } + BEACONRESULT => + kill(tpid); + + print("Checking beacon result\n",3); + if (beacon_comp(buf, C) == 0) { + return 0; + break Beacon; + } + return -1; + } + <- tick => + kill(pid); + return -1; # failure + } + } +} + +CTL, ABILITIES, DATA, JPG, PIC, TIME, CONV: con iota; +NAME, FSIZE, PHOTO, THUMB: con iota; + +Qdir : con iota; + +contains(s: string, test: string): int +{ + num :=0; + if (len test > len s) return 0; + for (i := 0; i < (1 + (len s) - (len test)); i++) { + if (test == s[i:i+len test]) num++; + } + return num; +} + +abilitiesfilter := array[] of { + "Time Format", + "Date Format", + "File Type", + "Video", + "Media", + "Sound", + "Volume", + "Reset Camera", + "Slide", + "Timelapse", + "Burst", + "Power", + "Sleep", +}; + +ignoreabls : list of string; + +defattr : list of (string, int); +defaultattr, currentattr: array of (string, int); + +filterabls(pname, desc: string): int +{ + for (i := 0; i < len abilitiesfilter; i++) { + if (contains(desc, abilitiesfilter[i])) { + ignoreabls = pname :: ignoreabls; + return 1; + } + } + return 0; +} + +mountit(dfd, mountfd: ref sys->FD, sync: chan of int) +{ + sys->pctl(sys->NEWNS | sys->NEWFD, 2 :: dfd.fd :: mountfd.fd :: nil); + sync <-= 1; + mountfd = sys->fildes(mountfd.fd); + dfd = sys->fildes(dfd.fd); + if (sys->mount(mountfd, nil, "/", sys->MREPL | sys->MCREATE, nil) == -1) { + sys->fprint(sys->fildes(2), "cannot mount\n"); + spawn exporterror(dfd, sys->sprint("%r")); + } else { + sync = chan of int; + spawn exportpath(sync, dfd); + <-sync; + } +} + +exporterror(dfd: ref Sys->FD, error: string) +{ + tmsg := Tmsg.read(dfd, 0); + if (tmsg == nil) { + sys->fprint(sys->fildes(2), "exporterror() EOF\n"); + exit; + } + pick t := tmsg { + Readerror => + sys->fprint(sys->fildes(2), "exporterror() Readerror\n"); + * => + reply: ref Rmsg = ref Rmsg.Error(tmsg.tag, error); + data := reply.pack(); + sys->write(dfd, data, len data); + } +} + +exportpath(sync: chan of int, dfd: ref sys->FD) +{ + sync <-= 1; + sys->export(dfd, "/", Sys->EXPWAIT); +} + +Qroot : con int iota; + +ss : ref Styxserver; +uid: string; + +exitfid := -1; + +getuid() +{ + buf := array [100] of byte; + fd := sys->open("/dev/user", Sys->OREAD); + uidlen := sys->read(fd, buf, len buf); + uid = string buf[0: uidlen]; +} + +dir(name: string, perm: int, length: int, qid: int): Sys->Dir +{ + d := sys->zerodir; + d.name = name; + d.uid = uid; + d.gid = uid; + d.qid.path = big qid; + if (perm & Sys->DMDIR) + d.qid.qtype = Sys->QTDIR; + else { + d.qid.qtype = Sys->QTFILE; + d.length = big length; + } + d.mode = perm; + d.atime = d.mtime = daytime->now(); + return d; +} + +User: adt { + attachfid: int; + attr: array of (string, int); +}; + +users : array of User; + +getuser(fid: int): int +{ + for (i := 0; i < len users; i++) + if (users[i].attachfid == fid) + return i; + return -1; +} + +getattr(pname: string): int +{ + for (i := 0; i < len defaultattr; i++) + if (defaultattr[i].t0 == pname) + return i; + return -1; +} + +serveloop(fd : ref sys->FD, sync: chan of int) +{ + tchan: chan of ref Tmsg; + srv: ref Styxserver; + echan := chan of string; + users = array[20] of { * => User (-1, nil) }; + sys->pctl(Sys->FORKNS, nil); + sync <-= 1; + print("serveloop\n",5); + getuid(); + (tree, treeop) := nametree->start(); + tree.create(big Qroot, dir(".",8r555 | sys->DMDIR,0,Qroot)); + tree.create(big Qroot, dir("ctl",8r222,0,Qctl)); + tree.create(big Qroot, dir("abilities",8r444,0,Qabl)); + tree.create(big Qroot, dir("storage",8r444,0,Qstore)); + tree.create(big Qroot, dir("power",8r444,0,Qpwr)); + tree.create(big Qroot, dir("date",8r666,0,Qtime)); + tree.create(big Qroot, dir("state",8r666,0,Qstate)); + tree.create(big Qroot, dir("jpg",8r777 | sys->DMDIR,0,Qjpgdir)); + tree.create(big Qroot, dir("thumb",8r777 | sys->DMDIR,0,Qthumbdir)); + for (j := 0; j < len interfacepaths; j++) { + (n, idir) := sys->stat(interfacepaths[j]); + if (n != -1) { + idir.qid.path = big Qinterface; + # intdir := dir("",8r777,0,Qinterface); + # intdir.name = idir.name; + # intdir.length = idir.length; + # intdir.atime = idir.atime; + # intdir.mtime = idir.mtime; + tree.create(big Qroot, idir); + Qinterface += 1<<4; + } + } + + tmsgqueue := Tmsgqueue.new(50); + + (tchan, srv) = Styxserver.new(fd,Navigator.new(treeop), big Qroot); + fd = nil; + + gm, lastgm: ref Tmsg; + gm = nil; + + oldfiles = nil; + updatetree(tree); + + print("serveloop loop\n",5); + alivechan := chan of int; + spawn keepalive(alivechan); + alivepid := <-alivechan; + retryit := 0; + notries := 0; + readfid := -1; + serveloop: for (;;) { + wait = daytime->now(); + if (notries > 5) retryit = 0; + if (retryit) { + gm = lastgm; + notries++; + } + else { + notries = 0; + loop: for (;;) { + gm = tmsgqueue.pop(readfid); + if (gm != nil) + break; + alt { + gm = <-tchan => + break loop; + c := <-alivechan => + for (;;) { + s := get_clock(); + wait = daytime->now(); + # print(sys->sprint("got alivechan: %s",s),1); + if (recon) { + killchan := chan of int; + spawn noresponse(tchan,srv,killchan); + reconnect(-1); + killchan <-= 1; + } + else + break; + } + } + } + } + lastgm = gm; + retryit = 0; + if (gm == nil) { + sys->print("exiting!\n"); + break serveloop; # nil => EOF => last mount was unmounted + } + print(sys->sprint("Got new GM %s tag: %d\n", gm.text(), gm.tag),4); + # print(sys->sprint("Got new GM %s tag: %d\n", gm.text(), gm.tag),2); + + if (!connected) { + srv.reply(ref Rmsg.Error(gm.tag, "Could not connect to camera")); + print("Error: not connected to camera\n",1); + } + else pick m := gm { + Readerror => + print(sys->sprint( "camera: fatal read error: %s\n", m.error),1); + break serveloop; + Attach => + nu := getuser(-1); + if (nu == -1) { + srv.reply(ref Rmsg.Error(m.tag, "Camera in use")); + break; + } + m.uname = string nu; + srv.default(m); + myattr := array[len currentattr] of (string, int); + for (i := 0; i < len myattr; i++) + myattr[i] = currentattr[i]; + users[nu] = User (m.fid, myattr); + print("adding user "+string nu, 2); + Clunk => + nu := getuser(m.fid); + if (nu != -1) { + users[nu] = User (-1, nil); + print("removing user "+string nu, 2); + } + if (m.fid == readfid) { + # sys->print("readfid clunk: %d\n",readfid); + readfid = -1; + } + srv.default(gm); + Remove => + print("Removing file\n",3); + f := srv.getfid(m.fid); + if (f == nil) { + print("Remove: Invalid fid\n",1); + srv.reply(ref Rmsg.Error(m.tag, Ebadfid)); + break; + } + ftype := gettype(int f.path); + if (ftype != T_JPG) { + srv.reply(ref Rmsg.Error(m.tag, "Cannot remove file")); + break; + } + else { + for (i := 0; i < reslength; i++) { + if (f.path == filelist[i].qid.path) { + print("removing filelist\n",5); + if (erase_file(filelist[i].cf) != 0) { + if (!recon) + srv.reply(ref Rmsg.Error(m.tag, "Cannot remove file")); + break; + } + + srv.delfid(f); + if (get_file_list() != 0) + srv.reply(ref Rmsg.Error(m.tag, "Cannot read files")); + else { + updatetree(tree); + srv.reply(ref Rmsg.Remove(m.tag)); + } + break; + } + } + } + Read => + print("got read request in serveloop\n",6); + (f,e) := srv.canread(m); + if(f == nil) + break; + if (f.qtype & Sys->QTDIR) { + print("reading directory\n",5); + srv.read(m); + break; + } + data : array of byte; + case gettype(int f.path) { + T_INTERFACE => + (dir, intdata) := readinterface(int f.path, m.offset, m.count); + if (dir != nil && m.offset == big 0) { + dir.qid.path = f.path; + tree.wstat(f.path, *dir); + } + srv.reply(ref Rmsg.Read(m.tag, intdata)); + T_POWER => + print("reading power mode...\n",3); + data = array of byte get_power_mode(); + if (!recon) srv.reply(styxservers->readbytes(m, data)); + + T_TIME => + print("reading clock...\n",3); + data = array of byte get_clock(); + if (!recon) + srv.reply(styxservers->readbytes(m, data)); + + T_ABILITIES => + data = array of byte get_camera_capabilities(); + if (!recon) + srv.reply(styxservers->readbytes(m, data)); + + T_JPG => + # sys->print("Read Jpg: user %d\n", int f.uname); + if (readfid != -1 && readfid != m.fid) { + tmsgqueue.push(m); + # sys->print("in use!\n"); + # srv.reply(ref Rmsg.Error(m.tag, "Camera in use, please wait")); + break; + } + readfid = m.fid; + data = photoread2(f.path, m,tree,0); + if (!recon) + srv.reply(ref Rmsg.Read(m.tag, data)); + + T_THUMB => + if (readfid != -1 && readfid != m.fid) { + # srv.reply(ref Rmsg.Error(m.tag, "Camera in use, please wait")); + tmsgqueue.push(m); + break; + } + readfid = m.fid; + # sys->print("Read Thumb: user %d\n", int f.uname); + data = photoread2(f.path, m,tree,1); + if (!recon) + srv.reply(ref Rmsg.Read(m.tag, data)); + + T_STATE => + if (currentstate == "") srv.reply(ref Rmsg.Error(m.tag, "No state requested")); + else { + data = array of byte get_camera_state(currentstate,int m.offset); + if (!recon) + srv.reply(ref Rmsg.Read(m.tag, data)); + } + + T_STORAGE => + data = array of byte get_storage_status(); + if (!recon) { + if (len data == 0) + srv.reply(ref Rmsg.Error(m.tag, "Could not read storage status")); + else + srv.reply(styxservers->readbytes(m, data)); + } + * => + srv.reply(ref Rmsg.Error(m.tag, "Cannot read file")); + } + # if (readfid != -1) + # sys->print("readfid set: %d\n",readfid); + Write => + print("got write request in serveloop\n",6); + + (f,e) := srv.canwrite(m); + if(f == nil) { + print("cannot write to file\n",1); + break; + } + wtype := gettype(int f.path); + (n, s) := sys->tokenize(string m.data, " \t\n"); + if (wtype == T_TIME) { + if (set_clock(string m.data) != 0) + srv.reply(ref Rmsg.Error(m.tag, "Invalid date time format\n" + + "Usage: MM/DD/YY HH/MM/SS\n")); + else srv.reply(ref Rmsg.Write(m.tag, len m.data)); + + } + else if (wtype == T_CTL) { + err := ""; + case hd s { + "refresh" => + # for (i := 0; i < reslength; i++) { + # tree.remove(filelist[i].qid.path); + # tree.remove(big filelist[i].cf.thumbqid); + # } + if (get_file_list() != 0) + err = "Error: Could not read from camera"; + else + updatetree(tree); + # for (i = 0; i < reslength; i++) + # buildfilelist(tree, i); + "snap" => + nu := int f.uname; + print(sys->sprint("User %d taking photo\n",nu),2); + for (i := 0; i < len currentattr; i++) { + # sys->print("user: %s=%d current: %s=%d\n", + # users[nu].attr[i].t0,users[nu].attr[i].t1, + # currentattr[i].t0,currentattr[i].t1); + if (users[nu].attr[i].t1 != currentattr[i].t1) { + set_camera_state(users[nu].attr[i].t0, users[nu].attr[i].t1); + sys->sleep(100); + } + } + e1 := capture(); + if (e1 == -1) { + err = "Cannot communicate with camera"; + break; + } + if (e1 != 0) { + err = "Error: "+error_table[e1]; + break; + } + sys->sleep(4000); + if (get_file_list() != 0) { + err = "Error: Could not read from camera"; + break; + } + updatetree(tree); + * => + if (n == 2) { # assume that it is a (string, int) tuple + na := getattr(hd s); + if (na == -1) + err = "Invalid command name '"+hd s+"'"; + else { + e1 := set_camera_state(hd s, int hd tl s); + if (e1 != nil) + err = e; + else + users[int f.uname].attr[na].t1 = int hd tl s; + } + } + + } + + if (!recon) { + if (err != "") { + print(err+"\n",1); + srv.reply(ref Rmsg.Error(m.tag, err)); + } + else srv.reply(ref Rmsg.Write(m.tag, len m.data)); + } + } + else if (wtype == T_STATE) { + if (s != nil) + currentstate = hd s; + srv.reply(ref Rmsg.Write(m.tag, len m.data)); + } + else srv.reply(ref Rmsg.Error(m.tag, "Could not write to file")); + Wstat => + print("Got Wstat command in serveloop\n",6); + srv.reply(ref Rmsg.Error(m.tag, "Wstat failed")); + * => + srv.default(gm); + } + if (recon) { + retryit = 1; + ok := reconnect(4); + if (!ok) { + srv.reply(ref Rmsg.Error(gm.tag, "Could not connect to camera")); + killchan := chan of int; + spawn noresponse(tchan,srv,killchan); + reconnect(-1); + killchan <-= 1; + retryit = 0; + sys->sleep(100); + } + } + } + tree.quit(); + kill(alivepid); + killg(gpid); +} + +Tmsgqueue: adt { + start, end, length: int; + a : array of ref Tmsg.Read; + new: fn (n: int): ref Tmsgqueue; + push: fn (t: self ref Tmsgqueue, t: ref Tmsg.Read): int; + pop: fn (t: self ref Tmsgqueue, readfid: int): ref Tmsg.Read; +}; + +Tmsgqueue.new(n: int): ref Tmsgqueue +{ + t : Tmsgqueue; + t.start = 0; + t.end = 0; + t.length = 0; + t.a = array[n] of ref Tmsg.Read; + return ref t; +} + +Tmsgqueue.push(t: self ref Tmsgqueue,newt: ref Tmsg.Read): int +{ + if (t.length >= len t.a) + return -1; + t.a[t.end] = newt; + t.end++; + if (t.end >= len t.a) + t.end = 0; + t.length++; + return 0; +} + +Tmsgqueue.pop(t: self ref Tmsgqueue, readfid: int): ref Tmsg.Read +{ + if (t.length == 0) + return nil; + m := t.a[t.start]; + if (readfid != -1 && readfid != m.fid) + return nil; + t.start++; + if (t.start >= len t.a) + t.start = 0; + t.length--; + return m; +} + +noresponse(tchan: chan of ref Tmsg, srv: ref Styxservers->Styxserver, killchan : chan of int) +{ + for (;;) alt { + k := <- killchan => + return; + gm := <- tchan => + print("noresponse: Returning Error\n",1); + srv.reply(ref Rmsg.Error(gm.tag, "Could not connect to camera")); + sys->sleep(100); + } +} + +photoread2(qid: big, m: ref Tmsg.Read, tree: ref Nametree->Tree, isthumb: int): array of byte +{ + photonum := -1; + data : array of byte; + # sys->print("photoread: qid: %d resl: %d\n",int qid,reslength); + for (i := 0; i < reslength; i++) { + # sys->print("%d: %s %d\n",i, sconv(filelist[i].cf.dosname),int filelist[i].qid.path); + if (!isthumb && qid == filelist[i].qid.path) { + photonum = i; + break; + } + else if (isthumb && int qid == filelist[i].cf.thumbqid) { + photonum = i; + break; + } + } + if (photonum >= reslength || photonum < 0) { + print(sys->sprint( "error: photonum = %d (reslength = %d)\n", photonum,reslength),1); + return nil; + } + offset := int m.offset; + dosname := filelist[photonum].cf.dosname; + filelen := filelist[photonum].cf.filelength; + for (k := 0; k < 5; k++) { + if (filelen == 0) { + get_file_size(photonum); + print(sys->sprint("\tFilelen: %d => ",filelen),5); + filelen = filelist[photonum].cf.filelength; + print(sys->sprint("%d\n",filelen),5); + tree.wstat(qid, + dir(str->tolower(sconv(filelist[photonum].cf.dosname)), + 8r444, + filelen, + int qid)); + sys->sleep(1000); + } + else break; + } + if (filelen == 0 && !isthumb) return nil; # doesn't matter if filesize is wrong for thumbnail + if (isthumb) filelen = filelist[photonum].cf.thumblength; + if (usecache && cachesize(dosname, isthumb) == filelen) { +# print(sys->sprint("Is cached!\n"); + n := m.count; + filesize := cachesize(dosname,isthumb); + if (offset >= filesize) return nil; + if (offset+m.count >= filesize) n = filesize - offset; + data = array[n] of byte; + fd := sys->open(cachename(dosname,isthumb), sys->OREAD); + if (fd == nil) cachedel(dosname,isthumb); + else { + sys->seek(fd,m.offset,sys->SEEKSTART); + sys->read(fd,data,len data); + fd = nil; + return data; + } + } +# print(sys->sprint("Is NOT cached!\n"); + + if (photonum == ex.pnum && offset == ex.offset && ex.isthumb == isthumb) + data = ex.data; + else if (isthumb) + data = getthumb(photonum, offset, m.count); + else if (!isthumb) + data = getpicture2(photonum, offset, m.count); + if (len data > m.count) { + ex.pnum = photonum; + ex.offset = offset + m.count; + ex.data = array[len data - m.count] of byte; + ex.data[0:] = data[m.count:len data]; + ex.isthumb = isthumb; + data = data[:m.count]; + } + if (usecache) { + fd : ref sys->FD; + cname := cachename(dosname,isthumb); + + if (offset == 0) + fd = sys->create(cname,sys->OWRITE,8r666); + else { + fd = sys->open(cname,sys->OWRITE); + if (fd != nil) + sys->seek(fd,big 0,sys->SEEKEND); + } + if (fd != nil) { + i = sys->write(fd,data,len data); + fd = nil; + } + (n, dir) := sys->stat(cname); + if (n == 0) { + cacheadd(dosname,isthumb,int dir.length); + } + } + return data; +} + +cachelist : list of (string, int, int); + +cacheprint() +{ + tmp := cachelist; + print("cache:\n",3); + while (tmp != nil) { + (dn,i1,i2) := hd tmp; + print(sys->sprint("\t%s %d %d\n",dn,i1,i2),3); + tmp = tl tmp; + } +} + +cacheclean() +{ + tmp : list of (string, int,int); + tmp = nil; + while (cachelist != nil) { + (dosnm,it,fl) := hd cachelist; + for (i := 0; i < reslength; i++) { + filelen := filelist[i].cf.filelength; + if (it) filelen = filelist[i].cf.thumblength; + if (sconv(filelist[i].cf.dosname) == dosnm && filelen == fl) { + tmp = (dosnm,it,fl) :: tmp; + break; + } + } + cachelist = tl cachelist; + } + cachelist = tmp; +} + +cacheadd(dosname1: array of byte, isthumb, filelen: int) +{ + dosname := sconv(dosname1); + tmp : list of (string, int,int); + tmp = nil; + updated := 0; + while (cachelist != nil) { + (dosnm,it,fl) := hd cachelist; + if (dosname == dosnm && it == isthumb) { + updated = 1; + tmp = (dosnm,it,filelen) :: tmp; + } + else + tmp = (dosnm,it,fl) :: tmp; + cachelist = tl cachelist; + } + if (updated == 0) + tmp = (dosname,isthumb,filelen) :: tmp; + cachelist = tmp; +} + + +cachedel(dosname1: array of byte, isthumb: int) +{ + dosname := sconv(dosname1); + tmp : list of (string, int,int); + tmp = nil; + while (cachelist != nil) { + (dosnm,it,filelen) := hd cachelist; + if (dosname != dosnm || it != isthumb) + tmp = (dosnm,it,filelen) :: tmp; + cachelist = tl cachelist; + } + cachelist = tmp; +} + +cachesize(dosname1: array of byte, isthumb: int): int +{ + dosname := sconv(dosname1); + tmp := cachelist; + while (tmp != nil) { + (dosnm,it,filelen) := hd tmp; + if (dosname == dosnm && isthumb == it) return filelen; + tmp = tl tmp; + } + return -1; +} + +cachename(dosname: array of byte, isthumb: int): string +{ + name := "/tmp/" + str->tolower(sconv(dosname)); + if (isthumb) name = jpg2bit(name); + name[len name - 1] = '~'; + return name; +} + +poll_and_wait(): int +{ + print("poll and wait\n",7); + write_n(C.fd, pwl, len pwl); +# sys->sleep(100); + if (read_n_to(C.fd, pak, len pak,TIMEOUT) < 0) { + print("poll_and_wait: unexpected read failure, exiting...\n",1); + return -1; + } + return 0; +} + +send_packet(): int +{ + # computing packet size + to_write := C.bufbytes; + + # send the first packet + pwl[0] = byte ((1<<5)|(1<<4)|(1<<3)|(1<<2)|(to_write>>8)); + pwl[1] = byte (to_write&16rff); + + if (poll_and_wait() != 0) + return -1; +# pak[1] == byte 2; ? + pak[1] = byte 2; + + wrote_here := write_n(C.fd, C.cdp, to_write); + if (wrote_here != to_write) + return -1; + return 0; +} + +send_message(): int +{ + v:= 0; + rc := chan of int; + tc := chan of int; + + spawn timer2(tc,6000); + tpid := <- tc; + spawn write_message(rc); + rpid := <- rc; + + try := 0; + alt { + <- tc => + kill(rpid); + print("error: write timeout\n",1); + v = -2; + break; + v = <- rc => + kill(tpid); + break; + } + return v; +} + +write_message(rc: chan of int) +{ + print("writing msg...\n",6); + rc <- = sys->pctl(0, nil); + if (send_packet() != 0) { + rc <-= -1; + return; + } + pwl[0] = byte 0; + pwl[1] = byte 0; + wrote_here := write_n(C.fd, pwl, 2); + if (wrote_here != 2) { + rc <-= -1; + return; + } + rc <-= 0; + print("written\n",6); +} + +extra: adt { + pnum: int; + offset: int; + length: int; + data: array of byte; + isthumb: int; +}; + +ex : extra; + +getthumb(photonum, offset, maxlength: int): array of byte +{ + if (offset != 0) return nil; + print("getting thumbnail\n",3); + thumbdata: array of byte; + err, h, w, ttype: int; + file := filelist[photonum].cf; + filesize := 13020; + if (offset > 0) { + filesize = file.thumblength; + if (offset >= filesize) return nil; + } + for(;;){ + print(sys->sprint("Filesize: %d offset: %d\n",filesize, offset),5); + if (offset + maxlength > filesize) + maxlength = filesize - offset; + l := maxlength; + + C.command = cdp_get_file_data; + C.bufbytes = build_cdp_header(C.cdp, 68); + off := cdp_header_len; + off = set_int(C.cdp[off:], file.driveno, off); + off = set_fstring(C.cdp[off:], file.pathname, off); + off = set_dosname(C.cdp[off:], file.dosname, off); + off = set_int(C.cdp[off:], 1, off); + + off = set_int(C.cdp[off:], offset, off); + off = set_int(C.cdp[off:], l, off); + off = set_int(C.cdp[off:], filesize, off); + + print(sys->sprint( "getthumbdata %d %d %d\n", offset, maxlength, filesize),5); + send_message(); +# sys->sleep(2000); + if ((err = receive_message()) != 0) { + print(sys->sprint("Error %d\n", err),1); + return nil; + } + off = cdp_header_len; + print(sys->sprint( "bufbytes = %d\n", C.bufbytes),5); + tmpoffset: int; + (tmpoffset, off) = get_int(C.cdp[off:], off); + (l, off) = get_int(C.cdp[off:], off); + (filesize, off) = get_int(C.cdp[off:], off); + print(sys->sprint( "getthumbdata returning %d %d %d\n", offset, l, filesize),5); + + if (offset == 0) { + (filesize, off) = get_int(C.cdp[off:off+4], off); + (h, off) = get_int(C.cdp[off:off+4], off); + (w, off) = get_int(C.cdp[off:off+4], off); + (ttype, off) = get_int(C.cdp[off:off+4], off); + filelist[photonum].cf.thumblength = filesize; + thumbdata = array[filesize] of byte; + print(sys->sprint("Thumb (%d,%d) size: %d type: %d\n",w,h,filesize,ttype),5); + } + if (offset + l > filesize) l = filesize - offset; + print(sys->sprint( "Making array of size: %d\n", l),5); + thumbdata[offset:] = C.cdp[off:off+l]; + offset += l; + if (offset >= filesize) break; + } + return thumb2bit(thumbdata,w,h); +} + +getpicture2(photonum, offset, maxlength: int): array of byte +{ + file := filelist[photonum].cf; + filesize := int file.filelength; + print("getting image\n",3); + print(sys->sprint("Filesize: %d offset: %d\n",filesize, offset),5); + if (offset >= filesize) return nil; + if (offset + maxlength > filesize) + maxlength = filesize - offset; + l := maxlength; + C.command = cdp_get_file_data; + C.bufbytes = build_cdp_header(C.cdp, 68); + off := cdp_header_len; + off = set_int(C.cdp[off:], file.driveno, off); + off = set_fstring(C.cdp[off:], file.pathname, off); + off = set_dosname(C.cdp[off:], file.dosname, off); + off = set_int(C.cdp[off:], 0, off); + + off = set_int(C.cdp[off:], offset, off); + off = set_int(C.cdp[off:], l, off); + off = set_int(C.cdp[off:], filesize, off); + + print(sys->sprint( "getfiledata %d %d %d\n", offset, maxlength, filesize),5); + send_message(); + if ((err := receive_message()) != 0) { + print(sys->sprint("Error %d\n", err),1); + return nil; + } + off = cdp_header_len; + print(sys->sprint( "bufbytes = %d\n", C.bufbytes),5); + (offset, off) = get_int(C.cdp[off:], off); + (l, off) = get_int(C.cdp[off:], off); + (filesize, off) = get_int(C.cdp[off:], off); + print(sys->sprint( "getfiledata returning %d %d %d\n", offset, maxlength, filesize),5); + filedata := array[l] of byte; + filedata[0:] = C.cdp[off:off+l]; + return filedata; +} + +erase_file(file: Cfile): int +{ + C.command = cdp_erase_file; + C.bufbytes = build_cdp_header(C.cdp, 52); + + off := cdp_header_len; + off = set_int(C.cdp[off:], file.driveno, off); + off = set_fstring(C.cdp[off:], file.pathname, off); + off = set_dosname(C.cdp[off:], file.dosname, off); + send_message(); +# sys->sleep(1000); + if (receive_message() != 0) + return -1; + return 0; +} + + +set_power_mode(): int +{ + C.command = cdp_set_power_mode; + C.bufbytes = build_cdp_header(C.cdp, 0); + return (send_message()); +} + +get_storage_status(): string +{ + s := ""; + + C.command = cdp_get_storage_status; + C.bufbytes = build_cdp_header(C.cdp, 0); + send_message(); +# sys->sleep(2000); + if (receive_message() != 0) return ""; + off := cdp_header_len; + taken, available, raw : int; + (taken, off) = get_int(C.cdp[off:], off); + (available, off) = get_int(C.cdp[off:], off); + (raw, off) = get_int(C.cdp[off:], off); + s += sys->sprint("Picture Memory\n\tused:\t%d\n\tfree:\t%d",taken,available); + if (raw == -1) + s += "\n"; + else + s += sys->sprint(" (compressed)\n\t\t%d (raw)\n",raw); + + return s; +} + +get_power_mode(): string +{ + mode: int; + + C.command = cdp_get_power_mode; + C.bufbytes = build_cdp_header(C.cdp, 0); + send_message(); +# sys->sleep(2000); + if (receive_message() != 0) return "Could not read power mode"; + off := cdp_header_len; + (mode, off) = get_int(C.cdp[off:], off); + return sys->sprint("Power Mode = %d\n", mode); +} + +set_clock_data(s:string): int +{ + err := 0; + if (s == "") { + tm := daytime->local(daytime->now()); + off := cdp_header_len; + C.cdp[cdp_header_len+0] = byte 0; + C.cdp[cdp_header_len+1] = byte int2hex(tm.mon+1); + C.cdp[cdp_header_len+2] = byte int2hex(tm.mday); + C.cdp[cdp_header_len+3] = byte int2hex(tm.year); + C.cdp[cdp_header_len+4] = byte 0; + C.cdp[cdp_header_len+5] = byte int2hex(tm.hour); + C.cdp[cdp_header_len+6] = byte int2hex(tm.min); + C.cdp[cdp_header_len+7] = byte int2hex(tm.sec); + } + else { + (n,datetime) := sys->tokenize(s," "); + if (n != 2) return 1; + off := 0; + for (i := 0; i < 2; i++) { + (n2,data) := sys->tokenize(hd datetime, "./:"); + if (n2 != 3) return 1; + off++; + for (i2 := 0; i2 < 3; i2++) { + C.cdp[cdp_header_len+off] = byte int2hex(int hd data); + off++; + data = tl data; + } + datetime = tl datetime; + } + } + return 0; +} + +set_clock(s:string): int +{ + C.command = cdp_set_clock; + C.bufbytes = build_cdp_header(C.cdp, 8); + if (set_clock_data(s)) return 1; + send_message(); + if (receive_message() != 0) return 1; + return 0; +} + +addzeros(s: string): string +{ + s[len s] = ' '; + rs := ""; + start := 0; + isnum := 0; + for (i := 0; i < len s; i++) { + if (s[i] < '0' || s[i] > '9') { + if (isnum && i - start < 2) rs[len rs] = '0'; + rs += s[start:i+1]; + start = i+1; + isnum = 0; + } + else isnum = 1; + } + i = len rs - 1; + while (i >= 0 && rs[i] == ' ') i--; + return rs[:i+1]; +} + +get_clock(): string +{ + C.command = cdp_get_clock; + C.bufbytes = build_cdp_header(C.cdp, 0); + send_message(); + if (receive_message() != 0) + return "Could not read clock\n"; + s := sys->sprint("%x/%x/%x %x:%x:%x", int C.cdp[13],int C.cdp[14], + int C.cdp[15], int C.cdp[17], int C.cdp[18], int C.cdp[19]); + return "date is "+addzeros(s)+"\n"; +} + +get_file_list(): int +{ + getoldfiledata(); + print("getting file list\n",3); + C.command = cdp_get_file_list; + C.bufbytes = build_cdp_header(C.cdp, 56); + setfiledata(); + send_message(); + if (receive_message() != 0) + return -1; + display_filelist(); + return 0; +} + +setfiledata() +{ + off := cdp_header_len; + off = set_int(C.cdp[off:], 1, off); # ascending order + off = set_int(C.cdp[off:], 1, off); # drive a: internal RAM disk + off = set_fstring(C.cdp[off:], array of byte "", off); # set pathname to null + off = set_dosname(C.cdp[off:], array of byte "", off); # set Dos filename to null +} + +get_file_size(i: int): int +{ + C.command = cdp_get_file_list; + C.bufbytes = build_cdp_header(C.cdp, 56); + setfiledata2(i); + send_message(); + if (receive_message() != 0) return -1; + display_filelist(); + return 0; +} + +setfiledata2(i: int) +{ + off := cdp_header_len; + off = set_int(C.cdp[off:], 1, off); # ascending order + off = set_int(C.cdp[off:], 1, off); # drive a: internal RAM disk + off = set_fstring(C.cdp[off:], filelist[i].cf.pathname, off); # set pathname + off = set_dosname(C.cdp[off:], filelist[i].cf.dosname, off); # set Dos filename +} + +set_interface_timeout() +{ + print("Setting Interface timeout\n",3); + C.command = cdp_set_interface_timeout; + C.bufbytes = build_cdp_header(C.cdp, 8); + off := cdp_header_len; + off = set_int(C.cdp[off:], 100, off); + off = set_int(C.cdp[off:], 5, off); + send_message(); +# sys->sleep(1000); + receive_message(); +} + +display_filelist(): string +{ + off, i: int; + + off = cdp_header_len; + (reslength, off) = get_int(C.cdp[off:], off); + s := sys->sprint("Number of entries: %d\n", reslength); + for (i = 0; i < reslength; i++) { + (filelist[i].cf.driveno, off) = get_int(C.cdp[off:], off); + (filelist[i].cf.pathname, off) = get_fstring(C.cdp[off:], off); + (filelist[i].cf.dosname, off) = get_dosname(C.cdp[off:], off); + (filelist[i].cf.filelength, off) = get_int(C.cdp[off:], off); + (filelist[i].cf.filestatus, off) = get_int(C.cdp[off:], off); + if (filelist[i].cf.filelength < 0 || filelist[i].cf.filelength > MAXFILESIZE) + filelist[i].cf.filelength = 0; + s += sys->sprint("\t%d, %s, %s, %d\n", filelist[i].cf.driveno, + string filelist[i].cf.pathname, + string filelist[i].cf.dosname, + filelist[i].cf.filelength); + } + print(s,5); + if (usecache) + cacheclean(); + return s; +} + +get_camera_capabilities(): string +{ + print("Get capabilities\n",3); + C.command = cdp_get_camera_capabilities; + C.bufbytes = build_cdp_header(C.cdp, 0); + send_message(); +# sys->sleep(500); + if (receive_message() != -1) + return capabilities(); + print("Error recieving abilities message\n",1); + return ""; +} + +Capability: adt { + pname: string; + d: string; + pick { + List => + t: list of (string, int); + Range => + min, max, default, current: int; + } +}; + +caplist: list of ref Capability; + +print_camera_capabilities(): string +{ + rs := ""; +# p : ref Capability; + + pick p := hd caplist{ + List => + rs += sys->sprint("Pname = %s ", p.pname); + Range => + rs += sys->sprint("Pname = %s min = %d max = %d default = %d ", p.pname, + p.min, p.max, p.default); + } +# p := tl p; + return rs; +} + +capabilities(): string +{ + off, i, ncaps, t: int; + l, m, n: int; + pname, desc: array of byte; + s: array of byte; + rs := ""; + off = cdp_header_len; + (ncaps, off) = get_int(C.cdp[off:], off); + if (ncaps > 200) + return "error reading capabilities\n"; + rs += sys->sprint("i = %d\n", i); + firsttime := 0; + if (ignoreabls == nil) + firsttime = 1; + for (j := 0; j < ncaps; j++) { + line := ""; + (pname, off) = get_pname(C.cdp[off:], off); + line += sys->sprint("%s, ", string pname); + (t, off) = get_int(C.cdp[off:], off); + (desc, off) = get_fstring(C.cdp[off:], off); + line += sys->sprint("%s: ", string desc); + fact := ""; + case t { + 1 => + t: list of (string, int); + + (l, off) = get_int(C.cdp[off:], off); + (m, off) = get_int(C.cdp[off:], off); + line += sys->sprint("items: %d factory: %d\n", l, m); + + for (k := 0; k < l; k++) { + (s, off) = get_fstring(C.cdp[off:], off); + (n, off) = get_int(C.cdp[off:], off); + line += sys->sprint(" %s: %d\n", string s, n); + if (m == n) + fact = sconv(s); + t = (sconv(s), n) :: t; + } + cl := ref Capability.List (sconv(pname), sconv(desc), t); + 2 => + (l, off) = get_int(C.cdp[off:], off); + (m, off) = get_int(C.cdp[off:], off); + (n, off) = get_int(C.cdp[off:], off); + line += sys->sprint("min: %d max: %d factory:%d\n", l, m, n); + fact = string n; + 3 => + (l, off) = get_int(C.cdp[off:], off); + case l { + 7 => + (s, off) = get_dosname(C.cdp[off:], off); + 8 => + (s, off) = get_fstring(C.cdp[off:], off); + * => + line += sys->sprint("Invalid type %d\n", l); + break; + } + fact = string s; + line += sys->sprint("%s\n", string s); + 4 to 8 => + break; + 9 => + break; + * => + line += sys->sprint("Invalid type %d\n", t); + break; + } + if (firsttime) { + if (!filterabls(sconv(pname), string desc)) + defattr = (sconv(pname), int fact) :: defattr; + } + if (!isin(ignoreabls, string pname)) + rs += line; + } + if (firsttime) { + defaultattr = array[len defattr] of (string, int); + currentattr = array[len defattr] of (string, int); + i = 0; + for (;defattr != nil; defattr = tl defattr) { + defaultattr[i] = hd defattr; + currentattr[i++] = hd defattr; + } + } + return rs; +} + +isin(los: list of string, s: string): int +{ + for (;los !=nil; los = tl los) + if (hd los == s) + return 1; + return 0; +} + +set_capture_data(): int +{ + C.cdp[cdp_header_len+0] = byte 0; + C.cdp[cdp_header_len+1] = byte 0; + C.cdp[cdp_header_len+2] = byte 0; + C.cdp[cdp_header_len+3] = byte 0; + return 4; +} + +get_camera_state(pname: string,offset: int): string +{ + if (offset != 0) return ""; + print(sys->sprint( "get_camera_state(%s)\n", pname),3); + C.command = cdp_get_camera_state; + off := cdp_header_len; + if (pname == "") + C.bufbytes = build_cdp_header(C.cdp, 0); + else { + if (len pname != 4) + return "Invalid command name: "+pname+"\n"; + C.cdp[off+0] = byte pname[0]; + C.cdp[off+1] = byte pname[1]; + C.cdp[off+2] = byte pname[2]; + C.cdp[off+3] = byte pname[3]; + C.bufbytes = build_cdp_header(C.cdp, 4); + } + send_message(); + if (receive_message() != 0) return "Could not read state: "+pname+"\n"; + off = cdp_header_len; + rlen: int; + (rlen, off) = get_int(C.cdp[off:],off); + s := ""; + rlen = 1; + if (pname == "") { + for (q := off; q < len C.cdp; q++) { + s[0] = int C.cdp[q]; + if (s[0] > 0) print(sys->sprint("%s",s),5); + } + print("\n",5); + } + for (i := 0; i < rlen; i++) { + name, data: array of byte; + type1, tmp: int; + (name,off) = get_pname(C.cdp[off:],off); + (type1,off) = get_int(C.cdp[off:],off); + print(sys->sprint( "%d: %s - %d\n", i,pname,type1),5); + case type1 { + 1 to 5 => + (tmp,off) = get_int(C.cdp[off:],off); + data = array of byte string tmp; + 6 => + (data,off) = get_pname(C.cdp[off:],off); + 7 => + (data,off) = get_dosname(C.cdp[off:],off); + 8 => + (data,off) = get_fstring(C.cdp[off:],off); + * => + data = array of byte "!ERROR!"; + } + # if (string data == "!ERROR!") return ""; +# if (rlen == 1) +# s = string data; +# else s += sys->sprint("%s: %s\n",string name, string data); + s += sys->sprint("%s: %s\n",string name, string data); + } + return s; +} + + +set_camera_state(pname: string, val: int): string +{ + print(sys->sprint( "set_camera_state(%s, %d)\n", pname, val),3); + if (len pname != 4) + return "Command name must be 4 characters"; + off := cdp_header_len; + C.cdp[off+0] = byte pname[0]; + C.cdp[off+1] = byte pname[1]; + C.cdp[off+2] = byte pname[2]; + C.cdp[off+3] = byte pname[3]; + off += 4; + off = set_int(C.cdp[off:], val, off); + + C.command = cdp_set_camera_state; + C.bufbytes = build_cdp_header(C.cdp, 8); + send_message(); +# sys->sleep(1000); + if ((e := receive_message()) == 0) { + na := getattr(pname); + if (na != -1) + currentattr[na].t1 = val; + return nil; + } + else + return error_table[e]; +} + +capture(): int +{ + C.command = cdp_get_camera_status; + C.bufbytes = build_cdp_header(C.cdp, 0); + send_message(); +# sys->sleep(1000); + if (receive_message() != 0) + return -1; + + d := set_capture_data(); + C.command = cdp_start_capture; + C.bufbytes = build_cdp_header(C.cdp, d); + send_message(); +# sys->sleep(3000); + return receive_message(); +} + +dump_message() +{ + print(sys->sprint(" Message length = %d\n", C.bufbytes),5); + print(sys->sprint(" CDP Length = %d\n", (int C.cdp[2]<<8)+(int C.cdp[3])),5); + print(sys->sprint(" CDP Version = %d\n", int C.cdp[4]),5); + print(sys->sprint(" CDP Command = %x\n", int ((C.cdp[8]<<8)|(C.cdp[9]))),5); + print(sys->sprint(" CDP Result Code = %d\n", int ((C.cdp[10]<<8)|(C.cdp[11]))),5); +} + +build_cdp_header(cdp: array of byte, x: int): int +{ + cdp[4] = byte 0; + cdp[5] = byte 0; + cdp[6] = byte 0; + cdp[7] = byte 0; + cdp[8] = byte ((C.command>>8)&16rff); + cdp[9] = byte (C.command&16rff); + cdp[10] = byte 0; + cdp[11] = byte 0; + + l := 8 + x; + cdp[0] = byte ((l>>24)&16rff); + cdp[1] = byte ((l>>16)&16rff); + cdp[2] = byte ((l>>8)&16rff); + cdp[3] = byte (l&16rff); + + return 12+x; +} + +poll_and_reply(nak: int): int +{ + print("poll and reply\n",7); + if ((read_n_to(C.fd, pwl, len pwl,TIMEOUT) < 0) && nak) { + pak[0] = byte 0; + pak[1] = byte 2; # reject + write_n(C.fd, pak, len pak); + return 0; + } + pak[0] = byte 0; + pak[1] = byte 1; + write_n(C.fd, pak, len pak); + + return 1; +} + +receive_packet(buf: array of byte): int +{ + print("receive_packet\n",6); + if (!poll_and_reply(!0)) { + print("Poll and reply failed\n",1); + return -1; + } + + l := int (((int pwl[0]&3)<<8)|(int pwl[1])); + C.bufbytes += l; + r := read_n_to(C.fd, buf, l,TIMEOUT); + if (r != l) { + print(sys->sprint( "could not read packet (read %d, expected %d)\n", r, l),1); + return -1; + } + return 0; +} + +receive_message(): int +{ + print("read_message\n",6); + C.bufbytes = 0; + if (receive_packet(C.cdp[0:]) != 0) { + recon = 1; + print("receive packet failed\n",1); + return 3; + # raise "error: receive packet failed"; + } + dump_message(); + rc := int C.cdp[9]; + if ((~rc&16rff) != (C.command&16rff)) { + print("command & return are different\n",1); + consume(C.fd); + return 3; + # raise "error: command and return command are not the same\n"; + } + message_len := (int C.cdp[2]<<8)+(int C.cdp[3]); + + while (C.bufbytes < message_len) { + if (receive_packet(C.cdp[C.bufbytes:]) != 0) { + print("Packet is too short\n",1); + recon = 1; + return 3; + # raise "error: receive packet2 failed"; + } + } +# sys->sleep(500); + read_n_to(C.fd, pak, len pak, TIMEOUT); + return (int ((C.cdp[10]<<8)|(C.cdp[11]))); # result code +} + +reset(fd: ref Sys->FD) +{ + sys->fprint(fd, "d1"); + sys->sleep(20); + sys->fprint(fd, "d0"); + sys->fprint(fd, "b9600"); +} + +kill(pid: int) +{ + pctl := sys->open("/prog/" + string pid + "/ctl", Sys->OWRITE); + if (pctl != nil) + sys->write(pctl, array of byte "kill", len "kill"); +} + +killg(pid: int) +{ + if ((fd := sys->open("/prog/" + string pid + "/ctl", Sys->OWRITE)) != nil) + sys->fprint(fd, "killgrp"); +} + +#dump_buf(buf: array of byte, i: int) +#{ +# for (j := 0; j < i; j++) +# sys->fprint(sys->fildes(2), "%x ", int buf[j]); +# sys->fprint(sys->fildes(2), "\n"); +#} + +serialport(port : int) : (ref Sys->FD, ref Sys->FD, string) +{ + C.fd = nil; + C.ctlfd = nil; + C.mode = BEACON; + + serport := "/dev/eia" + string port; + serctl := serport + "ctl"; + + for (i := 0; i < len statopt; i++) { + statfd := sys->open("/dev/eia"+string port+statopt[i],sys->OREAD); + if (statfd != nil) + C.stat = i; + statfd = nil; + } + readstat(); + + fd := sys->open(serport, Sys->ORDWR); + if (fd == nil) + return (nil, nil, sys->sprint("cannot read %s: %r", serport)); + ctlfd := sys->open(serctl, Sys->OWRITE); + if (ctlfd == nil) + return (nil, nil, sys->sprint("cannot open %s: %r", serctl)); + + config := array [] of { + "b9600", + "l8", + "p0", + "m0", + "s1", + "r1", + "i1", + "f", + }; + + for (i = 0; i < len config; i++) { + if (sys->fprint(ctlfd,"%s", config[i]) < 0) + print(sys->sprint("serial config (%s): %r\n", config[i]),3); + } + sys->sleep(100); + consume(fd); + sys->fprint(ctlfd, "d1"); + sys->sleep(40); + sys->fprint(ctlfd, "d0"); + return (fd, ctlfd, nil); +} + +consume(fd: ref sys->FD) +{ + if (fd != nil) { + print("Consuming...\n",6); + read_n_to(fd, array[1000] of byte, 1000, 1000); + } +} + +beacon_intro(data: chan of array of byte, pchan: chan of int, fd: ref Sys->FD) +{ + buf := array[64] of byte; + cbuf: array of byte; + pid := sys->pctl(0, nil); +# print(sys->sprint("b_intro: starting %d\n",pid); + pchan <-= pid; + failed := array[len bintro] of { * => byte 0 }; + # discard characters until lead in character reached + print(sys->sprint("\tWaiting for: %d...\n",int bintro[0]),3); + do { + n := read_n_to(fd, buf, 1, TIMEOUT); + if (n == -1) { + data <- = failed; + return; + } + print(sys->sprint("\tGot: %d\n",int buf[0]),5); + } while (buf[0] != bintro[0]); + print("Getting beacon\n",3); + # read the next 6 bytes of beacon + i := read_n_to(fd, buf[1:], 6,TIMEOUT); + for (k := 0; k < i; k++) + print(sys->sprint("\tRead %d: %d (wanted %d)\n",k+1, int buf[1+k], int bintro[1+k]),5); + if (i != 6) { + print("Error reading beacon\n",3); + exit; + } + else { + print("sending beacon\n",3); + cbuf = buf[0:7]; + data <- = cbuf; + } + +} + +beacon_result(data: chan of array of byte, pchan: chan of int, fd: ref Sys->FD) +{ + buf := array[64] of byte; + cbuf: array of byte; + pid := sys->pctl(0, nil); + pchan <-= pid; + + # read the next 10 bytes of beacon + p := 0; + intro := 1; + for (;;) { + i := read_n_to(fd, buf[p:], 1, TIMEOUT); + if (intro) { + if (buf[p] != bintro[p]) { + intro = 0; + buf[0] = buf[p]; + p = 1; + } + else { + p++; + if (p >= len bintro) p = 0; + } + } + else p++; + if (p == 10) break; + } + + for (k := 0; k < p; k++) print(sys->sprint("\tRead %d: %d\n",k, int buf[k]),5); + if (p != 10) { + print("Error reading beacon result\n",3); + exit; + } + else { + print("reading beacon result\n",3); + cbuf = buf[0:10]; + data <- = cbuf; + } +} + +beacon_comp(buf: array of byte, C: Camera_adt): int +{ + speed: string; + + case int buf[0] { + 0 => + C.baud = (int buf[2]<<24)|(int buf[3]<<16)|(int buf[4]<<8)|(int buf[5]); + C.dfs = (int buf[6]<<8)|(int buf[7]); + C.hfs = (int buf[8]<<8)|(int buf[9]); + # do baud rate change here + sys->sleep(1000); + + case C.baud { + 115200 => + speed = "b115200"; + 57600 => + speed = "b57600"; + 38400 => + speed = "b38400"; + 19200 => + speed = "b19200"; + * => + speed = "b9600"; + } + print(sys->sprint("Connection Details:\n Baud rate:\t%dbps\n",C.baud),3); + print(sys->sprint(" Host frame size:\t%dbytes\n",C.hfs),3); + print(sys->sprint(" Device frame size:\t%dbytes\n",C.dfs),3); + if (sys->fprint(C.ctlfd,"%s", speed) < 0) { + print(sys->sprint("Error setting baud rate %s\n", speed),3); + return -1; + } + -1 => + print("Incompatible Data Rate\n",1); + return -1; + -2 => + print("Device does not support these modes\n",1); + return -2; + * => + print(sys->sprint("I'm here!? buf[0] = %d\n",int buf[0]),1); + return -1; + } + return 0; +} + +read_n(fd: ref Sys->FD, buf: array of byte, n: int, res: chan of int) +{ + pid := sys->pctl(0, nil); +# print(sys->sprint("read_n: starting %d\n",pid); + res <-= pid; + print(sys->sprint( "read_n %d\n", n),7); + nread := 0; + while (nread < n) { + i := sys->read(fd, buf[nread:], n-nread); + sys->sleep(1); + if (i <= 0) + break; + nread += i; + } + res <-= nread; +# print(sys->sprint("read_n: ending %d\n",pid); +} + +read_n2(fd: ref Sys->FD, buf: array of byte, n: int): int +{ + print(sys->sprint( "read_n2 %d\n", n),7); + nread := 0; + while (nread < n) { + i := sys->read(fd, buf[nread:], n-nread); + sys->sleep(1); + if (i <= 0) + break; + nread += i; + } + return nread; +} + +read_n_to(fd: ref Sys->FD, buf: array of byte, n,t : int): int +{ + v:= 0; + rc := chan of int; + tc := chan of int; + + spawn timer2(tc,t); + tpid := <- tc; + spawn read_n(fd, buf, n, rc); + rpid := <- rc; + + try := 0; + alt { + <- tc => + kill(rpid); + print(sys->sprint( "error: read_n timeout\n"),1); + recon = 1; + return -1; + v = <- rc => + kill(tpid); + break; + } + return v; +} + +write_n(fd: ref Sys->FD, buf: array of byte, n: int): int +{ + print(sys->sprint("write_n %d\n", n),7); + nwrite := 0; + while (nwrite < n) { + i := sys->write(fd, buf[nwrite:], n-nwrite); + sys->sleep(1); + if (i <= 0) { + print(sys->sprint("Error returned by write: %r\n"),1); + readstat(); +# recon = 1; + return nwrite; + } + nwrite += i; + } + print(sys->sprint("write_n returning %d\n", nwrite),7); + return nwrite; +} + +readstat() +{ + consume(C.fd); + print("Serial status: ",5); + statfd := sys->open("/dev/eia"+string C.port_num+statopt[C.stat], sys->OREAD); + buf := array[100] of byte; + if (statfd != nil) { + for (;;) { + k := sys->read(statfd,buf,len buf); + if (k > 0) print(string buf[:k],2); + else break; + } + print("\n",2); + } + else print("cannot read serial status\n",1); +} + +beacon_ack(C: Camera_adt) +{ + # set speed + i := C.baud; + bak[4] = byte ((i>>24)&16rff); + bak[5] = byte ((i>>16)&16rff); + bak[6] = byte ((i>>8)&16rff); + bak[7] = byte (i&16rff); + + # set frame size to device + i = C.dfs; + bak[8] = byte ((i>>8)&16rff); + bak[9] = byte (i&16rff); + + # set frame size to host + i = C.hfs; + bak[10] = byte ((i>>8)&16rff); + bak[11] = byte (i&16rff); + bak[12] = check_sum(bak, 12); + + if (write_n(C.fd, bak, len bak) != len bak) { + print("Error writing beacon acknowledgement\n",3); + exit; + } + print("beacon acknowledgement written\n",3); +} + +# timer thread send tick <- = 0 to kill + +timer2(tick: chan of int, delay: int) +{ + pid := sys->pctl(0, nil); + tick <-= pid; + sys->sleep(delay); + tick <- = TOUT; +} + +beacon_ok(buf: array of byte): int +{ + + for (i := 0; i < len bintro; i++) { + if (buf[i] != bintro[i]) { + print(sys->sprint("Beacon failed on byte %d: %d (wanted %d)\n",i,int buf[i],int bintro[i]),3); + return 0; + } + } + print("Beacon passed\n",3); + return 1; +} + +check_sum(buf: array of byte, l: int): byte +{ + sum := 0; + for (i := 0; i < l; i++) + sum += int buf[i]; + return byte (sum&16rff); +} + + +set_int(b: array of byte, i, off: int): int +{ + b[0] = byte (i>>24&16rff); + b[1] = byte (i>>16&16rff); + b[2] = byte (i>>8&16rff); + b[3] = byte (i&16rff); + + return (off+4); +} + +set_fstring(b: array of byte, s: array of byte, off: int): int +{ + for (i := 0; i < 32; i++) + b[i] = byte 0; + for (i = 0; i < len s; i++) + b[i] = s[i]; + return (off+32); +} + +set_dosname(b: array of byte, s: array of byte, off: int): int +{ + for (i := 0; i < 16; i++) + b[i] = byte 0; + for (i = 0; i < len s; i++) + b[i] = s[i]; + return (off+16); +} + +get_tag(b: array of byte, off: int): (int, Partialtag) +{ + tag: Partialtag; + (off, tag.offset) = get_int(b, off); + (off, tag.length) = get_int(b, off); + (off, tag.filesize) = get_int(b, off); + return (off, tag); +} + +get_int(b: array of byte, off: int): (int, int) +{ + return (get_int2(b), off+4); +} + +get_int2(b: array of byte): int +{ + i := (int b[0]<<24)|(int b[1]<<16)|(int b[2]<<8)|(int b[3]); + return i; +} + + +get_pname(b: array of byte, off: int): (array of byte, int) +{ + return get_string(b, off, 4); +} + +get_dosname(b: array of byte, off: int): (array of byte, int) +{ + return get_string(b, off, 16); +} + +get_string(b: array of byte, off: int, l: int): (array of byte, int) +{ + s := array[l] of byte; + s[0:] = b[0:l]; + return (s, off+l); +} + +get_fstring(b: array of byte, off: int): (array of byte, int) +{ + return get_string(b, off, 32); +} + +sconv(b: array of byte): string +{ + s := string b; + i := len s-1; + while (i >= 0 && s[i] == 0) + i--; + return s[0:i+1]; +} + +name2dos(s: string): array of byte +{ + return array of byte str->toupper(s); +} + +getqid(i, ftype: int): int +{ + qid := (i<<4) + ftype; + return qid; +} + +gettype(qid: int): int +{ + ftype := qid & 15; + return ftype; +} + +cutdir(ab:array of byte): string +{ + s := sconv(ab); + for (i := 0; i < len s-1; i++) + if (s[i] == '/') + return s[i+1:len s - 1]; + return ""; +} + +convert_thumb(w,h: int, data: array of byte): array of byte +{ + rgb := array[w * h * 3] of byte; + index := 0; + rgbi := 0; + for (i := 0; i < (w * h) / 2; i++) { + + cb := real data[index]; + y := real data[index+1]; + cr := real data[index+2]; + + rb := conv(y + (1.77200 * (cb - 128.0))); + gb := conv(y - (0.34414 * (cb - 128.0)) - (0.71414 * (cr - 128.0))); + bb := conv(y + (1.4020 * (cr - 128.0))); + + for (loop := 0; loop < 2; loop++) { + rgb[rgbi++] = rb; + rgb[rgbi++] = gb; + rgb[rgbi++] = bb; + } + index += 4; + } + return rgb; +} + +conv(a: real): byte +{ + r := int a; + if (r < 0) r = -r; + if (r > 255) r = 255; + return byte r; +} + +thumb2bit(buf: array of byte, w,h: int): array of byte +{ + convbuf := convert_thumb(w,h,buf); + # assume thumbs are small so we wont gain much by compressing them + bitarray := array [60+len convbuf] of byte; + # assume chans = RGB24 + bitarray[:] = array of byte sys->sprint("%11s %11d %11d %11d %11d ", "r8g8b8", 0, 0, w, h); + bitarray[60:] = convbuf; + return bitarray; +} + +jpg2bit(s: string): string +{ + if (len s < 4) return s; + if (s[len s - 4:] != ".jpg") return s; + return s[:len s - 4]+".bit"; +} + +oldfiles : list of (string, int, int); + +getoldfiledata() +{ + oldfiles = nil; + for(i := 0; i < reslength; i++) + oldfiles = (str->tolower(sconv(filelist[i].cf.dosname)), + int filelist[i].qid.path, + filelist[i].cf.thumbqid) :: oldfiles; +} + +updatetree(tree: ref Nametree->Tree) +{ + for (i := 0; i < reslength; i++) { + name := str->tolower(sconv(filelist[i].cf.dosname)); + found := 0; + tmp : list of (string, int, int) = nil; + for (; oldfiles != nil; oldfiles = tl oldfiles) { + (oldname, oldqid, oldthumbqid) := hd oldfiles; + # sys->print("'%s' == '%s'?\n",name,oldname); + if (name == oldname) { + found = 1; + filelist[i].qid = (big oldqid, 0, sys->QTFILE); + filelist[i].cf.thumbqid = oldthumbqid; + } + else + tmp = hd oldfiles :: tmp; + } + oldfiles = tmp; + # sys->print("len oldfiles: %d\n",len oldfiles); + if (found) + updateintree(tree, name, i); + else + addtotree(tree, name, i); + + } + for (; oldfiles != nil; oldfiles = tl oldfiles) { + (oldname, oldqid, oldthumbqid) := hd oldfiles; + # sys->print("remove from tree: %s\n",oldname); + tree.remove(big oldqid); + tree.remove(big oldthumbqid); + } +} + +updateintree(tree: ref Nametree->Tree, name: string, i: int) +{ + # sys->print("update tree: %s\n",name); + tree.wstat(filelist[i].qid.path, + dir(name, + 8r444, + filelist[i].cf.filelength, + int filelist[i].qid.path)); + tree.wstat(big filelist[i].cf.thumbqid, + dir(jpg2bit(name), + 8r444, + 13020, + filelist[i].cf.thumbqid)); +} + +addtotree(tree: ref Nametree->Tree, name: string, i: int) +{ + # sys->print("addtotree: %s\n",name); + nextjpgqid += 1<<4; + filelist[i].qid = (big nextjpgqid, 0, sys->QTFILE); + parentqid := Qjpgdir; + tree.create(big parentqid, + dir(name, + 8r444, + filelist[i].cf.filelength, + nextjpgqid)); + + nexttmbqid += 1<<4; + filelist[i].cf.thumbqid = nexttmbqid; + tree.create(big Qthumbdir, + dir(jpg2bit(name), + 8r444, + 13020, + nexttmbqid)); +} + +keepalive(alivechan: chan of int) +{ + alivechan <-= sys->pctl(0,nil); + for (;;) { + sys->sleep(300000); + now := daytime->now(); + print(sys->sprint("Alive: %d idle seconds\n",now-wait),6); + if (now < wait) + wait = now - 300; + if (now - wait >= 300) + alivechan <-= 1; + } +} + +reconnect(n: int): int +{ + attempt := 0; + connected = 0; + delay := 100; + to5 := 0; + for (;;) { + print(sys->sprint( "Attempting to reconnect (attempt %d)\n",++attempt),2); + sys->sleep(100); + (C.fd, C.ctlfd, nil) = serialport(C.port_num); + if (C.fd == nil || C.ctlfd == nil) + print(sys->sprint("Could not open serial port\n"),3); + else if (connect() == 0) { + set_interface_timeout(); + connected = 1; + print("Reconnected!\n",2); + break; + } + if (n != -1 && attempt >= n) + break; + if (++to5 >= 5) { + delay *= 2; + to5 = 0; + if (delay > 600000) + delay = 600000; + } + sys->sleep(delay); + } + recon = 0; + return connected; +} + +# 1: errors +# 2: connection +# 3: main procs + +print(s: string, v: int) +{ + if (s != nil && s[len s - 1] == '\n') + s = s[:len s - 1]; + if (v <= verbosity) + sys->fprint(sys->fildes(2), "%s (%s)\n",s,camname); +} + +readinterface(qid : int, offset: big, size: int): (ref sys->Dir, array of byte) +{ + i := qid >> 4; + buf := array[size] of byte; + fd := sys->open(interfacepaths[i], sys->OREAD); + if (fd == nil) + return (nil,nil); + (n, dir) := sys->fstat(fd); + if (offset >= dir.length) + return (nil,nil); + sys->seek(fd, offset, sys->SEEKSTART); + i = sys->read(fd,buf,size); + return (ref dir, buf[:i]); +} + +readfile(f: string): string +{ + fd := sys->open(f, sys->OREAD); + if(fd == nil) + return nil; + + buf := array[8192] of byte; + n := sys->read(fd, buf, len buf); + if(n < 0) + return nil; + + return string buf[0:n]; +} diff --git a/appl/demo/camera/camera.dis b/appl/demo/camera/camera.dis Binary files differnew file mode 100644 index 00000000..c099686a --- /dev/null +++ b/appl/demo/camera/camera.dis diff --git a/appl/demo/camera/camera.sbl b/appl/demo/camera/camera.sbl new file mode 100644 index 00000000..451ffc0c --- /dev/null +++ b/appl/demo/camera/camera.sbl @@ -0,0 +1,6687 @@ +limbo .sbl 2.1 +Camera +8 +camera.b +sys.m +daytime.m +styx.m +styxservers.m +string.m +draw.m +arg.m +5417 +192.1,25 0 +193.1,36 1 +18,30 1 +32,35 1 +1,36 1 +1,36 1 +195.1,31 2 +196.1,37 3 +198.1,28 4 +199.1,13 5 +1,13 5 +200.1,49 6 +201.1,24 7 +19,23 7 +1,24 7 +202.1,40 8 +203.1,17 9 +1,17 9 +204.1,26 10 +206.1,31 11 +207.1,15 12 +208.1,21 13 +209.1,16 14 +210.9,21 15 +1,21 15 +211.1,34 16 +212.1,16 17 +214.1,13 18 +215.1,15 19 +216.1,16 20 +218.1,30 21 +21,22 21 +24,29 21 +1,30 21 +1,30 21 +219.1,32 22 +21,22 22 +24,31 22 +1,32 22 +1,32 22 +220.1,28 23 +17,18 23 +19,27 23 +1,28 23 +1,28 23 +221.1,27 24 +15,20 24 +21,26 24 +1,27 24 +1,27 24 +222.1,33 25 +15,20 25 +21,32 25 +1,33 25 +1,33 25 +223.1,33 26 +17,22 26 +23,32 26 +1,33 26 +1,33 26 +224.1,29 27 +16,21 27 +22,28 27 +1,29 27 +1,29 27 +225.1,31 28 +17,22 28 +23,30 28 +1,31 28 +1,31 28 +226.1,29 29 +15,20 29 +21,28 29 +1,29 29 +1,29 29 +227.1,33 30 +18,23 30 +24,32 30 +1,33 30 +1,33 30 +228.1,37 31 +20,25 31 +26,36 31 +1,37 31 +1,37 31 +229.1,39 32 +21,26 32 +27,38 32 +1,39 32 +1,39 32 +231.1,19 33 +232.33,36 34 +233.1,16 35 +11,15 35 +1,16 35 +234.1,100 36 +15,99 36 +1,100 36 +235.8,27 37 +8,27 37 +8,27 37 +8,27 37 +8,32 37 +236.7,10 38 +238.3,24 39 +3,24 39 +3,24 39 +3,24 38 +240.19,30 40 +19,30 40 +19,30 40 +3,30 40 +3,30 41 +3,30 38 +242.23,34 42 +23,34 42 +23,34 42 +11,34 42 +11,34 43 +3,34 42 +3,34 38 +244.16,27 44 +16,27 44 +16,27 44 +3,27 44 +3,27 45 +3,27 38 +246.20,31 46 +20,31 46 +20,31 46 +3,31 46 +3,31 47 +3,31 38 +248.3,15 48 +3,15 38 +250.19,30 49 +19,30 49 +19,30 49 +3,47 49 +3,47 50 +3,47 38 +252.3,15 51 +3,15 51 +3,15 38 +255.1,10 52 +256.24,41 53 +1,52 53 +258.6,12 54 +18,36 55 +14,36 55 +259.2,19 56 +2,38 56 +261.2,34 57 +258.38,41 58 +38,41 58 +264.7,64 59 +19,52 59 +53,63 59 +7,64 59 +7,64 59 +1,67 59 +1,67 59 +1,67 60 +65,66 59 +1,67 59 +265.6,17 61 +6,17 61 +6,17 61 +6,17 61 +268.26,48 62 +37,47 62 +26,48 62 +26,48 62 +4,8 62 +10,17 62 +19,22 62 +19,22 63 +19,22 64 +19,22 65 +269.7,18 66 +270.4,43 67 +10,40 67 +41,42 67 +4,43 67 +271.4,8 68 +273.2,5 61 +275.2,6 61 +277.2,3 61 +280.5,14 69 +5,14 69 +5,14 69 +5,19 69 +281.2,32 70 +8,29 70 +30,31 70 +2,32 70 +282.2,6 71 +284.1,10 72 +285.1,24 73 +7,21 73 +22,23 73 +1,24 73 +286.1,24 74 +1,24 74 +287.1,24 75 +1,24 75 +288.1,16 76 +1,16 76 +1,16 76 +289.1,14 77 +290.1,17 78 +291.1,26 79 +1,26 79 +1,26 79 +1,26 80 +292.1,20 81 +293.17,31 82 +29,30 82 +17,31 82 +17,31 82 +1,38 82 +1,38 82 +1,38 83 +33,37 82 +1,38 82 +294.1,7 84 +295.0,1 85 +299.6,12 86 +18,38 87 +14,38 87 +300.2,65 88 +19,38 88 +19,41 88 +42,61 88 +42,64 88 +2,65 88 +2,65 88 +2,65 89 +299.40,43 90 +40,43 90 +301.0,1 91 +327.1,8 92 +328.8,18 93 +329.6,14 94 +6,17 94 +6,17 95 +6,24 94 +37,43 96 +31,43 96 +26,43 96 +26,43 97 +26,43 98 +331.2,14 99 +2,14 99 +333.5,12 100 +14,23 101 +14,23 101 +334.8,9 102 +1,9 102 +339.1,8 103 +340.1,14 104 +341.6,12 105 +18,23 106 +14,23 106 +342.7,16 107 +27,30 107 +23,24 107 +23,31 107 +19,31 107 +19,31 108 +2,31 107 +341.25,28 109 +25,28 109 +343.8,10 110 +1,10 110 +348.1,14 111 +349.1,32 112 +350.1,21 113 +351.1,20 114 +352.1,15 115 +7,14 115 +1,15 115 +354.1,31 116 +14,18 116 +19,30 116 +1,31 116 +355.1,15 117 +357.1,40 118 +20,26 118 +28,33 118 +35,39 118 +1,40 118 +358.1,16 119 +362.13,19 120 +13,19 120 +388.6,10 120 +6,10 120 +361.2,8 120 +2,8 120 +2,8 120 +2,8 120 +364.9,15 121 +366.10,24 122 +20,23 122 +10,24 122 +10,24 122 +10,24 122 +367.7,30 123 +13,27 123 +28,29 123 +7,30 123 +368.7,20 124 +18,19 124 +7,20 124 +369.7,47 125 +27,33 125 +35,40 125 +42,46 125 +7,47 125 +370.7,20 126 +371.7,28 127 +372.7,12 128 +375.7,29 129 +13,26 129 +27,28 129 +7,29 129 +376.7,21 130 +13,20 130 +7,21 130 +7,21 121 +379.6,16 131 +11,15 131 +6,16 131 +381.6,41 132 +12,38 132 +39,40 132 +6,41 132 +382.10,29 133 +22,25 133 +27,28 133 +10,29 133 +10,29 133 +10,34 133 +383.14,15 134 +7,15 134 +386.13,15 135 +6,15 135 +6,15 136 +6,15 120 +389.4,13 137 +9,12 137 +4,13 137 +390.11,13 138 +4,13 138 +402.1,8 139 +403.16,21 140 +5,13 140 +5,21 140 +30,31 141 +23,31 141 +404.6,12 142 +23,30 143 +19,30 143 +33,43 143 +18,44 143 +14,44 143 +405.20,28 144 +18,28 144 +14,15 144 +14,29 144 +6,29 144 +6,29 145 +31,36 146 +404.46,49 147 +46,49 147 +407.8,11 148 +1,11 148 +433.6,12 149 +18,37 150 +14,37 150 +434.6,40 151 +15,19 151 +21,39 151 +21,39 151 +6,40 151 +6,40 151 +6,40 151 +435.3,35 152 +436.10,11 153 +3,11 153 +433.39,42 154 +39,42 154 +439.8,9 155 +1,9 155 +460.1,26 156 +19,22 156 +24,25 156 +1,26 156 +1,26 156 +461.5,16 157 +462.14,28 158 +26,27 158 +14,28 158 +14,28 158 +2,52 158 +2,52 158 +2,52 159 +30,51 158 +2,52 158 +2,52 158 +463.2,6 160 +465.6,15 161 +6,15 161 +467.14,28 162 +26,27 162 +14,28 162 +14,28 162 +2,58 162 +2,58 162 +2,58 163 +30,57 162 +2,58 162 +2,58 162 +473.0,1 164 +469.20,51 165 +24,51 165 +35,43 165 +45,50 165 +20,51 165 +20,51 166 +470.2,22 167 +10,15 167 +2,22 167 +2,22 167 +471.2,33 168 +13,16 168 +18,22 168 +24,32 168 +2,33 168 +2,33 168 +2,33 169 +2,33 170 +473.0,1 164 +477.1,11 171 +478.1,36 172 +13,16 172 +18,21 172 +23,35 172 +1,36 172 +1,36 172 +479.0,1 173 +490.1,27 174 +491.1,41 175 +17,28 175 +30,40 175 +1,41 175 +1,41 175 +492.1,38 176 +21,23 176 +25,28 176 +30,37 176 +1,38 176 +1,38 176 +493.14,17 177 +14,28 177 +1,28 177 +1,28 178 +494.0,1 179 +1:41.18,21 180 +23,26 180 +28,31 180 +33,36 180 +39,44 180 +46,47 180 +49,50 180 +53,54 180 +56,57 180 +59,60 180 +62,67 180 +69,70 180 +72,73 180 +0:499.1,14 181 +500.1,12 182 +501.1,12 183 +502.1,21 184 +503.5,22 185 +5,22 185 +504.2,26 186 +2,26 187 +506.2,27 188 +507.2,23 189 +509.1,14 190 +510.11,35 191 +11,35 191 +11,35 191 +1,35 191 +511.8,9 192 +1,9 192 +523.6,12 193 +18,27 194 +14,27 194 +524.6,14 195 +6,31 195 +525.10,11 196 +3,11 196 +523.29,32 197 +29,32 197 +526.8,10 198 +1,10 198 +531.6,12 199 +18,33 200 +14,33 200 +532.6,20 201 +6,32 201 +533.10,11 202 +3,11 202 +531.35,38 203 +35,38 203 +534.8,10 204 +1,10 204 +541.1,24 205 +542.1,45 206 +29,43 206 +29,43 206 +29,43 206 +35,37 206 +39,42 206 +29,43 206 +29,43 206 +29,43 206 +543.1,28 207 +11,22 207 +24,27 207 +1,28 207 +1,28 207 +544.1,11 208 +545.1,23 209 +7,20 209 +21,22 209 +1,23 209 +546.1,9 210 +1,9 210 +547.19,36 211 +19,36 211 +19,36 211 +548.24,59 212 +28,31 212 +32,50 212 +51,52 212 +53,58 212 +24,59 212 +24,59 212 +1,60 212 +1,5 212 +13,22 212 +13,22 212 +13,22 213 +13,22 214 +13,22 215 +13,22 216 +1,60 212 +1,60 212 +1,60 217 +549.24,47 218 +28,33 218 +34,39 218 +40,41 218 +42,46 218 +24,47 218 +24,47 218 +1,48 218 +1,5 218 +13,22 218 +13,22 218 +13,22 219 +13,22 220 +13,22 221 +13,22 222 +1,48 218 +1,48 218 +1,48 223 +550.24,53 224 +28,39 224 +40,45 224 +46,47 224 +48,52 224 +24,53 224 +24,53 224 +1,54 224 +1,5 224 +13,22 224 +13,22 224 +13,22 225 +13,22 226 +13,22 227 +13,22 228 +1,54 224 +1,54 224 +1,54 229 +551.24,53 230 +28,37 230 +38,43 230 +44,45 230 +46,52 230 +24,53 230 +24,53 230 +1,54 230 +1,5 230 +13,22 230 +13,22 230 +13,22 231 +13,22 232 +13,22 233 +13,22 234 +1,54 230 +1,54 230 +1,54 235 +552.24,49 236 +28,35 236 +36,41 236 +42,43 236 +44,48 236 +24,49 236 +24,49 236 +1,50 236 +1,5 236 +13,22 236 +13,22 236 +13,22 237 +13,22 238 +13,22 239 +13,22 240 +1,50 236 +1,50 236 +1,50 241 +553.24,49 242 +28,34 242 +35,40 242 +41,42 242 +43,48 242 +24,49 242 +24,49 242 +1,50 242 +1,5 242 +13,22 242 +13,22 242 +13,22 243 +13,22 244 +13,22 245 +13,22 246 +1,50 242 +1,50 242 +1,50 247 +554.24,51 248 +28,35 248 +36,41 248 +42,43 248 +44,50 248 +24,51 248 +24,51 248 +1,52 248 +1,5 248 +13,22 248 +13,22 248 +13,22 249 +13,22 250 +13,22 251 +13,22 252 +1,52 248 +1,52 248 +1,52 253 +555.24,63 254 +28,33 254 +34,52 254 +53,54 254 +55,62 254 +24,63 254 +24,63 254 +1,64 254 +1,5 254 +13,22 254 +13,22 254 +13,22 255 +13,22 256 +13,22 257 +13,22 258 +1,64 254 +1,64 254 +1,64 259 +556.24,67 260 +28,35 260 +36,54 260 +55,56 260 +57,66 260 +24,67 260 +24,67 260 +1,68 260 +1,5 260 +13,22 260 +13,22 260 +13,22 261 +13,22 262 +13,22 263 +13,22 264 +1,68 260 +1,68 260 +1,68 265 +557.6,12 266 +18,36 267 +14,36 267 +558.15,43 268 +25,42 268 +25,42 268 +15,43 268 +15,43 268 +559.6,13 269 +560.3,33 270 +566.3,31 271 +3,7 271 +15,24 271 +26,30 271 +3,31 271 +3,31 271 +3,31 272 +567.3,21 273 +3,21 274 +3,21 275 +3,21 276 +3,21 277 +3,21 278 +3,21 279 +3,21 280 +3,21 281 +557.38,41 282 +38,41 282 +571.1,31 283 +28,30 283 +1,31 283 +1,31 283 +573.34,55 284 +48,54 284 +34,55 284 +34,55 284 +16,67 284 +31,33 284 +31,33 284 +31,33 285 +57,66 284 +16,67 284 +16,67 284 +2,7 284 +9,12 284 +9,12 286 +9,12 287 +574.1,9 288 +577.1,9 289 +579.1,15 290 +580.1,17 291 +12,16 291 +1,17 291 +582.1,28 292 +7,25 292 +26,27 292 +1,28 292 +583.1,25 293 +584.1,27 294 +17,26 294 +1,27 294 +585.1,24 295 +586.1,13 296 +587.1,13 297 +588.1,14 298 +590.2,23 299 +2,23 299 +2,23 299 +591.6,17 300 +19,30 301 +592.6,13 302 +593.3,14 303 +594.3,12 304 +3,12 305 +597.3,14 306 +599.4,31 307 +9,18 307 +23,30 307 +4,31 307 +4,31 307 +600.8,17 308 +601.5,10 309 +603.11,16 310 +11,16 310 +605.11,20 310 +11,20 310 +602.4,10 310 +4,10 310 +4,10 310 +4,10 310 +604.5,10 311 +607.6,22 312 +6,22 312 +6,22 312 +608.6,27 313 +6,27 313 +6,27 313 +610.10,15 314 +611.7,30 315 +612.7,43 316 +24,29 316 +30,33 316 +34,42 316 +7,43 316 +613.7,20 317 +17,19 317 +7,20 317 +7,20 317 +614.7,21 318 +7,21 319 +7,21 320 +7,21 321 +617.7,12 322 +7,12 323 +7,12 323 +622.2,13 324 +623.2,13 325 +624.6,15 326 +625.3,27 327 +14,26 327 +3,27 327 +3,27 327 +626.3,8 328 +628.47,56 329 +47,49 329 +47,56 329 +47,56 329 +8,65 329 +20,45 329 +20,45 329 +20,45 330 +58,64 329 +8,65 329 +8,65 329 +2,68 329 +2,68 329 +2,68 331 +66,67 329 +2,68 329 +631.7,16 332 +632.3,67 333 +3,6 333 +13,66 333 +17,66 333 +28,34 333 +36,65 333 +13,66 333 +13,66 334 +3,67 333 +3,67 333 +633.3,46 335 +9,43 335 +44,45 335 +3,46 335 +3,46 336 +635.12,19 337 +12,19 337 +637.9,64 338 +22,54 338 +56,63 338 +9,64 338 +9,64 338 +3,67 338 +3,67 338 +3,67 339 +65,66 338 +3,67 338 +638.3,8 340 +640.3,20 341 +17,19 341 +3,20 341 +3,20 341 +641.7,15 342 +642.4,53 343 +4,7 343 +14,52 343 +18,52 343 +29,34 343 +36,51 343 +14,52 343 +14,52 344 +4,53 343 +4,53 343 +4,53 345 +643.4,9 346 +645.3,22 347 +646.3,17 348 +3,6 348 +15,16 348 +3,17 348 +647.19,34 349 +3,52 349 +648.8,14 350 +20,30 351 +16,30 351 +649.4,13 352 +16,30 352 +4,30 352 +648.32,35 353 +32,35 353 +650.21,26 354 +28,34 354 +3,12 354 +3,35 354 +3,35 355 +651.3,37 356 +24,33 356 +9,33 356 +9,33 357 +35,36 356 +3,37 356 +3,37 358 +3,37 337 +653.3,23 359 +17,22 359 +3,23 359 +3,23 359 +654.7,15 360 +655.22,24 361 +26,29 361 +4,13 361 +4,30 361 +4,30 362 +656.4,40 363 +27,36 363 +10,36 363 +10,36 364 +38,39 363 +4,40 363 +658.7,23 365 +660.4,16 366 +662.3,18 367 +3,6 367 +15,17 367 +3,18 367 +3,18 337 +664.3,29 368 +9,26 368 +27,28 368 +3,29 368 +665.3,25 369 +8,11 369 +19,24 369 +3,25 369 +3,25 369 +666.7,15 370 +667.4,36 371 +10,33 371 +34,35 371 +4,36 371 +668.4,45 372 +4,7 372 +14,44 372 +18,44 372 +29,34 372 +36,43 372 +14,44 372 +14,44 373 +4,45 372 +4,45 372 +4,45 374 +669.4,9 375 +671.3,31 376 +20,30 376 +3,31 376 +3,31 376 +672.7,21 377 +673.4,58 378 +4,7 378 +14,57 378 +18,57 378 +29,34 378 +36,56 378 +14,57 378 +14,57 379 +4,58 378 +4,58 378 +4,58 380 +674.4,9 381 +677.9,15 382 +17,30 383 +678.19,30 384 +9,15 384 +9,39 384 +679.6,36 385 +12,33 385 +34,35 385 +6,36 385 +680.10,36 386 +21,32 386 +21,35 386 +10,36 386 +10,36 386 +10,41 386 +681.12,17 387 +682.8,62 388 +8,11 388 +18,61 388 +22,61 388 +33,38 388 +40,60 388 +18,61 388 +18,61 389 +8,62 388 +8,62 388 +683.7,12 390 +686.6,19 391 +6,9 391 +17,18 391 +6,19 391 +687.10,25 392 +10,25 392 +10,25 392 +10,30 392 +688.7,60 393 +7,10 393 +17,59 393 +21,59 393 +32,37 393 +39,58 393 +17,59 393 +17,59 394 +7,60 393 +7,60 393 +7,60 395 +690.7,23 396 +18,22 396 +7,23 396 +691.7,40 397 +7,10 397 +17,39 397 +21,39 397 +33,38 397 +17,39 397 +17,39 398 +7,40 397 +7,40 397 +693.6,11 399 +677.32,35 400 +32,35 400 +32,35 401 +32,35 337 +698.3,45 402 +9,42 402 +43,44 402 +3,45 402 +699.12,26 403 +12,15 403 +24,25 403 +12,26 403 +12,26 403 +700.6,14 404 +6,14 405 +6,14 406 +6,14 407 +6,14 408 +701.4,9 409 +702.7,27 410 +7,27 410 +703.4,34 411 +10,31 411 +32,33 411 +4,34 411 +704.4,15 412 +4,7 412 +13,14 412 +4,15 412 +4,15 412 +4,15 413 +4,15 414 +4,15 415 +4,15 416 +4,15 417 +705.4,9 418 +708.8,27 419 +16,26 419 +8,27 419 +8,27 419 +8,27 419 +8,27 419 +8,27 419 +8,27 419 +710.22,66 420 +36,46 420 +48,56 420 +58,65 420 +22,66 420 +22,66 420 +711.8,18 421 +22,39 421 +712.5,26 422 +713.5,29 423 +5,9 423 +16,22 423 +24,28 423 +5,29 423 +5,29 423 +5,29 424 +715.4,44 425 +4,7 425 +14,43 425 +18,43 425 +28,33 425 +35,42 425 +14,43 425 +14,43 426 +4,44 425 +4,44 425 +4,44 427 +4,44 428 +4,44 429 +4,44 419 +717.4,38 430 +10,35 430 +36,37 430 +4,38 430 +718.25,41 431 +25,41 431 +25,41 431 +4,41 431 +4,41 432 +719.9,14 433 +26,57 434 +49,50 434 +52,56 434 +26,57 434 +26,57 434 +16,58 434 +16,19 434 +16,19 434 +16,19 435 +16,58 434 +16,58 434 +16,58 419 +722.4,33 436 +10,30 436 +31,32 436 +4,33 436 +723.25,36 437 +25,36 437 +25,36 437 +4,36 437 +4,36 438 +724.9,14 439 +725.15,46 440 +38,39 440 +41,45 440 +15,46 440 +15,46 440 +5,47 440 +5,8 440 +5,8 440 +5,8 441 +5,47 440 +5,47 440 +5,47 419 +728.25,50 442 +25,50 442 +25,50 442 +4,50 442 +4,50 443 +729.9,14 444 +730.15,46 445 +38,39 445 +41,45 445 +15,46 445 +15,46 445 +5,47 445 +5,8 445 +5,8 445 +5,8 446 +5,47 445 +5,47 445 +5,47 419 +734.8,21 447 +25,41 447 +735.5,22 448 +5,14 448 +20,21 448 +5,22 448 +5,22 448 +738.5,10 449 +740.4,19 450 +741.4,39 451 +22,28 451 +30,31 451 +32,36 451 +37,38 451 +4,39 451 +4,39 451 +742.9,14 452 +743.5,42 453 +5,8 453 +15,41 453 +19,41 453 +29,34 453 +36,40 453 +15,41 453 +15,41 454 +5,42 453 +5,42 453 +5,42 419 +746.8,21 455 +25,41 455 +748.5,22 456 +5,14 456 +20,21 456 +5,22 456 +5,22 456 +749.5,10 457 +751.4,19 458 +753.4,39 459 +22,28 459 +30,31 459 +32,36 459 +37,38 459 +4,39 459 +4,39 459 +754.9,14 460 +755.5,42 461 +5,8 461 +15,41 461 +19,41 461 +29,34 461 +36,40 461 +15,41 461 +15,41 462 +5,42 461 +5,42 461 +5,42 419 +758.8,26 463 +28,82 464 +28,31 464 +38,81 464 +42,81 464 +53,58 464 +60,80 464 +38,81 464 +38,81 465 +28,82 464 +28,82 464 +28,82 466 +760.26,69 467 +43,55 467 +56,68 467 +26,69 467 +26,69 467 +5,69 467 +5,69 468 +761.10,15 469 +762.6,43 470 +6,9 470 +16,42 470 +20,42 470 +30,35 470 +37,41 470 +16,42 470 +16,42 471 +6,43 470 +6,43 470 +6,43 419 +766.25,45 472 +25,45 472 +25,45 472 +4,45 472 +4,45 473 +767.9,14 474 +768.9,17 475 +9,22 475 +769.6,71 476 +6,9 476 +16,70 476 +20,70 476 +31,36 476 +38,69 476 +16,70 476 +16,70 477 +6,71 476 +6,71 476 +6,71 478 +771.16,47 479 +39,40 479 +42,46 479 +16,47 479 +16,47 479 +6,48 479 +6,9 479 +6,9 479 +6,9 480 +6,48 479 +6,48 479 +6,48 419 +774.4,56 481 +4,7 481 +14,55 481 +18,55 481 +29,34 481 +36,54 481 +14,55 481 +14,55 482 +4,56 481 +4,56 481 +4,56 419 +4,56 483 +4,56 484 +4,56 485 +4,56 486 +4,56 337 +779.3,46 487 +9,43 487 +44,45 487 +3,46 487 +781.12,27 488 +12,15 488 +25,26 488 +12,27 488 +12,27 488 +782.6,14 489 +783.4,37 490 +10,34 490 +35,36 490 +4,37 490 +4,37 491 +4,37 492 +4,37 493 +4,37 494 +784.4,9 495 +786.3,31 496 +20,30 496 +3,31 496 +3,31 496 +787.13,50 497 +27,40 497 +42,49 497 +13,50 497 +13,50 497 +788.7,22 498 +789.8,32 499 +18,31 499 +8,32 499 +8,32 499 +8,37 499 +790.5,791.40 500 +790.5,8 500 +15,791.39 500 +790.19,791.39 500 +790.30,35 500 +37,791.38 500 +790.15,791.39 500 +790.15,791.39 501 +790.5,791.40 500 +790.5,791.40 500 +790.5,791.40 502 +792.9,53 503 +9,12 503 +19,52 503 +23,52 503 +34,39 503 +41,51 503 +19,52 503 +19,52 504 +9,53 503 +9,53 503 +9,53 505 +795.12,26 506 +796.4,13 507 +797.9,13 508 +9,13 508 +803.9,24 509 +9,24 509 +9,24 509 +9,29 509 +804.6,47 510 +6,47 511 +806.6,22 512 +17,21 512 +6,22 512 +6,22 508 +810.5,22 513 +811.11,51 514 +23,47 514 +48,50 514 +11,51 514 +11,51 514 +5,54 514 +5,54 514 +5,54 515 +52,53 514 +5,54 514 +812.10,16 516 +22,37 517 +18,37 517 +816.34,48 518 +34,51 518 +10,19 518 +10,27 518 +10,51 518 +817.7,67 519 +24,33 519 +24,41 519 +24,44 519 +46,55 519 +46,63 519 +46,66 519 +7,67 519 +7,67 519 +7,67 520 +818.7,22 521 +18,21 521 +7,22 521 +7,22 521 +812.39,42 522 +39,42 522 +821.5,20 523 +5,20 523 +5,20 523 +822.9,17 524 +823.6,44 525 +824.6,11 526 +826.9,16 527 +827.22,37 528 +6,37 528 +828.6,11 529 +830.5,21 530 +16,20 530 +5,21 530 +5,21 530 +831.9,24 531 +9,24 531 +9,24 531 +9,29 531 +832.6,47 532 +833.6,11 533 +835.5,21 534 +16,20 534 +5,21 534 +5,21 508 +837.9,15 535 +838.6,25 536 +20,24 536 +6,25 536 +6,25 536 +839.10,18 537 +840.38,42 538 +13,42 538 +7,46 538 +7,46 539 +7,46 540 +842.7,48 541 +30,34 541 +43,47 541 +40,47 541 +36,47 541 +36,47 542 +7,48 541 +7,48 541 +843.11,20 543 +844.8,15 544 +8,15 545 +846.14,25 546 +8,26 546 +8,35 546 +48,52 546 +45,52 546 +8,52 546 +8,52 547 +8,52 548 +8,52 508 +852.9,14 549 +853.9,18 550 +854.6,23 551 +12,20 551 +21,22 551 +6,23 551 +855.6,43 552 +6,9 552 +16,42 552 +20,42 552 +31,36 552 +38,41 552 +16,42 552 +16,42 553 +6,43 552 +6,43 552 +6,43 554 +857.10,54 555 +10,13 555 +20,53 555 +24,53 555 +35,40 555 +42,52 555 +20,53 555 +20,53 556 +10,54 555 +10,54 555 +10,54 557 +10,54 558 +860.12,28 559 +861.8,16 560 +862.5,24 561 +863.4,48 562 +4,7 562 +14,47 562 +18,47 562 +29,34 562 +36,46 562 +14,47 562 +14,47 563 +4,48 562 +4,48 562 +4,48 564 +865.8,67 565 +8,11 565 +18,66 565 +22,66 565 +33,38 565 +40,65 565 +18,66 565 +18,66 566 +8,67 565 +8,67 565 +8,67 567 +8,67 568 +8,67 569 +8,67 570 +8,67 571 +8,67 337 +867.3,46 572 +9,43 572 +44,45 572 +3,46 572 +868.3,51 573 +3,6 573 +13,50 573 +17,50 573 +28,33 573 +35,49 573 +13,50 573 +13,50 574 +3,51 573 +3,51 573 +3,51 337 +870.3,18 575 +3,6 575 +15,17 575 +3,18 575 +3,18 337 +872.6,11 576 +873.3,14 577 +874.3,21 578 +19,20 578 +3,21 578 +3,21 578 +875.8,10 579 +876.4,68 580 +4,7 580 +14,67 580 +18,67 580 +29,35 580 +37,66 580 +14,67 580 +14,67 581 +4,68 580 +4,68 580 +877.4,27 582 +878.4,40 583 +21,26 583 +27,30 583 +31,39 583 +4,40 583 +879.4,17 584 +14,16 584 +4,17 584 +4,17 584 +880.4,18 585 +881.4,15 586 +882.4,19 587 +15,18 587 +4,19 587 +4,19 587 +4,19 588 +4,19 588 +886.1,12 589 +1,5 589 +1,12 589 +887.1,15 590 +6,14 590 +1,15 590 +888.1,12 591 +7,11 591 +1,12 591 +889.0,1 592 +902.1,12 593 +903.1,10 594 +904.1,13 595 +905.1,32 596 +906.8,13 597 +8,13 597 +8,13 597 +8,13 598 +1,13 597 +911.17,24 599 +5,13 599 +5,24 599 +912.9,11 600 +2,11 600 +913.1,11 601 +1,18 601 +914.1,8 602 +915.14,21 603 +5,10 603 +5,21 603 +916.2,11 604 +917.1,11 605 +918.8,9 606 +1,9 606 +923.5,18 607 +924.9,12 608 +2,12 608 +925.6,18 609 +1,18 609 +926.5,18 610 +22,38 610 +927.9,12 611 +2,12 611 +928.1,10 612 +929.16,23 613 +5,12 613 +5,23 613 +930.2,13 614 +931.1,11 615 +932.8,9 616 +1,9 616 +938.10,18 617 +10,18 617 +940.11,16 617 +11,16 617 +937.10,16 617 +10,16 617 +10,16 617 +10,16 617 +939.3,9 618 +941.3,43 619 +9,40 619 +41,42 619 +3,43 619 +942.3,67 620 +3,6 620 +13,66 620 +17,66 620 +28,34 620 +36,65 620 +13,66 620 +13,66 621 +3,67 620 +3,67 620 +943.3,18 622 +14,17 622 +3,18 622 +3,18 622 +3,18 623 +3,18 617 +949.1,15 624 +952.6,12 625 +14,27 626 +954.7,14 627 +25,36 627 +18,45 627 +955.3,15 628 +956.3,8 629 +958.11,18 630 +33,44 630 +33,56 630 +22,29 630 +22,56 630 +959.3,15 631 +960.3,8 632 +952.29,32 633 +29,32 633 +963.5,26 634 +30,42 634 +964.8,83 635 +21,62 635 +64,72 635 +73,82 635 +8,83 635 +8,83 635 +2,86 635 +2,86 635 +2,86 636 +84,85 635 +2,86 635 +965.9,12 637 +2,12 637 +967.1,23 638 +968.12,30 639 +1,41 639 +969.12,30 640 +1,44 640 +970.6,12 641 +14,19 642 +971.6,18 643 +972.3,26 644 +17,25 644 +3,26 644 +3,26 644 +973.9,49 645 +21,40 645 +41,48 645 +9,49 645 +9,49 645 +3,52 645 +3,52 645 +3,52 646 +50,51 645 +3,52 645 +974.13,31 647 +3,45 647 +975.9,36 648 +21,27 648 +28,35 648 +9,36 648 +9,36 648 +3,39 648 +3,39 648 +3,39 649 +37,38 648 +3,39 648 +977.22,58 650 +28,46 650 +28,57 650 +22,58 650 +22,58 650 +9,59 650 +9,59 650 +9,59 651 +9,59 650 +9,59 650 +5,980.13 650 +977.5,980.13 650 +977.5,980.13 652 +978.5,10 650 +979.5,12 650 +980.5,12 650 +977.5,980.13 650 +977.5,980.13 650 +976.3,980.14 650 +976.3,7 650 +14,17 650 +14,17 650 +14,17 653 +14,17 654 +14,17 655 +14,17 656 +3,980.14 650 +976.3,980.14 650 +976.3,980.14 657 +981.3,19 658 +14,18 658 +3,19 658 +3,19 658 +3,19 659 +970.21,24 660 +21,24 660 +985.5,17 661 +22,29 661 +38,41 662 +31,41 662 +986.5,12 663 +24,42 664 +14,57 664 +987.5,13 665 +17,44 665 +27,34 665 +36,43 665 +17,44 665 +17,44 665 +17,55 665 +989.2,14 666 +990.2,40 667 +24,31 667 +32,39 667 +2,40 667 +2,40 667 +991.6,24 668 +33,36 669 +26,36 669 +992.6,20 670 +6,32 670 +34,55 671 +993.2,25 672 +994.18,44 673 +28,35 673 +36,43 673 +18,44 673 +18,44 673 +2,57 673 +2,57 673 +2,57 674 +46,56 673 +2,57 673 +2,57 673 +995.6,15 675 +17,42 676 +26,33 676 +34,41 676 +17,42 676 +17,42 677 +997.3,40 678 +13,15 678 +16,24 678 +25,39 678 +3,40 678 +3,40 678 +998.3,30 679 +13,15 679 +16,20 679 +21,29 679 +3,30 679 +3,30 679 +999.3,11 680 +1000.10,14 681 +3,14 681 +3,14 682 +1005.5,24 683 +28,47 683 +51,72 683 +1006.2,16 684 +2,16 685 +1007.10,17 686 +1008.2,44 687 +18,26 687 +28,34 687 +36,43 687 +2,44 687 +2,44 687 +2,44 688 +1009.11,18 689 +1010.2,47 690 +21,29 690 +31,37 690 +39,46 690 +2,47 690 +2,47 690 +1011.5,13 691 +16,23 691 +5,23 691 +1012.2,20 692 +1013.2,30 693 +1014.18,26 694 +18,36 694 +2,45 694 +1015.29,37 695 +16,20 695 +16,38 695 +2,38 695 +2,38 696 +1016.2,22 697 +1017.15,22 698 +2,23 698 +1019.5,13 699 +1021.2,37 700 +21,28 700 +29,36 700 +2,37 700 +2,37 700 +1023.6,17 701 +1024.3,44 702 +20,25 702 +26,37 702 +38,43 702 +3,44 702 +3,44 702 +3,44 703 +1026.3,36 704 +18,23 704 +24,35 704 +3,36 704 +3,36 704 +1027.7,16 705 +1028.4,36 706 +14,16 706 +17,22 706 +23,35 706 +4,36 706 +4,36 706 +1030.6,15 707 +1031.3,35 708 +18,20 708 +21,25 708 +26,34 708 +3,35 708 +3,35 708 +1032.3,11 709 +1034.14,30 710 +24,29 710 +14,30 710 +14,30 710 +3,4 710 +6,9 710 +6,9 711 +6,9 712 +6,9 713 +6,9 714 +1035.6,12 715 +1036.3,43 716 +12,19 716 +20,27 716 +28,42 716 +3,43 716 +3,43 717 +3,43 718 +3,43 719 +3,43 720 +3,43 721 +3,43 722 +1039.8,12 723 +1,12 723 +1058.1,10 724 +1059.8,24 725 +1060.19,31 726 +1061.7,13 727 +15,28 728 +1062.14,25 729 +3,39 729 +1063.7,9 730 +21,32 731 +11,47 731 +1064.7,36 732 +13,24 732 +13,35 732 +7,36 732 +7,36 732 +7,45 732 +7,45 733 +49,62 732 +1065.10,23 734 +4,30 734 +4,30 735 +1066.4,9 736 +1061.30,33 737 +30,33 737 +1069.2,26 738 +2,26 739 +2,26 739 +1071.1,16 740 +1072.0,1 741 +1076.1,27 742 +18,26 742 +1,27 742 +1,27 742 +1078.1,10 743 +1079.1,13 744 +1080.8,24 745 +1081.19,31 746 +1082.6,22 747 +26,39 747 +1083.3,14 748 +1084.10,15 749 +16,18 749 +19,26 749 +3,34 749 +3,34 750 +3,34 751 +1087.9,22 752 +3,29 752 +3,29 753 +1088.2,26 754 +2,26 755 +2,26 755 +1090.5,17 756 +1091.9,16 757 +17,24 757 +25,32 757 +2,40 757 +2,40 758 +1092.1,16 759 +1093.0,1 760 +1098.1,27 761 +18,26 761 +1,27 761 +1,27 761 +1100.1,10 762 +1101.8,24 763 +1102.24,36 764 +1103.6,22 765 +26,39 765 +1104.9,27 766 +3,34 766 +3,34 767 +1105.2,26 768 +2,26 769 +2,26 769 +1107.1,16 770 +1108.0,1 771 +1112.1,27 772 +18,26 772 +1,27 772 +1,27 772 +1113.1,17 773 +1114.8,18 774 +1115.24,30 775 +1116.6,22 776 +26,39 776 +48,55 777 +41,55 777 +1117.2,14 778 +2,14 779 +2,14 779 +1119.8,10 780 +1,10 780 +1124.32,46 781 +38,45 781 +32,46 781 +32,46 781 +19,47 781 +19,47 781 +19,47 782 +19,47 781 +19,47 781 +1,47 781 +1,47 783 +1125.5,12 784 +14,34 785 +29,33 785 +14,34 785 +14,34 785 +1126.6,14 786 +6,18 786 +1,25 786 +1127.8,12 787 +1,12 787 +1132.1,27 788 +7,24 788 +25,26 788 +1,27 788 +1133.1,28 789 +9,13 789 +15,18 789 +20,27 789 +1,28 789 +1,28 789 +1135.5,42 790 +15,19 790 +21,24 790 +26,33 790 +34,41 790 +5,42 790 +5,42 790 +5,46 790 +1136.3,66 791 +9,63 791 +64,65 791 +3,66 791 +1137.10,12 792 +3,12 792 +1139.8,9 793 +1,9 793 +1145.1,23 794 +1148.1,7 795 +44,57 795 +15,58 795 +1,58 795 +1149.1,7 796 +15,31 796 +1,31 796 +1151.5,20 797 +5,20 797 +5,20 797 +5,25 797 +1152.9,11 798 +2,11 798 +1154.1,7 799 +1,16 799 +1156.1,45 800 +23,27 800 +29,34 800 +36,44 800 +1,45 800 +1,45 800 +1157.5,27 801 +1158.9,11 802 +2,11 802 +1159.8,9 803 +1,9 803 +1164.1,6 804 +1165.1,18 805 +1166.1,18 806 +1168.1,22 807 +14,16 807 +17,21 807 +1,22 807 +1169.1,14 808 +1170.1,24 809 +21,23 809 +1,24 809 +1171.1,14 810 +1173.1,9 811 +1175.5,7 812 +5,7 812 +1180.9,11 812 +9,11 812 +1174.1,7 812 +1,7 812 +1,7 812 +1,7 812 +1176.3,13 813 +8,12 813 +3,13 813 +1177.3,36 814 +9,33 814 +34,35 814 +3,36 814 +1178.3,9 815 +1179.3,8 816 +1181.3,13 817 +8,12 817 +3,13 817 +1182.3,8 818 +1184.8,9 819 +1,9 819 +1189.1,28 820 +7,25 820 +26,27 820 +1,28 820 +1190.9,26 821 +19,20 821 +22,25 821 +9,26 821 +9,26 821 +1,26 821 +1191.5,18 822 +5,18 822 +5,18 822 +5,23 822 +1192.2,11 823 +1193.2,8 824 +1195.1,7 825 +1,16 825 +1196.1,7 826 +1,16 826 +1197.1,36 827 +23,27 827 +29,32 827 +34,35 827 +1,36 827 +1,36 827 +1198.5,20 828 +1199.2,11 829 +1200.2,8 830 +1202.1,9 831 +1203.1,21 832 +7,18 832 +19,20 832 +1,21 832 +1204.0,1 833 +1218.5,16 834 +25,28 835 +18,28 835 +1219.1,31 836 +7,28 836 +29,30 836 +1,31 836 +1222.9,27 837 +1,30 837 +1223.1,18 838 +1224.5,15 839 +1225.2,29 840 +1226.6,24 841 +33,36 842 +26,36 842 +1229.8,65 843 +20,47 843 +48,56 843 +58,64 843 +8,65 843 +8,65 843 +2,68 843 +2,68 843 +2,68 844 +66,67 843 +2,68 843 +1230.6,24 845 +6,35 845 +1231.3,32 846 +1232.2,16 847 +1234.2,31 848 +1235.2,42 849 +32,37 849 +39,41 849 +2,42 849 +2,42 849 +1236.2,23 850 +1237.2,47 851 +16,27 851 +16,21 851 +16,27 851 +29,41 851 +43,46 851 +2,47 851 +2,47 851 +1238.2,52 852 +20,31 852 +20,25 852 +20,31 852 +33,46 852 +48,51 852 +2,52 852 +2,52 852 +1239.2,51 853 +20,31 853 +20,25 853 +20,31 853 +33,45 853 +47,50 853 +2,51 853 +2,51 853 +1240.2,36 854 +16,27 854 +16,21 854 +16,27 854 +29,30 854 +32,35 854 +2,36 854 +2,36 854 +1242.2,41 855 +16,27 855 +16,21 855 +16,27 855 +29,35 855 +37,40 855 +2,41 855 +2,41 855 +1243.2,36 856 +16,27 856 +16,21 856 +16,27 856 +29,30 856 +32,35 856 +2,36 856 +2,36 856 +1244.2,43 857 +16,27 857 +16,21 857 +16,27 857 +29,37 857 +39,42 857 +2,43 857 +2,43 857 +1246.8,76 858 +21,46 858 +48,54 858 +56,65 858 +67,75 858 +8,76 858 +8,76 858 +2,79 858 +2,79 858 +2,79 859 +77,78 858 +2,79 858 +1247.2,16 860 +2,16 860 +2,16 860 +1249.6,31 861 +6,31 861 +6,31 861 +6,31 861 +6,36 861 +1250.9,39 862 +21,33 862 +35,38 862 +9,39 862 +9,39 862 +3,42 862 +3,42 862 +3,42 863 +40,41 862 +3,42 862 +1251.10,13 864 +3,13 864 +1253.2,22 865 +1254.8,52 866 +21,39 866 +41,51 866 +8,52 866 +8,52 866 +2,55 866 +2,55 866 +2,55 867 +53,54 866 +2,55 866 +1256.21,46 868 +29,40 868 +29,34 868 +29,40 868 +21,46 868 +21,46 868 +21,46 868 +3,12 868 +14,17 868 +1257.13,38 869 +21,32 869 +21,26 869 +21,32 869 +13,38 869 +13,38 869 +13,38 869 +3,4 869 +6,9 869 +1258.20,45 870 +28,39 870 +28,33 870 +28,39 870 +20,45 870 +20,45 870 +20,45 870 +3,11 870 +13,16 870 +1259.8,78 871 +21,56 871 +58,64 871 +66,67 871 +69,77 871 +8,78 871 +8,78 871 +2,81 871 +2,81 871 +2,81 872 +79,80 871 +2,81 871 +1261.6,17 873 +1262.21,51 874 +39,44 874 +29,34 874 +29,45 874 +21,51 874 +21,51 874 +21,51 874 +4,12 874 +14,17 874 +1263.14,44 875 +32,37 875 +22,27 875 +22,38 875 +14,44 875 +14,44 875 +14,44 875 +4,5 875 +7,10 875 +1264.14,44 876 +32,37 876 +22,27 876 +22,38 876 +14,44 876 +14,44 876 +14,44 876 +4,5 876 +7,10 876 +1265.18,48 877 +36,41 877 +26,31 877 +26,42 877 +18,48 877 +18,48 877 +18,48 877 +4,9 877 +11,14 877 +1266.3,21 878 +3,47 878 +1267.3,38 879 +1268.9,76 880 +21,56 880 +57,58 880 +59,60 880 +61,69 880 +70,75 880 +9,76 880 +9,76 880 +3,79 880 +3,79 880 +3,79 881 +77,78 880 +3,79 880 +1270.6,16 882 +6,27 882 +29,50 883 +1271.8,53 884 +21,49 884 +51,52 884 +8,53 884 +8,53 884 +2,56 884 +2,56 884 +2,56 885 +54,55 884 +2,56 884 +1272.33,38 886 +23,28 886 +23,39 886 +2,39 886 +2,39 887 +1273.2,13 888 +1274.6,24 889 +26,31 890 +1276.8,32 891 +18,27 891 +28,29 891 +30,31 891 +8,32 891 +8,32 891 +1,32 891 +1281.9,27 892 +1,30 892 +1282.1,32 893 +1283.1,27 894 +7,24 894 +25,26 894 +1,27 894 +1284.7,64 895 +19,46 895 +47,55 895 +57,63 895 +7,64 895 +7,64 895 +1,67 895 +1,67 895 +1,67 896 +65,66 895 +1,67 895 +1285.5,23 897 +32,35 898 +25,35 898 +1286.5,23 899 +5,34 899 +1287.2,31 900 +1288.1,15 901 +1289.1,30 902 +1290.1,41 903 +31,36 903 +38,40 903 +1,41 903 +1,41 903 +1291.1,22 904 +1292.1,46 905 +15,26 905 +15,20 905 +15,26 905 +28,40 905 +42,45 905 +1,46 905 +1,46 905 +1293.1,51 906 +19,30 906 +19,24 906 +19,30 906 +32,45 906 +47,50 906 +1,51 906 +1,51 906 +1294.1,50 907 +19,30 907 +19,24 907 +19,30 907 +32,44 907 +46,49 907 +1,50 907 +1,50 907 +1295.1,35 908 +15,26 908 +15,20 908 +15,26 908 +28,29 908 +31,34 908 +1,35 908 +1,35 908 +1297.1,40 909 +15,26 909 +15,20 909 +15,26 909 +28,34 909 +36,39 909 +1,40 909 +1,40 909 +1298.1,35 910 +15,26 910 +15,20 910 +15,26 910 +28,29 910 +31,34 910 +1,35 910 +1,35 910 +1299.1,42 911 +15,26 911 +15,20 911 +15,26 911 +28,36 911 +38,41 911 +1,42 911 +1,42 911 +1301.7,74 912 +20,44 912 +46,52 912 +54,63 912 +65,73 912 +7,74 912 +7,74 912 +1,77 912 +1,77 912 +1,77 913 +75,76 912 +1,77 912 +1302.1,15 914 +1,15 914 +1,15 914 +1303.5,31 915 +5,31 915 +5,31 915 +5,31 915 +5,36 915 +1304.8,38 916 +20,32 916 +34,37 916 +8,38 916 +8,38 916 +2,41 916 +2,41 916 +2,41 917 +39,40 916 +2,41 916 +1305.9,12 918 +2,12 918 +1307.1,21 919 +1308.7,51 920 +20,38 920 +40,50 920 +7,51 920 +7,51 920 +1,54 920 +1,54 920 +1,54 921 +52,53 920 +1,54 920 +1309.17,42 922 +25,36 922 +25,30 922 +25,36 922 +17,42 922 +17,42 922 +17,42 922 +2,8 922 +10,13 922 +1310.12,37 923 +20,31 923 +20,25 923 +20,31 923 +12,37 923 +12,37 923 +12,37 923 +2,3 923 +5,8 923 +1311.19,44 924 +27,38 924 +27,32 924 +27,38 924 +19,44 924 +19,44 924 +19,44 924 +2,10 924 +12,15 924 +1312.7,84 925 +20,54 925 +56,62 925 +64,73 925 +75,83 925 +7,84 925 +7,84 925 +1,87 925 +1,87 925 +1,87 926 +85,86 925 +1,87 925 +1313.1,29 927 +1314.26,31 928 +16,21 928 +16,32 928 +1,32 928 +1,32 929 +1315.8,16 930 +1,16 930 +1320.1,27 931 +1321.1,41 932 +31,36 932 +38,40 932 +1,41 932 +1,41 932 +1323.1,22 933 +1324.1,46 934 +15,26 934 +15,20 934 +15,26 934 +28,40 934 +42,45 934 +1,46 934 +1,46 934 +1325.1,51 935 +19,30 935 +19,24 935 +19,30 935 +32,45 935 +47,50 935 +1,51 935 +1,51 935 +1326.1,50 936 +19,30 936 +19,24 936 +19,30 936 +32,44 936 +46,49 936 +1,50 936 +1,50 936 +1327.1,15 937 +1,15 937 +1,15 937 +1329.5,22 938 +5,22 938 +5,22 938 +5,27 938 +1330.9,11 939 +2,11 939 +1331.8,9 940 +1,9 940 +1344.1,8 941 +1346.1,35 942 +1347.1,40 943 +31,36 943 +38,39 943 +1,40 943 +1,40 943 +1348.1,15 944 +1,15 944 +1,15 944 +1350.5,22 945 +5,22 945 +5,22 945 +5,27 945 +36,38 946 +29,38 946 +1351.1,22 947 +1353.16,41 948 +24,35 948 +24,29 948 +24,35 948 +16,41 948 +16,41 948 +16,41 948 +2,7 948 +9,12 948 +1354.20,45 949 +28,39 949 +28,33 949 +28,39 949 +20,45 949 +20,45 949 +20,45 949 +2,11 949 +13,16 949 +1355.14,39 950 +22,33 950 +22,27 950 +22,33 950 +14,39 950 +14,39 950 +14,39 950 +2,5 950 +7,10 950 +1356.6,77 951 +18,60 951 +61,66 951 +67,76 951 +6,77 951 +6,77 951 +1,77 951 +1,77 952 +1357.5,14 953 +1358.2,11 954 +2,11 955 +1360.7,55 956 +19,50 956 +51,54 956 +7,55 956 +7,55 956 +2,55 956 +2,55 957 +1362.8,9 958 +1,9 958 +1369.1,31 959 +1370.1,40 960 +31,36 960 +38,39 960 +1,40 960 +1,40 960 +1371.1,15 961 +1,15 961 +1,15 961 +1373.5,22 962 +5,22 962 +5,22 962 +5,27 962 +36,63 963 +29,63 963 +1374.1,22 964 +1375.15,40 965 +23,34 965 +23,28 965 +23,34 965 +15,40 965 +15,40 965 +15,40 965 +2,6 965 +8,11 965 +1376.8,46 966 +20,39 966 +41,45 966 +8,46 966 +8,46 966 +1,46 966 +1381.1,9 967 +1382.5,12 968 +1383.23,37 969 +23,37 969 +23,37 969 +2,38 969 +2,38 969 +2,38 969 +2,38 969 +1384.2,23 970 +1385.2,25 971 +2,34 971 +1386.2,25 972 +33,50 972 +41,49 972 +33,50 972 +33,50 972 +2,50 972 +1387.2,25 973 +33,49 973 +41,48 973 +33,49 973 +33,49 973 +2,49 973 +1388.2,25 974 +33,49 974 +41,48 974 +33,49 974 +33,49 974 +2,49 974 +1389.2,25 975 +2,34 975 +1390.2,25 976 +33,49 976 +41,48 976 +33,49 976 +33,49 976 +2,49 976 +1391.2,25 977 +33,48 977 +41,47 977 +33,48 977 +33,48 977 +2,48 977 +1392.2,25 978 +33,48 978 +41,47 978 +33,48 978 +33,48 978 +2,48 978 +2,48 979 +2,48 980 +1395.18,38 981 +32,33 981 +34,37 981 +18,38 981 +18,38 981 +1396.6,12 982 +21,22 983 +14,22 983 +1397.2,10 984 +1398.7,13 985 +15,20 986 +1399.16,49 987 +30,41 987 +43,48 987 +16,49 987 +16,49 987 +1400.7,14 988 +23,24 989 +16,24 989 +1401.3,8 990 +1402.8,15 991 +17,23 992 +1403.10,28 993 +4,29 993 +37,57 993 +49,56 993 +45,56 993 +45,56 994 +37,57 993 +37,57 993 +4,57 993 +1404.4,9 995 +1405.4,18 996 +1402.25,29 997 +25,29 997 +1407.3,25 998 +3,25 999 +3,25 1000 +1398.22,25 1001 +22,25 1001 +22,25 1002 +22,25 1003 +1410.8,9 1004 +1,9 1004 +1415.1,26 1005 +1416.1,40 1006 +31,36 1006 +38,39 1006 +1,40 1006 +1,40 1006 +1417.5,22 1007 +20,21 1007 +5,22 1007 +5,22 1007 +5,22 1007 +31,32 1008 +24,32 1008 +1418.1,15 1009 +1,15 1009 +1,15 1009 +1419.5,22 1010 +5,22 1010 +5,22 1010 +5,27 1010 +36,37 1011 +29,37 1011 +1420.8,9 1012 +1,9 1012 +1425.3,8 1013 +1,15 1013 +1426.1,9 1014 +1427.1,11 1015 +1428.1,11 1016 +1429.6,12 1017 +18,23 1018 +14,23 1018 +1430.6,10 1019 +6,16 1019 +20,24 1019 +20,30 1019 +1431.7,12 1020 +16,25 1020 +16,29 1020 +34,40 1021 +31,47 1021 +1432.17,20 1022 +9,10 1022 +9,21 1022 +3,21 1022 +3,21 1023 +1433.3,14 1024 +1434.3,12 1025 +3,12 1026 +1436.7,16 1027 +1429.25,28 1028 +25,28 1028 +1438.5,11 1029 +1,15 1029 +1439.8,14 1030 +18,23 1030 +18,30 1030 +32,35 1031 +32,35 1031 +1440.12,15 1032 +8,10 1032 +8,16 1032 +1,16 1032 +1445.1,26 1033 +1446.1,40 1034 +31,36 1034 +38,39 1034 +1,40 1034 +1,40 1034 +1447.1,15 1035 +1,15 1035 +1,15 1035 +1448.5,22 1036 +5,22 1036 +5,22 1036 +5,27 1036 +1449.9,33 1037 +2,33 1037 +1450.1,1451.61 1038 +1450.18,37 1038 +43,52 1038 +39,52 1038 +57,66 1038 +53,66 1038 +1451.6,15 1038 +2,15 1038 +21,30 1038 +17,30 1038 +36,45 1038 +32,45 1038 +51,60 1038 +47,60 1038 +1450.1,1451.61 1038 +1450.1,1451.61 1038 +1452.19,30 1039 +28,29 1039 +19,30 1039 +19,30 1039 +8,30 1039 +8,35 1039 +8,35 1040 +1,35 1039 +1457.1,17 1041 +1,17 1041 +1458.1,31 1042 +7,28 1042 +29,30 1042 +1,31 1042 +1459.1,30 1043 +1460.1,41 1044 +31,36 1044 +38,40 1044 +1,41 1044 +1,41 1044 +1461.1,14 1045 +1,14 1045 +1462.1,15 1046 +1,15 1046 +1,15 1046 +1463.5,22 1047 +5,22 1047 +5,22 1047 +5,27 1047 +1464.9,11 1048 +2,11 1048 +1465.1,19 1049 +1,19 1049 +1,19 1049 +1,19 1050 +1466.8,9 1051 +1,9 1051 +1471.1,22 1052 +1472.1,35 1053 +15,26 1053 +15,20 1053 +15,26 1053 +28,29 1053 +31,34 1053 +1,35 1053 +1,35 1053 +1473.1,35 1054 +15,26 1054 +15,20 1054 +15,26 1054 +28,29 1054 +31,34 1054 +1,35 1054 +1,35 1054 +1474.1,54 1055 +19,30 1055 +19,24 1055 +19,30 1055 +32,48 1055 +50,53 1055 +1,54 1055 +1,54 1055 +1475.1,54 1056 +19,30 1056 +19,24 1056 +19,30 1056 +32,48 1056 +50,53 1056 +1,54 1056 +1,54 1056 +1476.0,1 1057 +1480.1,30 1058 +1481.1,41 1059 +31,36 1059 +38,40 1059 +1,41 1059 +1,41 1059 +1482.1,16 1060 +14,15 1060 +1,16 1060 +1483.1,15 1061 +1,15 1061 +1,15 1061 +1484.5,22 1062 +5,22 1062 +5,22 1062 +5,27 1062 +36,38 1063 +29,38 1063 +1485.1,19 1064 +1,19 1064 +1,19 1064 +1,19 1065 +1486.8,9 1066 +1,9 1066 +1491.1,22 1067 +1492.1,35 1068 +15,26 1068 +15,20 1068 +15,26 1068 +28,29 1068 +31,34 1068 +1,35 1068 +1,35 1068 +1493.1,35 1069 +15,26 1069 +15,20 1069 +15,26 1069 +28,29 1069 +31,34 1069 +1,35 1069 +1,35 1069 +1494.1,61 1070 +19,30 1070 +19,24 1070 +19,30 1070 +32,43 1070 +32,55 1070 +57,60 1070 +1,61 1070 +1,61 1070 +1495.1,60 1071 +19,30 1071 +19,24 1071 +19,30 1071 +32,43 1071 +32,54 1071 +56,59 1071 +1,60 1071 +1,60 1071 +1496.0,1 1072 +1500.1,39 1073 +7,36 1073 +37,38 1073 +1,39 1073 +1501.1,38 1074 +1502.1,40 1075 +31,36 1075 +38,39 1075 +1,40 1075 +1,40 1075 +1503.1,22 1076 +1504.1,37 1077 +15,26 1077 +15,20 1077 +15,26 1077 +28,31 1077 +33,36 1077 +1,37 1077 +1,37 1077 +1505.1,35 1078 +15,26 1078 +15,20 1078 +15,26 1078 +28,29 1078 +31,34 1078 +1,35 1078 +1,35 1078 +1506.1,15 1079 +1,15 1079 +1,15 1079 +1508.1,18 1080 +1,18 1080 +1,18 1080 +1509.0,1 1081 +1515.1,21 1082 +1516.20,45 1083 +28,39 1083 +28,33 1083 +28,39 1083 +20,45 1083 +20,45 1083 +20,45 1083 +2,11 1083 +13,16 1083 +1517.1,55 1084 +18,43 1084 +45,54 1084 +1,55 1084 +1,55 1084 +1518.6,11 1085 +13,26 1086 +1519.34,59 1087 +42,53 1087 +42,47 1087 +42,53 1087 +34,59 1087 +34,59 1087 +34,59 1087 +3,14 1087 +3,25 1087 +27,30 1087 +1520.35,64 1088 +47,58 1088 +47,52 1088 +47,58 1088 +60,63 1088 +35,64 1088 +35,64 1088 +35,64 1088 +3,14 1088 +3,26 1088 +28,31 1088 +28,31 1089 +1521.34,63 1090 +46,57 1090 +46,51 1090 +46,57 1090 +59,62 1090 +34,63 1090 +34,63 1090 +34,63 1090 +3,14 1090 +3,25 1090 +27,30 1090 +27,30 1091 +1522.37,62 1092 +45,56 1092 +45,50 1092 +45,56 1092 +37,62 1092 +37,62 1092 +37,62 1092 +3,14 1092 +3,28 1092 +30,33 1092 +1523.37,62 1093 +45,56 1093 +45,50 1093 +45,56 1093 +37,62 1093 +37,62 1093 +37,62 1093 +3,14 1093 +3,28 1093 +30,33 1093 +1524.6,17 1094 +6,35 1094 +39,50 1094 +39,78 1094 +39,78 1094 +1525.3,14 1095 +3,32 1095 +1526.7,1529.30 1096 +1526.19,39 1096 +41,52 1096 +41,63 1096 +1527.11,22 1096 +4,34 1096 +1528.11,22 1096 +4,33 1096 +1529.4,15 1096 +4,29 1096 +1526.7,1529.30 1096 +1526.7,1529.30 1096 +1526.2,1529.30 1096 +1526.2,1529.30 1097 +1518.28,31 1098 +28,31 1098 +1531.1,11 1099 +7,8 1099 +9,10 1099 +1,11 1099 +1532.5,13 1100 +1533.2,14 1101 +2,14 1101 +1534.8,9 1102 +1,9 1102 +1539.1,30 1103 +7,27 1103 +28,29 1103 +1,30 1103 +1540.1,40 1104 +1541.1,40 1105 +31,36 1105 +38,39 1105 +1,40 1105 +1,40 1105 +1542.1,15 1106 +1,15 1106 +1,15 1106 +1544.5,22 1107 +5,22 1107 +5,22 1107 +5,28 1107 +1545.9,23 1108 +9,23 1108 +9,23 1108 +2,23 1108 +1546.1,47 1109 +7,44 1109 +45,46 1109 +1,47 1109 +1547.8,10 1110 +1,10 1110 +1585.1,9 1111 +1586.1,21 1112 +1587.16,41 1113 +24,35 1113 +24,29 1113 +24,35 1113 +16,41 1113 +16,41 1113 +16,41 1113 +2,7 1113 +9,12 1113 +1588.5,16 1114 +1589.9,39 1115 +2,39 1115 +1590.7,33 1116 +19,29 1116 +31,32 1116 +7,33 1116 +7,33 1116 +1,33 1116 +1,33 1117 +1591.1,15 1118 +1592.5,22 1119 +1593.2,15 1120 +1594.6,12 1121 +14,23 1122 +1595.2,12 1123 +1596.17,44 1124 +27,38 1124 +27,32 1124 +27,38 1124 +40,43 1124 +17,44 1124 +17,44 1124 +17,44 1124 +3,8 1124 +10,13 1124 +10,13 1125 +1597.10,44 1126 +22,29 1126 +31,43 1126 +10,44 1126 +10,44 1126 +2,44 1126 +2,44 1127 +1598.13,38 1128 +21,32 1128 +21,26 1128 +21,32 1128 +13,38 1128 +13,38 1128 +13,38 1128 +3,4 1128 +6,9 1128 +1599.16,45 1129 +28,39 1129 +28,33 1129 +28,39 1129 +41,44 1129 +16,45 1129 +16,45 1129 +16,45 1129 +3,7 1129 +9,12 1129 +9,12 1130 +1600.10,43 1131 +22,29 1131 +31,42 1131 +10,43 1131 +10,43 1131 +2,43 1131 +2,43 1132 +1601.2,12 1133 +1602.7,8 1134 +7,8 1134 +7,8 1134 +7,8 1134 +1606.15,40 1135 +23,34 1135 +23,28 1135 +23,34 1135 +15,40 1135 +15,40 1135 +15,40 1135 +5,6 1135 +8,11 1135 +1607.15,40 1136 +23,34 1136 +23,28 1136 +23,34 1136 +15,40 1136 +15,40 1136 +15,40 1136 +5,6 1136 +8,11 1136 +1608.12,57 1137 +24,50 1137 +52,53 1137 +55,56 1137 +12,57 1137 +12,57 1137 +4,57 1137 +4,57 1138 +1610.9,15 1139 +17,22 1140 +1611.16,45 1141 +28,39 1141 +28,33 1141 +28,39 1141 +41,44 1141 +16,45 1141 +16,45 1141 +16,45 1141 +6,7 1141 +9,12 1141 +9,12 1142 +1612.16,41 1143 +24,35 1143 +24,29 1143 +24,35 1143 +16,41 1143 +16,41 1143 +16,41 1143 +6,7 1143 +9,12 1143 +1613.13,51 1144 +25,37 1144 +39,47 1144 +49,50 1144 +13,51 1144 +13,51 1144 +5,51 1144 +5,51 1145 +1614.9,15 1146 +1615.6,21 1147 +19,20 1147 +6,21 1147 +6,21 1147 +1616.10,18 1148 +16,17 1148 +10,18 1148 +10,18 1148 +20,21 1148 +5,27 1148 +5,27 1149 +1610.24,27 1150 +24,27 1150 +1618.4,60 1151 +14,60 1151 +31,43 1151 +37,42 1151 +31,43 1151 +31,43 1151 +45,56 1151 +51,55 1151 +45,56 1151 +45,56 1151 +58,59 1151 +4,60 1151 +4,60 1152 +4,60 1153 +4,60 1154 +4,60 1134 +1620.15,40 1155 +23,34 1155 +23,28 1155 +23,34 1155 +15,40 1155 +15,40 1155 +15,40 1155 +5,6 1155 +8,11 1155 +1621.15,40 1156 +23,34 1156 +23,28 1156 +23,34 1156 +15,40 1156 +15,40 1156 +15,40 1156 +5,6 1156 +8,11 1156 +1622.15,40 1157 +23,34 1157 +23,28 1157 +23,34 1157 +15,40 1157 +15,40 1157 +15,40 1157 +5,6 1157 +8,11 1157 +1623.12,68 1158 +24,58 1158 +60,61 1158 +63,64 1158 +66,67 1158 +12,68 1158 +12,68 1158 +4,68 1158 +4,68 1159 +1624.4,19 1160 +4,19 1134 +1626.15,40 1161 +23,34 1161 +23,28 1161 +23,34 1161 +15,40 1161 +15,40 1161 +15,40 1161 +5,6 1161 +8,11 1161 +1627.9,10 1162 +1629.17,46 1163 +29,40 1163 +29,34 1163 +29,40 1163 +42,45 1163 +17,46 1163 +17,46 1163 +17,46 1163 +7,8 1163 +10,13 1163 +10,13 1164 +10,13 1162 +1631.17,46 1165 +29,40 1165 +29,34 1165 +29,40 1165 +42,45 1165 +17,46 1165 +17,46 1165 +17,46 1165 +7,8 1165 +10,13 1165 +10,13 1166 +10,13 1162 +1633.14,49 1167 +26,45 1167 +47,48 1167 +14,49 1167 +14,49 1167 +6,49 1167 +6,49 1168 +1634.6,11 1169 +1636.4,19 1170 +1637.12,41 1171 +24,30 1171 +32,40 1171 +12,41 1171 +12,41 1171 +4,41 1171 +4,41 1172 +4,41 1134 +1639.4,9 1173 +1641.4,9 1174 +1643.12,47 1175 +24,43 1175 +45,46 1175 +12,47 1175 +12,47 1175 +4,47 1175 +4,47 1176 +1644.4,9 1177 +1646.6,15 1178 +1647.19,31 1179 +25,30 1179 +19,31 1179 +19,31 1179 +8,45 1179 +8,45 1179 +8,45 1180 +33,44 1179 +8,45 1179 +8,45 1179 +8,45 1179 +1648.15,27 1181 +21,26 1181 +15,27 1181 +15,27 1181 +29,37 1181 +4,49 1181 +4,49 1182 +1650.7,37 1183 +12,22 1183 +24,36 1183 +7,37 1183 +7,37 1183 +7,37 1183 +1651.3,13 1184 +3,13 1185 +3,13 1186 +1594.25,28 1187 +25,28 1187 +1653.5,14 1188 +1654.22,33 1189 +2,51 1189 +1655.22,33 1190 +2,51 1190 +1656.2,7 1191 +1657.8,22 1192 +1658.3,17 1193 +3,30 1193 +1659.15,18 1194 +15,18 1194 +3,19 1194 +3,32 1194 +1657.24,44 1195 +24,44 1195 +1662.8,10 1196 +1,10 1196 +1667.7,16 1197 +1668.6,12 1198 +6,17 1198 +6,17 1199 +1669.10,11 1200 +3,11 1200 +1667.18,30 1201 +18,30 1201 +1670.8,9 1202 +1,9 1202 +1675.1,24 1203 +1,33 1203 +1676.1,24 1204 +1,33 1204 +1677.1,24 1205 +1,33 1205 +1678.1,24 1206 +1,33 1206 +1679.8,9 1207 +1,9 1207 +1684.5,16 1208 +25,27 1209 +18,27 1209 +1685.7,52 1210 +20,44 1210 +46,51 1210 +7,52 1210 +7,52 1210 +1,55 1210 +1,55 1210 +1,55 1211 +53,54 1210 +1,55 1210 +1686.1,33 1212 +1687.1,22 1213 +1688.5,16 1214 +1689.2,41 1215 +32,37 1215 +39,40 1215 +2,41 1215 +2,41 1215 +2,41 1216 +1691.6,15 1217 +6,20 1217 +1692.10,40 1218 +10,45 1218 +10,45 1219 +3,45 1218 +1693.2,14 1220 +22,30 1220 +2,30 1220 +1694.8,13 1221 +2,14 1221 +22,30 1221 +2,30 1221 +1695.8,13 1222 +2,14 1222 +22,30 1222 +2,30 1222 +1696.8,13 1223 +2,14 1223 +22,30 1223 +2,30 1223 +1697.2,41 1224 +32,37 1224 +39,40 1224 +2,41 1224 +2,41 1224 +1699.1,15 1225 +1,15 1225 +1,15 1225 +1700.5,22 1226 +5,22 1226 +5,22 1226 +5,27 1226 +36,66 1227 +36,71 1227 +36,71 1228 +29,71 1227 +1701.1,21 1229 +1703.15,39 1230 +23,34 1230 +23,28 1230 +23,34 1230 +15,39 1230 +15,39 1230 +15,39 1230 +2,6 1230 +8,11 1230 +1704.1,8 1231 +1705.1,9 1232 +1706.5,16 1233 +1707.7,15 1234 +21,30 1235 +17,30 1235 +1708.14,22 1236 +10,22 1236 +3,22 1236 +1709.7,11 1237 +7,15 1237 +23,42 1238 +35,39 1238 +40,41 1238 +23,42 1238 +23,42 1238 +17,45 1238 +17,45 1238 +17,45 1239 +43,44 1238 +17,45 1238 +1707.32,35 1240 +32,35 1240 +1711.2,15 1241 +8,12 1241 +13,14 1241 +2,15 1241 +1713.6,12 1242 +14,22 1243 +1716.15,41 1244 +25,36 1244 +25,30 1244 +25,36 1244 +37,40 1244 +15,41 1244 +15,41 1244 +15,41 1244 +3,7 1244 +8,11 1244 +8,11 1245 +1717.16,40 1246 +24,35 1246 +24,29 1246 +24,35 1246 +16,40 1246 +16,40 1246 +16,40 1246 +3,8 1246 +9,12 1246 +1718.8,52 1247 +21,36 1247 +38,39 1247 +40,45 1247 +46,51 1247 +8,52 1247 +8,52 1247 +2,55 1247 +2,55 1247 +2,55 1248 +53,54 1247 +2,55 1247 +1719.7,12 1249 +7,12 1249 +7,12 1249 +7,12 1249 +1721.16,40 1250 +24,35 1250 +24,29 1250 +24,35 1250 +16,40 1250 +16,40 1250 +16,40 1250 +5,8 1250 +9,12 1250 +1722.25,35 1251 +4,35 1251 +4,35 1252 +4,35 1249 +1724.17,43 1253 +27,38 1253 +27,32 1253 +27,38 1253 +39,42 1253 +17,43 1253 +17,43 1253 +17,43 1253 +5,9 1253 +10,13 1253 +10,13 1254 +10,13 1249 +1726.17,45 1255 +29,40 1255 +29,34 1255 +29,40 1255 +41,44 1255 +17,45 1255 +17,45 1255 +17,45 1255 +5,9 1255 +10,13 1255 +10,13 1256 +10,13 1249 +1728.17,45 1257 +29,40 1257 +29,34 1257 +29,40 1257 +41,44 1257 +17,45 1257 +17,45 1257 +17,45 1257 +5,9 1257 +10,13 1257 +10,13 1258 +10,13 1249 +1730.4,34 1259 +4,34 1249 +1736.7,55 1260 +19,29 1260 +30,41 1260 +43,54 1260 +7,55 1260 +7,55 1260 +2,55 1260 +2,55 1261 +2,55 1262 +2,55 1263 +1713.24,27 1264 +24,27 1264 +1738.8,9 1265 +1,9 1265 +1744.7,61 1266 +20,48 1266 +50,55 1266 +57,60 1266 +7,61 1266 +7,61 1266 +1,64 1266 +1,64 1266 +1,64 1267 +62,63 1266 +1,64 1266 +1745.5,14 1268 +5,19 1268 +1746.9,44 1269 +2,44 1269 +1747.1,22 1270 +1748.1,13 1271 +21,29 1271 +1,29 1271 +1749.7,12 1272 +1,13 1272 +21,29 1272 +1,29 1272 +1750.7,12 1273 +1,13 1273 +21,29 1273 +1,29 1273 +1751.7,12 1274 +1,13 1274 +21,29 1274 +1,29 1274 +1752.1,9 1275 +1753.1,37 1276 +15,26 1276 +15,20 1276 +15,26 1276 +28,31 1276 +33,36 1276 +1,37 1276 +1,37 1276 +1755.1,33 1277 +1756.1,40 1278 +31,36 1278 +38,39 1278 +1,40 1278 +1,40 1278 +1757.1,15 1279 +1,15 1279 +1,15 1279 +1759.5,29 1280 +5,29 1280 +5,29 1280 +5,29 1280 +5,34 1280 +1760.2,22 1281 +16,21 1281 +2,22 1281 +2,22 1281 +1761.6,14 1282 +1762.3,18 1283 +3,28 1283 +1763.9,12 1284 +2,12 1284 +1766.9,23 1285 +9,23 1285 +2,23 1285 +1771.1,34 1286 +1772.1,40 1287 +31,36 1287 +38,39 1287 +1,40 1287 +1,40 1287 +1773.1,15 1288 +1,15 1288 +1,15 1288 +1775.5,22 1289 +5,22 1289 +5,22 1289 +5,27 1289 +1776.9,11 1290 +2,11 1290 +1778.1,24 1291 +1,24 1291 +1,24 1291 +1779.1,30 1292 +1780.1,40 1293 +31,36 1293 +38,39 1293 +1,40 1293 +1,40 1293 +1781.1,15 1294 +1,15 1294 +1,15 1294 +1783.8,25 1295 +8,25 1295 +8,25 1295 +1,25 1295 +1788.7,56 1296 +19,43 1296 +45,55 1296 +7,56 1296 +7,56 1296 +1,59 1296 +1,59 1296 +1,59 1297 +57,58 1296 +1,59 1296 +1789.7,74 1298 +19,39 1298 +46,54 1298 +42,54 1298 +41,58 1298 +64,72 1298 +59,73 1298 +41,73 1298 +7,74 1298 +7,74 1298 +1,77 1298 +1,77 1298 +1,77 1299 +75,76 1298 +1,77 1298 +1790.7,55 1300 +19,40 1300 +46,54 1300 +42,54 1300 +7,55 1300 +7,55 1300 +1,58 1300 +1,58 1300 +1,58 1301 +56,57 1300 +1,58 1300 +1791.7,73 1302 +19,40 1302 +48,56 1302 +48,56 1302 +47,60 1302 +61,71 1302 +46,72 1302 +42,72 1302 +7,73 1302 +7,73 1302 +1,76 1302 +1,76 1302 +1,76 1303 +74,75 1302 +1,76 1302 +1792.7,79 1304 +19,44 1304 +52,61 1304 +52,61 1304 +51,65 1304 +66,77 1304 +50,78 1304 +46,78 1304 +7,79 1304 +7,79 1304 +1,82 1304 +1,82 1304 +1,82 1305 +80,81 1304 +1,82 1304 +1793.0,1 1306 +1797.1,7 1307 +1,16 1307 +1798.1,7 1308 +1,16 1308 +1799.1,7 1309 +1,16 1309 +1800.1,7 1310 +1,16 1310 +1801.1,7 1311 +16,30 1311 +15,37 1311 +1,37 1311 +1802.1,7 1312 +15,32 1312 +1,32 1312 +1803.1,8 1313 +1,17 1313 +1804.1,8 1314 +1,17 1314 +1806.1,11 1315 +1807.1,7 1316 +16,23 1316 +15,30 1316 +1,30 1316 +1808.1,7 1317 +16,23 1317 +15,30 1317 +1,30 1317 +1809.1,7 1318 +16,22 1318 +15,29 1318 +1,29 1318 +1810.1,7 1319 +15,24 1319 +1,24 1319 +1812.8,12 1320 +1,12 1320 +1817.1,28 1321 +7,25 1321 +26,27 1321 +1,28 1321 +1818.6,43 1322 +16,20 1322 +22,25 1322 +27,34 1322 +35,42 1322 +6,43 1322 +6,43 1322 +5,48 1322 +52,55 1322 +1819.2,8 1323 +2,17 1323 +1820.2,8 1324 +2,17 1324 +1821.2,29 1325 +10,14 1325 +16,19 1325 +21,28 1325 +2,29 1325 +2,29 1325 +1822.9,10 1326 +2,10 1326 +1824.1,7 1327 +1,16 1327 +1825.1,7 1328 +1,16 1328 +1826.1,28 1329 +9,13 1329 +15,18 1329 +20,27 1329 +1,28 1329 +1,28 1329 +1828.8,9 1330 +1,9 1330 +1833.1,28 1331 +7,25 1331 +26,27 1331 +1,28 1331 +1834.6,24 1332 +21,23 1332 +6,24 1332 +6,24 1332 +6,24 1332 +1835.2,36 1333 +8,33 1333 +34,35 1333 +2,36 1333 +1836.9,11 1334 +2,11 1334 +1839.17,23 1335 +13,23 1335 +12,26 1335 +11,30 1335 +36,42 1335 +31,43 1335 +1,44 1335 +1840.1,16 1336 +1841.1,37 1337 +16,20 1337 +22,25 1337 +27,28 1337 +29,36 1337 +1,37 1337 +1,37 1337 +1842.5,11 1338 +1843.8,76 1339 +21,69 1339 +71,72 1339 +74,75 1339 +8,76 1339 +8,76 1339 +2,79 1339 +2,79 1339 +2,79 1340 +77,78 1339 +2,79 1339 +1844.9,11 1341 +2,11 1341 +1846.8,9 1342 +1,9 1342 +1851.1,26 1343 +7,23 1343 +24,25 1343 +1,26 1343 +1852.1,15 1344 +1853.5,30 1345 +20,29 1345 +20,25 1345 +20,29 1345 +5,30 1345 +5,30 1345 +5,35 1345 +1854.2,11 1346 +1855.2,36 1347 +8,33 1347 +34,35 1347 +2,36 1347 +1856.9,10 1348 +2,10 1348 +1859.1,15 1349 +1,15 1349 +1860.11,19 1350 +1,19 1350 +1861.20,37 1351 +6,9 1351 +5,16 1351 +5,37 1351 +1862.2,45 1352 +8,42 1352 +43,44 1352 +2,45 1352 +1863.2,15 1353 +10,14 1353 +2,15 1353 +1864.9,10 1354 +2,10 1354 +1867.21,29 1355 +17,29 1355 +16,33 1355 +39,47 1355 +34,48 1355 +1,48 1355 +1869.8,32 1356 +1870.6,40 1357 +21,39 1357 +21,26 1357 +21,39 1357 +6,40 1357 +6,40 1357 +6,45 1357 +1871.3,35 1358 +9,32 1358 +33,34 1358 +3,35 1358 +1872.3,12 1359 +1873.10,11 1360 +3,11 1360 +1878.1,39 1361 +11,15 1361 +17,20 1361 +22,29 1361 +31,38 1361 +1,39 1361 +1,39 1361 +1879.16,25 1362 +16,25 1362 +15,29 1362 +30,41 1362 +14,42 1362 +9,43 1362 +1,43 1362 +1884.1,22 1363 +13,15 1363 +17,21 1363 +1,22 1363 +1,22 1363 +1885.1,15 1364 +12,14 1364 +1,15 1364 +1,15 1364 +1886.1,22 1365 +13,15 1365 +17,21 1365 +1,22 1365 +1,22 1365 +1887.1,25 1366 +13,15 1366 +17,24 1366 +1,25 1366 +1,25 1366 +1888.0,1 1367 +1892.1,63 1368 +30,40 1368 +19,40 1368 +19,49 1368 +19,49 1369 +51,62 1368 +1,63 1368 +1,63 1368 +1893.5,16 1370 +1894.2,52 1371 +13,17 1371 +19,39 1371 +41,51 1371 +2,52 1371 +2,52 1371 +1895.0,1 1372 +1899.5,67 1373 +33,43 1373 +22,43 1373 +22,52 1373 +22,52 1374 +54,65 1373 +5,67 1373 +5,67 1373 +5,67 1373 +5,74 1373 +5,74 1375 +1900.2,28 1376 +14,16 1376 +18,27 1376 +2,28 1376 +2,28 1376 +1901.0,1 1377 +1912.1,11 1378 +1913.1,14 1379 +1914.1,16 1380 +1916.25,36 1381 +1,36 1381 +1,36 1382 +1917.1,26 1383 +1919.6,12 1384 +18,29 1385 +14,29 1385 +1920.2,67 1386 +33,44 1386 +22,44 1386 +45,55 1386 +22,55 1386 +22,55 1387 +56,66 1386 +2,67 1386 +2,67 1386 +1921.6,19 1388 +1922.3,13 1389 +1923.2,14 1390 +2,14 1391 +1919.31,34 1392 +31,34 1392 +1925.1,11 1393 +1,11 1393 +1927.1,37 1394 +17,24 1394 +26,36 1394 +1,37 1394 +1,37 1394 +1928.5,14 1395 +1929.10,13 1396 +15,18 1396 +20,62 1396 +32,52 1396 +54,61 1396 +20,62 1396 +20,62 1396 +2,63 1396 +1930.1,40 1397 +20,26 1397 +28,39 1397 +1,40 1397 +1,40 1397 +1931.5,17 1398 +1932.10,13 1399 +15,18 1399 +20,61 1399 +32,52 1399 +54,60 1399 +20,61 1399 +20,61 1399 +2,62 1399 +1934.1,1943.2 1400 +1935.2,9 1400 +2,9 1400 +1936.2,6 1400 +2,6 1400 +1937.2,6 1400 +2,6 1400 +1938.2,6 1400 +2,6 1400 +1939.2,6 1400 +2,6 1400 +1940.2,6 1400 +2,6 1400 +1941.2,6 1400 +2,6 1400 +1942.2,5 1400 +2,5 1400 +1945.6,11 1401 +17,27 1402 +13,27 1402 +1946.6,40 1403 +18,23 1403 +24,28 1403 +30,39 1403 +30,39 1403 +6,40 1403 +6,40 1403 +6,44 1403 +1947.9,59 1404 +21,47 1404 +49,58 1404 +49,58 1404 +9,59 1404 +9,59 1404 +3,62 1404 +3,62 1404 +3,62 1405 +60,61 1404 +3,62 1404 +1945.29,32 1406 +29,32 1406 +1949.1,16 1407 +12,15 1407 +1,16 1407 +1,16 1407 +1950.1,12 1408 +9,11 1408 +1,12 1408 +1951.1,25 1409 +13,18 1409 +20,24 1409 +1,25 1409 +1,25 1409 +1952.1,15 1410 +12,14 1410 +1,15 1410 +1,15 1410 +1953.1,25 1411 +13,18 1411 +20,24 1411 +1,25 1411 +1,25 1411 +1954.9,11 1412 +13,18 1412 +20,23 1412 +1,24 1412 +1959.5,14 1413 +1960.2,27 1414 +8,24 1414 +25,26 1414 +2,27 1414 +1961.2,48 1415 +12,14 1415 +16,35 1415 +37,41 1415 +43,47 1415 +2,48 1415 +2,48 1415 +1963.0,1 1416 +1967.1,25 1417 +1969.1,25 1418 +18,19 1418 +21,24 1418 +1,25 1418 +1,25 1418 +1971.1,14 1419 +1972.17,27 1420 +1,47 1420 +39,45 1420 +39,45 1420 +39,45 1420 +39,45 1420 +39,45 1420 +39,45 1420 +1974.7,58 1421 +19,43 1421 +48,57 1421 +44,57 1421 +7,58 1421 +7,58 1421 +1,61 1421 +1,61 1421 +1,61 1422 +59,60 1421 +1,61 1421 +1976.2,37 1423 +17,19 1423 +21,24 1423 +26,27 1423 +29,36 1423 +2,37 1423 +2,37 1423 +1977.6,13 1424 +1978.3,19 1425 +1979.3,9 1426 +1981.8,45 1427 +20,33 1427 +38,44 1427 +34,44 1427 +8,45 1427 +8,45 1427 +2,48 1427 +2,48 1427 +2,48 1428 +46,47 1427 +2,48 1427 +1982.20,29 1429 +20,29 1429 +10,16 1429 +10,29 1429 +1983.1,28 1430 +7,25 1430 +26,27 1430 +1,28 1430 +1985.1,39 1431 +16,18 1431 +20,27 1431 +20,23 1431 +20,27 1431 +29,30 1431 +31,38 1431 +1,39 1431 +1,39 1431 +1986.6,12 1432 +14,19 1433 +1987.8,85 1434 +20,49 1434 +50,53 1434 +63,66 1434 +59,67 1434 +55,67 1434 +80,83 1434 +73,84 1434 +69,84 1434 +8,85 1434 +8,85 1434 +2,88 1434 +2,88 1434 +2,88 1435 +86,87 1434 +2,88 1434 +1986.21,24 1436 +21,24 1436 +1988.5,11 1437 +1989.2,35 1438 +8,32 1438 +33,34 1438 +2,35 1438 +1990.2,6 1439 +1993.2,29 1440 +8,26 1440 +27,28 1440 +2,29 1440 +1994.9,12 1441 +2,17 1441 +1995.2,16 1442 +1998.0,1 1443 +2002.1,25 1444 +2004.1,25 1445 +18,19 1445 +21,24 1445 +1,25 1445 +1,25 1445 +2005.1,14 1446 +2008.1,7 1447 +2009.1,11 1448 +2011.2,41 1449 +17,19 1449 +21,28 1449 +21,24 1449 +21,28 1449 +30,31 1449 +33,40 1449 +2,41 1449 +2,41 1449 +2012.6,11 1450 +2013.17,26 1451 +17,26 1451 +7,13 1451 +7,26 1451 +2014.4,13 1452 +2015.4,10 1453 +13,19 1453 +4,19 1453 +2016.4,9 1454 +4,9 1455 +2019.4,7 1456 +2020.13,23 1457 +8,23 1457 +25,30 1458 +25,30 1459 +2023.7,10 1460 +2024.6,13 1461 +15,20 1462 +2027.6,12 1463 +14,19 1464 +32,76 1465 +44,61 1465 +62,63 1465 +69,75 1465 +65,75 1465 +32,76 1465 +32,76 1465 +26,79 1465 +26,79 1465 +26,79 1466 +77,78 1465 +26,79 1465 +21,24 1467 +21,24 1467 +2028.5,12 1468 +2029.2,42 1469 +8,39 1469 +40,41 1469 +2,42 1469 +2030.2,6 1470 +2033.2,36 1471 +8,33 1471 +34,35 1471 +2,36 1471 +2034.9,12 1472 +2,18 1472 +2035.2,16 1473 +2037.0,1 1474 +2043.10,16 1475 +6,16 1475 +6,16 1475 +6,16 1475 +6,16 1475 +6,16 1475 +2045.17,23 1476 +13,23 1476 +12,28 1476 +34,40 1476 +30,40 1476 +29,45 1476 +12,45 1476 +51,57 1476 +47,57 1476 +46,61 1476 +12,61 1476 +67,73 1476 +62,74 1476 +3,74 1476 +2046.16,22 1477 +12,22 1477 +11,26 1477 +32,38 1477 +27,39 1477 +3,39 1477 +2047.16,22 1478 +12,22 1478 +11,26 1478 +32,38 1478 +27,39 1478 +3,39 1478 +2049.3,19 1479 +14,18 1479 +3,19 1479 +3,19 1479 +2051.8,14 1480 +2053.5,22 1481 +5,22 1480 +2055.5,21 1482 +5,21 1480 +2057.5,21 1483 +5,21 1480 +2059.5,21 1484 +5,21 1480 +2061.5,20 1485 +5,20 1480 +2063.9,73 1486 +21,65 1486 +66,72 1486 +9,73 1486 +9,73 1486 +3,76 1486 +3,76 1486 +3,76 1487 +74,75 1486 +3,76 1486 +2064.9,59 1488 +21,52 1488 +53,58 1488 +9,59 1488 +9,59 1488 +3,62 1488 +3,62 1488 +3,62 1489 +60,61 1488 +3,62 1488 +2065.9,61 1490 +21,54 1490 +55,60 1490 +9,61 1490 +9,61 1490 +3,64 1490 +3,64 1490 +3,64 1491 +62,63 1490 +3,64 1490 +2066.7,39 1492 +19,26 1492 +27,31 1492 +33,38 1492 +7,39 1492 +7,39 1492 +7,43 1492 +2067.10,60 1493 +22,52 1493 +54,59 1493 +10,60 1493 +10,60 1493 +4,63 1493 +4,63 1493 +4,63 1494 +61,62 1493 +4,63 1493 +2068.11,13 1495 +4,13 1495 +2071.3,38 1496 +9,35 1496 +36,37 1496 +3,38 1496 +2072.10,12 1497 +3,12 1497 +2074.3,51 1498 +9,48 1498 +49,50 1498 +3,51 1498 +2075.10,12 1499 +3,12 1499 +2077.9,59 1500 +21,47 1500 +52,58 1500 +48,58 1500 +9,59 1500 +9,59 1500 +3,62 1500 +3,62 1500 +3,62 1501 +60,61 1500 +3,62 1500 +2078.10,12 1502 +3,12 1502 +2080.8,9 1503 +1,9 1503 +2085.1,25 1504 +18,19 1504 +21,24 1504 +1,25 1504 +1,25 1504 +2087.1,12 1505 +2088.7,37 1506 +20,33 1506 +35,36 1506 +7,37 1506 +7,37 1506 +1,40 1506 +1,40 1506 +1,40 1507 +38,39 1506 +1,40 1506 +2089.1,11 1508 +2090.8,17 1509 +2091.2,42 1510 +17,19 1510 +21,32 1510 +21,24 1510 +21,32 1510 +34,41 1510 +2,42 1510 +2,42 1510 +2092.2,15 1511 +13,14 1511 +2,15 1511 +2,15 1511 +2093.6,12 1512 +2094.3,8 1513 +2095.2,12 1514 +2,12 1514 +2097.1,14 1515 +2099.0,1 1516 +2117.1,6 1517 +2118.1,18 1518 +2119.1,18 1519 +2121.1,19 1520 +14,16 1520 +17,18 1520 +1,19 1520 +2122.1,14 1521 +2123.1,29 1522 +14,16 1522 +18,21 1522 +23,24 1522 +26,28 1522 +1,29 1522 +2124.1,14 1523 +2126.1,9 1524 +2128.5,7 1525 +5,7 1525 +2133.9,11 1525 +9,11 1525 +2127.1,7 1525 +1,7 1525 +1,7 1525 +1,7 1525 +2129.3,13 1526 +8,12 1526 +3,13 1526 +2130.9,48 1527 +22,47 1527 +9,48 1527 +9,48 1527 +3,51 1527 +3,51 1527 +3,51 1528 +49,50 1527 +3,51 1527 +2131.3,12 1529 +2132.10,12 1530 +3,12 1530 +2134.3,13 1531 +8,12 1531 +3,13 1531 +2135.3,8 1532 +2137.8,9 1533 +1,9 1533 +2142.7,37 1534 +19,33 1534 +35,36 1534 +7,37 1534 +7,37 1534 +1,40 1534 +1,40 1534 +1,40 1535 +38,39 1534 +1,40 1534 +2143.1,12 1536 +2144.8,18 1537 +2145.2,45 1538 +18,20 1538 +22,34 1538 +22,25 1538 +22,34 1538 +36,44 1538 +2,45 1538 +2,45 1538 +2146.2,15 1539 +13,14 1539 +2,15 1539 +2,15 1539 +2147.6,12 1540 +2148.9,53 1541 +21,52 1541 +9,53 1541 +9,53 1541 +3,56 1541 +3,56 1541 +3,56 1542 +54,55 1541 +3,56 1541 +2149.3,13 1543 +3,13 1543 +2151.10,16 1544 +3,16 1544 +2153.2,13 1545 +2,13 1545 +2155.7,52 1546 +19,43 1546 +45,51 1546 +7,52 1546 +7,52 1546 +1,55 1546 +1,55 1546 +1,55 1547 +53,54 1546 +1,55 1546 +2156.8,14 1548 +1,14 1548 +2161.1,14 1549 +9,13 1549 +1,14 1549 +2162.1,27 1550 +7,24 1550 +25,26 1550 +1,27 1550 +2163.1,78 1551 +32,49 1551 +21,49 1551 +50,65 1551 +21,65 1551 +21,65 1552 +67,77 1551 +1,78 1551 +1,78 1551 +2164.1,26 1553 +2165.5,18 1554 +2167.3,37 1555 +18,24 1555 +25,28 1555 +29,36 1555 +3,37 1555 +3,37 1555 +2168.7,12 1556 +14,37 1557 +27,30 1557 +27,34 1557 +20,34 1557 +20,34 1558 +35,36 1557 +14,37 1557 +14,37 1559 +2171.2,15 1560 +8,12 1560 +13,14 1560 +2,15 1560 +2174.0,1 1561 +2173.6,44 1562 +12,41 1562 +42,43 1562 +6,44 1562 +2174.0,1 1561 +2179.1,12 1563 +2180.1,7 1564 +16,23 1564 +15,30 1564 +1,30 1564 +2181.1,7 1565 +16,23 1565 +15,30 1565 +1,30 1565 +2182.1,7 1566 +16,22 1566 +15,29 1566 +1,29 1566 +2183.1,7 1567 +15,24 1567 +1,24 1567 +2186.1,10 1568 +2187.1,7 1569 +16,22 1569 +15,29 1569 +1,29 1569 +2188.1,7 1570 +15,24 1570 +1,24 1570 +2191.1,10 1571 +2192.1,8 1572 +17,23 1572 +16,30 1572 +1,30 1572 +2193.1,8 1573 +16,25 1573 +1,25 1573 +2194.1,8 1574 +1,29 1574 +21,24 1574 +26,28 1574 +1,29 1574 +1,29 1574 +2196.5,32 1575 +13,17 1575 +19,22 1575 +24,31 1575 +5,32 1575 +5,32 1575 +36,43 1575 +5,43 1575 +2197.2,51 1576 +8,48 1576 +49,50 1576 +2,51 1576 +2198.2,6 1577 +2200.1,44 1578 +7,41 1578 +42,43 1578 +1,44 1578 +2201.0,1 1579 +2207.1,25 1580 +18,19 1580 +21,24 1580 +1,25 1580 +1,25 1580 +2208.1,13 1581 +2209.1,18 1582 +12,17 1582 +1,18 1582 +1,18 1582 +2210.1,15 1583 +2211.0,1 1584 +2216.6,12 1585 +18,28 1586 +14,28 1586 +2217.16,25 1587 +16,25 1587 +6,12 1587 +6,25 1587 +2218.9,93 1588 +21,65 1588 +66,67 1588 +72,78 1588 +68,78 1588 +83,92 1588 +79,92 1588 +9,93 1588 +9,93 1588 +3,96 1588 +3,96 1588 +3,96 1589 +94,95 1588 +3,96 1588 +2219.10,11 1590 +3,11 1590 +2216.30,33 1591 +30,33 1591 +2222.1,27 1592 +7,24 1592 +25,26 1592 +1,27 1592 +2223.8,9 1593 +1,9 1593 +2228.1,9 1594 +2229.7,13 1595 +15,20 1596 +2230.13,19 1597 +9,19 1597 +2,19 1597 +2229.22,25 1598 +22,25 1598 +2231.15,26 1599 +10,26 1599 +3,26 1599 +2237.1,5 1600 +14,19 1600 +13,26 1600 +1,26 1600 +2238.1,5 1601 +14,19 1601 +13,26 1601 +1,26 1601 +2239.1,5 1602 +14,18 1602 +13,25 1602 +1,25 1602 +2240.1,5 1603 +13,22 1603 +1,22 1603 +2242.8,15 1604 +1,15 1604 +2247.6,12 1605 +14,20 1606 +2248.2,6 1607 +2,15 1607 +2247.22,25 1608 +22,25 1608 +2249.6,11 1609 +17,22 1610 +13,22 1610 +2250.2,6 1611 +9,13 1611 +2,13 1611 +2249.24,27 1612 +24,27 1612 +2251.8,16 1613 +1,16 1613 +2256.6,12 1614 +14,20 1615 +2257.2,6 1616 +2,15 1616 +2256.22,25 1617 +22,25 1617 +2258.6,11 1618 +17,22 1619 +13,22 1619 +2259.2,6 1620 +9,13 1620 +2,13 1620 +2258.24,27 1621 +24,27 1621 +2260.8,16 1622 +1,16 1622 +2279.11,15 1623 +7,15 1623 +6,20 1623 +26,30 1623 +22,30 1623 +21,35 1623 +6,35 1623 +41,45 1623 +37,45 1623 +36,49 1623 +6,49 1623 +55,59 1623 +50,60 1623 +1,60 1623 +2280.8,9 1624 +1,9 1624 +2296.1,22 1625 +2297.9,10 1626 +9,15 1626 +1,15 1626 +1,15 1627 +2298.9,10 1628 +12,17 1628 +1,18 1628 +2308.1,14 1629 +2309.6,11 1630 +1,13 1630 +2310.8,14 1631 +18,22 1631 +18,27 1631 +2311.2,5 1632 +2,5 1632 +2312.12,15 1633 +8,9 1633 +8,16 1633 +1,16 1633 +2322.8,14 1634 +1,22 1634 +2323.8,11 1635 +1,11 1635 +2328.1,18 1636 +2329.8,13 1637 +1,13 1637 +2343.14,19 1638 +14,23 1638 +1,32 1638 +2344.1,11 1639 +2345.1,10 1640 +2346.6,12 1641 +18,25 1642 +18,29 1642 +14,29 1642 +2348.13,24 1643 +13,24 1643 +2,24 1643 +2349.17,24 1644 +12,25 1644 +12,25 1644 +2,25 1644 +2350.18,25 1645 +13,26 1645 +13,26 1645 +2,26 1645 +2352.2,42 1646 +28,40 1646 +17,41 1646 +13,41 1646 +2,42 1646 +2,42 1646 +2353.2,69 1647 +28,40 1647 +17,41 1647 +13,41 1647 +55,67 1647 +44,68 1647 +13,68 1647 +2,69 1647 +2,69 1647 +2354.2,41 1648 +27,39 1648 +17,40 1648 +13,40 1648 +2,41 1648 +2,41 1648 +2356.7,16 1649 +18,26 1650 +2357.7,13 1651 +7,13 1651 +3,14 1651 +3,19 1651 +2358.7,13 1652 +7,13 1652 +3,14 1652 +3,19 1652 +2359.7,13 1653 +7,13 1653 +3,14 1653 +3,19 1653 +2356.28,34 1654 +28,34 1654 +2361.2,12 1655 +2346.31,34 1656 +31,34 1656 +2363.8,11 1657 +1,11 1657 +2368.1,11 1658 +2369.5,10 1659 +12,18 1660 +2370.5,12 1661 +14,21 1662 +2371.8,14 1663 +1,14 1663 +2376.1,34 1664 +26,27 1664 +28,29 1664 +30,33 1664 +1,34 1664 +1,34 1664 +2378.23,34 1665 +20,34 1665 +1,43 1665 +2380.29,91 1666 +41,68 1666 +70,78 1666 +80,81 1666 +83,84 1666 +86,87 1666 +89,90 1666 +29,91 1666 +29,91 1666 +15,91 1666 +1,91 1666 +1,91 1667 +2381.1,24 1668 +2382.8,16 1669 +1,16 1669 +2387.5,10 1670 +5,14 1670 +23,24 1671 +16,24 1671 +2388.5,18 1672 +7,12 1672 +7,16 1672 +5,6 1672 +5,18 1672 +5,28 1672 +5,28 1673 +37,38 1674 +30,38 1674 +2389.11,16 1675 +11,20 1675 +8,9 1675 +8,21 1675 +8,28 1675 +8,28 1676 +1,28 1675 +2396.1,15 1677 +2397.5,11 1678 +13,26 1679 +2398.27,56 1680 +33,44 1680 +33,55 1680 +27,56 1680 +27,56 1680 +14,57 1680 +14,57 1680 +14,57 1681 +14,57 1680 +14,57 1680 +2399.8,19 1680 +4,28 1680 +2400.4,15 1680 +4,27 1680 +2398.2,2400.40 1680 +2398.2,2400.40 1682 +2397.28,31 1683 +28,31 1683 +2401.0,1 1684 +2405.6,12 1685 +14,27 1686 +2406.23,52 1687 +29,40 1687 +29,51 1687 +23,52 1687 +23,52 1687 +2,53 1687 +2,53 1687 +2,53 1688 +2,53 1687 +2,53 1687 +2407.2,12 1689 +2408.37,40 1690 +2409.9,24 1691 +2410.37,48 1692 +2412.7,22 1693 +2413.4,13 1694 +2414.23,33 1695 +35,36 1695 +38,49 1695 +4,15 1695 +4,50 1695 +2415.4,15 1696 +4,41 1696 +4,41 1697 +2418.10,21 1698 +4,28 1698 +4,28 1699 +4,28 1700 +2409.26,48 1701 +26,48 1701 +2420.2,16 1702 +2422.6,11 1703 +2423.3,30 1704 +16,20 1704 +22,26 1704 +28,29 1704 +3,30 1704 +3,30 1705 +2425.3,27 1706 +13,17 1706 +19,23 1706 +25,26 1706 +3,27 1706 +3,27 1707 +3,27 1708 +2405.29,32 1709 +29,32 1709 +2428.8,23 1710 +2429.36,47 1711 +2431.2,25 1712 +2,6 1712 +14,24 1712 +2,25 1712 +2,25 1712 +2,25 1713 +2432.2,30 1714 +2,6 1714 +14,29 1714 +2,30 1714 +2,30 1714 +2,30 1715 +2,30 1716 +2428.25,47 1717 +25,47 1717 +2434.0,1 1718 +2440.3,2443.29 1719 +2440.7,11 1719 +2441.4,9 1719 +2442.4,15 1719 +4,29 1719 +2443.8,19 1719 +4,28 1719 +2440.3,2443.29 1719 +2440.3,2443.29 1719 +2439.1,2443.30 1719 +2439.1,5 1719 +12,23 1719 +12,32 1719 +12,32 1719 +12,32 1720 +12,32 1721 +12,32 1722 +12,32 1723 +1,2443.30 1719 +2439.1,2443.30 1719 +2439.1,2443.30 1724 +2445.7,20 1725 +15,19 1725 +7,20 1725 +7,20 1725 +3,2448.28 1725 +2445.3,2448.28 1725 +2445.3,2448.28 1726 +2446.4,9 1725 +2447.4,9 1725 +2448.4,15 1725 +4,27 1725 +2445.3,2448.28 1725 +2445.3,2448.28 1725 +2444.1,2448.29 1725 +2444.1,5 1725 +16,27 1725 +12,39 1725 +12,39 1725 +12,39 1727 +12,39 1728 +12,39 1729 +12,39 1730 +1,2448.29 1725 +2444.1,2448.29 1725 +2444.1,2448.29 1731 +2449.0,1 1732 +2454.1,19 1733 +2455.20,34 1734 +36,37 1734 +39,50 1734 +1,12 1734 +1,51 1734 +2456.1,21 1735 +2458.4,2461.15 1736 +2458.8,12 1736 +2459.4,9 1736 +2460.4,15 1736 +4,29 1736 +2461.4,14 1736 +2458.4,2461.15 1736 +2458.4,2461.15 1736 +2457.1,2461.16 1736 +2457.1,5 1736 +13,26 1736 +13,26 1736 +13,26 1737 +13,26 1738 +13,26 1739 +13,26 1740 +1,2461.16 1736 +2457.1,2461.16 1736 +2457.1,2461.16 1741 +2463.1,19 1742 +2464.1,12 1743 +1,37 1743 +2466.7,20 1744 +15,19 1744 +7,20 1744 +7,20 1744 +3,2469.14 1744 +2466.3,2469.14 1744 +2466.3,2469.14 1745 +2467.3,8 1744 +2468.3,8 1744 +2469.3,13 1744 +2466.3,2469.14 1744 +2466.3,2469.14 1744 +2465.1,2469.15 1744 +2465.1,5 1744 +13,26 1744 +13,26 1744 +13,26 1746 +13,26 1747 +13,26 1748 +13,26 1749 +1,2469.15 1744 +2465.1,2469.15 1744 +2465.1,2469.15 1750 +2470.0,1 1751 +2474.15,31 1752 +25,26 1752 +27,30 1752 +15,31 1752 +15,31 1752 +1,31 1752 +2476.2,20 1753 +13,19 1753 +2,20 1753 +2,20 1753 +2477.2,23 1754 +2,23 1754 +2,23 1754 +2478.8,56 1755 +20,46 1755 +47,55 1755 +8,56 1755 +8,56 1755 +2,59 1755 +2,59 1755 +2,59 1756 +57,58 1755 +2,59 1755 +2479.6,16 1757 +2480.3,19 1758 +2481.6,16 1759 +6,23 1759 +2482.3,18 1760 +3,18 1760 +2488.1,13 1761 +2489.1,14 1762 +2490.1,13 1763 +2491.1,9 1764 +2493.8,72 1765 +21,61 1765 +62,71 1765 +62,71 1765 +8,72 1765 +8,72 1765 +2,75 1765 +2,75 1765 +2,75 1766 +73,74 1765 +2,75 1765 +2494.2,17 1767 +13,16 1767 +2,17 1767 +2,17 1767 +2495.25,47 1768 +36,46 1768 +25,47 1768 +25,47 1768 +3,7 1768 +9,16 1768 +9,16 1769 +9,16 1770 +9,16 1771 +2496.6,17 1772 +21,35 1772 +2497.9,52 1773 +21,51 1773 +9,52 1773 +9,52 1773 +3,55 1773 +3,55 1773 +3,55 1774 +53,54 1773 +3,55 1773 +3,55 1775 +2498.11,20 1776 +11,20 1776 +11,20 1776 +11,25 1776 +2499.3,26 1777 +3,26 1777 +2500.3,16 1778 +2501.3,28 1779 +9,25 1779 +26,27 1779 +3,28 1779 +2502.3,8 1780 +2504.6,13 1781 +17,29 1781 +2505.3,8 1782 +2506.6,11 1783 +6,11 1783 +6,16 1783 +2507.3,14 1784 +2508.3,10 1785 +2509.7,21 1786 +2510.4,18 1787 +2512.2,19 1788 +13,18 1788 +2,19 1788 +2,19 1788 +2,19 1788 +2514.1,10 1789 +2515.8,17 1790 +1,17 1790 +2524.5,13 1791 +19,24 1791 +19,28 1791 +17,29 1791 +17,37 1791 +2525.9,14 1792 +9,18 1792 +2,19 1792 +2526.5,19 1793 +2527.14,28 1794 +26,27 1794 +14,28 1794 +14,28 1794 +2,52 1794 +2,52 1794 +2,52 1795 +30,41 1794 +42,43 1794 +44,51 1794 +2,52 1794 +2,52 1794 +2528.0,1 1796 +2532.1,14 1797 +2533.1,27 1798 +2534.1,47 1799 +17,34 1799 +17,34 1799 +36,46 1799 +1,47 1799 +1,47 1799 +2535.5,14 1800 +2536.10,13 1801 +14,17 1801 +2,18 1801 +2537.13,27 1802 +24,26 1802 +13,27 1802 +13,27 1802 +2538.5,25 1803 +2539.10,13 1804 +14,17 1804 +2,18 1804 +2540.1,38 1805 +11,13 1805 +15,21 1805 +23,37 1805 +1,38 1805 +1,38 1805 +2541.1,27 1806 +15,17 1806 +18,21 1806 +22,26 1806 +1,27 1806 +1,27 1806 +2542.9,16 1807 +9,16 1807 +9,16 1807 +9,16 1808 +18,21 1807 +18,25 1807 +1,26 1807 +29 +aSys->Dir 1:26.1,39.2 64 +11 +0:name:28.2,6 s +4:uid:29.2,5 s +8:gid:30.2,5 s +12:muid:31.2,6 s +16:qid:32.2,5 @1 + +32:mode:33.2,6 i +36:atime:34.2,7 i +40:mtime:35.2,7 i +48:length:36.2,8 B +56:dtype:37.2,7 i +60:dev:38.2,5 i +aSys->Qid 11.1,16.2 16 +3 +0:path:13.2,6 B +8:vers:14.2,6 i +12:qtype:15.2,7 i +aDraw->Chans 6:70.1,82.2 4 +1 +0:desc:72.2,6 i +aDraw->Context 274.1,279.2 12 +3 +0:display:276.2,9 R@4 + +4:screen:277.2,8 R@8 + +8:wm:278.2,4 Ct8.2 +0:t0:15,21 s +4:t1:15,21 Ct8.2 +0:t0:32,38 s +4:t1:32,38 R@9 + + + +aDraw->Display 201.1,230.2 20 +5 +0:image:203.2,7 R@5 + +4:white:204.2,7 R@5 + +8:black:205.2,7 R@5 + +12:opaque:206.2,8 R@5 + +16:transparent:207.2,13 R@5 + +aDraw->Image 142.1,198.2 56 +8 +0:r:146.2,3 @6 + +16:clipr:147.2,7 @6 + +32:depth:148.2,7 i +36:chans:149.2,7 @2 + +40:repl:150.2,6 i +44:display:151.2,9 R@4 + +48:screen:152.2,8 R@8 + +52:iname:153.2,7 s +aDraw->Rect 116.1,139.2 16 +2 +0:min:118.2,5 @7 + +8:max:119.2,5 @7 + +aDraw->Point 99.1,113.2 8 +2 +0:x:101.2,3 i +4:y:102.2,3 i +aDraw->Screen 249.1,263.2 16 +4 +0:id:251.2,4 i +4:image:252.2,7 R@5 + +8:fill:253.2,6 R@5 + +12:display:254.2,9 R@4 + +aDraw->Wmcontext 282.1,291.2 28 +7 +0:kbd:284.2,5 Ci +4:ptr:285.2,5 CR@10 + +8:ctl:286.2,5 Cs +12:wctl:287.2,6 Cs +16:images:288.2,8 CR@5 + +20:connfd:289.2,8 R@11 + +24:ctxt:290.2,6 R@3 + +aDraw->Pointer 266.1,271.2 16 +3 +0:buttons:268.2,9 i +4:xy:269.2,4 @7 + +12:msec:270.2,6 i +aSys->FD 1:45.1,48.2 4 +1 +0:fd:47.2,4 i +aTmsgqueue 0:891.0,897.1 16 +4 +0:start:892.1,6 i +4:end:8,11 i +8:length:13,19 i +12:a:893.1,2 AR@13 + +pStyx->Tmsg 3:75.1,123.2 0 +1 +4:tag:76.2,5 i +14 +Readerror:78.2,11 12 +1 +8:error:79.3,8 s +Version:80.2,9 16 +2 +8:msize:81.3,8 i +12:version:82.3,10 s +Auth:83.2,6 20 +3 +8:afid:84.3,7 i +12:uname:85.3,8 s +16:aname:10,15 s +Attach:86.2,8 24 +4 +8:fid:87.3,6 i +12:afid:8,12 i +16:uname:88.3,8 s +20:aname:10,15 s +Flush:89.2,7 12 +1 +8:oldtag:90.3,9 i +Walk:91.2,6 20 +3 +8:fid:92.3,6 i +12:newfid:8,14 i +16:names:93.3,8 As +Open:94.2,6 16 +2 +8:fid:95.3,6 i +12:mode:8,12 i +Create:96.2,8 24 +4 +8:fid:97.3,6 i +12:name:98.3,7 s +16:perm:99.3,7 i +20:mode:9,13 i +Read:100.2,6 32 +3 +8:fid:101.3,6 i +16:offset:102.3,9 B +24:count:103.3,8 i +Write:104.2,7 32 +3 +8:fid:105.3,6 i +16:offset:106.3,9 B +24:data:107.3,7 Ab +Clunk:108.2,7 12 +1 +8:fid:111.3,6 i +Stat:109.2,6 +Remove:110.2,8 +Wstat:112.2,7 80 +2 +8:fid:113.3,6 i +16:stat:114.3,7 @0 + +aStyxservers->Styxserver 4:44.1,82.2 32 +7 +0:fd:45.2,4 R@11 + +4:fids:46.2,6 ALR@15 + +8:fidlock:47.2,9 Ci +12:t:48.2,3 R@16 + +16:rootpath:49.2,10 B +24:msize:50.2,7 i +28:replychan:51.2,11 CR@18 + +aStyxservers->Fid 5.1,19.2 48 +9 +0:fid:6.2,5 i +8:path:7.2,6 B +16:qtype:8.2,7 i +20:isopen:9.2,8 i +24:mode:10.2,6 i +28:doffset:11.2,9 t8.2 +0:t0:12,15 i +4:t1:12,15 i + +36:uname:12.2,7 s +40:param:13.2,7 s +44:data:14.2,6 Ab +aStyxservers->Navigator 21.1,29.2 8 +2 +0:c:22.2,3 CR@17 + +4:reply:23.2,7 Ct8.2 +0:t0:18,30 R@0 + +4:t1:18,30 s + +pStyxservers->Navop 31.1,42.2 0 +2 +4:reply:32.2,7 Ct8.2 +0:t0:18,30 R@0 + +4:t1:18,30 s + +8:path:33.2,6 B +3 +Stat:35.2,6 16 +0 +Walk:36.2,6 24 +1 +16:name:37.3,7 s +Readdir:38.2,9 24 +2 +16:offset:39.3,9 i +20:count:40.3,8 i +pStyx->Rmsg 3:125.1,163.2 0 +1 +4:tag:126.2,5 i +15 +Readerror:128.2,11 12 +1 +8:error:129.3,8 s +Version:130.2,9 16 +2 +8:msize:131.3,8 i +12:version:132.3,10 s +Auth:133.2,6 24 +1 +8:aqid:134.3,7 @1 + +Attach:135.2,8 24 +1 +8:qid:136.3,6 @1 + +Flush:137.2,7 8 +0 +Error:138.2,7 12 +1 +8:ename:139.3,8 s +Clunk:140.2,7 8 +0 +Remove:141.2,8 +Wstat:142.2,7 +Walk:143.2,6 12 +1 +8:qids:144.3,7 A@1 + +Create:145.2,8 32 +2 +8:qid:147.3,6 @1 + +24:iounit:148.3,9 i +Open:146.2,6 +Read:149.2,6 12 +1 +8:data:150.3,7 Ab +Write:151.2,7 12 +1 +8:count:152.3,8 i +Stat:153.2,6 72 +1 +8:stat:154.3,7 @0 + +aNametree->Tree 4:112.1,121.2 8 +2 +0:c:113.2,3 CR@20 + +4:reply:114.2,7 Cs +pNametree->Treeop 122.1,132.2 0 +2 +4:reply:123.2,7 Cs +8:q:124.2,3 B +4 +Create:126.2,8 80 +1 +16:d:128.3,4 @0 + +Wstat:127.2,7 +Remove:129.2,8 16 +0 +Getpath:130.2,9 16 +0 +aCfile 0:159.0,167.1 28 +7 +0:driveno:160.1,8 i +4:pathname:161.1,9 Ab +8:dosname:162.1,8 Ab +12:filelength:163.1,11 i +16:filestatus:164.1,11 i +20:thumblength:165.1,12 i +24:thumbqid:166.1,9 i +aCamera_adt 132.0,144.1 48 +12 +0:port_type:133.1,10 i +4:port_num:134.1,9 i +8:command:135.1,8 i +12:mode:136.1,5 i +16:fd:137.1,3 R@11 + +20:ctlfd:138.1,6 R@11 + +24:cdp:139.1,4 Ab +28:bufbytes:140.1,9 i +32:baud:141.1,5 i +36:dfs:142.1,4 i +40:hfs:6,9 i +44:stat:143.1,5 i +aPartialtag 155.0,157.1 12 +3 +0:offset:156.1,7 i +4:length:9,15 i +8:filesize:17,25 i +aFitem 169.0,172.1 48 +2 +0:qid:170.1,4 @1 + +16:cf:171.1,3 @21 + +aextra 1206.0,1212.1 20 +5 +0:pnum:1207.1,5 i +4:offset:1208.1,7 i +8:length:1209.1,7 i +12:data:1210.1,5 Ab +16:isthumb:1211.1,8 i +aUser 514.0,517.1 8 +2 +0:attachfid:515.1,10 i +4:attr:516.1,5 At8.2 +0:t0:17,23 s +4:t1:17,23 i + +aDaytime->Tm 2:5.1,16.2 40 +10 +0:sec:6.2,5 i +4:min:7.2,5 i +8:hour:8.2,6 i +12:mday:9.2,6 i +16:mon:10.2,5 i +20:year:11.2,6 i +24:wday:12.2,6 i +28:yday:13.2,6 i +32:zone:14.2,6 s +36:tzoff:15.2,7 i +pCapability 0:1550.0,1559.1 0 +2 +4:pname:1551.1,6 s +8:d:1552.1,2 s +2 +List:1554.2,6 16 +1 +12:t:1555.3,4 Lt8.2 +0:t0:15,21 s +4:t1:15,21 i + +Range:1556.2,7 28 +4 +12:min:1557.3,6 i +16:max:8,11 i +20:default:13,20 i +24:current:22,29 i +91 +0:init +1 +36:argv:189.30,34 Ls +6 +40:arg:204.1,4 mArg +7:1.0,14.1 0 + +44:extrafilelist:0:232.1,14 Ls +48:i:258.6,7 i +52:sync:292.1,5 Ci +56:opt:235.9,12 i +72:err:191.1,4 s +n227:set_camera_properties +0 +1 +32:i:299.6,7 i +n241:tonext +1 +32:los:325.7,10 Ls +1 +36:s:327.1,2 s +s259:int2hex +1 +32:i:337.8,9 i +3 +36:k:341.6,7 i +40:i2:339.1,3 i +44:s:340.1,2 s +i275:connect +0 +6 +32:pchan:350.1,6 Ci +36:datain:349.1,7 CAb +40:tick:351.1,5 Ci +44:buf:362.3,6 Ab +48:pid:358.1,4 i +52:tpid:355.1,5 i +i354:contains +2 +32:s:400.9,10 s +36:test:20,24 s +2 +40:i:404.6,7 i +44:num:402.1,4 i +i377:filterabls +2 +32:pname:431.11,16 s +36:desc:18,22 s +1 +40:i:433.6,7 i +i394:exporterror +2 +32:dfd:458.12,15 R@11 + +36:error:30,35 s +4 +40:tmsg:460.1,5 R@13 + +44:data:470.2,6 Ab +48:reply:469.2,7 R@18 + +52:t:465.6,7 R@13 + +n443:exportpath +2 +32:sync:475.11,15 Ci +36:dfd:30,33 R@11 + +0 +n451:getuid +0 +3 +32:buf:490.1,4 Ab +36:fd:491.1,3 R@11 + +40:uidlen:492.1,7 i +n468:dir +4 +32:name:496.4,8 s +36:perm:18,22 i +40:length:29,35 i +44:qid:42,45 i +1 +56:d:498.1,2 @0 + +@0 +498:getuser +1 +32:fid:521.8,11 i +1 +36:i:523.6,7 i +i509:getattr +1 +32:pname:529.8,13 s +1 +36:i:531.6,7 i +i520:serveloop +2 +32:fd:537.10,12 R@11 + +36:sync:28,32 Ci +45 +40:m:635.12,13 R@13 + +44:srv:540.1,4 R@14 + +48:tree:547.2,6 R@19 + +52:treeop:8,14 CR@17 + +56:data:707.3,7 Ab +60:gm:576.1,3 R@13 + +64:err:796.4,7 s +68:readfid:588.1,8 i +72:f:699.4,5 R@15 + +76:e:6,7 s +80:i:812.10,11 i +84:retryit:586.1,8 i +88:f:665.3,4 R@15 + +92:f:781.4,5 R@15 + +96:e:6,7 s +100:i:648.8,9 i +104:alivechan:583.1,10 Ci +108:dir:710.5,8 R@0 + +112:intdata:10,17 Ab +116:e1:821.5,7 i +120:j:557.6,7 i +124:myattr:647.3,9 At8.2 +0:t0:40,46 s +4:t1:40,46 i + +128:notries:587.1,8 i +132:tchan:539.1,6 CR@13 + +136:tmsgqueue:571.1,10 R@12 + +140:killchan:611.7,15 Ci +144:killchan:877.4,12 Ci +148:alivepid:585.1,9 i +152:e1:842.7,9 s +156:lastgm:576.5,11 R@13 + +160:n:558.3,4 i +168:idir:6,10 @0 + +232:n:787.4,5 i +236:s:7,8 Ls +260:c:605.4,5 i +264:echan:541.1,6 Cs +268:s:607.6,7 s +100:i:677.9,10 i +260:nu:640.3,5 i +100:nu:810.5,7 i +260:nu:653.3,5 i +260:wtype:786.3,8 i +100:na:838.6,8 i +260:ftype:671.3,8 i +260:ok:874.3,5 i +n1599:Tmsgqueue.new +1 +32:n:899.14,15 i +1 +40:t:901.1,2 @12 + +R@12 +1608:Tmsgqueue.push +2 +32:t:909.15,16 R@12 + +36:newt:37,41 R@13 + +0 +i1623:Tmsgqueue.pop +2 +32:t:921.14,15 R@12 + +36:readfid:37,44 i +1 +40:m:925.1,2 R@13 + +R@13 +1640:noresponse +3 +32:tchan:935.11,16 CR@13 + +36:srv:36,39 R@14 + +40:killchan:70,78 Ci +2 +44:gm:940.2,4 R@13 + +60:k:938.2,3 i +n1669:photoread2 +4 +32:qid:947.11,14 B +40:m:21,22 R@13 + +44:tree:39,43 R@19 + +48:isthumb:65,72 i +14 +52:data:950.1,5 Ab +56:photonum:949.1,9 i +60:filelen:969.1,8 i +64:offset:967.1,7 i +68:i:952.6,7 i +72:dosname:968.1,8 Ab +76:fd:1020.2,4 R@11 + +80:fd:994.2,4 R@11 + +84:cname:1021.2,7 s +88:filesize:990.2,10 i +92:k:970.6,7 i +96:n:989.2,3 i +104:n:1034.3,4 i +112:dir:6,9 @0 + +Ab1925:cacheclean +0 +6 +32:i:1061.7,8 i +36:tmp:1057.1,4 Lt12.3 +0:t0:16,22 s +4:t1:16,22 i +8:t2:16,22 i + +40:dosnm:1060.3,8 s +44:it:9,11 i +48:fl:12,14 i +52:filelen:1062.3,10 i +n1954:cacheadd +3 +32:dosname1:1074.9,17 Ab +36:isthumb:34,41 i +40:filelen:43,50 i +6 +44:tmp:1077.1,4 Lt12.3 +0:t0:16,22 s +4:t1:16,22 i +8:t2:16,22 i + +48:dosnm:1081.3,8 s +52:it:9,11 i +56:fl:12,14 i +60:dosname:1076.1,8 s +64:updated:1079.1,8 i +n1985:cachedel +2 +32:dosname1:1096.9,17 Ab +36:isthumb:34,41 i +5 +40:tmp:1099.1,4 Lt12.3 +0:t0:16,22 s +4:t1:16,22 i +8:t2:16,22 i + +44:dosnm:1102.3,8 s +48:it:9,11 i +52:filelen:12,19 i +56:dosname:1098.1,8 s +n2002:cachesize +2 +32:dosname1:1110.10,18 Ab +36:isthumb:35,42 i +5 +40:tmp:1113.1,4 Lt12.3 +0:t0:1042.21,27 s +4:t1:21,27 i +8:t2:21,27 i + +44:dosname:1112.1,8 s +48:dosnm:1115.3,8 s +52:it:9,11 i +56:filelen:12,19 i +i2018:cachename +2 +32:dosname:1122.10,17 Ab +36:isthumb:34,41 i +1 +40:name:1124.1,5 s +s2039:poll_and_wait +0 +0 +i2065:send_packet +0 +2 +32:to_write:1145.1,9 i +36:wrote_here:1156.1,11 i +i2092:send_message +0 +6 +32:rc:1165.1,3 Ci +36:tc:1166.1,3 Ci +40:v:1164.1,2 i +44:rpid:1171.1,5 i +48:tpid:1169.1,5 i +60:try:1173.1,4 i +i2128:write_message +1 +32:rc:1187.14,16 Ci +1 +36:wrote_here:1197.1,11 i +n2163:getthumb +3 +32:photonum:1216.9,17 i +36:offset:19,25 i +40:maxlength:27,36 i +10 +44:off:1236.2,5 i +48:filesize:1223.1,9 i +52:l:1232.2,3 i +56:h:1221.6,7 i +60:thumbdata:1220.1,10 Ab +64:w:1221.9,10 i +68:err:1,4 i +72:ttype:12,17 i +88:tmpoffset:1255.2,11 i +100:file:1222.1,5 @21 + +Ab2419:getpicture2 +3 +32:photonum:1279.12,20 i +36:offset:22,28 i +40:maxlength:30,39 i +6 +44:off:1291.1,4 i +48:filesize:1282.1,9 i +52:l:1288.1,2 i +56:filedata:1313.1,9 Ab +60:err:1303.6,9 i +76:file:1281.1,5 @21 + +Ab2597:erase_file +1 +32:file:1318.11,15 @21 + +1 +60:off:1323.1,4 i +i2639:get_storage_status +0 +5 +32:off:1351.1,4 i +36:s:1344.1,2 s +40:raw:1352.19,22 i +44:available:8,17 i +48:taken:1,6 i +s2703:get_power_mode +0 +2 +32:off:1374.1,4 i +36:mode:1367.1,5 i +s2734:set_clock_data +1 +32:s:1379.15,16 s +10 +36:tm:1383.2,4 R@27 + +40:i:1398.7,8 i +44:i2:1402.8,10 i +48:n:1395.3,4 i +52:datetime:5,13 Ls +56:n2:1399.4,6 i +60:data:7,11 Ls +80:err:1381.1,4 i +84:off:1384.2,5 i +84:off:1397.2,5 i +i2830:set_clock +1 +32:s:1413.10,11 s +0 +i2854:addzeros +1 +32:s:1423.9,10 s +4 +36:i:1429.6,7 i +40:rs:1426.1,3 s +44:isnum:1428.1,6 i +48:start:1427.1,6 i +s2893:get_clock +0 +1 +32:s:1450.1,2 s +s2932:get_file_list +0 +0 +i2961:setfiledata +0 +1 +32:off:1471.1,4 i +n2995:get_file_size +1 +32:i:1478.14,15 i +0 +i3019:setfiledata2 +1 +32:i:1489.13,14 i +1 +36:off:1491.1,4 i +n3055:set_interface_timeout +0 +1 +32:off:1503.1,4 i +n3089:display_filelist +0 +3 +32:off:1513.1,4 i +36:i:6,7 i +40:s:1517.1,2 s +s3192:get_camera_capabilities +0 +0 +s3219:capabilities +0 +18 +32:off:1581.1,4 i +36:line:1595.2,6 s +40:l:1582.1,2 i +44:s:1584.1,2 Ab +48:n:1582.7,8 i +52:pname:1583.1,6 Ab +56:fact:1601.2,6 s +60:m:1582.4,5 i +64:desc:1583.8,12 Ab +68:firsttime:1591.1,10 i +72:i:1581.6,7 i +76:rs:1585.1,3 s +80:j:1594.6,7 i +84:k:1610.9,10 i +88:ncaps:1581.9,14 i +92:t:16,17 i +96:t:1604.4,5 Lt8.2 +0:t0:16,22 s +4:t1:16,22 i + +116:cl:1618.4,6 R@28 + +s3528:isin +2 +32:los:1665.5,8 Ls +36:s:26,27 s +0 +i3538:set_capture_data +0 +0 +i3548:get_camera_state +2 +32:pname:1682.17,22 s +36:offset:31,37 i +9 +40:off:1687.1,4 i +44:data:1714.8,12 Ab +48:s:1704.1,2 s +52:q:1707.7,8 i +56:rlen:1702.1,5 i +60:type1:1715.2,7 i +64:name:1714.2,6 Ab +68:tmp:1715.9,12 i +52:i:1713.6,7 i +s3747:set_camera_state +2 +32:pname:1742.17,22 s +36:val:32,35 i +3 +40:off:1747.1,4 i +44:na:1760.2,4 i +48:e:1759.6,7 i +s3813:capture +0 +1 +32:d:1778.1,2 i +i3844:dump_message +0 +0 +n3911:build_cdp_header +2 +32:cdp:1795.17,20 Ab +36:x:37,38 i +1 +40:l:1806.1,2 i +i3948:poll_and_reply +1 +32:nak:1815.15,18 i +0 +i3985:receive_packet +1 +32:buf:1831.15,18 Ab +2 +36:l:1839.1,2 i +40:r:1841.1,2 i +i4031:receive_message +0 +2 +36:message_len:1867.1,12 i +40:rc:1860.1,3 i +i4102:reset +1 +32:fd:1882.6,8 R@11 + +0 +n4122:kill +1 +32:pid:1890.5,8 i +1 +36:pctl:1892.1,5 R@11 + +n4138:killg +1 +32:pid:1897.6,9 i +1 +36:fd:1899.6,8 R@11 + +n4155:serialport +1 +32:port:1910.11,15 i +7 +36:i:1919.6,7 i +40:ctlfd:1930.1,6 R@11 + +44:config:1934.1,7 As +48:fd:1927.1,3 R@11 + +52:serport:1916.1,8 s +56:serctl:1917.1,7 s +60:statfd:1920.2,8 R@11 + +t12.3 +0:t0:1910.26,37 R@11 + +4:t1:26,37 R@11 + +8:t2:26,37 s +4276:consume +1 +32:fd:1957.8,10 R@11 + +0 +n4289:beacon_intro +3 +32:data:1965.13,17 CAb +36:pchan:42,47 Ci +40:fd:62,64 R@11 + +7 +48:buf:1967.1,4 Ab +52:k:1986.6,7 i +56:cbuf:1968.1,5 Ab +60:failed:1972.1,7 Ab +64:n:1976.2,3 i +68:pid:1969.1,4 i +64:i:1985.1,2 i +n4387:beacon_result +3 +32:data:2000.14,18 CAb +36:pchan:43,48 Ci +40:fd:63,65 R@11 + +7 +48:p:2008.1,2 i +52:buf:2002.1,4 Ab +56:intro:2009.1,6 i +60:cbuf:2003.1,5 Ab +64:pid:2004.1,4 i +84:i:2011.2,3 i +84:k:2027.6,7 i +n4454:beacon_comp +2 +32:buf:2039.12,15 Ab +36:C:32,33 @22 + +1 +84:speed:2041.1,6 s +i4577:read_n +4 +32:fd:2083.7,9 R@11 + +36:buf:24,27 Ab +40:n:44,45 i +44:res:52,55 Ci +3 +48:nread:2089.1,6 i +52:i:2091.2,3 i +56:pid:2085.1,4 i +n4613:read_n_to +4 +32:fd:2115.10,12 R@11 + +36:buf:27,30 Ab +40:n:47,48 i +44:t:49,50 i +6 +48:rc:2118.1,3 Ci +52:tc:2119.1,3 Ci +56:v:2117.1,2 i +60:rpid:2124.1,5 i +64:tpid:2122.1,5 i +80:try:2126.1,4 i +i4658:write_n +3 +32:fd:2140.8,10 R@11 + +36:buf:25,28 Ab +40:n:45,46 i +2 +44:nwrite:2143.1,7 i +48:i:2145.2,3 i +i4710:readstat +0 +3 +32:buf:2164.1,4 Ab +36:k:2167.3,4 i +40:statfd:2163.1,7 R@11 + +n4753:beacon_ack +1 +32:C:2176.11,12 @22 + +1 +80:i:2179.1,2 i +n4809:timer2 +2 +32:tick:2205.7,11 Ci +36:delay:26,31 i +1 +40:pid:2207.1,4 i +n4821:beacon_ok +1 +32:buf:2213.10,13 Ab +1 +40:i:2216.6,7 i +i4852:check_sum +2 +32:buf:2226.10,13 Ab +36:l:30,31 i +2 +40:i:2229.7,8 i +44:sum:2228.1,4 i +b4863:set_int +3 +32:b:2235.8,9 Ab +36:i:26,27 i +40:off:29,32 i +0 +i4880:set_fstring +3 +32:b:2245.12,13 Ab +36:s:30,31 Ab +40:off:48,51 i +1 +44:i:2247.6,7 i +i4896:set_dosname +3 +32:b:2254.12,13 Ab +36:s:30,31 Ab +40:off:48,51 i +1 +44:i:2256.6,7 i +i4912:get_int2 +1 +32:b:2277.9,10 Ab +1 +36:i:2279.1,2 i +i4928:get_string +3 +32:b:2294.11,12 Ab +36:off:29,32 i +40:l:39,40 i +1 +44:s:2296.1,2 Ab +t8.2 +0:t0:2294.49,62 Ab +4:t1:49,62 i +4936:sconv +1 +32:b:2306.6,7 Ab +2 +36:i:2309.1,2 i +40:s:2308.1,2 s +s4948:getqid +2 +32:i:2320.7,8 i +36:ftype:10,15 i +1 +40:qid:2322.1,4 i +i4952:gettype +1 +32:qid:2326.8,11 i +1 +36:ftype:2328.1,6 i +i4955:convert_thumb +3 +32:w:2341.14,15 i +36:h:16,17 i +40:data:24,28 Ab +11 +44:bb:2354.2,4 b +45:gb:2353.2,4 b +46:rb:2352.2,4 b +48:index:2344.1,6 i +52:rgb:2343.1,4 Ab +56:rgbi:2345.1,5 i +60:i:2346.6,7 i +64:loop:2356.7,11 i +88:y:2349.2,3 f +96:cb:2348.2,4 f +104:cr:2350.2,4 f +Ab5017:conv +1 +32:a:2366.5,6 f +1 +40:r:2368.1,2 i +b5024:thumb2bit +3 +32:buf:2374.10,13 Ab +36:w:30,31 i +40:h:32,33 i +2 +44:bitarray:2378.1,9 Ab +48:convbuf:2376.1,8 Ab +Ab5048:jpg2bit +1 +32:s:2385.8,9 s +0 +s5068:getoldfiledata +0 +1 +32:i:2397.5,6 i +n5090:updatetree +1 +32:tree:2403.11,15 R@19 + +10 +36:i:2405.6,7 i +40:name:2406.2,6 s +44:tmp:2408.2,5 Lt12.3 +0:t0:17,23 s +4:t1:17,23 i +8:t2:17,23 i + +48:found:2407.2,7 i +52:oldname:2410.4,11 s +56:oldqid:13,19 i +60:oldthumbqid:21,32 i +80:oldname:2429.3,10 s +84:oldqid:12,18 i +88:oldthumbqid:20,31 i +n5157:updateintree +3 +32:tree:2436.13,17 R@19 + +36:name:39,43 s +40:i:53,54 i +0 +n5204:addtotree +3 +32:tree:2451.10,14 R@19 + +36:name:36,40 s +40:i:50,51 i +1 +44:parentqid:2456.1,10 i +n5257:keepalive +1 +32:alivechan:2472.10,19 Ci +1 +36:now:2477.2,5 i +n5286:reconnect +1 +32:n:2486.10,11 i +3 +36:delay:2490.1,6 i +40:attempt:2488.1,8 i +44:to5:2491.1,4 i +i5356:print +2 +32:s:2522.6,7 s +36:v:17,18 i +0 +n5378:readinterface +3 +32:qid:2530.14,17 i +40:offset:25,31 B +48:size:38,42 i +5 +52:fd:2534.1,3 R@11 + +56:i:2532.1,2 i +60:buf:2533.1,4 Ab +80:n:2537.2,3 i +88:dir:5,8 @0 + +t8.2 +0:t0:2530.51,63 R@0 + +4:t1:51,63 Ab +47 +868:C:174.0,1 @22 + +1112:Qabl:73.38,42 i +1116:Qctl:32,36 i +1120:Qinterface:74.41,51 i +1124:Qjpgdir:15,22 i +1128:Qpwr:24,28 i +1132:Qstate:0,6 i +1136:Qstore:73.44,50 i +1140:Qthumbdir:74.30,39 i +1144:Qtime:8,13 i +1188:abilitiesfilter:410.0,15 As +1220:bak:103.0,3 Ab +1228:bintro:93.0,6 Ab +1236:cachelist:1042.0,9 Lt12.3 +0:t0:21,27 s +4:t1:21,27 i +8:t2:21,27 i + +1268:caplist:1561.0,7 LR@28 + +1276:connected:181.0,9 i +1288:currentattr:429.13,24 At8.2 +0:t0:36,42 s +4:t1:36,42 i + +1312:daytime:6.1,8 mDaytime +2:1.0,53.1 0 + +1316:defattr:0:428.0,7 Lt8.2 +0:t0:19,25 s +4:t1:19,25 i + +1320:defaultattr:429.0,11 At8.2 +0:t0:36,42 s +4:t1:36,42 i + +1324:dirqid:73.24,30 i +1344:error_table:76.0,11 As +1348:ex:1214.0,2 @25 + +1368:exitfid:486.0,7 i +1388:filelist:176.0,8 A@24 + +1432:gpid:187.0,4 i +1444:ignoreabls:426.0,10 Ls +1452:interfacepaths:185.0,14 As +1484:nametree:14.1,9 mNametree +4:110.0,135.1 0 + +1488:nextjpgqid:0:73.0,10 i +1492:nexttmbqid:12,22 i +1504:oldfiles:2392.0,8 Lt12.3 +0:t0:20,26 s +4:t1:20,26 i +8:t2:20,26 i + +1512:pak:124.0,3 Ab +1532:pwl:119.0,3 Ab +1576:recon:182.0,5 i +1592:reslength:177.0,9 i +1616:set_camera_props:303.0,16 At8.2 +0:t0:304.2,8 s +4:t1:10,11 i + +1628:statopt:146.0,7 As +1636:str:17.1,4 mString +5:1.0,39.1 0 + +1640:styx:0:8.1,5 mStyx +3:1.0,182.1 0 + +1644:styxservers:0:11.1,12 mStyxservers +4:1.0,108.1 0 + +1648:sys:0:4.1,4 mSys +1:0,160.1 0 + +1656:uid:0:484.0,3 s +1660:usecache:180.0,8 i +1664:users:519.0,5 A@26 + +1668:verbosity:183.0,9 i +1672:wait:179.0,4 i diff --git a/appl/demo/camera/camload.bit b/appl/demo/camera/camload.bit Binary files differnew file mode 100644 index 00000000..fdad09af --- /dev/null +++ b/appl/demo/camera/camload.bit diff --git a/appl/demo/camera/camproc.bit b/appl/demo/camera/camproc.bit Binary files differnew file mode 100644 index 00000000..ce078ab7 --- /dev/null +++ b/appl/demo/camera/camproc.bit diff --git a/appl/demo/camera/mkfile b/appl/demo/camera/mkfile new file mode 100644 index 00000000..9b393708 --- /dev/null +++ b/appl/demo/camera/mkfile @@ -0,0 +1,42 @@ +<../../../mkconfig + +TARG=\ + camera.dis\ + camload.bit\ + camproc.bit\ + tkinterface.dis\ + +SHTARG=\ + runcam.sh\ + +MODULES=\ + +SYSMODULES= \ + arg.m\ + bufio.m\ + daytime.m\ + draw.m\ + grid/readjpg.m\ + readdir.m\ + selectfile.m\ + string.m\ + styx.m\ + styxservers.m\ + sys.m\ + tk.m\ + tkclient.m\ + +DISBIN=$ROOT/dis/demo/camera + +<$ROOT/mkfiles/mkdis + +$DISBIN/%.bit: %.bit + rm -f $target && cp $stem.bit $target + +SHFILES=${SHTARG:%.sh=$DISBIN/%} +install:V: $SHFILES +%.install:V: $DISBIN/% +%.installall:V: $DISBIN/% + +$DISBIN/%: %.sh + cp $stem.sh $target && chmod a+rx $target diff --git a/appl/demo/camera/runcam.sh b/appl/demo/camera/runcam.sh new file mode 100755 index 00000000..51948067 --- /dev/null +++ b/appl/demo/camera/runcam.sh @@ -0,0 +1,3 @@ +#!/dis/sh + +grid/register -a resource Camera -a name Y2K -a model 'Kodak DC260' -a 'Image resource' 1 {demo/camera/camera.dis -v 2 -p 0 -n Y2K -f /dis/demo/camera/tkinterface.dis -f /dis/demo/camera/readjpg.dis -f /dis/demo/camera/camload.bit -f /dis/demo/camera/camproc.bit} diff --git a/appl/demo/camera/runcamlocal.sh b/appl/demo/camera/runcamlocal.sh new file mode 100755 index 00000000..b31d6501 --- /dev/null +++ b/appl/demo/camera/runcamlocal.sh @@ -0,0 +1,3 @@ +#!/dis/sh + +mount -A {demo/camera/camera.dis -v 2 -p 0} /n/remote diff --git a/appl/demo/camera/tkinterface.b b/appl/demo/camera/tkinterface.b new file mode 100644 index 00000000..69be88e9 --- /dev/null +++ b/appl/demo/camera/tkinterface.b @@ -0,0 +1,2508 @@ +# Sort out timing with taking photo & getting jpg/thumbnail - make sure it gets the right one when 2photos have been taken & sort out 'cannot communicate with camera' error + +implement tkinterface; + +include "tk.m"; + tk: Tk; +include "tkclient.m"; + tkclient: Tkclient; +include "sys.m"; + sys : Sys; +include "daytime.m"; + daytime: Daytime; +include "readdir.m"; + readdir: Readdir; +include "bufio.m"; + bufio: Bufio; + Iobuf: import bufio; +include "selectfile.m"; + selectfile: Selectfile; + +include "string.m"; + str : String; +include "draw.m"; + draw: Draw; + Context, Display, Point, Rect, Image, Screen, Font: import draw; +include "grid/readjpg.m"; + readjpg: Readjpg; + +display : ref draw->Display; +context : ref draw->Context; +camerapath := ""; +savepath := ""; +tmppath := "/tmp/"; +usecache := 1; +working := 0; +processing := 0; +coords: draw->Rect; +DONE : con 1; +KILLED : con 2; +font: ref Draw->Font; +tkfont := ""; +tkfontb := ""; +tkfontf := ""; +ssize := 3; +maxsize : Point; +nilrect := Draw->Rect((0,0),(0,0)); +runwithoutcam := 0; +toplevels : list of (ref Tk->Toplevel, string, list of int, int) = nil; +procimg : ref Draw->Image; +loadimg: ref Draw->Image; + +tkinterface : module { + init : fn (ctxt : ref Draw->Context, argv : list of string); +}; + +init(ctxt : ref Draw->Context, argv : list of string) +{ + display = ctxt.display; + context = ctxt; + + sys = load Sys Sys->PATH; +# sys->pctl(Sys->NEWPGRP, nil); +# sys->pctl(Sys->FORKNS, nil); + + str = load String String->PATH; + readdir = load Readdir Readdir->PATH; + daytime = load Daytime Daytime->PATH; + bufio = load Bufio Bufio->PATH; + + str = load String String->PATH; + draw = load Draw Draw->PATH; + + tk = load Tk Tk->PATH; + tkclient = load Tkclient Tkclient->PATH; + tkclient->init(); + selectfile = load Selectfile Selectfile->PATH; + selectfile->init(); + readjpg = load Readjpg Readjpg->PATH; + readjpg->init(display); + font = draw->Font.open(display, "/fonts/charon/plain.small.font"); + runfrom := hd argv; + p := isat2(runfrom,"/"); + savepath = runfrom[:p+1]; + argv = tl argv; + while (argv != nil) { + if (camerapath == "" && (hd argv)[0] == '/') camerapath = hd argv; + if (hd argv == "nocache") usecache = 0; + argv = tl argv; + } + if (camerapath == "") + camerapath = "./"; + if (camerapath != "" && camerapath[len camerapath - 1] != '/') + camerapath[len camerapath] = '/'; + + r := display.image.r; +# if (r.dx() < 800 || r.dy() < 600) ssize = 2; + if (r.dx() < 400 || r.dy() < 300) ssize = 1; + maxsize = (r.dx(), r.dy()); + + if (ssize == 1) { + tkfont = "/fonts/charon/plain.tiny.font"; + tkfontb = "/fonts/charon/bold.tiny.font"; + tkfontf = "/fonts/pelm/unicode.8.font"; + } + else if (ssize == 2) { + tkfont = "/fonts/charon/plain.small.font"; + tkfontb = "/fonts/charon/bold.small.font"; + tkfontf = "/fonts/pelm/unicode.8.font"; + } + else { + tkfont = "/fonts/charon/plain.normal.font"; + tkfontb = "/fonts/charon/bold.normal.font"; + tkfontf = "/fonts/pelm/unicode.8.font"; + } + if ((sys->stat(tkfont)).t0 == -1) + tkfont = ""; + else tkfont = " -font " + tkfont; + if ((sys->stat(tkfontb)).t0 == -1) + tkfontb = ""; + else tkfontb = " -font " + tkfontb; + if ((sys->stat(tkfontf)).t0 == -1) + tkfontf = ""; + else tkfontf = " -font " + tkfontf; + + procimg = display.open("camproc.bit"); + loadimg = display.open("camload.bit"); + + spawn tkstuff(); +} + +# Tk stuff + +thumbscr := array[] of { + "frame .f", + "frame .fthumb -bg white", + "frame .f.finfo", + "frame .f.fsnap", + "menubutton .f.fsnap.fsettings.mb2 -text {Selected\n(0 files)} -menu .m2 @", + "menu .m2 @", + ".m2 add command -text {Select All} -command {send butchan selectall 1}", + ".m2 add command -text {Select None} -command {send butchan selectall 0}", + ".m2 add command -text {Invert Selection} -command {send butchan invert}", + ".m2 add command -text {Refresh Files} -command {send butchan refresh}", + "menu .m @", + + "frame .f.fsnap.fsettings -borderwidth 1 -relief raised", + "menubutton .f.fsnap.fsettings.mb -text {Settings} -menu .m &", + "button .f.fsnap.fsettings.b -text {Information} -command {send butchan info} &", + "grid .f.fsnap.fsettings.b -row 0 -column 0 -sticky ew", + "grid .f.fsnap.fsettings.mb -row 1 -column 0 -sticky ew", + "grid .f.fsnap.fsettings.mb2 -row 2 -column 0 -sticky ew", + + "frame .f.fsnap.fstore -borderwidth 1 -relief raised", + "label .f.fsnap.fstore.l1 -text { Photos taken: } @", + "label .f.fsnap.fstore.l2 -text { Remaining: } @", + "label .f.fsnap.fstore.l3 -text { } @", + "label .f.fsnap.fstore.l4 -text { } @", + "grid .f.fsnap.fstore.l1 -row 0 -column 0 -sticky w", + "grid .f.fsnap.fstore.l2 -row 1 -column 0 -sticky w", + "grid .f.fsnap.fstore.l3 -row 0 -column 1 -sticky w", + "grid .f.fsnap.fstore.l4 -row 1 -column 1 -sticky w", + + "frame .f.fsnap.ftime -borderwidth 1 -relief raised", + "label .f.fsnap.ftime.l1 -text {Local: } @", + "label .f.fsnap.ftime.l2 -text {Camera: } @", + "label .f.fsnap.ftime.l3", + "label .f.fsnap.ftime.l4", + "checkbutton .f.fsnap.ftime.cb -text {Set camera to local time} -variable time &", + "button .f.fsnap.ftime.b -text {refresh} -command {send butchan gettime} &", + "grid .f.fsnap.ftime.l1 -row 0 -column 0 -sticky w", + "grid .f.fsnap.ftime.l2 -row 1 -column 0 -sticky w", + "grid .f.fsnap.ftime.l3 -row 0 -column 1 -sticky w", + "grid .f.fsnap.ftime.l4 -row 1 -column 1 -sticky w", + "grid .f.fsnap.ftime.cb -row 2 -column 0 -columnspan 2", + "grid .f.fsnap.ftime.b -row 3 -column 0 -columnspan 2", + + "button .f.fsnap.b -text {Take Photo} -command {send butchan snap} &", + "grid columnconfigure .f.fsnap 2 -minsize 150", + "frame .f.fcom", + "frame .f.f1 -background #0d0d0d1a", + "canvas .f.f1.c1 -yscrollcommand {.f.f1.sb1 set} -height 255 -width 542 -bg white", + ".f.f1.c1 create window 0 0 -window .fthumb -anchor nw", + "scrollbar .f.f1.sb1 -command {.f.f1.c1 yview}", + +# "frame .f.f2", +# "canvas .f.f2.c1 -width 556 -height 304", +# ".f.f2.c1 create window 0 0 -window .f.fsnap -anchor nw", + + "grid .f.fsnap -column 0 -row 0", + "grid .f.f1 -column 0 -row 1", + "grid .f.f1.c1 -column 0 -row 0", + "grid .f.f1.sb1 -column 1 -row 0 -sticky ns", +# "grid .f.f2 -column 0 -row 0", +# "grid .f.f2.c1 -column 0 -row 0 -sticky ew", + "bind .Wm_t <ButtonPress-1> +{focus .}", + "bind .Wm_t.title <ButtonPress-1> +{focus .}", +}; + +lastpath := ""; + +Aitem: adt { + pname,desc: string; + dtype,factory: int; + read, location: string; + data: list of (string, int); +}; +LIST: con 0; +MINMAX: con 1; +OTHER: con 2; + +noabilities := 0; +abilities : array of Aitem; + +getdesc(l : list of string): list of string +{ + s := ""; + while(hd l != "min" && hd l != "items" && tl l != nil) { + s += hd l + " "; + l = tl l; + } + while (s[len s - 1] == ' ' || s[len s - 1] == '\n') + s = s[:len s -1]; + l = s :: l; + return l; +} + +inflist : list of (string, string); +ablmenu : array of string; + +getabilities() +{ + inflist = nil; + abilities = array[200] of Aitem; + fd := bufio->open(camerapath+"abilities", bufio->OREAD); + if (runwithoutcam) + fd = bufio->open("/usr/danny/camera/abls", bufio->OREAD); + i := 0; + for (;;) { + take := 0; + s := fd.gets('\n'); + if (s == "") break; + (n, lst) := sys->tokenize(s," ,:\t\n"); + abilities[i].data = nil; + abilities[i].read = ""; + if (lst != nil && len hd lst == 4) { + abilities[i].pname = hd lst; + lst = getdesc(tl lst); + abilities[i].desc = hd lst; + if (hd tl lst == "items") { + abilities[i].dtype = LIST; + abilities[i].factory = int hd tl tl tl tl lst; + noitems := int hd tl tl lst; + for (k := 0; k < noitems; k++) { + s = fd.gets('\n'); + (n2, lst2) := sys->tokenize(s,",:\t\n"); + name := hd lst2; + val := int hd tl lst2; + if (k == 0) { + if (abilities[i].pname == "ssiz") + abilities[i].factory = val; + else if (abilities[i].pname == "scpn") + abilities[i].factory = val; + } + if (val == abilities[i].factory && noitems > 1) name += " *"; + abilities[i].data = (name, val) :: abilities[i].data; + } + if (noitems < 2) { + inflist = (abilities[i].desc, (hd abilities[i].data).t0) :: inflist; + take = 1; + } + } + else if (hd tl lst == "min") { + abilities[i].dtype = MINMAX; + abilities[i].factory = int hd tl tl tl tl tl tl lst; + min := int hd tl tl lst; + max := int hd tl tl tl tl lst; + mul := 1; + while (max > 200000) { + min /= 10; + max /= 10; + mul *= 10; + } + abilities[i].data = ("min", min) :: abilities[i].data; + abilities[i].data = ("max", max) :: abilities[i].data; + abilities[i].data = ("mul", mul) :: abilities[i].data; + } + else { + inflist = (abilities[i].desc,list2string(tl lst)) :: inflist; + take = 1; + } + if (take || + abilities[i].desc == "Time Format" || + abilities[i].desc == "Date Format" || + abilities[i].desc == "File Type" || + contains(abilities[i].desc,"Video") || + contains(abilities[i].desc,"Media") || + contains(abilities[i].desc,"Sound") || + contains(abilities[i].desc,"Volume") || + contains(abilities[i].desc,"Slide") || + contains(abilities[i].desc,"Timelapse") || + contains(abilities[i].desc,"Burst") || + contains(abilities[i].desc,"Power") || + contains(abilities[i].desc,"Sleep")) + i--; + i++; + } + } + noabilities = i; +} + +isat(s: string, test: string): int +{ + num := -1; + if (len test > len s) return -1; + for (i := 0; i < (1 + (len s) - (len test)); i++) { + if (num == -1 && test == s[i:i+len test]) num = i; + } + return num; +} + +isat2(s: string, test: string): int +{ + num := -1; + if (len test > len s) return -1; + for (i := len s - len test; i >= 0; i--) { + if (num == -1 && test == s[i:i+len test]) num = i; + } + return num; +} + + +nomatches(s: string): int +{ + n := 0; + for (i := 0; i < noabilities; i++) { + test := abilities[i].desc; + if (len s <= len test && test[:len s] == s) n++; + } + return n; +} + +matches(s1,s2: string): int +{ + if (len s1 < len s2) return 0; + if (s1[:len s2] == s2) return 1; + return 0; +} + +biggestmatch(nm: int, s: string, l: int): string +{ + bigmatch := s; + match := s[:l]; + for (;;) { + if (bigmatch == match) break; + if (nomatches(bigmatch) == nm) return bigmatch; + p := isat2(bigmatch," "); + if (p < len match) break; + bigmatch = bigmatch[:p]; + } + return match; +} + +getabllist(): array of string +{ + los : list of string; + los = nil; + for (i := 0; i < noabilities; i++) { + p := 0; + p2 := 0; + nm : int; + for (;;) { + nm = -1; + tmpl := los; + while (tmpl != nil) { + if (matches(abilities[i].desc, hd tmpl)) nm = 0; + tmpl = tl tmpl; + } + if (nm == 0) break; + p += p2; + tmp := abilities[i].desc[p:]; + p2 = isat(tmp, " "); + if (p2 == -1) p2 = len tmp; + else p2++; + nm = nomatches(abilities[i].desc[:p+p2]); + if (nm <= 5) break; + } + if (nm > 0) { + listitem := biggestmatch(nm, abilities[i].desc,p+p2); + los = listitem :: los; + } + } + ar := array[len los] of string; + for (i = len ar - 1; i >= 0; i--) { + ar[i] = hd los; + los = tl los; + } + return ar; +} + +buildabilitiesframes(top: ref Tk->Toplevel) +{ + ablmenu = getabllist(); + tkcmd(top, ".m add command -text {Refresh Main Screen} -command {send butchan refreshstate}"); + tkcmd(top, ".m add command -text {Reset Camera} -command {send butchan reset}"); + for (k := 0; k < len ablmenu; k++) { + if (len ablmenu[k] > 4 && (ablmenu[k][:4] == "Zoom" || ablmenu[k][:5] == "Still")) + buildabilitiesframe(top,k,"butchan"); + else + tkcmd(top, ".m add command -text {"+ablmenu[k]+ + "} -command {send butchan abls "+string k+"}"); + } + tkcmd(top, "menu .mthumb "+tkfont); + tkcmd(top, ".mthumb add command -label {Selection (88 files)}"); + tkcmd(top, ".mthumb add separator"); + for (k = nothumbs; k < len menu; k++) + tkcmd(top, ".mthumb add command -text {"+menu[k].text+"} " + + "-command {send butchan}"); + +} + +buildabilitiesframe(top: ref Tk->Toplevel,k: int, chanout: string) +{ + nm := string nomatches(ablmenu[k]); + count2 := 0; + for (i := 0; i < noabilities; i++) { + if (matches(abilities[i].desc,ablmenu[k])) { + + frame : string; + case abilities[i].pname { + "scpn" or "ssiz" or "zpos" => + frame = ".f.fsnap.f"+abilities[i].pname; + tkcmd(top, "frame "+frame+" -borderwidth 1 -relief raised"); + * => + frame = ".f"; + if (count2 == 0) { + tkcmd(top, "frame "+frame); + tkcmd(top, "label "+frame+".l -text {"+ablmenu[k]+"}"+tkfontb); + tkcmd(top, "grid "+frame+".l -row 0 -column 0 -columnspan "+nm); + } + frame = frame + ".f"+string count2; + tkcmd(top, "frame "+frame+" -borderwidth 1 -relief raised"); + tkcmd(top, "grid "+frame+" -row 1 -column "+string count2+ " -sticky nsew"); + mul := getval(abilities[i].data,"mul"); + s := abilities[i].desc[len ablmenu[k]:]; + if (mul != 1 && abilities[i].dtype == MINMAX) + s += " (x"+string mul+")"; + tkcmd(top, "label "+frame+".l -text {"+s+"}"+tkfont); + tkcmd(top, "grid "+frame+".l -row 0 -column 0 -sticky nw"); + } + + if (abilities[i].dtype == MINMAX) { + abilities[i].location = frame+".sc"; + min := getval(abilities[i].data,"min"); + max := getval(abilities[i].data,"max"); + tkcmd(top, sys->sprint("scale %s.sc -to %d -from %d %s", frame,min,max,tkfont)); + tkcmd(top, "bind "+frame+".sc <ButtonPress-3> {send " + + chanout + " scaleval " + string i + " %X %Y}"); + tkcmd(top, "grid "+frame+".sc -row 1 -column 0"); + } + else if (abilities[i].dtype == LIST) { + tkcmd(top, "frame "+frame+".frb"); + tkcmd(top, "grid "+frame+".frb -row 1 -column 0"); + tmp := abilities[i].data; + row := 0; + while (tmp != nil) { + (name, val) := hd tmp; + s := sys->sprint("radiobutton %s.frb.rb%d -text {%s} -value %d -variable %s -height %d %s",frame,row,name,val,abilities[i].pname,24 - (3*(3-ssize)), tkfont); + tkcmd(top,s); + tkcmd(top, sys->sprint("grid %s.frb.rb%d -row %d -column 0 -sticky w", + frame,row,row)); + tmp = tl tmp; + row++; + } + } + tkcmd(top, "button "+frame+".bs -text {Set} -command "+ + "{send "+chanout+" set "+string i+"}"+butheight+tkfont); + tkcmd(top, "grid "+frame+".bs -row 2 -column 0 -sticky ew"); + if (abilities[i].dtype == MINMAX) { + tkcmd(top, "button "+frame+".bf -text {Default} -command "+ + "{send "+chanout+" setdef "+string i+"}"+butheight+tkfont); + tkcmd(top, "grid "+frame+".bf -row 3 -column 0 -sticky ew"); + } + count2++; + } + } +} + +getvaluescr := array[] of { + "frame .f -height 84 -width 114 -borderwidth 2 -relief raised", + "label .f.l1 -text {Enter Value:} @", + "entry .f.e1 -width 100 -bg white @", + "button .f.b1 -text { ok } -command {send chanin ok} &", + "button .f.b2 -text cancel -command {send chanin cancel} &", + "grid .f.l1 -column 1 -row 0 -columnspan 2 -padx 0 -sticky w", + "grid .f.e1 -column 1 -row 1 -columnspan 2 -padx 0 -pady 5", + "grid .f.b1 -column 1 -row 2 -padx 0", + "grid .f.b2 -column 2 -row 2 -padx 0", + "grid columnconfigure .f 1 -minsize 20", + "grid columnconfigure .f 2 -minsize 20", + "grid columnconfigure .f 3 -minsize 5", + "grid rowconfigure .f 0 -minsize 20", + "grid rowconfigure .f 1 -minsize 20", + "grid rowconfigure .f 2 -minsize 20", + "grid columnconfigure .f 0 -minsize 5", + "bind .f.e1 <Key> {send chanin key %s}", + "focus .f.e1", + "pack .f", + "update", +}; + +getvaluescreen(x,y: string): int +{ + x = string ((int x) - 55); + y = string ((int y) - 30); + (top, nil) := tkclient->toplevel(context, "-x "+x+" -y "+y, nil, tkclient->Plain); + chanin := chan of string; + tk->namechan(top, chanin, "chanin"); + for (tk1 := 0; tk1 < len getvaluescr; tk1++) + tkcmd(top, getvaluescr[tk1]); + tkclient->onscreen(top, "exact"); + tkclient->startinput(top, "kbd"::"ptr"::nil); + for(;;) { + alt { + s := <-top.ctxt.kbd => + tk->keyboard(top, s); + s := <-top.ctxt.ptr => + tk->pointer(top, *s); + inp := <- chanin => + if (inp == "ok") return int tkcmd(top, ".f.e1 get"); + else if (inp == "cancel") return -1; + else if (inp[:3] == "key") { + s := " "; + s[0] = int inp[4:]; + if (s[0] == '\n') return int tkcmd(top, ".f.e1 get"); + if (s[0] >= '0' && s[0] <= '9') { + tkcmd(top, ".f.e1 delete sel.first sel.last"); + tkcmd(top, ".f.e1 insert insert {"+s+"}; update"); + } + } + } + } +} + +infoscreen() +{ + (top, titlebar) := tkclient->toplevel(context, "", "Information", Tkclient->Hide); + tmp := inflist; + tkcmd(top, "frame .f"); + tkcmd(top, "label .f.l -text {Information}"); + tkcmd(top, "grid .f.l -row 0 -column 0 -columnspan 2"); + tkcmd(top, "frame .f.finfo -borderwidth 1 -relief raised"); + tkcmd(top, "grid .f.finfo"); + infrow := 0; + while (tmp != nil) { + infrow++; + s := string infrow; + (d1,d2) := hd tmp; + tkcmd(top, "label .f.finfo.l"+s+"1 -text {"+d1+"}"); + tkcmd(top, "label .f.finfo.l"+s+"2 -text {"+d2+"}"); + tkcmd(top, "grid .f.finfo.l"+s+"1 -row "+s+" -column 0 -sticky w"); + tkcmd(top, "grid .f.finfo.l"+s+"2 -row "+s+" -column 1 -sticky e"); + tmp = tl tmp; + } + tkcmd(top, "pack .f; update"); + tkclient->onscreen(top, nil); + tkclient->startinput(top, "kbd"::"ptr"::nil); + main: for(;;) { + alt { + s := <-top.ctxt.kbd => + tk->keyboard(top, s); + s := <-top.ctxt.ptr => + tk->pointer(top, *s); + title := <-top.ctxt.ctl or + title = <-top.wreq or + title = <- titlebar => + if (title == "exit") break main; + tkclient->wmctl(top, title); + } + } +} + +settingsscreen(k: int, ctlchan: chan of int) +{ + low := toplevels; + for (;low != nil; low = tl low) { + (tplvl, name, nil,nil) := hd low; + if (name == ablmenu[k]) { + tkcmd(tplvl, "raise .; focus .; update"); + ctlchan <-= DONE; + return; + } + } + pid := sys->pctl(0, nil); + (top, titlebar) := tkclient->toplevel(context, "", "Config", Tkclient->Appl); + chanin := chan of string; + tk->namechan(top,chanin, "chanin"); + buildabilitiesframe(top,k, "chanin"); + tkcmd(top,"bind .Wm_t <ButtonPress-1> +{focus .}"); + tkcmd(top,"bind .Wm_t.title <ButtonPress-1> +{focus .}"); + tkcmd(top, "pack .f; update"); + err := 0; + allread := 1; + l : list of int = nil; + for (i := 0; i < noabilities; i++) { + if (matches(abilities[i].desc, ablmenu[k])) { + l = i :: l; + if (abilities[i].read != "") + setmystate(top,i,abilities[i].read); + else + allread = 0; + } + } + tkclient->onscreen(top, nil); + tkclient->startinput(top, "kbd"::"ptr"::nil); + if (!allread) { + spawn workingscreen2(getcoords(top),pid, ctlchan,0); + ltmp := l; + for (;ltmp != nil; ltmp = tl ltmp) { + if (abilities[hd ltmp].read == "" && getstate(top, hd ltmp) == -1) { + err = 1; + break; + } + } + } + if (!err) + spawn settingsloop(top,chanin,titlebar,k,l); + ctlchan <-= DONE; +} + +settingsloop(top: ref Tk->Toplevel, chanin,titlebar: chan of string, k: int, abls: list of int) +{ + tkcmd(top, "focus .Wm_t"); + pid := sys->pctl(0,nil); + addtoplevel(top,ablmenu[k], abls, pid); + ctlchan := chan of int; + main: for(;;) { + alt { + s := <-top.ctxt.kbd => + tk->keyboard(top, s); + s := <-top.ctxt.ptr => + tk->pointer(top, *s); + inp := <- chanin => + tkcmd(top, "focus ."); + (n, lst) := sys->tokenize(inp, " \t\n"); + case hd lst { + "scaleval" => + i := int hd tl lst; + val := getvaluescreen(hd tl tl lst, hd tl tl tl lst); + if (val != -1) tkcmd(top, abilities[i].location+" set "+string val+";update"); + "set" or "setdef" => + if (working) + dialog(" Camera is busy! ", 2,-1,getcoords(top)); + else { + spawn set(top, int hd tl lst, hd lst, ctlchan); + <-ctlchan; + working = 0; + } + } + clearbuffer(chanin); + title := <-top.ctxt.ctl or + title = <-top.wreq or + title = <- titlebar => + if (title == "exit") break main; + tkclient->wmctl(top, title); + } + } + deltoplevel(top); +} + +clearbuffer(c: chan of string) +{ + tc := chan of int; + spawn timer(tc); + main: for (;;) alt { + del := <-c => ; + tick := <-tc => + break main; + } +} + +timer(tick: chan of int) +{ + sys->sleep(100); + tick <- = 1; +} + +getval(l: list of (string,int), s: string): int +{ + while (l != nil) { + (name,val) := hd l; + if (name == s) return val; + l = tl l; + } + return -2; +} + +list2string(l : list of string): string +{ + s := ""; + while (l != nil) { + s += " " + hd l; + l = tl l; + } + if (s != "") return s[1:]; + return s; +} + +JPG: con 0; +THUMB: con 1; + +Imgloaded: adt { + name: string; + imgtype: int; +}; + +nofiles := 0; +filelist := array[200] of string; +thumbimg := array[200] of ref draw->Image; +selected := array[200] of { * => 0 }; +noselected := 0; +fnew : list of int; +imgloaded : list of Imgloaded; +maxwidth, maxheight: int; +nothumbs := 0; + +nocamera(): int +{ + (n,dir) := sys->stat(camerapath+"ctl"); + if (n != -1) return 0; + return 1; +} + +startuptkstuff(top: ref Tk->Toplevel, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords,pid, ctlchan,1); + getabilities(); + (dirs,n) := readdir->init(camerapath+"thumb", readdir->NAME); + if (n == -1) nothumbs = 1; + buildabilitiesframes(top); + refreshfilelist(top,0); + ctlchan <-= DONE; +} + +tibuild := 0; +butheight := ""; + +tkstuff() +{ + if (!runwithoutcam && nocamera()) { + dialog("Cannot find camera!",0,-1,nilrect); + exit; + } + (win, titlebar) := tkclient->toplevel(context, "", "Camera", Tkclient->Appl); + tkcmd(win, "frame .test"); + if (tkcmd(win, ".test cget -bg") == "#ffffffff") + tibuild = 1; + tkcmd(win, "destroy .test"); + butheight = " -height "+string (16 + (5*tibuild) - (3*(3-ssize))); + butchan := chan of string; + tk->namechan(win, butchan, "butchan"); + for (tk1 := 0; tk1 < len thumbscr; tk1++) + tkcmd(win, thumbscr[tk1]); + coords = display.image.r; + ctlchan := chan of int; + imgloaded = nil; + + spawn startuptkstuff(win, ctlchan); + e := <- ctlchan; + if (e == KILLED) { + dialog("Cancel during load!",0,-1,coords); + exit; + } + working = 0; + spawn mainscreen(win, 1, ctlchan); + <- ctlchan; + working = 0; + + processing = 0; + tkcmd(win, "pack propagate . 0"); + resizemain(win,1); + tkcmd(win, "pack .f; update; focus ."); + coords = getcoords(win); + loadimg = nil; + tkclient->onscreen(win, nil); + tkclient->startinput(win, "kbd"::"ptr"::nil); + main: for (;;) { + alt { + s := <-win.ctxt.kbd => + tk->keyboard(win, s); + s := <-win.ctxt.ptr => + tk->pointer(win, *s); + inp := <-butchan => + tkcmd(win, "focus ."); + (n, lst) := sys->tokenize(inp, "\t\n "); + case hd lst { + + # Communicates internally + + "scaleval" => + i := int hd tl lst; + val := getvaluescreen(hd tl tl lst, hd tl tl tl lst); + if (val != -1) tkcmd(win, abilities[i].location+" set "+string val); + "info" => + spawn infoscreen(); + "unload" => + i := int hd tl lst; + for (k := 0; k < nofiles; k++) { + if (i == k || (i == -1 && selected[k])) { + delloaded(filelist[k],JPG); + delloaded(filelist[k],THUMB); + } + } + "invert" => + nf := 0; + for (i := 0; i < nofiles; i++) + selected[i] = 1 - selected[i]; + doselect(win); + "selectall" => + val := int hd tl lst; + for (i := 0; i < nofiles; i++) + selected[i] = val; + doselect(win); + "select" => + i := int hd tl lst; + selected[i] = 1 - selected[i]; + doselect(win); + "selectonly" => + i := int hd tl lst; + val := selected[i]; + for (k := 0; k < nofiles; k++) + selected[k] = 0; + if (noselected - val == 0) selected[i] = 1 - val; + else selected[i] = 1; + doselect(win); + "menu" => + i := int hd tl lst; + if (selected[i] && noselected > 1) i = -1; + title := "Selection ("+string noselected+" files)"; + if (i != -1) title = filelist[i]+".jpg"; + si := string i; + tkcmd(win, ".mthumb entryconfigure 0 -text {"+title+"}"); + for (k := nothumbs; k < len menu; k++) + tkcmd(win, ".mthumb entryconfigure "+string (2+k-nothumbs)+ + " -command {send butchan "+ menu[k].com+" "+si+"}"); + tkcmd(win, ".mthumb post "+hd tl tl lst+" "+hd tl tl tl lst); + * => + if (!processing) + spawn dealwithcamera(win, lst); + } + tkcmd(win, "update"); + clearbuffer(butchan); + title := <-win.ctxt.ctl or + title = <-win.wreq or + title = <-titlebar => + if (title == "exit") + break main; + err := tkclient->wmctl(win, title); + if (err == nil && title == "!size") { + (n, lst) := sys->tokenize(title, " "); + if (hd tl lst == ".") + resizemain(win,0); + } + coords = getcoords(win); + } + } + for (; toplevels != nil; toplevels = tl toplevels) { + (nil, nil, nil, pid) := hd toplevels; + if (pid != -1) + kill(pid); + } + while (imgloaded != nil) { + (fname, ftype) := hd imgloaded; + sys->remove(tmppath+fname+"."+string ftype+"~"); + imgloaded = tl imgloaded; + } + tkcmd(win, "destroy ."); + exit; +} + +dealwithcamera(win: ref Tk->Toplevel, lst: list of string) +{ + ctlchan := chan of int; + processing = 1; + case hd lst { + "gettime" => + spawn refreshtime(win, ctlchan); + <- ctlchan; + "show" => + spawn loadthumb(win,int hd tl lst,ctlchan); + <- ctlchan; + "snap" => + selected[nofiles+1] = 0; + spawn takephoto(win, ctlchan); + <- ctlchan; + working = 0; + if (fnew == nil) + break; + spawn waittilready(camerapath+"jpg/"+filelist[hd fnew]+".jpg", ctlchan); + e := <- ctlchan; + working = 0; + if (e == DONE) { + spawn loadnewthumb(win, ctlchan); + <- ctlchan; + working = 0; + } + "abls" => + spawn settingsscreen(int hd tl lst, ctlchan); + <- ctlchan; + "set" or "setdef" => + spawn set(win, int hd tl lst, hd lst, ctlchan); + <- ctlchan; + "del" => + spawn delete(win, int hd tl lst, ctlchan); + <- ctlchan; + "view" => + i := int hd tl lst; + unnew(win, i); + if (i == -1) multiview(); + else vw(i); + "refresh" => + spawn refresh(win, ctlchan); + <- ctlchan; + "refreshstate" => + spawn mainscreen(win, 0, ctlchan); + <- ctlchan; + "dnld" => + i := int hd tl lst; + unnew(win, i); + if (i == -1) multidownload(); + else dnld(i, ""); + "reset" => + if (dialog("reset camera to default settings?",1,-1,coords)) { + spawn resetcam(win,1, ctlchan); + <- ctlchan; + } + } + processing = 0; + working = 0; +} + +refresh(top: ref Tk->Toplevel, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords,pid, ctlchan,0); + refreshfilelist(top,1); + ctlchan <-= DONE; +} + +delete(top: ref Tk->Toplevel, i: int, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + ok : int; + s := ""; + loi : list of int; + loi = nil; + if (i == -1) { + for (k := 0; k < nofiles; k++) + if (selected[k]) s+= filelist[k]+".jpg\n"; + if (!dialog("Delete Selected files?\n\n"+s,1,-1,coords)) { + ctlchan <-= DONE; + return; + } + } + else if (!dialog("Delete "+filelist[i]+".jpg?",1,i,coords)) { + ctlchan <-= DONE; + return; + } + spawn workingscreen2(coords,pid, ctlchan,0); + s = ""; + for (k := 0; k < nofiles; k++) { + if ((i == -1 && selected[k]) || k == i) { + s += filelist[k]+".jpg "; + ok = sys->remove(camerapath+ + "jpg/"+filelist[k]+".jpg"); + if (ok == -1) s+="failed\n"; + else { + s+="ok\n"; + loi = k :: loi; + } + } + } + if (loi == nil && i != -1) { + dialog("cannot remove "+filelist[i]+".jpg?",0,i,coords); + ctlchan <-= DONE; + return; + } + while (loi != nil) { + delloaded(filelist[hd loi],JPG); + delloaded(filelist[hd loi],THUMB); + delselect(hd loi); + loi = tl loi; + } + refreshfilelist(top,0); + getstore(top); + if (i == -1) dialog("Files deleted:\n\n"+s,0,-1,coords); + ctlchan <-= DONE; +} + +delselect(n: int) +{ + for (i := n; i < nofiles - 1; i++) + selected[i] = selected[i+1]; + selected[nofiles - 1] = 0; +} + +doselect(top: ref Tk->Toplevel) +{ + n := 0; + for (i := 0; i < nofiles; i++) { + col := "white"; + if (selected[i]) { + col = "blue"; + n++; + } + tkcmd(top,".fthumb.p"+string i+" configure -bg "+col); + } + noselected = n; + s := " files"; + if (n == 1) s = " file"; + tkcmd(top, ".f.fsnap.fsettings.mb2 configure -text {Selected\n("+string n+s+")}"); +} + +takephoto(top: ref Tk->Toplevel, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords,pid, ctlchan,0); + fd := sys->open(camerapath+"ctl",sys->OWRITE); + if (fd != nil) { + e := sys->fprint(fd, "snap"); + if (e < 0) { + dialog("Could not take photo",0,-1,coords); + getstore(top); + } + else { + getstore(top); + n := nofiles; + for (i := 0; i < 5; i++) { + refreshfilelist(top,1); + sys->sleep(1000); + if (nofiles > n) + break; + } + } + } + ctlchan <-= DONE; +} + +unnew(top: ref Tk->Toplevel, i: int) +{ + if (fnew == nil) + return; + tmp : list of int = nil; + for (;fnew != nil; fnew = tl fnew) { + if (i == -1 && selected[hd fnew]) + i = hd fnew; + if (hd fnew == i) + tkcmd(top, ".fthumb.mb"+string hd fnew+" configure -fg black; update"); + else + tmp = hd fnew :: tmp; + } + fnew = tmp; +} + +refreshtime(top: ref Tk->Toplevel, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords,pid, ctlchan,0); + if (!samedate(top) && tkcmd(top, "variable time") == "1") settime(); + gettime(top); + ctlchan <-= DONE; +} + +addtoplevel(top: ref Tk->Toplevel, name: string, abls: list of int, pid: int) +{ + ltmp := toplevels; + isin := 0; + for (;ltmp != nil; ltmp = tl ltmp) { + (tplvl, nil, nil, nil) := hd ltmp; + if (tplvl == top) isin = 1; + } + if (!isin) + toplevels = (top, name, abls, pid) :: toplevels; +} + +deltoplevel(top: ref Tk->Toplevel) +{ + ltmp : list of (ref Tk->Toplevel, string, list of int, int) = nil;; + for (;toplevels != nil; toplevels = tl toplevels) { + (tplvl, nm, loi, p) := hd toplevels; + if (tplvl != top) + ltmp = (tplvl, nm, loi, p) :: ltmp; + } + toplevels = ltmp; +} + +resetcam(top: ref Tk->Toplevel, show: int, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords,pid, ctlchan,0); + for (i := 0; i < noabilities; i++) + setstate(i, string abilities[i].factory); + if (show) { + ltmp := toplevels; + for (;ltmp != nil; ltmp = tl ltmp) { + (tplvl, nm, loi, p) := hd ltmp; + for (; loi != nil; loi = tl loi) + setmystate(tplvl, hd loi, string abilities[hd loi].factory); + } + if (top != nil) + getstore(top); + } + ctlchan <-= DONE; +} + +set(top: ref Tk->Toplevel, i: int, s: string, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(getcoords(top),pid, ctlchan,0); + + val : string; + if (s == "setdef") { + val = string abilities[i].factory; + setmystate(top,i,val); + } + else { + if (abilities[i].dtype == MINMAX) { + val = tkcmd(top, abilities[i].location+" get"); + mul := getval(abilities[i].data, "mul"); + val = string (int val * mul); + } + else { + val = tkcmd(top, "variable "+abilities[i].pname); + } + } + + e := setstate(i,val); + if (e == 2) getstore(top); + else if (e == 0) + dialog("cannot communicate with camera",0,-1,coords); + ctlchan <-= DONE; +} + +setstate(i: int, val: string): int +{ + fd := sys->open(camerapath+"ctl",sys->OWRITE); + if (fd != nil) { + sys->fprint(fd, "%s %s",abilities[i].pname,val); + abilities[i].read = val; + if (abilities[i].pname == "ssiz" || abilities[i].pname == "scpn") return 2; + return 1; + } + else return 0; +} + +getfirst(s: string): string +{ + (n, lst) := sys->tokenize(s," \n\t"); + if (lst == nil) return ""; + return hd lst; +} + +getabl(pname: string): int +{ + for (i := 0; i < noabilities; i++) + if (abilities[i].pname == pname) return i; + return -1; +} + +getstate(top: ref Tk->Toplevel, i: int): int +{ + fd := sys->open(camerapath+"state", sys->OWRITE); + if (fd != nil) { + sys->fprint(fd ,"%s", abilities[i].pname); + sys->sleep(500); + fdi := bufio->open(camerapath+"state",sys->OREAD); + if (fdi != nil) { + s := fdi.gets('\n'); + if (s != nil) { + (n,lst) := sys->tokenize(s,":\n"); + val := hd tl lst; + setmystate(top,i,val); + } + return 0; + } + } + dialog("cannot communicate with camera",0,-1,coords); + return -1; +} + +setmystate(top: ref Tk->Toplevel, i: int, val: string) +{ + abilities[i].read = val; + if (abilities[i].dtype == LIST) + tkcmd(top, "variable "+abilities[i].pname+" "+val); + else if (abilities[i].dtype == MINMAX) { + mul := getval(abilities[i].data, "mul"); + tkcmd(top, abilities[i].location+" set "+string((int val)/mul)); + } + tkcmd(top, "update"); +} + +max(a,b: int): int +{ + if (a > b) return a; + return b; +} + +refreshfilelist(win: ref Tk->Toplevel, refresh: int): int +{ + if (refresh) { + fd := sys->open(camerapath+"ctl",sys->OWRITE); + if (fd == nil) { + dialog("cannot communicate with camera",0,-1,coords); + return -1; + } + else + sys->fprint(fd, "refresh"); + } + oldlist := filelist[:nofiles]; + for (i := 0; i < nofiles; i++) { + si := string i; + tk->cmd(win, "grid forget .fthumb.mb"+si+" .fthumb.p"+si); + tk->cmd(win, "destroy .fthumb.mb"+si+" .fthumb.p"+si+" .mthumb"+si); + } + (dirs,n) := readdir->init(camerapath+"jpg", readdir->NAME); + if (n == -1) + return -1; + nofiles = n; + row := 0; + col := 0; + nocols := -1; + w1 := int tkcmd(win, ".f.f1.c1 cget -width"); + w := 0; + fnew = nil; + for (i = 0; i < nofiles; i++) { + filelist[i] = dirs[i].name; + if (len filelist[i] > 3 && filelist[i][len filelist[i] - 4] == '.') + filelist[i] = filelist[i][:len filelist[i]-4]; + + isnew := 1; + for (k := 0; k < len oldlist; k++) { + if (filelist[i] == oldlist[k]) { + isnew = 0; + break; + } + } + si := string i; + tkcmd(win, "menubutton .fthumb.mb"+si+" -bg white " + + "-text {"+filelist[i]+".jpg} -menu .mthumb"+si+tkfontf); + if (isnew && refresh) { + fnew = i :: fnew; + tkcmd(win, ".fthumb.mb"+si+" configure -fg red"); + } + thumbimg[i] = display.newimage(Rect((0,0),(90,90)),draw->RGB24,0,int 16rffcc00ff); + e := tkcmd(win,"panel .fthumb.p"+si+" -borderwidth 2 -bg white"+ + " -height 90 -width 90 -relief raised"); + tk->putimage(win,".fthumb.p"+si, thumbimg[i],nil); + tkcmd(win, "bind .fthumb.p"+si+" <Double-Button-1> {send butchan view "+si+"}"); + tkcmd(win, "bind .fthumb.p"+si+" <ButtonPress-1> {send butchan selectonly "+si+"}"); + tkcmd(win, "bind .fthumb.p"+si+" <ButtonPress-2> {send butchan select "+si+"}"); + tkcmd(win, "bind .fthumb.p"+si+" <ButtonPress-3> {send butchan menu "+si+" %X %Y}"); + thisw := int tkcmd(win, ".fthumb.mb"+si+" cget -width"); + w += max(94, thisw); + if ((nocols == -1 && w >= w1-(col*2)) || col == nocols) { + nocols = col; + col = 0; + row+=2; + w = thisw; + } + if (col == 0) + tkcmd(win, "grid rowconfigure .fthumb "+string (row+1)+ + " -minsize "+string (105 - 2*(3-ssize))); + + tkcmd(win, "grid .fthumb.mb"+si+" -row "+string row+" -column "+string col); + tkcmd(win, "grid .fthumb.p"+si+" -row "+string (row+1)+" -column "+string col+" -sticky n"); + + tkcmd(win, "menu .mthumb"+si+tkfont); + for (k = nothumbs; k < len menu; k++) + tkcmd(win, ".mthumb"+si+" add command -text {"+menu[k].text+"} " + + "-command {send butchan "+menu[k].com+" "+si+"}"); + + if (isloaded(filelist[i],THUMB) && usecache) + loadthumbnail(win,i); + col++; + } + if (row == 0) + nocols = col; + doselect(win); + size := tkcmd(win, "grid size .fthumb"); + csize := int size[:isat(size, " ")]; + rsize := int size[isat(size, " ")+1:]; + if (csize > nocols) + tkcmd(win, "grid columndelete .fthumb "+string nocols+" "+string csize); + if (rsize > row+1) + tkcmd(win, "grid rowdelete .fthumb "+string (row+2)+" "+string rsize); + height := string (2 + int tkcmd(win, ".fthumb cget -height")); + width := tkcmd(win, ".f.f1.c1 cget -width"); + colsize : int; + if (nocols > 0) colsize = int width / nocols; + else colsize = int width; + for (i = 0; i < nocols; i++) + tkcmd(win, "grid columnconfigure .fthumb "+string i+" -minsize "+string colsize); + + tkcmd(win, ".f.f1.c1 configure -scrollregion { 0 0 "+width+" "+height+"}"); + tkcmd(win, "update"); + return 0; +} + +Mtype: adt { + text, com: string; +}; + +menu := array[] of { + Mtype ("Show Thumbnail", "show"), + Mtype ("Download", "dnld"), + Mtype ("View", "view"), + Mtype ("Delete", "del"), + Mtype ("Clear Cache", "unload"), + Mtype ("Refresh Files", "refresh"), +}; + +tkcmd(top: ref Tk->Toplevel, cmd: string): string +{ + if (cmd[len cmd - 1] == '$') + cmd = cmd[:len cmd - 1] + tkfontb; + else if (cmd[len cmd - 1] == '@') + cmd = cmd[:len cmd - 1] + tkfont; + if (cmd[len cmd - 1] == '&') + cmd = cmd[:len cmd - 1] + butheight+tkfont; + + e := tk->cmd(top, cmd); + if (e != "" && e[0] == '!') sys->print("tk error: '%s': %s\n",cmd,e); + return e; +} + +loadnewthumb(top: ref Tk->Toplevel, ctlchan: chan of int) +{ + pid := sys->pctl(0,nil); + spawn workingscreen2(coords,pid, ctlchan,0); + getstore(top); + for (tmp := fnew; tmp != nil; tmp = tl tmp) + loadthumbnail(top,hd tmp); + ctlchan <-= DONE; +} + +loadthumb(top: ref Tk->Toplevel, i: int, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords,pid, ctlchan,0); + if (i == -1) { + for (k := 0; k < nofiles; k++) + if (selected[k]) + if (loadthumbnail(top, k) != 0) break; + } + else loadthumbnail(top, i); + ctlchan <-= DONE; +} + +loadthumbnail(top: ref Tk->Toplevel, i: int): int +{ + fd : ref sys->FD; + if (usecache && isloaded(filelist[i],THUMB)) + fd = sys->open(tmppath+filelist[i]+"."+string THUMB+"~",sys->OREAD); + else fd = sys->open(camerapath+"thumb/"+filelist[i]+".bit",sys->OREAD); + if (fd == nil) { + if (usecache && isloaded(filelist[i],THUMB)) { + delloaded(filelist[i],THUMB); + return loadthumbnail(top,i); + } + else dialog("cannot open "+filelist[i]+".bit",0,-1,coords); + return -2; + } + image := display.readimage(fd); + if (image == nil) { + if (usecache && isloaded(filelist[i],THUMB)) { + delloaded(filelist[i],THUMB); + return loadthumbnail(top,i); + } + else dialog("Could not load thumbnail: "+filelist[i]+".jpg",0,-1,coords); + return -1; + } + else { + p := Point((90-image.r.max.x)/2,(90-image.r.max.y)/2); + thumbimg[i].draw(image.r.addpt(p), image,nil,(0,0)); + si := string i; + tkcmd(top,".fthumb.p"+si+" dirty"); + fd = nil; + n := -1; + if (usecache) { + fd = sys->create(tmppath+filelist[i]+"."+string THUMB+"~",sys->OWRITE,8r666); + n = display.writeimage(fd, image); + } + x := int tkcmd(top, ".fthumb.mb"+string i+" cget -actx"); + y := int tkcmd(top, ".fthumb.mb"+string i+" cget -acty"); + h := int tkcmd(top, ".fthumb.mb"+string i+" cget -height"); + x1 := int tkcmd(top, ".fthumb cget -actx"); + y1 := int tkcmd(top, ".fthumb cget -acty"); + tkcmd(top, ".f.f1.c1 see "+string (x-x1)+" " +string (y-y1)+ + " "+string (x-x1+90)+" " +string (y-y1+h+102)+"; update"); + if (!usecache || n == 0) imgloaded = (filelist[i],THUMB) :: imgloaded; + } + return 0; +} + +isloaded(name: string, ftype: int): int +{ + tmp := imgloaded; + while (tmp != nil) { + ic := hd tmp; + if (ic.name == name && ic.imgtype == ftype) return 1; + tmp = tl tmp; + } + return 0; +} + +delloaded(name: string, ftype: int) +{ + tmp : list of Imgloaded; + tmp = nil; + while (imgloaded != nil) { + ic := hd imgloaded; + if (ic.name != name || ic.imgtype != ftype) + tmp = ic :: tmp; + else sys->remove(tmppath+ic.name+"."+string ic.imgtype+"~"); + imgloaded = tl imgloaded; + } + imgloaded = tmp; +} + +dialog(msg: string, diagtype, img: int, r: Rect): int +{ + if (diagtype == 2) + diagtype = 0; + else + working = 0; + tmpimg : ref draw->Image; + out := 0; + title := "Dialog"; + if (diagtype == 0) title = "Alert!"; + (win, titlebar) := tkclient->toplevel(context, "" , title, Tkclient->Appl); + diagchan := chan of string; + tk->namechan(win, diagchan, "diagchan"); + tkcmd(win, "frame .f"); + tkcmd(win, "label .f.l -text {"+msg+"}"+tkfont); + tkcmd(win, "button .f.bo -text { ok } -command {send diagchan ok} "+butheight+tkfont); + tkcmd(win, "button .f.bc -text {cancel} -command {send diagchan cancel}"+butheight+tkfont); + if (img >= 0 && isloaded(filelist[img], THUMB) && usecache) { + fd := sys->open(tmppath+filelist[img]+"."+string THUMB+"~", sys->OREAD); + if (fd != nil) { + tmpimg = display.readimage(fd); + tkcmd(win,"panel .f.p -height "+string tmpimg.r.max.y+ + " -width "+string tmpimg.r.max.x+" -borderwidth 2 -relief raised"); + tk->putimage(win,".f.p", tmpimg, nil); + tkcmd(win, "grid .f.p -row 1 -column 0 -columnspan 2 -padx 5 -pady 5"); + } + } + tkcmd(win, "grid .f.l -row 0 -column 0 -columnspan 2 -padx 10 -pady 5"); + if (diagtype == 1) { + tkcmd(win, "grid .f.bo -row 2 -column 0 -padx 5 -pady 5"); + tkcmd(win, "grid .f.bc -row 2 -column 1 -padx 5 -pady 5"); + } + else tkcmd(win, "grid .f.bo -row 2 -column 0 -columnspan 2 -padx 5 -pady 5"); + if (!r.eq(nilrect)) + centrewin(win, r, 1); + else + tkcmd(win, "pack .f; focus .; update"); + tkclient->onscreen(win, "exact"); + tkclient->startinput(win, "kbd"::"ptr"::nil); + main: for (;;) { + alt { + s := <-win.ctxt.kbd => + tk->keyboard(win, s); + s := <-win.ctxt.ptr => + tk->pointer(win, *s); + inp := <-diagchan => + if (inp == "ok") { + out = 1; + break main; + } + if (inp == "cancel") + break main; + + title = <-win.ctxt.ctl or + title = <-win.wreq or + title = <-titlebar => + if (title == "exit") + break main; + else + tkclient->wmctl(win, title); + } + } + return out; +} + +snapscr := array[] of { + "label .f.fsnap.ltime -text {Date and Time} $", + "label .f.fsnap.lstore -text {Memory Status} $", + "label .f.fsnap.lzpos -text {Zoom} $", + "label .f.fsnap.lssiz -text {Resolution} $", + "label .f.fsnap.lscpn -text {Compression} $", + "grid .f.fsnap.ltime -row 0 -column 0 -sticky sw", + "grid .f.fsnap.lstore -row 0 -column 1 -sticky sw", + "grid .f.fsnap.lscpn -row 2 -column 0 -sticky sw", + "grid .f.fsnap.lssiz -row 2 -column 1 -sticky sw", + "grid .f.fsnap.lzpos -row 2 -column 2 -sticky sw", + + "grid .f.fsnap.ftime -row 1 -column 0 -sticky nsew", + "grid .f.fsnap.fstore -row 1 -column 1 -sticky nsew", + "grid .f.fsnap.fsettings -row 1 -column 2 -sticky nsew", + "grid .f.fsnap.fscpn -row 3 -column 0 -sticky nsew", + "grid .f.fsnap.fssiz -row 3 -column 1 -sticky nsew", + "grid .f.fsnap.fzpos -row 3 -column 2 -sticky nsew", + "grid .f.fsnap.b -row 4 -column 0 -columnspan 3", + "grid rowconfigure .f.fsnap 0 -minsize 30", + "grid rowconfigure .f.fsnap 2 -minsize 30", + "grid rowconfigure .f.fsnap 4 -minsize 30", + + "update", +}; + +mainscreen(win: ref Tk->Toplevel, opt: int, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords, pid, ctlchan, opt); + if (opt == 1) { + for (tk1 := 0; tk1 < len snapscr; tk1++) + tkcmd(win, snapscr[tk1]); + + gettime(win); + if (samedate(win)) tkcmd(win, "variable time 1; update"); + } + getstore(win); + lst := getabl("scpn") :: getabl("ssiz") :: getabl("zpos") :: nil; + if (getstate(win, hd tl tl lst) == 0); + if (getstate(win, hd tl lst) == 0); + getstate(win, hd lst); + if (opt == 1) { + addtoplevel(win, "", lst, -1); + height := tkcmd(win, ".f.fsnap cget -height"); + width := tkcmd(win, ".f.fsnap cget -width"); +# tkcmd(win, ".f.f2.c1 configure -scrollregion { 0 0 "+width+" "+height+"}"); +# tkcmd(win, ".f.f2.c1 configure -height "+height+"}"); + } + ctlchan <-= DONE; +} + +kill(pid: int) +{ + pctl := sys->open("/prog/" + string pid + "/ctl", Sys->OWRITE); + if (pctl != nil) + sys->write(pctl, array of byte "kill", len "kill"); +} + +gettime(win: ref Tk->Toplevel) +{ + tkcmd(win,".f.fsnap.ftime.l3 configure -text {}"+tkfont); + tkcmd(win,".f.fsnap.ftime.l4 configure -text {}"+tkfont); + fdi := bufio->open(camerapath+"date",sys->OREAD); + if (fdi != nil) { + s := fdi.gets('\n'); + if (s != nil) { + if (s[len s - 1] == '\n') s = s[:len s - 1]; + tm := daytime->local(daytime->now()); + time := sys->sprint("%d/%d/%d %d:%d:%d", tm.mon+1, tm.mday, tm.year-100, + tm.hour,tm.min,tm.sec); + ltime = addzeros(time); + ctime = addzeros(s[len "date is ":]); + tk->cmd(win,".f.fsnap.ftime.l3 configure -text {"+ltime+"}"); + tk->cmd(win,".f.fsnap.ftime.l4 configure -text {"+ctime+"}"); + } + } + if (len ltime < 16) + ltime = "??/??/?? ??:??:??"; + if (len ctime < 16) + ctime = "??/??/?? ??:??:??"; + tkcmd(win, "update"); +} + +addzeros(s: string): string +{ + s[len s] = ' '; + rs := ""; + start := 0; + isnum := 0; + for (i := 0; i < len s; i++) { + if (s[i] < '0' || s[i] > '9') { + if (isnum && i - start < 2) rs[len rs] = '0'; + rs += s[start:i+1]; + start = i+1; + isnum = 0; + } + else isnum = 1; + } + i = len rs - 1; + while (i >= 0 && rs[i] == ' ') i--; + return rs[:i+1]; +} + +samedate(win: ref Tk->Toplevel): int +{ + s1 := tkcmd(win, ".f.fsnap.ftime.l3 cget -text"); + s2 := tkcmd(win, ".f.fsnap.ftime.l4 cget -text"); + if (s1 == "" || s1 == "") return 0; + if (s1[:len s1 - 3] == s2[:len s2 - 3]) return 1; + return 0; +} + +settime() +{ + tm := daytime->local(daytime->now()); + fd := sys->open(camerapath+"date", sys->OWRITE); + if (fd != nil) { + sys->fprint(fd, "%s", addzeros(sys->sprint("%d/%d/%d %d:%d:%d" + ,tm.mon+1, tm.mday, tm.year-100, tm.hour,tm.min,tm.sec))); + } +} + +getstore(win: ref Tk->Toplevel) +{ + fdi := bufio->open(camerapath+"storage",sys->OREAD); + if (fdi != nil) { + for(i := 0; i < 3; i++) { + s := fdi.gets('\n'); + if (s == nil) break; + if (i > 0) { + (n,lst) := sys->tokenize(s,"\t\n:"); + val := string int hd tl lst; + if (i == 2 && val == "0") + tkcmd(win, ".f.fsnap.b configure -state disabled"); + else tkcmd(win, ".f.fsnap.b configure -state normal"); + tkcmd(win,".f.fsnap.fstore.l"+string (2+i)+" configure -text {"+val+" }"); + } + } + tkcmd(win, "update"); + } +} + +contains(s: string, test: string): int +{ + num :=0; + if (len test > len s) return 0; + for (i := 0; i < (1 + (len s) - (len test)); i++) { + if (test == s[i:i+len test]) num++; + } + return num; +} + +multidownload() +{ + getpath := selectfile->filename(context, + display.image, + "Multiple download to directory...", + nil, + lastpath); + if (getpath == "" || getpath[0] != '/' || getpath[len getpath - 1] != '/') + return; + s := ""; + for (k := 0; k < nofiles; k++) { + if (selected[k]) { + e := dnld(k,getpath); + if (e != 1) + s += filelist[k]+".jpg "; + if (e == 3) { + s += "cancelled\n"; + break; + } + else if (e == 0) + s += "failed\n"; + working = 0; + } + } + if (s != "") s = ":\n\n"+s; + dialog("Multiple download complete"+s,0,-1,coords); +} + +downloading := ""; + +dnld(i: int, path: string): int +{ + ctlchan := chan of int; + ctlchans := chan of string; + chanout := chan of string; + spawn downloadscreen(coords, i, ctlchans, chanout); + spawn download(i,path,ctlchan, ctlchans, chanout); + pid := <-ctlchan; + alt { + s := <-ctlchans => + chanout <-= "!done!"; + if (s == "kill") { + if (downloading != "") { + (n,lst) := sys->tokenize(downloading, " \t\n"); + for(;lst != nil; lst = tl lst) + sys->remove(hd lst); + } + kill(pid); + return 3; + } + else return dnld(i, "!"+s); + e := <-ctlchan => + chanout <-= "!show!"; + chanout <-= "!done!"; + return e; + } + return 0; +} + +filelenrefresh(filename: string): int +{ + fd := sys->open(camerapath+"ctl",sys->OWRITE); + if (fd != nil) { + sys->fprint(fd, "refresh"); + (n, dir) := sys->stat(filename); + if (n == -1) + return -1; + return int dir.length; + } + return -1; +} + +testfilesize(filename: string): int +{ + e := filelenrefresh(filename); + if (e == 0) { + e2 := dialog("Camera is still processing image\nwait until ready?",1,-1,coords); + if (e2 == 0) + return 0; + ctlchan := chan of int; + spawn waittilready(filename, ctlchan); + e3 := <- ctlchan; + working = 0; + if (e3 == KILLED) + return 0; + return testfilesize(filename); + } + else return e; +} + +waittilready(filename: string, ctlchan: chan of int) +{ + pid := sys->pctl(0, nil); + spawn workingscreen2(coords,pid,ctlchan,0); + for (;;) { + if (filelenrefresh(filename) != 0) + break; + sys->sleep(2000); + } + ctlchan <-= DONE; +} + +download(i: int, path: string, ctlchan: chan of int, ctlchans, chanout: chan of string) +{ + ctlchan <-= sys->pctl(0, nil); + downloading = ""; + savename : string; + if (path == "") { + savename = selectfile->filename(context, + display.image, + "Save "+filelist[i]+".jpg to directory...", + "*.jpg" :: "*.jpeg" :: nil, + lastpath); + if (savename == "" || savename[0] != '/') { + ctlchan <-= 0; + return; + } + } + else savename = path; + + # Used when retrying due to cache copy failing + if (savename[0] == '!') { + delloaded(filelist[i],JPG); + savename = savename[1:]; + path = ""; + } + confirm := 1; + # Don't confirm overwrite + if (savename[0] == '$') { + confirm = 0; + savename = savename[1:]; + } + + if (savename[len savename - 1] == '/') + savename += filelist[i]+".jpg"; + + if (!hasext(savename, ".jpg")) + savename += ".jpg"; + + p := isat2(savename,"/"); + lastpath = savename[:p+1]; + + filename := camerapath+"jpg/"+filelist[i]+".jpg"; + filesize := testfilesize(filename); + cached := 0; + if (filesize > 0 && isloaded(filelist[i],JPG) && usecache) { + cachefilename := tmppath+filelist[i]+"."+string JPG+"~"; + if (testfilesize(cachefilename) == filesize) { + cached = 1; + filename = cachefilename; + } + else delloaded(filelist[i],JPG); + } + fd := sys->open(filename, sys->OREAD); + if (filesize < 1 || fd == nil) { + ctlchan <-= -1; + return; + } + + read := 0; + cancel : int; + buf : array of byte; + fd2, fd3 : ref sys->FD = nil; + cachename := tmppath+filelist[i]+"."+string JPG+"~"; + if (confirm) (fd2, cancel) = create(savename, coords); + else fd2 = sys->create(savename,sys->OWRITE, 8r666); + if (fd2 == nil) { + ctlchan <-= cancel; + return; + } + if (usecache && !cached) + fd3 = sys->create(cachename,sys->OWRITE,8r666); + chanout <-= "!show!"; + chanout <-= "l2 Downloading..."; + chanout <-= "pc 0"; + n : int; + downloading = savename; + if (fd3 != nil) + downloading += " "+cachename; + loop: for(;;) { + rlen := 8192; + if (read + rlen >= filesize) rlen = filesize - read; + buf = array[rlen] of byte; + n = sys->read(fd,buf,len buf); + read += n; + sout := "pc "+string ( (100*read)/filesize); + chanout <-= sout; + if (n < 1) break loop; + written := 0; + while (written < n) { + n2 := sys->write(fd2,buf,n); + if (n2 < 1) break loop; + if (fd3 != nil) sys->write(fd3,buf,n); + written += n2; + } + } + chanout <-= "pc 100"; + downloading = ""; + fd = nil; + fd2 = nil; + if (read < filesize || n == -1) { + if (cached) { + ctlchans <-= savename; + return; + } + sys->remove(savename); + sys->remove(cachename); + if (path == "") + dialog(sys->sprint("Download Failed: %s.jpg\nread %d of %d bytes\n", + filelist[i],read,filesize), 0, i,coords); + ctlchan <-= 0; + return; + } + + # save it in cache + if (usecache) + imgloaded = (filelist[i],JPG) :: imgloaded; + if (path == "") dialog(filelist[i]+".jpg downloaded",0,i,coords); + ctlchan <-= 1; +} + +downloadscr := array[] of { + "frame .f -borderwidth 2 -relief raised", + "label .f.l1 -text { } @", + "label .f.l2 -text {Waiting...} @", + "button .f.b -text {Cancel} -command {send ctlchans kill} &", + "grid .f.l1 -row 0 -column 0 -columnspan 2 -pady 5", + "grid .f.l2 -row 2 -column 1 -sticky w -padx 10", + "grid .f.p -row 3 -column 1 -columnspan 1 -padx 10", + "grid .f.b -row 4 -column 0 -pady 5 -columnspan 2", +}; + +downloadscreen(r: Rect, i: int, ctlchans, chanin: chan of string) +{ + working = 1; + <- chanin; + (top, nil) := tkclient->toplevel(context,"", nil, tkclient->Plain); + progr := Rect((0,0),(100,15)); + imgbg := display.newimage(progr,draw->CMAP8,1,draw->Black); + black := display.newimage(progr,draw->CMAP8,1,draw->Black); + white := display.newimage(progr,draw->CMAP8,1,draw->White); + imgfg := display.newimage(progr,draw->CMAP8,1,draw->Blue); + tkcmd(top, "panel .f.p -width 100 -height 15 -bg white -borderwidth 2 - relief raised"); + tk->putimage(top, ".f.p",imgbg,nil); + tk->namechan(top, ctlchans, "ctlchans"); + for (tk1 := 0; tk1 < len downloadscr; tk1++) + tkcmd(top, downloadscr[tk1]); + tmpimg : ref Image = nil; + if (i >= 0 && isloaded(filelist[i], THUMB) && usecache) + tmpimg = display.open(tmppath+filelist[i]+"."+string THUMB+"~"); + if (tmpimg == nil) + tmpimg = procimg; + if (tmpimg != nil) { + w := tmpimg.r.dx(); + h := tmpimg.r.dy(); + tkcmd(top, "panel .f.p2 -width "+string w+" -height "+string h+ + " -borderwidth 2 -relief raised"); + tk->putimage(top, ".f.p2", tmpimg, nil); + tkcmd(top, "grid .f.p2 -row 2 -column 0 -rowspan 2 -sticky e"); + tkcmd(top, "grid columnconfigure .f 0 -minsize "+string (w + 14)); + } + + tkcmd(top, ".f.l1 configure -text {"+filelist[i]+".jpg}"); + centrewin(top,r,1); + oldcoords := coords; + tkclient->onscreen(top, "exact"); + tkclient->startinput(top, "kbd"::"ptr"::nil); + + main: for (;;) { + alt { + s := <-top.ctxt.kbd => + tk->keyboard(top, s); + s := <-top.ctxt.ptr => + tk->pointer(top, *s); + text := <-chanin => + if (!oldcoords.eq(coords)) { + centrewin(top,coords,0); + oldcoords = coords; + } + if (text == "!done!") break main; + if (text[:2] == "pc") { + val := int text[3:]; + imgbg.draw(((0,0),(val,15)), imgfg,nil,(0,0)); + if (val != 100) + imgbg.draw(((val+1,0),(100,15)), black,nil,(0,0)); + imgbg.text((42,1),white,(0,0),font, text[3:]+"%"); + tkcmd(top,".f.p dirty; update"); + } + else if (text[:2] == "l2") + tkcmd(top, ".f.l2 configure -text {"+text[3:]+"}; update"); + } + } + working = 0; +} + +centrewin(top: ref Tk->Toplevel, r: Rect, first: int) +{ + s := ""; + if (first) + s = "pack .f;"; + w := int tkcmd(top, ".f cget -width"); + h := int tkcmd(top, ".f cget -height"); + tmp := tk->cmd(top, ".Wm_t cget -height"); + if (tmp != "" && tmp[0] != '!') { + h += int tmp; + s += "focus .;"; + } + px := r.min.x + ((r.max.x - r.min.x - w) / 2); + py := r.min.y + ((r.max.y - r.min.y - h) / 2); + tkcmd(top, ". configure -x "+string px+" -y "+string py); + tkcmd(top, s+"raise .; update"); +} + +workingscr2 := array[] of { + "frame .f -borderwidth 2 -relief raised", + "label .f.l3 -text { } -width 220 -height 2", + "label .f.l -text {Please Wait} @", + "label .f.l2 -text {|} -width 20 @", + "button .f.b -text {Cancel} -command {send chanin kill} &", + "grid .f.l -row 1 -column 0 -sticky e", + "grid .f.l2 -row 1 -column 1 -sticky w", + "grid .f.b -pady 5 -row 3 -column 0 -columnspan 2", + "grid .f.l3 -row 4 -column 0 -columnspan 2", + "grid rowconfigure .f 1 -minsize 80", +}; + +workingscreen2(r : Rect, pid: int, ctlchan: chan of int, loading: int) +{ + (top, nil) := tkclient->toplevel(context,"",nil, tkclient->Plain); + chanin := chan of string; + tk->namechan(top, chanin, "chanin"); + for (tk1 := 0; tk1 < len workingscr2; tk1++) + tkcmd(top, workingscr2[tk1]); + + if (loading) { +# loadimg := display.open("camload.bit"); + if (loadimg != nil) { + w := loadimg.r.dx(); + h := loadimg.r.dy(); + tkcmd(top, "panel .f.p -width "+string w+" -height "+string h+ + " -borderwidth 2 -relief raised"); + tk->putimage(top, ".f.p", loadimg, nil); + tkcmd(top, "grid .f.p -row 2 -column 0 -columnspan 2 -pady 5 -padx 20"); + tkcmd(top, "grid forget .f.l .f.l2; grid rowconfigure .f 1 -minsize 20"); + } + } + else { + if (procimg != nil) { + w := procimg.r.dx(); + h := procimg.r.dy(); + tkcmd(top, "panel .f.p -width "+string w+" -height "+string h+ + " -borderwidth 2 -relief raised"); + tk->putimage(top, ".f.p", procimg, nil); + tkcmd(top, "grid .f.p -row 2 -column 0 -columnspan 2"); + tkcmd(top, "grid rowconfigure .f 1 -minsize 30"); + tkcmd(top, "grid rowconfigure .f 2 -minsize 50"); + } + } + + centrewin(top,r,1); + spawn workingupdate(top,chanin); + tkclient->onscreen(top, "exact"); + tkclient->startinput(top, "kbd"::"ptr"::nil); + + main: for (;;) { + alt { + s := <-top.ctxt.kbd => + tk->keyboard(top, s); + s := <-top.ctxt.ptr => + tk->pointer(top, *s); + inp := <-chanin => + if (inp == "done") break main; + if (inp == "kill") { + working = 0; + if (pid != -1) kill(pid); + ctlchan <-= KILLED; + <-chanin; + break main; + } + } + } +} + +workingupdate(top: ref Tk->Toplevel, chanout: chan of string) +{ + show := array[] of { "/", "-", "\\\\", "|", }; + if (working) { + chanout <-= "done"; + return; + } + working = 1; + oldcoords := coords; + hidden := 0; + loop: for(;;) { + for (i := 0; i < 4; i++) { + sys->sleep(100); + tkcmd(top, ".f.l2 configure -text {"+show[i]+"}; update"); + if (!working) break loop; + if (!oldcoords.eq(coords)) { + centrewin(top, coords,0); + oldcoords = coords; + } + } + } + chanout <-= "done"; +} + +scrollx := 0; +scrolly := 0; + +resizemain(top: ref Tk->Toplevel, init: int) +{ + h, w: int; + if (init) { + growheight(top, 4000); + h = int tkcmd(top, ".f.fsnap cget -height") + + int tkcmd(top, ".Wm_t cget -height") + + 2 * (124 - (5*(3-ssize))); + if (h > display.image.r.dy()) + h = display.image.r.dy(); + w = display.image.r.dx(); + } + else { + r := tk->rect(top, ".", 0); + h = r.dy(); + w = r.dx(); + } + + ht := int tkcmd(top, ".Wm_t cget -height"); + + hf := int tkcmd(top, ".f cget -height"); + wf := int tkcmd(top, ".f cget -width"); + wsb := int tkcmd(top, ".f.f1.sb1 cget -width"); + + growwidth(top, w - 4); + ws := int tkcmd(top, ".f.fsnap cget -width"); + if (w > ws + 4) + w = ws + 4; + shrinkwidth(top,w - 4); + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (w < ws || init) + w = ws + 4; + + hmax := ((3*(h - ht))/5) - 4; + growheight(top, hmax); + shrinkheight(top, hmax); + hs := int tkcmd(top, ".f.fsnap cget -height"); + + hmb := int tkcmd(top, ".f.fsnap.fsettings.mb cget -height"); + if (h < ht+hs + 107 + hmb) h = ht+hs+107 + hmb; + +# hc2 = int tkcmd(top, ".f.fsnap cget -height"); + wc2 := int tkcmd(top, ".f.fsnap cget -width"); + + hc1 := h - ht - hs - 4; + wc1 := w-wsb-4; +# wc1 = wc2 - wsb; + tkcmd(top, ".f.f1.c1 configure -height "+string hc1+" -width "+string wc1); +# tkcmd(top, ".f.f2.c1 configure -height "+string hc2+" -width "+string wc2); + if (w < wc2 + 4) + w = wc2 + 4; + ws = int tkcmd(top, ".f.fsnap cget -width"); + hs = int tkcmd(top, ".f.fsnap cget -height"); + + tkcmd(top, ". configure -height "+string h+" -width "+string w+"; update"); + refreshfilelist(top, 0); +} + +growwidth(top: ref Tk->Toplevel, wc2: int) +{ + ws := int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 > ws && reducew[2]) { + tkcmd(top, ".f.fsnap.ftime.l1 configure -text {Local:}"); + tkcmd(top, ".f.fsnap.ftime.l2 configure -text {Camera:}"); + tkcmd(top, ".f.fsnap.ftime.cb configure -text {Set to local time}"); + reducew[2] = 0; + } + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 > ws && reducew[1]) { + tkcmd(top, ".f.fsnap.ftime.l3 configure -text {"+ltime+"}"); + tkcmd(top, ".f.fsnap.ftime.l4 configure -text {"+ctime+"}"); + tkcmd(top, ".f.fsnap.ftime.cb configure -text {Set camera to local time}"); + reducew[1] = 0; + } + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 > ws && reducew[0]) { + tkcmd(top, ".f.fsnap.fstore.l1 configure -text { Photos taken:}"); + reducew[0] = 0; + } + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 > ws) { + wfs += wc2 - ws; + if (wfs > 125-(20*(3-ssize))) wfs = 125-(20*(3-ssize)); + tkcmd(top, "grid columnconfigure .f.fsnap 2 -minsize "+string wfs); + } +} + +growheight(top: ref Tk->Toplevel, hc2: int) +{ + hs := int tkcmd(top, ".f.fsnap cget -height"); + if (hc2 > hs) { + tk->cmd(top, "grid .f.fsnap.fsettings.mb2 -row 2 -column 0 -sticky ew"); + tk->cmd(top, "grid .f.fsnap.ftime.cb -row 2 -column 0 -columnspan 2"); + tk->cmd(top, "grid .f.fsnap.ftime.b -row 3 -column 0 -columnspan 2"); + } + hs = int tkcmd(top, ".f.fsnap cget -height"); + if (hc2 > hs) { + hsc := int tkcmd(top, ".f.fsnap.fzpos.sc cget -height"); + hsc += hc2 - hs; + if (hsc > 88-(10*(3-ssize))) hsc = 88-(10*(3-ssize)); + tkcmd(top, ".f.fsnap.fzpos.sc configure -height "+string hsc); + } + hs = int tkcmd(top, ".f.fsnap cget -height"); + if (hc2 > hs) { + hfs += hc2 - hs; + if (hfs > 30 - (5*(3-ssize))) hfs = 30- (5*(3-ssize)); + tkcmd(top, "grid rowconfigure .f.fsnap 0 -minsize "+string hfs); + tkcmd(top, "grid rowconfigure .f.fsnap 2 -minsize "+string hfs); + tkcmd(top, "grid rowconfigure .f.fsnap 4 -minsize "+string hfs); + } +} + +shrinkheight(top: ref Tk->Toplevel, hc2: int) +{ + hs := int tkcmd(top, ".f.fsnap cget -height"); + if (hc2 < hs) { + hfs -= hs - hc2; + if (hfs < 15) hfs = 15; + tkcmd(top, "grid rowconfigure .f.fsnap 0 -minsize "+string hfs); + tkcmd(top, "grid rowconfigure .f.fsnap 2 -minsize "+string hfs); + tkcmd(top, "grid rowconfigure .f.fsnap 4 -minsize "+string hfs); + } + hs = int tkcmd(top, ".f.fsnap cget -height"); + if (hc2 < hs) { + hsc := int tkcmd(top, ".f.fsnap.fzpos.sc cget -height"); + hsc -= hs - hc2; + if (hsc < 55-(5*(3-ssize))) hsc = 55-(5*(3-ssize)); + tkcmd(top, ".f.fsnap.fzpos.sc configure -height "+string hsc); + } + hs = int tkcmd(top, ".f.fsnap cget -height"); + if (hc2 < hs) { + tk->cmd(top, "grid forget .f.fsnap.fsettings.mb2"); + tk->cmd(top, "grid forget .f.fsnap.ftime.cb"); + tk->cmd(top, "grid forget .f.fsnap.ftime.b"); + } +} + +shrinkwidth(top: ref Tk->Toplevel, wc2: int) +{ + ws := int tkcmd(top, ".f.fsnap cget -width"); + wib := int tkcmd(top, ".f.fsnap.fsettings.b cget -width"); + if (wc2 < ws) { + diff := ws - wc2; + wfs -= diff; + if (wfs < wib) wfs = wib; + tkcmd(top, "grid columnconfigure .f.fsnap 2 -minsize "+string wfs); + } + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 < ws) { + tkcmd(top, ".f.fsnap.fstore.l1 configure -text { Taken:}"); + reducew[0] = 1; + } + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 < ws) { + tkcmd(top, ".f.fsnap.ftime.l3 configure -text {"+ltime[len ltime - 8:]+"}"); + tkcmd(top, ".f.fsnap.ftime.l4 configure -text {"+ctime[len ctime - 8:]+"}"); + tkcmd(top, ".f.fsnap.ftime.cb configure -text {Set to local time}"); + reducew[1] = 1; + } + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 < ws) { + tkcmd(top, ".f.fsnap.ftime.l1 configure -text {C:}"); + tkcmd(top, ".f.fsnap.ftime.l2 configure -text {}"); + tkcmd(top, ".f.fsnap.ftime.l3 configure -text {"+ctime[len ctime - 17:len ctime - 8]+"}"); + tkcmd(top, ".f.fsnap.ftime.cb configure -text {Set local}"); + reducew[2] = 1; + } + ws = int tkcmd(top, ".f.fsnap cget -width"); + if (wc2 > ws) { + wfs = 125-(20*(3-ssize)); + tkcmd(top, "grid columnconfigure .f.fsnap 2 -minsize "+string wfs); + } +} + +ltime, ctime: string; +wfs := 150; +hfs := 30; +reducew := array[10] of { * => 0 }; + +getcoords(top: ref Tk->Toplevel): Rect +{ + h := int tkcmd(top, ". cget -height"); + w := int tkcmd(top, ". cget -width"); + x := int tkcmd(top, ". cget -actx"); + y := int tkcmd(top, ". cget -acty"); + r := Rect((x,y),(x+w,y+h)); + return r; +} + +viewscr := array[] of { + "frame .f -bg", + "canvas .f.c -yscrollcommand {.f.sy set} -xscrollcommand {.f.sx set} -height 300 -width 500", + "scrollbar .f.sx -command {.f.c xview} -orient horizontal", + "scrollbar .f.sy -command {.f.c yview}", + "grid .f.c -row 0 -column 0", + "grid .f.sy -row 0 -column 1 -sticky ns", + "grid .f.sx -row 1 -column 0 -sticky ew", + "bind .Wm_t <ButtonPress-1> +{focus .}", + "bind .Wm_t.title <ButtonPress-1> +{focus .}", + "pack propagate . 0", + "menu .m @", + ".m add command -text {Save As...}", + ".m add separator", + ".m add command -text {bit} -command {send butchan save bit}", + ".m add command -text {jpeg} -command {send butchan save jpg}", + +}; + +resizeview(top: ref Tk->Toplevel, wp,hp: int) +{ + w := int tkcmd(top, ". cget -width"); + h := int tkcmd(top, ". cget -height"); + hs := int tkcmd(top, ".f.sx cget -height"); + ws := int tkcmd(top, ".f.sy cget -width"); + ht := int tkcmd(top, ".Wm_t cget -height"); + wc := w - ws - 4; + hc := h - hs - ht - 6; + wpc := wc - wp; + hpc := hc - hp; + if (wpc > 0) { + wc -= wpc; + w -= wpc; + } + if (hpc > 0) { + hc -= hpc; + h -= hpc; + } + tkcmd(top, ". configure -height "+string h+" -width "+string w); + tkcmd(top, ".f.c configure -height "+string hc+" -width "+string wc); + tkcmd(top, "update"); +} + +multiview() +{ + s := ""; + for (k := 0; k < nofiles; k++) { + if (selected[k]) { + e := vw(k); + if (e != 0) + s += filelist[k]+".jpg "; + if (e == 3) { + s += "cancelled\n"; + break; + } + else if (e == -1) + s += "failed\n"; + } + } + if (s != "") + dialog("Multiple view complete:\n\n"+s,0,-1,coords); +} + +vw(i: int): int +{ + # raise window if it is already open + low := toplevels; + for(; low != nil; low = tl low) { + (tplvl, name, nil, nil) := hd low; + if (filelist[i]+".jpg" == name) { + tkcmd(tplvl, "raise .; focus .; update"); + return 0; + } + } + + ctlchan := chan of int; + ctlchans := chan of string; + chanout := chan of string; + chanin := chan of string; + spawn downloadscreen(coords, i, ctlchans, chanout); + chanout <-= "!show!"; + spawn view(i,ctlchan, chanin, chanout); + pid := <-ctlchan; + killed := 0; + for (;;) alt { + s := <-ctlchans => + if (s == "kill") { + chanin <-= "kill"; + killed = 1; + } + e := <-ctlchan => + chanout <-= "!done!"; + if (killed) + return 3; + if (e == -1) + dialog(sys->sprint("Cannot read file: %s.jpg\n%r",filelist[i]),0,i,coords); + if (e == -2) return vw(i); + else return e; + } + return 0; +} + +view(i: int, ctlchan: chan of int, chanin, chanout: chan of string) +{ + ctlchan <-= sys->pctl(0, nil); + titlename := filelist[i]+".jpg"; + + filename := camerapath+"jpg/"+filelist[i]+".jpg"; + filesize := testfilesize(filename); + cached := 0; + if (filesize > 0 && isloaded(filelist[i],JPG) && usecache) { + cachefilename := tmppath+filelist[i]+"."+string JPG+"~"; + if (testfilesize(cachefilename) == filesize) { + cached = 1; + filename = cachefilename; + } + else delloaded(filelist[i],JPG); + } + if (filesize < 1) { + ctlchan <-= -1; + return; + } + + img: ref Image; + cachepath := ""; + if (!cached && usecache) + cachepath = tmppath+filelist[i]+"."+string JPG+"~"; + img = readjpg->jpg2img(filename, cachepath, chanin, chanout); + if(img == nil) { + if (cachepath != nil) + sys->remove(cachepath); + if (!cached) + ctlchan <-= -1; + else { + delloaded(filelist[i], JPG); + ctlchan <-= -2; + } + return; + } + else { + chanout <-= "l2 Displaying"; + if (cachepath != "") + imgloaded = (filelist[i], JPG) :: imgloaded; + (t, titlechan) := tkclient->toplevel(context, "", titlename, Tkclient->Appl); + butchan := chan of string; + tk->namechan(t, butchan, "butchan"); + tkcmd(t, "focus .Wm_t; update"); + for (tk1 := 0; tk1 < len viewscr; tk1++) + tkcmd(t, viewscr[tk1]); + w := img.r.dx(); + h := img.r.dy(); + tkcmd(t, "panel .p -width "+string w+" -height "+string h); + tk->putimage(t, ".p",img,nil); + tkcmd(t, "bind .p <ButtonPress-2> {send butchan move %X %Y}"); + tkcmd(t, "bind .p <ButtonRelease-2> {send butchan release}"); + tkcmd(t, "bind .p <ButtonPress-3> {send butchan menu %X %Y}"); + tkcmd(t, ".f.c create window 0 0 -window .p -anchor nw"); + tkcmd(t, ".f.c configure -scrollregion {0 0 "+string w+" "+string h+"}"); + ctlchan <-= 0; + addtoplevel(t,titlename,nil, sys->pctl(0,nil)); + + h1 := 300; + w1 := 500; + ht := int tkcmd(t, ".Wm_t cget -height"); + if (h1 > display.image.r.dy() - ht) h1 = display.image.r.dy() - ht; + if (w1 > display.image.r.dx()) w1 = display.image.r.dx(); + tkcmd(t, ". configure -width "+string w1+" -height "+string h1); + resizeview(t,w,h); + tkcmd(t, "pack .f; update"); + scrolling := 0; + origin := Point (0,0); + tkclient->onscreen(t, nil); + tkclient->startinput(t, "kbd"::"ptr"::nil); + + loop: for(;;) alt{ + s := <-t.ctxt.kbd => + tk->keyboard(t, s); + s := <-t.ctxt.ptr => + tk->pointer(t, *s); + inp := <- butchan => + (n, lst) := sys->tokenize(inp, " \t\n"); + case hd lst { + "save" => + ftype := "."+hd tl lst; + savename := selectfile->filename(context, + display.image, + "Save "+filelist[i]+ftype+" to directory...", + "*"+ftype :: nil, + lastpath); + if (savename != "" && savename[0] == '/') { + lastpath = savename[:isat2(savename,"/")+1]; + if (savename[len savename - 1] == '/') + savename += filelist[i]+ftype; + + if (!hasext(savename, ftype)) + savename += ftype; + (fd, cancel) := create(savename, getcoords(t)); + if (fd != nil) { + n2 := -1; + if (ftype == ".bit") + n2 = display.writeimage(fd,img); + if (ftype == ".jpg") + n2 = 1 - dnld(i, "$"+savename); + if (n2 == 0) { + dialog(filelist[i]+ftype+" saved",0,i,getcoords(t)); + break; + } + dialog("Could not save: "+filelist[i]+ftype,0,i,getcoords(t)); + } + if (!cancel) + dialog("Could not save: "+filelist[i]+ftype,0,i,getcoords(t)); + break; + } + + "menu" => + tkcmd(t, ".m post "+hd tl lst+" "+hd tl tl lst); + "release" => + scrolling = 0; + "move" => + newpoint := Point (int hd tl lst, int hd tl tl lst); + + if (scrolling) { + diff := (origin.sub(newpoint)).mul(2); + tkcmd(t, ".f.c xview scroll "+string diff.x+" units"); + tkcmd(t, ".f.c yview scroll "+string diff.y+" units"); + origin = newpoint; + # clearbuffer(butchan); + } + else { + origin = newpoint; + scrolling = 1; + } + } + + s := <-t.ctxt.ctl or + s = <-t.wreq or + s = <-titlechan => + if (s == "exit") + break loop; + e := tkclient->wmctl(t, s); + if (e == nil && s[0] == '!') + resizeview(t,w,h); + } + deltoplevel(t); + } +} + +create(filename: string, co: Rect): (ref sys->FD, int) +{ + (n,dir) := sys->stat(filename); + if (n != -1 && !dialog("overwrite "+filename+"?",1,-1,co)) + return (nil,1); + return (sys->create(filename,sys->OWRITE,8r666), 0); +} + +hasext(name,ext: string): int +{ + if (len name >= len ext && name[len name - len ext:] == ext) + return 1; + return 0; +} diff --git a/appl/demo/camera/tkinterface.dis b/appl/demo/camera/tkinterface.dis Binary files differnew file mode 100644 index 00000000..6306a8c1 --- /dev/null +++ b/appl/demo/camera/tkinterface.dis diff --git a/appl/demo/camera/tkinterface.sbl b/appl/demo/camera/tkinterface.sbl new file mode 100644 index 00000000..cc150fdc --- /dev/null +++ b/appl/demo/camera/tkinterface.sbl @@ -0,0 +1,7950 @@ +limbo .sbl 2.1 +tkinterface +11 +tkinterface.b +tk.m +tkclient.m +sys.m +daytime.m +readdir.m +bufio.m +selectfile.m +string.m +draw.m +readjpg.m +6733 +58.1,23 0 +59.1,15 1 +61.1,25 2 +65.1,31 3 +66.1,37 4 +67.1,37 5 +68.1,31 6 +70.1,31 7 +71.1,28 8 +73.1,22 9 +74.1,40 10 +75.1,17 11 +1,17 11 +76.1,46 12 +77.1,19 13 +1,19 13 +1,19 13 +1,19 14 +78.1,37 15 +79.1,23 16 +15,22 16 +1,23 16 +80.1,66 17 +24,31 17 +33,65 17 +1,66 17 +1,66 17 +81.1,19 18 +82.1,24 19 +12,19 19 +20,23 19 +1,24 19 +1,24 19 +83.21,24 20 +12,19 20 +1,25 20 +84.1,15 21 +85.8,19 22 +86.6,22 23 +26,35 23 +26,38 23 +26,38 24 +26,45 23 +47,67 25 +87.6,13 26 +6,26 26 +6,26 27 +28,40 28 +88.2,16 29 +2,16 29 +90.5,21 30 +91.2,19 31 +92.5,21 32 +36,50 32 +36,54 32 +25,55 32 +25,62 32 +93.13,27 33 +2,34 33 +95.6,19 34 +1,21 34 +1,21 35 +97.5,11 36 +5,6 36 +5,11 36 +5,11 36 +5,17 36 +21,27 36 +21,22 36 +21,27 36 +21,27 36 +21,33 36 +35,44 37 +98.12,18 38 +12,13 38 +12,18 38 +12,18 38 +20,26 38 +20,21 38 +20,26 38 +20,26 38 +100.5,15 39 +101.2,42 40 +102.2,42 41 +103.2,40 42 +2,40 43 +105.10,20 44 +106.2,43 45 +107.2,43 46 +108.2,40 47 +2,40 48 +111.2,44 49 +112.2,44 50 +113.2,40 51 +115.5,24 52 +16,22 52 +5,24 52 +5,24 52 +5,33 52 +116.2,13 53 +2,13 54 +117.6,33 55 +118.5,25 56 +16,23 56 +5,25 56 +5,25 56 +5,34 56 +119.2,14 57 +2,14 58 +120.6,35 59 +121.5,25 60 +16,23 60 +5,25 60 +5,25 60 +5,34 60 +122.2,14 61 +2,14 62 +123.6,35 63 +125.1,38 64 +11,18 64 +24,37 64 +1,38 64 +1,38 64 +126.1,38 65 +11,18 65 +24,37 65 +1,38 65 +1,38 65 +128.1,16 66 +1,16 66 +129.0,1 67 +216.1,8 68 +217.7,11 69 +7,20 69 +7,20 70 +24,28 69 +24,39 69 +24,39 71 +43,47 69 +43,54 69 +43,54 72 +218.7,11 73 +7,17 73 +2,17 73 +2,17 74 +219.2,10 75 +2,10 75 +221.10,15 76 +10,19 76 +8,20 76 +8,27 76 +33,38 76 +33,42 76 +31,43 76 +31,51 76 +222.9,14 77 +9,17 77 +2,18 77 +2,18 77 +223.1,11 78 +224.8,9 79 +1,9 79 +232.1,14 80 +233.1,32 81 +234.1,56 82 +19,41 82 +43,55 82 +1,56 82 +1,56 82 +235.5,18 83 +236.2,58 84 +19,43 84 +45,57 84 +2,58 84 +2,58 84 +237.1,7 85 +239.2,11 86 +240.2,20 87 +7,9 87 +15,19 87 +2,20 87 +2,20 87 +241.6,13 88 +6,13 89 +6,13 90 +15,20 91 +242.14,40 92 +28,29 92 +30,39 92 +14,40 92 +14,40 92 +3,4 92 +6,9 92 +6,9 93 +243.2,14 94 +2,25 94 +244.2,14 95 +2,24 95 +245.6,16 96 +24,30 96 +20,30 96 +20,30 97 +20,35 96 +246.3,15 98 +3,30 98 +247.3,24 99 +17,23 99 +3,24 99 +3,24 99 +248.3,15 100 +3,29 100 +249.10,16 101 +7,16 101 +7,27 101 +7,27 102 +250.4,16 103 +4,29 103 +251.4,16 104 +43,49 104 +40,49 104 +37,49 104 +34,49 104 +31,49 104 +4,49 104 +4,49 105 +252.25,31 106 +22,31 106 +19,31 106 +4,31 106 +4,31 107 +253.9,15 108 +17,28 109 +254.5,22 110 +9,11 110 +17,21 110 +5,22 110 +5,22 110 +255.19,44 111 +33,34 111 +35,43 111 +19,44 111 +19,44 111 +256.5,20 112 +257.19,26 113 +16,26 113 +5,26 113 +5,26 114 +258.9,15 115 +259.10,22 116 +10,38 116 +260.7,19 117 +7,33 117 +7,33 118 +261.15,27 119 +15,43 119 +262.7,19 120 +7,33 120 +264.16,28 121 +9,36 121 +40,51 121 +53,65 122 +265.5,17 123 +26,30 123 +32,35 123 +40,52 123 +40,57 123 +5,57 123 +5,57 123 +5,57 124 +5,57 125 +5,57 126 +5,57 127 +5,57 128 +253.30,33 129 +30,33 129 +267.8,19 130 +268.16,28 131 +16,33 131 +39,51 131 +35,57 131 +35,60 131 +35,60 132 +5,72 131 +5,72 133 +5,72 134 +269.5,13 135 +5,13 136 +272.15,21 137 +12,21 137 +12,30 137 +12,30 138 +273.4,16 139 +4,31 139 +274.4,16 140 +49,55 140 +46,55 140 +43,55 140 +40,55 140 +37,55 140 +34,55 140 +31,55 140 +4,55 140 +4,55 141 +275.21,27 142 +18,27 142 +15,27 142 +4,27 142 +4,27 143 +276.27,33 144 +24,33 144 +21,33 144 +18,33 144 +15,33 144 +4,33 144 +4,33 145 +277.4,12 146 +278.11,23 147 +279.5,14 148 +280.5,14 149 +281.5,14 150 +5,14 150 +283.4,16 151 +25,30 151 +32,35 151 +40,52 151 +40,57 151 +4,57 151 +4,57 151 +4,57 152 +4,57 153 +284.4,16 154 +25,30 154 +32,35 154 +40,52 154 +40,57 154 +4,57 154 +4,57 154 +4,57 155 +4,57 156 +285.4,16 157 +25,30 157 +32,35 157 +40,52 157 +40,57 157 +4,57 157 +4,57 157 +4,57 158 +4,57 159 +4,57 160 +288.15,27 161 +15,32 161 +33,52 161 +45,51 161 +33,52 161 +33,52 161 +4,64 161 +4,64 162 +4,64 163 +289.4,12 164 +291.7,11 165 +292.4,16 165 +4,38 165 +293.4,16 165 +4,38 165 +294.4,16 165 +4,36 165 +295.4,39 165 +13,25 165 +13,30 165 +31,38 165 +4,39 165 +4,39 165 +4,39 165 +296.4,39 165 +13,25 165 +13,30 165 +31,38 165 +4,39 165 +4,39 165 +4,39 165 +297.4,39 165 +13,25 165 +13,30 165 +31,38 165 +4,39 165 +4,39 165 +4,39 165 +298.4,40 165 +13,25 165 +13,30 165 +31,39 165 +4,40 165 +4,40 165 +4,40 165 +299.4,39 165 +13,25 165 +13,30 165 +31,38 165 +4,39 165 +4,39 165 +4,39 165 +300.4,43 165 +13,25 165 +13,30 165 +31,42 165 +4,43 165 +4,43 165 +4,43 165 +301.4,39 165 +13,25 165 +13,30 165 +31,38 165 +4,39 165 +4,39 165 +4,39 165 +302.4,39 165 +13,25 165 +13,30 165 +31,38 165 +4,39 165 +4,39 165 +4,39 165 +303.4,39 165 +13,25 165 +13,30 165 +31,38 165 +4,39 165 +4,39 165 +4,39 165 +304.5,8 166 +305.3,6 167 +3,6 168 +3,6 169 +3,6 169 +308.1,16 170 +309.0,1 171 +313.1,10 172 +314.16,21 173 +5,13 173 +5,21 173 +30,32 174 +23,32 174 +315.6,12 175 +23,30 176 +19,30 176 +33,43 176 +18,44 176 +14,44 176 +316.6,15 177 +33,41 177 +31,41 177 +27,28 177 +27,42 177 +19,42 177 +19,42 178 +44,51 179 +315.46,49 180 +46,49 180 +318.8,11 181 +1,11 181 +323.1,10 182 +324.16,21 183 +5,13 183 +5,21 183 +30,32 184 +23,32 184 +325.11,16 185 +19,27 185 +6,27 185 +29,35 186 +326.6,15 187 +33,41 187 +31,41 187 +27,28 187 +27,42 187 +19,42 187 +19,42 188 +44,51 189 +325.37,40 190 +37,40 190 +328.8,11 191 +1,11 191 +334.1,7 192 +335.6,12 193 +14,29 194 +336.10,22 195 +2,27 195 +337.15,23 196 +6,11 196 +6,23 196 +33,38 196 +27,31 196 +27,39 196 +27,44 196 +27,44 197 +46,49 198 +46,49 199 +335.31,34 200 +31,34 200 +339.8,9 201 +1,9 201 +344.14,20 202 +5,11 202 +5,20 202 +29,30 203 +22,30 203 +345.9,15 204 +5,7 204 +5,16 204 +5,22 204 +5,22 205 +31,32 206 +24,32 206 +346.8,9 207 +1,9 207 +351.1,14 208 +352.10,11 209 +1,15 209 +354.6,23 210 +25,30 211 +355.6,25 212 +16,24 212 +6,25 212 +6,25 212 +6,31 212 +40,48 213 +33,48 213 +356.2,26 214 +13,21 214 +22,25 214 +2,26 214 +2,26 214 +357.10,19 215 +6,19 215 +21,26 216 +358.2,25 217 +2,25 217 +360.8,13 218 +1,13 218 +366.1,10 219 +367.6,12 220 +14,29 221 +368.2,8 222 +369.2,9 223 +372.3,10 224 +373.3,14 225 +374.10,21 226 +375.8,43 227 +16,28 227 +16,33 227 +35,42 227 +8,43 227 +8,43 227 +8,43 227 +45,51 228 +376.4,18 229 +4,18 229 +378.7,14 230 +7,14 231 +7,14 232 +16,21 233 +379.3,10 234 +380.10,22 235 +3,31 235 +10,27 235 +3,31 235 +381.3,22 236 +13,16 236 +18,21 236 +3,22 236 +3,22 236 +382.7,15 237 +17,29 238 +17,29 239 +383.8,12 240 +384.3,43 241 +18,30 241 +37,41 241 +18,35 241 +18,42 241 +3,43 241 +3,43 241 +385.7,14 242 +7,14 243 +7,14 244 +16,21 245 +16,21 246 +16,21 247 +16,21 247 +387.6,12 248 +388.3,55 249 +28,30 249 +32,44 249 +32,49 249 +50,54 249 +3,55 249 +3,55 249 +389.3,24 250 +3,24 251 +367.31,34 252 +31,34 252 +392.13,20 253 +1,31 253 +393.10,16 254 +6,20 254 +22,28 255 +394.2,7 256 +2,16 256 +395.2,14 257 +393.30,33 258 +30,33 258 +397.8,10 259 +1,10 259 +402.1,23 260 +1,23 260 +1,23 260 +403.1,94 261 +7,10 261 +12,93 261 +1,94 261 +1,94 261 +1,94 262 +404.1,80 263 +7,10 263 +12,79 263 +1,80 263 +1,80 263 +1,80 264 +405.6,12 265 +18,29 266 +14,29 266 +406.10,20 267 +6,20 267 +6,24 267 +29,39 267 +29,39 267 +29,43 267 +29,53 267 +29,53 268 +57,67 267 +57,67 267 +57,71 267 +57,82 267 +57,82 269 +407.4,40 270 +24,27 270 +28,29 270 +30,39 270 +4,40 270 +4,40 271 +409.3,410.50 272 +409.9,12 272 +39,49 272 +14,49 272 +14,410.36 272 +37,45 272 +409.14,410.45 272 +409.14,410.45 273 +409.14,410.49 272 +409.14,410.49 274 +409.3,410.50 272 +409.3,410.50 272 +409.3,410.50 275 +405.31,34 276 +31,34 276 +412.1,35 277 +7,10 277 +12,34 277 +1,35 277 +1,35 277 +1,35 278 +413.1,64 279 +7,10 279 +12,63 279 +1,64 279 +1,64 279 +1,64 280 +414.1,36 281 +7,10 281 +12,35 281 +1,36 281 +1,36 281 +1,36 282 +415.6,18 283 +24,32 284 +20,32 284 +416.3,417.30 285 +416.9,12 285 +44,51 285 +14,56 285 +14,61 285 +14,61 286 +3,417.30 285 +416.3,417.30 285 +416.3,417.30 287 +415.34,37 288 +34,37 288 +419.0,1 289 +423.14,35 290 +24,34 290 +24,34 290 +14,35 290 +14,35 290 +1,35 290 +424.1,12 291 +425.6,12 292 +14,29 293 +426.6,43 294 +14,26 294 +14,31 294 +32,42 294 +32,42 294 +6,43 294 +6,43 294 +6,43 294 +429.8,20 295 +8,26 295 +431.26,38 296 +5,44 296 +432.5,64 297 +11,14 297 +16,30 297 +16,63 297 +16,63 298 +5,64 297 +5,64 297 +5,64 299 +5,64 295 +434.5,17 300 +435.9,20 301 +436.6,32 302 +12,15 302 +17,31 302 +6,32 302 +6,32 302 +6,32 303 +437.6,68 304 +12,15 304 +17,31 304 +17,44 304 +45,55 304 +17,55 304 +17,59 304 +17,67 304 +17,67 305 +6,68 304 +6,68 304 +6,68 306 +438.6,69 307 +12,15 307 +17,30 307 +17,65 307 +17,68 307 +17,68 308 +6,69 307 +6,69 307 +6,69 309 +440.13,25 310 +26,39 310 +5,39 310 +5,39 311 +5,39 312 +441.5,64 313 +11,14 313 +16,30 313 +16,63 313 +16,63 314 +5,64 313 +5,64 313 +5,64 315 +442.5,80 316 +11,14 316 +16,29 316 +16,48 316 +49,62 316 +16,62 316 +16,62 317 +16,79 316 +16,79 318 +5,80 316 +5,80 316 +5,80 319 +443.5,43 320 +19,31 320 +19,36 320 +37,42 320 +5,43 320 +5,43 320 +444.10,22 321 +5,44 321 +32,42 321 +28,42 321 +10,27 321 +5,44 321 +445.9,17 322 +21,33 322 +21,49 322 +446.17,27 323 +11,27 323 +11,31 323 +6,31 323 +6,31 324 +447.5,57 325 +11,14 325 +16,30 325 +16,43 325 +16,45 325 +16,49 325 +16,56 325 +16,56 326 +5,57 325 +5,57 325 +5,57 327 +448.5,63 328 +11,14 328 +16,29 328 +16,62 328 +16,62 329 +5,63 328 +5,63 328 +5,63 330 +5,63 331 +5,63 295 +451.7,19 332 +7,35 332 +452.4,16 333 +4,39 333 +453.4,42 334 +18,30 334 +18,35 334 +36,41 334 +4,42 334 +4,42 334 +454.4,42 335 +18,30 335 +18,35 335 +36,41 335 +4,42 335 +4,42 335 +455.15,82 336 +27,59 336 +61,66 336 +67,70 336 +71,74 336 +75,81 336 +15,82 336 +15,82 336 +4,83 336 +10,13 336 +10,13 336 +10,13 337 +4,83 336 +4,83 336 +4,83 338 +456.4,457.51 339 +456.10,13 339 +15,28 339 +15,57 339 +15,457.12 339 +456.15,457.27 339 +30,38 339 +456.15,457.38 339 +456.15,457.38 340 +456.15,457.50 339 +456.15,457.50 341 +456.4,457.51 339 +456.4,457.51 339 +456.4,457.51 342 +458.4,52 343 +10,13 343 +15,28 343 +15,51 343 +15,51 344 +4,52 343 +4,52 343 +4,52 345 +4,52 346 +460.12,24 347 +12,38 347 +461.4,37 348 +10,13 348 +15,29 348 +15,36 348 +15,36 349 +4,37 348 +4,37 348 +4,37 350 +462.4,53 351 +10,13 351 +15,28 351 +15,52 351 +15,52 352 +4,53 351 +4,53 351 +4,53 353 +463.11,23 354 +4,28 354 +464.4,12 355 +465.11,21 356 +466.20,26 357 +467.5,162 358 +22,96 358 +97,102 358 +103,106 358 +107,111 358 +112,115 358 +116,128 358 +116,134 358 +143,152 358 +140,153 358 +135,153 358 +155,161 358 +5,162 358 +5,162 358 +468.5,17 359 +11,14 359 +15,16 359 +5,17 359 +5,17 359 +5,17 360 +469.16,470.20 361 +469.28,74 361 +470.6,11 361 +12,15 361 +16,19 361 +469.16,470.20 361 +469.16,470.20 361 +469.5,470.21 361 +469.11,14 361 +11,14 361 +11,14 362 +5,470.21 361 +469.5,470.21 361 +469.5,470.21 363 +471.5,17 364 +472.5,10 365 +5,10 366 +5,10 367 +5,10 367 +5,10 368 +475.3,476.59 369 +475.9,12 369 +14,29 369 +14,57 369 +14,476.20 369 +475.14,476.28 369 +29,37 369 +475.14,476.37 369 +475.14,476.37 370 +475.14,476.41 369 +475.14,476.51 369 +475.14,476.58 369 +475.14,476.58 371 +475.3,476.59 369 +475.3,476.59 369 +475.3,476.59 372 +477.3,62 373 +9,12 373 +14,27 373 +14,61 373 +14,61 374 +3,62 373 +3,62 373 +3,62 375 +478.7,19 376 +7,35 376 +479.4,480.63 377 +479.10,13 377 +15,30 377 +15,62 377 +15,480.21 377 +479.15,480.32 377 +33,41 377 +479.15,480.41 377 +479.15,480.41 378 +479.15,480.45 377 +479.15,480.55 377 +479.15,480.62 377 +479.15,480.62 379 +479.4,480.63 377 +479.4,480.63 377 +479.4,480.63 380 +481.4,63 381 +10,13 381 +15,28 381 +15,62 381 +15,62 382 +4,63 381 +4,63 381 +4,63 383 +483.3,11 384 +3,11 385 +425.31,34 386 +31,34 386 +486.0,1 387 +513.13,20 388 +12,26 388 +1,26 388 +514.13,20 389 +12,26 389 +1,26 389 +515.15,82 390 +34,41 390 +43,50 390 +43,57 390 +43,59 390 +43,59 391 +61,64 390 +66,81 390 +15,82 390 +15,82 390 +2,5 390 +2,5 392 +2,5 393 +516.1,25 394 +517.1,36 395 +14,17 395 +19,25 395 +27,35 395 +1,36 395 +1,36 395 +1,36 396 +518.6,14 397 +22,37 398 +16,37 398 +519.2,30 399 +8,11 399 +13,29 399 +13,29 399 +2,30 399 +2,30 399 +2,30 400 +518.39,44 401 +39,44 401 +520.1,33 402 +20,23 402 +25,32 402 +1,33 402 +521.1,45 403 +22,25 403 +41,44 403 +34,44 403 +27,44 403 +27,44 403 +27,44 404 +1,45 403 +524.9,17 405 +9,21 405 +9,21 406 +9,21 405 +526.9,17 405 +9,21 405 +9,21 407 +9,21 405 +528.12,18 405 +12,18 405 +523.2,8 405 +2,8 405 +2,8 405 +2,8 405 +525.3,23 408 +16,19 408 +21,22 408 +3,23 408 +3,23 405 +527.3,23 409 +15,18 409 +20,22 409 +3,23 409 +3,23 410 +3,23 405 +529.7,18 411 +31,54 412 +37,40 412 +42,53 412 +31,54 412 +31,54 412 +27,54 412 +27,54 413 +20,54 412 +530.12,27 414 +36,38 415 +29,38 415 +531.12,15 416 +12,19 416 +12,28 416 +12,28 417 +532.4,12 418 +533.15,22 419 +15,18 419 +15,22 419 +11,22 419 +11,22 420 +4,22 419 +534.8,12 421 +8,20 421 +33,56 422 +39,42 422 +44,55 422 +33,56 422 +33,56 422 +29,56 422 +29,56 423 +22,56 422 +535.8,12 424 +8,19 424 +23,27 424 +23,34 424 +536.5,50 425 +11,14 425 +16,49 425 +5,50 425 +5,50 425 +5,50 426 +537.5,54 427 +11,14 427 +16,41 427 +16,53 427 +16,53 428 +5,54 427 +5,54 427 +5,54 429 +5,54 430 +5,54 431 +5,54 405 +546.20,82 432 +39,46 432 +48,50 432 +52,65 432 +67,81 432 +20,82 432 +20,82 432 +547.1,15 433 +548.1,23 434 +7,10 434 +12,22 434 +1,23 434 +1,23 434 +1,23 435 +549.1,45 436 +7,10 436 +12,44 436 +1,45 436 +1,45 436 +1,45 437 +550.1,55 438 +7,10 438 +12,54 438 +1,55 438 +1,55 438 +1,55 439 +551.1,59 440 +7,10 440 +12,58 440 +1,59 440 +1,59 440 +1,59 441 +552.1,28 442 +7,10 442 +12,27 442 +1,28 442 +1,28 442 +1,28 443 +553.1,12 444 +554.8,18 445 +555.2,10 446 +556.2,20 447 +557.13,19 448 +558.2,53 449 +8,11 449 +13,33 449 +13,45 449 +13,48 449 +13,52 449 +13,52 450 +2,53 449 +2,53 449 +2,53 451 +559.2,53 452 +8,11 452 +13,33 452 +13,45 452 +13,48 452 +13,52 452 +13,52 453 +2,53 452 +2,53 452 +2,53 454 +560.2,68 455 +8,11 455 +13,32 455 +13,42 455 +13,44 455 +13,67 455 +13,67 456 +2,68 455 +2,68 455 +2,68 457 +561.2,68 458 +8,11 458 +13,32 458 +13,42 458 +13,44 458 +13,67 458 +13,67 459 +2,68 458 +2,68 458 +2,68 460 +562.2,14 461 +2,14 462 +2,14 463 +2,14 464 +2,14 465 +2,14 465 +564.1,30 466 +7,10 466 +12,29 466 +1,30 466 +1,30 466 +1,30 467 +565.1,29 468 +20,23 468 +25,28 468 +1,29 468 +566.1,45 469 +22,25 469 +41,44 469 +34,44 469 +27,44 469 +27,44 469 +27,44 470 +1,45 469 +569.9,17 471 +9,21 471 +9,21 472 +9,21 471 +571.9,17 471 +9,21 471 +9,21 473 +9,21 471 +573.13,21 471 +13,25 471 +13,25 474 +13,25 471 +574.12,20 471 +12,20 471 +575.13,21 471 +13,21 471 +568.2,8 471 +2,8 471 +2,8 471 +2,8 471 +570.3,23 475 +16,19 475 +21,22 475 +3,23 475 +3,23 471 +572.3,23 476 +15,18 476 +20,22 476 +3,23 476 +3,23 477 +3,23 471 +3,23 471 +3,23 471 +576.7,22 478 +7,22 479 +580.0,1 480 +577.3,30 481 +19,22 481 +24,29 481 +3,30 481 +3,30 481 +3,30 482 +3,30 483 +3,30 471 +584.1,17 484 +585.7,17 485 +586.28,34 486 +3,8 486 +10,14 486 +10,14 487 +10,14 488 +10,14 489 +587.14,24 490 +6,24 490 +588.3,43 491 +9,14 491 +16,42 491 +3,43 491 +3,43 491 +3,43 492 +589.3,19 493 +590.3,9 494 +3,9 495 +3,9 496 +585.19,31 497 +19,31 497 +593.1,25 498 +18,19 498 +21,24 498 +1,25 498 +1,25 498 +594.20,77 499 +39,46 499 +48,50 499 +52,60 499 +62,76 499 +20,77 499 +20,77 499 +595.1,25 500 +596.1,35 501 +14,17 501 +18,24 501 +26,34 501 +1,35 501 +1,35 501 +1,35 502 +597.1,37 503 +21,24 503 +25,26 503 +28,36 503 +1,37 503 +598.1,51 504 +7,10 504 +11,50 504 +1,51 504 +1,51 504 +1,51 505 +599.1,57 506 +7,10 506 +11,56 506 +1,57 506 +1,57 506 +1,57 507 +600.1,30 508 +7,10 508 +12,29 508 +1,30 508 +1,30 508 +1,30 509 +601.1,9 510 +602.1,13 511 +603.19,22 512 +604.6,12 513 +14,29 514 +605.6,44 515 +14,26 515 +14,31 515 +33,43 515 +33,43 515 +6,44 515 +6,44 515 +6,44 515 +606.3,13 516 +607.7,19 517 +7,30 517 +608.4,39 518 +15,18 518 +19,20 518 +21,33 518 +21,38 518 +4,39 518 +4,39 519 +610.4,15 520 +604.31,34 521 +31,34 521 +613.1,29 522 +20,23 522 +25,28 522 +1,29 522 +614.1,45 523 +22,25 523 +41,44 523 +34,44 523 +27,44 523 +27,44 523 +27,44 524 +1,45 523 +615.6,13 525 +616.23,37 526 +33,36 526 +23,37 526 +23,37 526 +2,53 526 +2,53 526 +38,41 526 +43,50 526 +51,52 526 +2,53 526 +617.2,11 527 +618.8,19 528 +619.17,24 529 +7,25 529 +7,36 529 +40,62 529 +49,52 529 +54,61 529 +40,62 529 +40,62 529 +40,68 529 +620.4,11 530 +621.4,9 531 +618.21,35 532 +21,35 532 +21,35 533 +625.6,9 534 +626.2,45 535 +21,24 535 +25,31 535 +32,40 535 +41,42 535 +43,44 535 +2,45 535 +627.1,17 536 +628.0,1 537 +632.1,26 538 +7,10 538 +12,25 538 +1,26 538 +1,26 538 +1,26 539 +633.1,24 540 +18,19 540 +20,23 540 +1,24 540 +1,24 540 +634.1,39 541 +13,16 541 +17,27 541 +17,27 541 +29,33 541 +35,38 541 +1,39 541 +635.1,23 542 +638.9,17 543 +9,21 543 +9,21 544 +9,21 543 +640.9,17 543 +9,21 543 +9,21 545 +9,21 543 +642.12,18 543 +12,18 543 +660.13,21 543 +13,25 543 +13,25 546 +13,25 543 +661.12,20 543 +12,20 543 +662.13,21 543 +13,21 543 +637.2,8 543 +2,8 543 +2,8 543 +2,8 543 +639.3,23 547 +16,19 547 +21,22 547 +3,23 547 +3,23 543 +641.3,23 548 +15,18 548 +20,22 548 +3,23 548 +3,23 549 +3,23 543 +643.3,24 550 +9,12 550 +14,23 550 +3,24 550 +3,24 550 +3,24 551 +644.15,42 552 +29,32 552 +34,41 552 +15,42 552 +15,42 552 +4,5 552 +7,10 552 +7,10 553 +645.8,14 554 +8,14 554 +647.17,23 555 +14,23 555 +5,23 555 +5,23 556 +648.5,57 557 +33,39 557 +30,39 557 +27,39 557 +27,39 558 +50,56 557 +47,56 557 +44,56 557 +41,56 557 +41,56 559 +5,57 557 +5,57 557 +649.9,18 560 +20,82 561 +26,29 561 +31,43 561 +31,52 561 +31,60 561 +61,71 561 +31,71 561 +31,71 562 +31,81 561 +31,81 563 +20,82 561 +20,82 561 +20,82 564 +20,82 554 +651.9,16 565 +652.39,53 566 +49,52 566 +39,53 566 +39,53 566 +6,54 566 +13,32 566 +34,35 566 +36,38 566 +36,38 566 +6,54 566 +6,54 566 +6,54 567 +654.6,52 568 +16,19 568 +28,34 568 +25,34 568 +21,34 568 +21,34 569 +36,42 568 +44,51 568 +6,52 568 +655.6,15 570 +656.6,17 571 +6,17 554 +659.3,22 572 +15,21 572 +3,22 572 +3,22 573 +3,22 574 +3,22 543 +3,22 543 +3,22 543 +663.7,22 575 +7,22 576 +24,29 577 +664.3,30 578 +19,22 578 +24,29 578 +3,30 578 +3,30 578 +3,30 579 +3,30 580 +3,30 543 +667.1,17 581 +13,16 581 +1,17 581 +668.0,1 582 +672.1,18 583 +673.1,16 584 +13,15 584 +1,16 584 +675.11,12 585 +11,12 585 +676.12,14 585 +12,14 585 +674.16,22 585 +16,22 585 +16,22 585 +16,22 585 +16,22 586 +16,22 585 +679.0,1 587 +683.1,16 588 +12,15 588 +1,16 588 +1,16 588 +684.1,12 589 +685.0,1 590 +689.8,16 591 +690.16,20 592 +691.6,15 593 +24,27 594 +17,27 594 +692.2,10 595 +2,10 596 +2,10 596 +694.8,10 597 +1,10 597 +699.1,8 598 +700.8,16 599 +701.13,17 600 +7,17 600 +2,17 600 +2,17 601 +702.2,10 602 +2,10 602 +704.5,12 603 +21,26 604 +21,22 604 +21,26 604 +14,26 604 +705.8,9 605 +1,9 605 +728.12,39 606 +22,38 606 +12,39 606 +12,39 606 +729.5,12 607 +21,22 608 +14,22 608 +730.8,9 609 +1,9 609 +735.1,25 610 +18,19 610 +21,24 610 +1,25 610 +1,25 610 +736.1,44 611 +22,28 611 +29,32 611 +34,41 611 +42,43 611 +1,44 611 +737.1,15 612 +1,15 612 +738.13,61 613 +27,45 613 +47,60 613 +13,61 613 +13,61 613 +739.5,12 614 +14,26 615 +740.1,26 616 +22,25 616 +1,26 616 +741.1,23 617 +17,20 617 +21,22 617 +1,23 617 +1,23 617 +742.1,17 618 +743.0,1 619 +750.6,19 620 +23,33 620 +23,33 620 +23,33 620 +23,33 620 +751.2,44 621 +9,30 621 +31,32 621 +33,35 621 +36,43 621 +2,44 621 +2,44 621 +752.2,6 622 +754.20,77 623 +39,46 623 +48,50 623 +52,60 623 +62,76 623 +20,77 623 +20,77 623 +755.1,26 624 +7,10 624 +12,25 624 +1,26 624 +1,26 624 +1,26 625 +756.5,33 626 +11,14 626 +16,32 626 +5,33 626 +5,33 626 +5,48 626 +5,48 627 +757.2,13 628 +758.1,28 629 +7,10 629 +12,27 629 +1,28 629 +1,28 629 +1,28 630 +759.38,49 631 +33,49 631 +55,64 631 +52,65 631 +32,66 631 +25,66 631 +1,66 631 +1,66 632 +760.1,26 633 +761.1,38 634 +14,17 634 +19,26 634 +28,37 634 +1,38 634 +1,38 634 +1,38 635 +762.6,14 636 +22,34 637 +16,34 637 +763.2,27 638 +8,11 638 +13,26 638 +13,26 638 +2,27 638 +2,27 638 +2,27 639 +762.36,41 640 +36,41 640 +764.10,23 641 +1,25 641 +1,25 642 +765.1,23 643 +766.1,16 644 +768.1,35 645 +22,25 645 +27,34 645 +1,35 645 +769.1,16 646 +770.5,16 647 +771.2,43 648 +9,30 648 +31,32 648 +33,35 648 +36,42 648 +2,43 648 +2,43 648 +772.2,6 649 +774.1,12 650 +775.1,34 651 +18,21 651 +23,24 651 +26,33 651 +1,34 651 +776.1,11 652 +777.1,12 653 +779.1,15 654 +780.1,33 655 +7,10 655 +12,32 655 +1,33 655 +1,33 655 +1,33 656 +781.1,18 657 +12,15 657 +16,17 657 +1,18 657 +782.1,39 658 +7,10 658 +12,38 658 +1,39 658 +1,39 658 +1,39 659 +783.1,24 660 +20,23 660 +1,24 660 +1,24 660 +784.1,14 661 +785.1,29 662 +20,23 662 +25,28 662 +1,29 662 +786.1,45 663 +22,25 663 +41,44 663 +34,44 663 +27,44 663 +27,44 663 +27,44 664 +1,45 663 +789.9,17 665 +9,21 665 +9,21 666 +9,21 665 +791.9,17 665 +9,21 665 +9,21 667 +9,21 665 +793.11,18 665 +11,18 665 +853.13,21 665 +13,25 665 +13,25 668 +13,25 665 +854.12,20 665 +12,20 665 +855.12,20 665 +12,20 665 +788.2,8 665 +2,8 665 +2,8 665 +2,8 665 +790.3,23 669 +16,19 669 +21,22 669 +3,23 669 +3,23 665 +792.3,23 670 +15,18 670 +20,22 670 +3,23 670 +3,23 671 +3,23 665 +794.3,24 672 +9,12 672 +14,23 672 +3,24 672 +3,24 672 +3,24 673 +795.15,42 674 +29,32 674 +34,41 674 +15,42 674 +15,42 674 +4,5 674 +7,10 674 +7,10 675 +796.8,14 676 +8,14 676 +801.17,23 677 +14,23 677 +5,23 677 +5,23 678 +802.5,57 679 +33,39 679 +30,39 679 +27,39 679 +27,39 680 +50,56 679 +47,56 679 +44,56 679 +41,56 679 +41,56 681 +5,57 679 +5,57 679 +803.9,18 682 +20,72 683 +26,29 683 +31,43 683 +31,52 683 +31,60 683 +61,71 683 +31,71 683 +31,71 684 +31,71 685 +20,72 683 +20,72 683 +20,72 686 +20,72 676 +805.5,23 687 +5,23 687 +5,23 676 +807.17,23 688 +14,23 688 +5,23 688 +5,23 689 +808.10,16 690 +18,29 691 +809.10,16 692 +21,28 692 +32,43 692 +32,43 692 +810.7,33 693 +17,28 693 +17,28 693 +29,32 693 +7,33 693 +811.7,35 694 +17,28 694 +17,28 694 +29,34 694 +7,35 694 +808.31,34 695 +31,34 695 +815.5,12 696 +816.10,16 697 +18,29 698 +817.6,17 699 +24,35 699 +6,35 699 +816.31,34 700 +31,34 700 +818.5,18 701 +14,17 701 +5,18 701 +5,18 676 +820.19,25 702 +16,25 702 +5,25 702 +5,25 703 +821.10,16 704 +18,29 705 +822.6,17 706 +6,23 706 +821.31,34 707 +31,34 707 +823.5,18 708 +14,17 708 +5,18 708 +5,18 676 +825.17,23 709 +14,23 709 +5,23 709 +5,23 710 +826.5,16 711 +23,34 711 +5,34 711 +827.5,18 712 +14,17 712 +5,18 712 +5,18 676 +829.17,23 713 +14,23 713 +5,23 713 +5,23 714 +830.12,23 715 +5,23 715 +831.10,16 716 +18,29 717 +832.6,17 718 +6,21 718 +831.31,34 719 +31,34 719 +833.9,25 720 +9,30 720 +32,43 721 +32,53 721 +32,53 722 +834.10,21 723 +10,25 723 +835.5,18 724 +14,17 724 +5,18 724 +5,18 676 +837.17,23 725 +14,23 725 +5,23 725 +5,23 726 +838.9,20 727 +9,20 727 +24,38 727 +40,46 728 +839.28,45 729 +14,45 729 +5,55 729 +5,55 730 +840.9,16 731 +26,37 732 +26,37 732 +18,44 732 +18,44 733 +841.5,19 734 +842.6,62 735 +12,15 735 +17,57 735 +17,61 735 +17,61 736 +6,62 735 +6,62 735 +6,62 737 +843.10,23 738 +29,37 739 +25,37 739 +844.6,845.58 740 +844.12,15 740 +51,54 740 +50,64 740 +43,64 740 +17,64 740 +17,845.33 740 +35,42 740 +844.17,845.46 740 +844.17,845.50 740 +844.17,845.53 740 +844.17,845.57 740 +844.17,845.57 741 +844.6,845.58 740 +844.6,845.58 740 +844.6,845.58 742 +843.39,42 743 +39,42 743 +846.5,65 744 +11,14 744 +38,44 744 +35,44 744 +32,44 744 +16,44 744 +16,48 744 +58,64 744 +55,64 744 +52,64 744 +49,64 744 +16,64 744 +16,64 745 +16,64 746 +5,65 744 +5,65 744 +5,65 747 +5,65 748 +5,65 749 +5,65 676 +848.10,20 750 +849.6,36 751 +27,30 751 +32,35 751 +6,36 751 +6,36 676 +851.3,23 752 +9,12 752 +14,22 752 +3,23 752 +3,23 752 +3,23 753 +852.3,23 754 +15,22 754 +3,23 754 +3,23 755 +3,23 756 +3,23 665 +3,23 665 +3,23 665 +856.7,22 757 +7,22 758 +7,22 759 +857.4,9 760 +858.3,37 761 +26,29 761 +31,36 761 +3,37 761 +3,37 761 +859.7,17 762 +21,37 762 +860.16,41 763 +30,35 763 +37,40 763 +16,41 763 +16,41 763 +861.11,17 764 +8,17 764 +8,24 764 +8,24 765 +862.5,22 766 +16,19 766 +20,21 766 +5,22 766 +5,22 767 +5,22 768 +864.3,26 769 +22,25 769 +3,26 769 +3,26 769 +3,26 770 +3,26 771 +3,26 665 +867.8,24 772 +868.26,38 773 +18,21 773 +18,21 774 +18,21 775 +18,21 776 +869.6,15 777 +870.3,12 778 +8,11 778 +3,12 778 +867.26,50 779 +26,50 779 +872.8,24 780 +873.20,32 781 +874.2,49 782 +14,27 782 +14,31 782 +32,44 782 +14,44 782 +14,44 783 +14,48 782 +14,48 784 +2,49 782 +2,49 782 +875.2,26 785 +2,26 786 +2,26 786 +877.1,24 787 +7,10 787 +12,23 787 +1,24 787 +1,24 787 +1,24 788 +878.1,5 789 +883.1,23 790 +884.1,15 791 +885.6,12 792 +6,12 792 +887.3,34 793 +21,24 793 +26,33 793 +3,34 793 +888.3,13 794 +3,13 792 +890.3,45 795 +19,22 795 +30,36 795 +27,36 795 +23,36 795 +23,36 796 +37,44 795 +3,45 795 +891.3,13 797 +3,13 792 +893.12,21 798 +3,22 798 +3,26 798 +894.3,32 799 +19,22 799 +24,31 799 +3,32 799 +895.3,13 800 +896.3,14 801 +897.7,18 802 +898.4,9 803 +899.3,74 804 +22,39 804 +49,56 804 +40,57 804 +22,57 804 +22,64 804 +22,64 805 +66,73 804 +3,74 804 +900.3,18 806 +901.3,14 807 +902.7,16 808 +903.4,36 809 +23,26 809 +28,35 809 +4,36 809 +904.5,15 810 +905.5,16 811 +5,16 792 +908.3,47 812 +31,37 812 +28,37 812 +24,37 812 +24,37 813 +39,46 812 +3,47 812 +909.3,13 814 +3,13 792 +911.3,49 815 +13,16 815 +25,31 815 +22,31 815 +18,31 815 +18,31 816 +33,39 815 +41,48 815 +3,49 815 +912.3,13 817 +3,13 792 +914.3,44 818 +16,19 818 +28,34 818 +25,34 818 +21,34 818 +21,34 819 +36,43 818 +3,44 818 +915.3,13 820 +3,13 792 +917.15,21 821 +12,21 821 +3,21 821 +3,21 822 +918.3,16 823 +9,12 823 +14,15 823 +3,16 823 +919.7,14 824 +16,27 825 +16,27 825 +16,27 826 +920.8,13 827 +11,12 827 +8,13 827 +8,13 827 +8,13 792 +922.3,30 828 +17,20 828 +22,29 828 +3,30 828 +923.3,13 829 +3,13 792 +925.3,36 830 +20,23 830 +25,26 830 +28,35 830 +3,36 830 +926.3,13 831 +3,13 792 +928.15,21 832 +12,21 832 +3,21 832 +3,21 833 +929.3,16 834 +9,12 834 +14,15 834 +3,16 834 +930.7,14 835 +16,31 836 +16,31 836 +16,31 837 +931.8,19 838 +13,14 838 +16,18 838 +8,19 838 +8,19 838 +8,19 792 +933.7,62 839 +14,49 839 +50,51 839 +52,54 839 +55,61 839 +7,62 839 +7,62 839 +7,62 839 +934.4,34 840 +19,22 840 +23,24 840 +26,33 840 +4,34 840 +935.4,14 841 +4,14 792 +938.1,15 842 +939.1,12 843 +940.0,1 844 +944.1,25 845 +18,19 845 +21,24 845 +1,25 845 +1,25 845 +945.1,44 846 +22,28 846 +29,32 846 +34,41 846 +42,43 846 +1,44 846 +946.1,23 847 +17,20 847 +21,22 847 +1,23 847 +1,23 847 +947.1,17 848 +948.0,1 849 +952.1,25 850 +18,19 850 +21,24 850 +1,25 850 +1,25 850 +954.1,8 851 +956.1,10 852 +957.5,12 853 +958.7,13 854 +15,26 855 +959.7,18 856 +7,18 856 +24,35 857 +24,35 857 +24,44 857 +20,44 857 +20,44 858 +958.28,31 859 +28,31 859 +960.7,57 860 +14,44 860 +45,46 860 +47,49 860 +50,56 860 +7,57 860 +7,57 860 +7,57 860 +961.3,19 861 +962.3,9 862 +965.11,59 863 +28,39 863 +18,39 863 +18,47 863 +18,47 864 +48,49 863 +50,51 863 +52,58 863 +11,59 863 +11,59 863 +11,59 863 +966.2,18 865 +967.2,8 866 +969.1,44 867 +22,28 867 +29,32 867 +34,41 867 +42,43 867 +1,44 867 +970.1,7 868 +971.6,12 869 +14,25 870 +972.7,14 871 +18,29 871 +18,29 871 +34,40 871 +973.8,19 872 +8,19 872 +8,27 872 +3,27 872 +3,27 873 +974.3,975.31 874 +974.20,975.11 874 +12,23 874 +974.20,975.23 874 +974.20,975.30 874 +974.20,975.30 875 +974.3,975.31 874 +974.3,975.31 874 +976.7,15 876 +17,30 877 +17,30 878 +978.4,13 879 +979.4,18 880 +971.27,30 881 +27,30 881 +983.5,15 882 +19,26 882 +984.2,57 883 +26,37 883 +9,37 883 +9,45 883 +9,45 884 +46,47 883 +48,49 883 +50,56 883 +2,57 883 +2,57 883 +985.2,18 885 +986.2,8 886 +988.8,18 887 +989.2,33 888 +21,27 888 +12,28 888 +12,28 888 +29,32 888 +2,33 888 +990.2,35 889 +21,27 889 +12,28 889 +12,28 889 +29,34 889 +2,35 889 +991.2,19 890 +12,18 890 +2,19 890 +992.2,14 891 +2,14 891 +994.1,23 892 +17,20 892 +21,22 892 +1,23 892 +1,23 892 +995.1,14 893 +10,13 893 +1,14 893 +996.5,12 894 +14,56 895 +21,43 895 +44,45 895 +46,48 895 +49,55 895 +14,56 895 +14,56 895 +997.1,17 896 +998.0,1 897 +1002.6,12 898 +18,29 899 +14,29 899 +1003.2,13 900 +25,28 900 +16,29 900 +2,29 900 +1002.31,34 901 +31,34 901 +1004.10,21 902 +1,22 902 +1,26 902 +1005.0,1 903 +1009.1,7 904 +1010.6,12 905 +14,25 906 +1011.2,16 907 +1012.6,17 908 +6,17 908 +1013.3,15 909 +1014.3,6 910 +1016.2,55 911 +8,11 911 +24,32 911 +12,32 911 +12,50 911 +12,54 911 +12,54 912 +2,55 911 +2,55 911 +2,55 913 +2,55 914 +1010.27,30 915 +27,30 915 +1018.1,15 916 +1019.1,14 917 +1020.5,11 918 +13,24 919 +1021.1,82 920 +7,10 920 +66,74 920 +12,74 920 +12,76 920 +12,81 920 +12,81 921 +1,82 920 +1,82 920 +1,82 922 +1022.0,1 923 +1026.1,25 924 +18,19 924 +21,24 924 +1,25 924 +1,25 924 +1027.1,44 925 +22,28 925 +29,32 925 +34,41 925 +42,43 925 +1,44 925 +1028.1,46 926 +17,33 926 +34,45 926 +1,46 926 +1,46 926 +1029.5,14 927 +1030.2,30 928 +19,21 928 +23,29 928 +2,30 928 +2,30 928 +1031.6,11 929 +1032.3,45 930 +10,32 930 +33,34 930 +35,37 930 +38,44 930 +3,45 930 +3,45 930 +1033.3,16 931 +12,15 931 +3,16 931 +3,16 932 +1036.3,16 933 +12,15 933 +3,16 933 +1037.3,15 934 +1038.8,14 935 +16,21 936 +1039.4,26 937 +20,23 937 +24,25 937 +4,26 937 +4,26 937 +1040.4,20 938 +15,19 938 +4,20 938 +4,20 938 +1041.8,19 939 +1042.5,10 940 +1038.23,26 941 +23,26 941 +1046.1,17 942 +1047.0,1 943 +1051.5,16 944 +1052.2,8 945 +1053.21,24 946 +1054.7,18 947 +1055.6,13 948 +26,33 948 +17,34 948 +17,34 948 +1056.3,14 949 +1057.6,13 950 +6,18 950 +1058.3,73 951 +9,12 951 +34,41 951 +27,41 951 +14,41 951 +14,72 951 +14,72 952 +3,73 951 +3,73 951 +3,73 953 +3,73 954 +1060.9,16 955 +3,23 955 +1054.20,34 956 +20,34 956 +1062.1,11 957 +1063.0,1 958 +1067.1,25 959 +18,19 959 +21,24 959 +1,25 959 +1,25 959 +1068.1,44 960 +22,28 960 +29,32 960 +34,41 960 +42,43 960 +1,44 960 +1069.6,19 961 +15,18 961 +6,19 961 +6,19 961 +6,19 961 +23,50 961 +29,32 961 +34,49 961 +23,50 961 +23,50 961 +23,57 961 +23,57 962 +59,68 963 +59,68 963 +1070.1,13 964 +9,12 964 +1,13 964 +1071.1,17 965 +1072.0,1 966 +1076.1,18 967 +1077.1,10 968 +1078.7,18 969 +1079.28,35 970 +3,8 970 +3,8 971 +3,8 972 +3,8 973 +1080.6,18 974 +20,28 975 +20,28 976 +1078.20,34 977 +20,34 977 +1082.6,10 978 +1083.15,18 979 +20,24 979 +26,30 979 +32,35 979 +2,49 979 +2,49 980 +2,49 981 +2,49 982 +1084.0,1 983 +1088.63,66 984 +1089.7,23 985 +1090.25,37 986 +1091.6,18 987 +1092.10,29 988 +3,37 988 +3,37 989 +3,37 990 +3,37 991 +3,37 992 +3,37 993 +3,37 994 +3,37 995 +3,37 996 +1089.25,49 997 +25,49 997 +1094.1,17 998 +1095.0,1 999 +1099.1,25 1000 +18,19 1000 +21,24 1000 +1,25 1000 +1,25 1000 +1100.1,44 1001 +22,28 1001 +29,32 1001 +34,41 1001 +42,43 1001 +1,44 1001 +1101.6,12 1002 +14,29 1003 +1102.2,42 1004 +11,12 1004 +21,33 1004 +14,41 1004 +2,42 1004 +2,42 1004 +1101.31,34 1005 +31,34 1005 +1103.5,9 1006 +1104.2,19 1007 +1105.8,19 1008 +1106.26,33 1009 +1107.10,20 1010 +1108.4,63 1011 +15,20 1011 +22,28 1011 +47,53 1011 +37,54 1011 +30,62 1011 +4,63 1011 +1107.22,34 1012 +22,34 1012 +22,34 1013 +22,34 1014 +22,34 1015 +22,34 1016 +22,34 1017 +1105.21,35 1018 +21,35 1018 +1110.6,16 1019 +1111.3,16 1020 +12,15 1020 +3,16 1020 +3,16 1021 +1113.1,17 1022 +1114.0,1 1023 +1118.1,25 1024 +18,19 1024 +21,24 1024 +1,25 1024 +1,25 1024 +1119.22,36 1025 +32,35 1025 +22,36 1025 +22,36 1025 +1,52 1025 +1,52 1025 +37,40 1025 +42,49 1025 +50,51 1025 +1,52 1025 +1122.5,18 1026 +1123.15,27 1027 +2,35 1027 +1124.2,23 1028 +13,16 1028 +17,18 1028 +19,22 1028 +2,23 1028 +2,23 1029 +1127.6,18 1030 +6,34 1030 +1128.3,49 1031 +15,18 1031 +20,32 1031 +20,41 1031 +20,48 1031 +20,48 1032 +3,49 1031 +3,49 1031 +1129.3,42 1033 +17,29 1033 +17,34 1033 +36,41 1033 +3,42 1033 +3,42 1033 +1130.17,24 1034 +16,31 1034 +3,31 1034 +3,31 1035 +1133.3,51 1036 +15,18 1036 +32,44 1036 +20,50 1036 +3,51 1036 +3,51 1036 +1137.1,21 1037 +15,16 1037 +17,20 1037 +1,21 1037 +1,21 1037 +1138.5,11 1038 +13,26 1039 +22,25 1039 +13,26 1039 +13,26 1040 +1139.10,16 1041 +1140.2,54 1042 +9,41 1042 +42,43 1042 +44,46 1042 +47,53 1042 +2,54 1042 +2,54 1042 +1141.1,17 1043 +1142.0,1 1044 +1146.1,46 1045 +17,33 1045 +34,45 1045 +1,46 1045 +1,46 1045 +1147.5,14 1046 +1148.2,49 1047 +14,16 1047 +18,25 1047 +26,38 1047 +26,44 1047 +45,48 1047 +2,49 1047 +2,49 1047 +1149.2,14 1048 +2,25 1048 +1150.6,18 1049 +6,34 1049 +38,50 1049 +38,66 1049 +75,76 1050 +68,76 1050 +1151.9,10 1051 +2,10 1051 +1153.13,14 1052 +6,14 1052 +1165.6,12 1053 +14,29 1054 +1166.6,18 1055 +6,33 1055 +42,43 1056 +35,43 1056 +1165.31,34 1057 +31,34 1057 +1167.8,10 1058 +1,10 1058 +1172.1,49 1059 +17,35 1059 +37,48 1059 +1,49 1059 +1,49 1059 +1173.5,14 1060 +1174.2,43 1061 +14,16 1061 +18,22 1061 +24,36 1061 +24,42 1061 +2,43 1061 +2,43 1061 +1175.2,17 1062 +13,16 1062 +2,17 1062 +2,17 1062 +1176.2,51 1063 +21,39 1063 +40,50 1063 +2,51 1063 +2,51 1063 +1177.6,16 1064 +1178.3,22 1065 +8,11 1065 +17,21 1065 +3,22 1065 +3,22 1065 +1179.7,15 1066 +1180.15,37 1067 +29,30 1067 +31,36 1067 +15,37 1067 +15,37 1067 +1181.14,20 1068 +4,20 1068 +4,20 1069 +1182.4,25 1070 +15,18 1070 +19,20 1070 +21,24 1070 +4,25 1070 +4,25 1071 +4,25 1072 +4,25 1073 +1184.10,11 1074 +3,11 1074 +3,11 1075 +1187.1,53 1076 +8,40 1076 +41,42 1076 +43,45 1076 +46,52 1076 +1,53 1076 +1,53 1076 +1188.8,10 1077 +1,10 1077 +1193.1,13 1078 +1,24 1078 +1194.5,17 1079 +5,31 1079 +1195.2,52 1080 +8,11 1080 +25,37 1080 +13,43 1080 +13,47 1080 +13,51 1080 +13,51 1081 +2,52 1080 +2,52 1080 +2,52 1082 +2,52 1083 +1196.10,22 1084 +10,38 1084 +1197.2,41 1085 +16,28 1085 +16,33 1085 +35,40 1085 +2,41 1085 +2,41 1085 +1198.2,65 1086 +8,11 1086 +13,25 1086 +13,34 1086 +13,42 1086 +50,59 1086 +49,64 1086 +43,64 1086 +13,64 1086 +13,64 1087 +13,64 1088 +2,65 1086 +2,65 1086 +2,65 1089 +1200.1,21 1090 +7,10 1090 +12,20 1090 +1,21 1090 +1,21 1090 +1,21 1091 +1201.0,1 1092 +1211.5,12 1093 +1212.2,47 1094 +18,34 1094 +35,46 1094 +2,47 1094 +2,47 1094 +1213.6,15 1095 +1214.3,55 1096 +10,42 1096 +43,44 1096 +45,47 1096 +48,54 1096 +3,55 1096 +3,55 1096 +1215.10,12 1097 +3,12 1097 +1218.3,29 1098 +15,17 1098 +19,28 1098 +3,29 1098 +3,29 1098 +3,29 1099 +1220.12,20 1100 +1,30 1100 +1221.6,12 1101 +14,25 1102 +1222.2,16 1103 +1223.2,59 1104 +10,13 1104 +15,42 1104 +15,55 1104 +15,58 1104 +15,58 1105 +2,59 1104 +2,59 1104 +2,59 1106 +1224.2,69 1107 +10,13 1107 +15,38 1107 +15,51 1107 +15,54 1107 +15,65 1107 +15,68 1107 +15,68 1108 +2,69 1107 +2,69 1107 +2,69 1109 +2,69 1110 +1221.27,30 1111 +27,30 1111 +1226.13,59 1112 +27,43 1112 +45,58 1112 +13,59 1112 +13,59 1112 +1227.5,12 1113 +1228.9,11 1114 +2,11 1114 +1229.1,12 1115 +1230.1,9 1116 +1231.1,9 1117 +1232.1,13 1118 +1233.11,45 1119 +17,20 1119 +22,44 1119 +11,45 1119 +11,45 1119 +1,45 1119 +1,45 1120 +1234.1,7 1121 +1235.1,11 1122 +1236.6,11 1123 +13,24 1124 +1237.2,13 1125 +16,23 1125 +16,23 1125 +2,28 1125 +2,28 1126 +1238.10,21 1127 +6,21 1127 +6,25 1127 +45,56 1127 +41,56 1127 +41,60 1127 +29,40 1127 +29,61 1127 +29,68 1127 +1239.3,14 1128 +17,28 1128 +34,45 1128 +30,45 1128 +30,47 1128 +17,28 1128 +3,48 1128 +1241.2,12 1129 +1242.7,13 1130 +19,30 1131 +15,30 1131 +1243.22,32 1132 +22,32 1132 +7,18 1132 +7,32 1132 +7,32 1133 +1244.4,13 1134 +1245.4,9 1135 +1242.32,35 1136 +32,35 1136 +1248.2,16 1137 +1249.2,1250.58 1138 +1249.8,11 1138 +13,39 1138 +13,53 1138 +1250.13,24 1138 +1249.13,1250.24 1138 +1249.13,1250.46 1138 +1249.13,1250.49 1138 +1249.13,1250.57 1138 +1249.13,1250.57 1139 +1249.2,1250.58 1138 +1249.2,1250.58 1138 +1249.2,1250.58 1140 +1251.6,11 1141 +15,22 1141 +1252.3,19 1142 +1253.3,51 1143 +9,12 1143 +14,29 1143 +14,50 1143 +14,50 1144 +3,51 1143 +3,51 1143 +3,51 1145 +1255.2,13 1146 +2,83 1146 +16,23 1146 +39,40 1146 +41,42 1146 +45,47 1146 +48,50 1146 +9:93.18,73 1146 +0:1255.65,66 1146 +67,82 1146 +2,83 1146 +2,83 1146 +1256.2,1257.44 1147 +1256.13,16 1147 +17,37 1147 +17,65 1147 +17,65 1148 +2,1257.44 1147 +1256.2,1257.44 1147 +1258.2,51 1149 +15,18 1149 +19,33 1149 +35,46 1149 +35,46 1149 +47,50 1149 +2,51 1149 +2,51 1149 +2,51 1150 +1259.2,81 1151 +8,11 1151 +13,32 1151 +13,73 1151 +13,76 1151 +13,80 1151 +13,80 1152 +2,81 1151 +2,81 1151 +2,81 1153 +1260.2,85 1154 +8,11 1154 +13,32 1154 +13,77 1154 +13,80 1154 +13,84 1154 +13,84 1155 +2,85 1154 +2,85 1154 +2,85 1156 +1261.2,81 1157 +8,11 1157 +13,32 1157 +13,73 1157 +13,76 1157 +13,80 1157 +13,80 1158 +2,81 1157 +2,81 1157 +2,81 1159 +1262.2,85 1160 +8,11 1160 +13,32 1160 +13,71 1160 +13,74 1160 +13,84 1160 +13,84 1161 +2,85 1160 +2,85 1160 +2,85 1162 +1263.15,57 1163 +21,24 1163 +26,41 1163 +26,56 1163 +26,56 1164 +15,57 1163 +15,57 1163 +2,57 1163 +2,57 1165 +1264.7,21 1166 +11,13 1166 +11,13 1166 +15,20 1166 +2,21 1166 +1265.7,19 1167 +31,38 1167 +28,38 1167 +23,38 1167 +43,56 1167 +1266.3,15 1168 +1267.3,10 1169 +1268.3,9 1170 +1269.3,12 1171 +1271.6,14 1172 +1272.3,1273.46 1173 +1272.9,12 1173 +50,57 1173 +43,57 1173 +14,57 1173 +14,1273.18 1173 +35,44 1173 +33,44 1173 +26,45 1173 +19,45 1173 +1272.14,1273.45 1173 +1272.14,1273.45 1174 +1272.14,1273.45 1175 +1272.3,1273.46 1173 +1272.3,1273.46 1173 +1272.3,1273.46 1176 +1275.2,77 1177 +8,11 1177 +13,33 1177 +13,42 1177 +43,53 1177 +13,53 1177 +13,53 1178 +13,65 1177 +66,76 1177 +13,76 1177 +13,76 1179 +13,76 1180 +2,77 1177 +2,77 1177 +2,77 1181 +1276.2,93 1182 +8,11 1182 +13,32 1182 +13,41 1182 +49,56 1182 +42,56 1182 +13,56 1182 +13,56 1183 +13,68 1182 +69,79 1182 +13,79 1182 +13,79 1184 +13,92 1182 +13,92 1185 +2,93 1182 +2,93 1182 +2,93 1186 +1278.2,38 1187 +8,11 1187 +13,30 1187 +13,37 1187 +13,37 1188 +2,38 1187 +2,38 1187 +2,38 1189 +1279.7,19 1190 +25,33 1191 +21,33 1191 +1280.3,1281.53 1192 +1280.9,12 1192 +14,26 1192 +14,49 1192 +50,57 1192 +14,62 1192 +14,67 1192 +1281.30,37 1192 +1280.14,1281.41 1192 +1280.14,1281.45 1192 +1280.14,1281.48 1192 +1280.14,1281.52 1192 +1280.14,1281.52 1193 +1280.3,1281.53 1192 +1280.3,1281.53 1192 +1280.3,1281.53 1194 +1279.35,38 1195 +35,38 1195 +1283.6,33 1196 +15,26 1196 +15,26 1196 +27,32 1196 +6,33 1196 +6,33 1196 +6,33 1196 +37,45 1196 +1284.3,23 1197 +17,20 1197 +21,22 1197 +3,23 1197 +3,23 1197 +1285.2,7 1198 +2,7 1199 +2,7 1200 +1236.26,29 1201 +26,29 1201 +1287.5,13 1202 +1288.2,14 1203 +1289.1,14 1204 +10,13 1204 +1,14 1204 +1290.1,40 1205 +15,18 1205 +20,39 1205 +1,40 1205 +1,40 1205 +1291.20,35 1206 +25,29 1206 +31,34 1206 +20,35 1206 +20,35 1206 +14,18 1206 +14,36 1206 +1,36 1206 +1,36 1207 +1292.19,34 1208 +24,28 1208 +30,33 1208 +19,34 1208 +19,34 1208 +19,36 1208 +14,38 1208 +14,18 1208 +14,38 1208 +1,38 1208 +1,38 1209 +1293.5,19 1210 +1294.2,73 1211 +8,11 1211 +42,55 1211 +13,55 1211 +13,59 1211 +60,72 1211 +13,72 1211 +13,72 1212 +13,72 1213 +2,73 1211 +2,73 1211 +2,73 1214 +1295.13,18 1215 +5,18 1215 +1296.2,71 1216 +8,11 1216 +46,53 1216 +39,53 1216 +13,53 1216 +13,57 1216 +58,70 1216 +13,70 1216 +13,70 1217 +13,70 1218 +2,71 1216 +2,71 1216 +2,71 1219 +1297.27,61 1220 +33,36 1220 +38,60 1220 +27,61 1220 +27,61 1220 +23,61 1220 +23,61 1221 +18,62 1220 +1,62 1220 +1298.1,44 1222 +16,19 1222 +21,43 1222 +1,44 1222 +1,44 1222 +1300.5,15 1223 +27,36 1224 +17,45 1224 +17,45 1225 +1301.6,25 1226 +1302.6,11 1227 +13,23 1228 +1303.3,83 1229 +9,12 1229 +46,54 1229 +14,54 1229 +14,67 1229 +68,82 1229 +14,82 1229 +14,82 1230 +14,82 1231 +3,83 1229 +3,83 1229 +3,83 1232 +1302.25,28 1233 +25,28 1233 +1305.1,75 1234 +7,10 1234 +12,59 1234 +12,63 1234 +12,70 1234 +12,74 1234 +12,74 1235 +1,75 1234 +1,75 1234 +1,75 1236 +1306.1,21 1237 +7,10 1237 +12,20 1237 +1,21 1237 +1,21 1237 +1,21 1238 +1307.8,9 1239 +1,9 1239 +1325.9,16 1240 +9,20 1240 +5,21 1240 +5,28 1240 +1326.13,20 1241 +13,24 1241 +8,11 1241 +8,25 1241 +2,35 1241 +2,35 1242 +2,35 1243 +1327.14,21 1244 +14,25 1244 +10,26 1244 +10,33 1244 +1328.13,20 1245 +13,24 1245 +8,11 1245 +8,25 1245 +2,34 1245 +2,34 1246 +1329.9,16 1247 +9,20 1247 +5,21 1247 +5,28 1247 +1330.13,20 1248 +13,24 1248 +8,11 1248 +8,25 1248 +8,37 1248 +2,44 1248 +2,44 1249 +1332.1,23 1250 +14,17 1250 +19,22 1250 +1,23 1250 +1,23 1250 +1333.5,12 1251 +16,20 1251 +16,27 1251 +29,69 1252 +40,62 1252 +63,66 1252 +67,68 1252 +29,69 1252 +29,69 1252 +1334.8,9 1253 +1,9 1253 +1339.1,24 1254 +18,19 1254 +20,23 1254 +1,24 1254 +1,24 1254 +1340.1,44 1255 +22,28 1255 +29,32 1255 +34,41 1255 +42,43 1255 +1,44 1255 +1341.1,14 1256 +10,13 1256 +1,14 1256 +1342.6,17 1257 +19,29 1258 +1343.2,27 1259 +16,19 1259 +20,26 1259 +2,27 1259 +2,27 1259 +1342.31,43 1260 +31,43 1260 +1344.1,17 1261 +1345.0,1 1262 +1349.1,25 1263 +18,19 1263 +21,24 1263 +1,25 1263 +1,25 1263 +1350.1,44 1264 +22,28 1264 +29,32 1264 +34,41 1264 +42,43 1264 +1,44 1264 +1351.5,12 1265 +1352.7,13 1266 +15,26 1267 +1353.7,18 1268 +7,18 1268 +1354.8,29 1269 +22,25 1269 +27,28 1269 +8,29 1269 +8,29 1269 +8,34 1269 +36,41 1270 +1352.28,31 1271 +28,31 1271 +1356.6,27 1272 +20,23 1272 +25,26 1272 +6,27 1272 +6,27 1272 +1357.1,17 1273 +1358.0,1 1274 +1363.5,13 1275 +17,44 1275 +26,37 1275 +26,37 1275 +38,43 1275 +17,44 1275 +17,44 1275 +17,44 1275 +1364.2,70 1276 +26,37 1276 +18,37 1276 +18,41 1276 +18,41 1277 +59,69 1276 +2,70 1276 +2,70 1276 +2,70 1278 +1365.6,71 1279 +21,40 1279 +41,52 1279 +21,52 1279 +21,59 1279 +21,59 1280 +60,70 1279 +6,71 1279 +6,71 1279 +1366.5,14 1281 +1367.6,14 1282 +18,45 1282 +27,38 1282 +27,38 1282 +39,44 1282 +18,45 1282 +18,45 1282 +18,45 1282 +1368.3,31 1283 +13,24 1283 +13,24 1283 +25,30 1283 +3,31 1283 +1369.10,30 1284 +24,27 1284 +28,29 1284 +10,30 1284 +10,30 1284 +3,30 1284 +1371.7,60 1285 +29,40 1285 +14,40 1285 +14,47 1285 +14,47 1286 +48,49 1285 +50,52 1285 +53,59 1285 +7,60 1285 +7,60 1285 +1372.9,11 1287 +2,11 1287 +1374.1,31 1288 +10,17 1288 +28,30 1288 +1,31 1288 +1,31 1288 +1375.5,17 1289 +1376.6,14 1290 +18,45 1290 +27,38 1290 +27,38 1290 +39,44 1290 +18,45 1290 +18,45 1290 +18,45 1290 +1377.3,31 1291 +13,24 1291 +13,24 1291 +25,30 1291 +3,31 1291 +1378.10,30 1292 +24,27 1292 +28,29 1292 +10,30 1292 +10,30 1292 +3,30 1292 +1380.7,74 1293 +43,54 1293 +14,54 1293 +14,61 1293 +14,61 1294 +62,63 1293 +64,66 1293 +67,73 1293 +7,74 1293 +7,74 1293 +1381.9,11 1295 +2,11 1295 +1384.13,31 1296 +13,33 1296 +34,52 1296 +34,54 1296 +1385.19,35 1297 +19,26 1297 +33,34 1297 +19,35 1297 +19,35 1297 +2,53 1297 +2,13 1297 +2,13 1297 +2,13 1297 +37,42 1297 +43,46 1297 +48,49 1297 +50,51 1297 +2,53 1297 +1386.2,16 1298 +1387.2,36 1299 +8,11 1299 +12,26 1299 +12,35 1299 +12,35 1300 +2,36 1299 +2,36 1299 +2,36 1301 +1388.2,10 1302 +1389.2,9 1303 +1390.6,14 1304 +1391.3,80 1305 +29,40 1305 +21,40 1305 +21,44 1305 +21,44 1306 +62,73 1305 +74,79 1305 +3,80 1305 +3,80 1305 +1392.3,36 1307 +7,14 1307 +26,28 1307 +30,35 1307 +3,36 1307 +3,36 1307 +1394.11,58 1308 +17,20 1308 +35,43 1308 +22,43 1308 +22,57 1308 +22,57 1309 +11,58 1308 +11,58 1308 +2,58 1308 +2,58 1310 +1395.11,58 1311 +17,20 1311 +35,43 1311 +22,43 1311 +22,57 1311 +22,57 1312 +11,58 1311 +11,58 1311 +2,58 1311 +2,58 1313 +1396.11,60 1314 +17,20 1314 +35,43 1314 +22,43 1314 +22,59 1314 +22,59 1315 +11,60 1314 +11,60 1314 +2,60 1314 +2,60 1316 +1397.12,44 1317 +18,21 1317 +23,43 1317 +12,44 1317 +12,44 1317 +2,44 1317 +2,44 1318 +1398.12,44 1319 +18,21 1319 +23,43 1319 +12,44 1319 +12,44 1319 +2,44 1319 +2,44 1320 +1399.2,1400.60 1321 +1399.8,11 1321 +36,42 1321 +29,42 1321 +13,42 1321 +13,46 1321 +55,61 1321 +48,61 1321 +13,61 1321 +13,61 1322 +13,1400.6 1321 +15,19 1321 +14,23 1321 +7,23 1321 +1399.13,1400.23 1321 +1399.13,1400.23 1323 +1399.13,1400.27 1321 +37,41 1321 +37,43 1321 +36,48 1321 +29,48 1321 +1399.13,1400.48 1321 +1399.13,1400.48 1324 +1399.13,1400.59 1321 +1399.13,1400.59 1325 +1399.2,1400.60 1321 +1399.2,1400.60 1321 +1399.2,1400.60 1326 +1401.7,15 1327 +19,25 1327 +40,51 1328 +40,51 1328 +52,57 1328 +27,71 1328 +27,71 1329 +27,71 1330 +1403.8,9 1331 +1,9 1331 +1408.1,17 1332 +1409.8,18 1333 +1410.2,14 1334 +1411.6,21 1335 +25,44 1335 +53,54 1336 +46,54 1336 +1412.2,14 1337 +2,14 1338 +2,14 1338 +1414.8,9 1339 +1,9 1339 +1420.1,10 1340 +1421.8,24 1341 +1422.2,20 1342 +1423.6,21 1343 +25,44 1343 +1424.3,18 1344 +3,18 1345 +1425.7,61 1346 +19,34 1346 +19,38 1346 +39,56 1346 +19,56 1346 +19,56 1347 +19,60 1346 +19,60 1348 +7,61 1346 +7,61 1346 +1426.2,26 1349 +2,26 1350 +2,26 1350 +1428.1,16 1351 +1429.0,1 1352 +1433.5,18 1353 +1434.2,14 1354 +2,14 1355 +1436.2,13 1356 +1438.1,9 1357 +1439.1,18 1358 +1440.5,18 1359 +20,36 1360 +1441.20,75 1361 +39,46 1361 +48,50 1361 +53,58 1361 +60,74 1361 +20,75 1361 +20,75 1361 +1442.1,27 1362 +1443.1,40 1363 +14,17 1363 +19,27 1363 +29,39 1363 +1,40 1363 +1,40 1363 +1,40 1364 +1444.1,23 1365 +7,10 1365 +12,22 1365 +1,23 1365 +1,23 1365 +1,23 1366 +1445.1,48 1367 +7,10 1367 +12,36 1367 +12,40 1367 +12,47 1367 +12,47 1368 +1,48 1367 +1,48 1367 +1,48 1369 +1446.1,86 1370 +7,10 1370 +12,78 1370 +12,85 1370 +12,85 1371 +1,86 1370 +1,86 1370 +1,86 1372 +1447.1,91 1373 +7,10 1373 +12,83 1373 +12,90 1373 +12,90 1374 +1,91 1373 +1,91 1373 +1,91 1375 +1448.5,13 1376 +17,47 1376 +26,39 1376 +26,39 1376 +41,46 1376 +17,47 1376 +17,47 1376 +17,47 1376 +51,59 1376 +1449.2,73 1377 +26,39 1377 +18,39 1377 +18,43 1377 +18,43 1378 +62,72 1377 +2,73 1377 +2,73 1377 +1450.6,15 1379 +1451.3,33 1380 +12,19 1380 +30,32 1380 +3,33 1380 +3,33 1380 +1452.3,1453.70 1381 +1452.9,12 1381 +35,56 1381 +13,56 1381 +13,1453.14 1381 +15,36 1381 +1452.13,1453.36 1381 +1452.13,1453.36 1382 +1452.13,1453.69 1381 +1452.13,1453.69 1383 +1452.3,1453.70 1381 +1452.3,1453.70 1381 +1452.3,1453.70 1384 +1454.3,40 1385 +16,19 1385 +20,26 1385 +28,34 1385 +36,39 1385 +3,40 1385 +3,40 1385 +3,40 1386 +1455.3,73 1387 +9,12 1387 +14,72 1387 +3,73 1387 +3,73 1387 +3,73 1388 +3,73 1389 +1458.1,72 1390 +7,10 1390 +12,71 1390 +1,72 1390 +1,72 1390 +1,72 1391 +1459.5,18 1392 +1460.2,59 1393 +8,11 1393 +13,58 1393 +2,59 1393 +2,59 1393 +2,59 1394 +1461.2,59 1395 +8,11 1395 +13,58 1395 +2,59 1395 +2,59 1395 +2,59 1396 +2,59 1397 +1463.7,78 1398 +13,16 1398 +18,77 1398 +7,78 1398 +7,78 1398 +7,78 1399 +1464.6,19 1400 +6,7 1400 +11,18 1400 +6,19 1400 +6,19 1400 +6,19 1400 +1465.2,22 1401 +12,15 1401 +17,18 1401 +20,21 1401 +2,22 1401 +2,22 1402 +1467.2,40 1403 +8,11 1403 +13,39 1403 +2,40 1403 +2,40 1403 +2,40 1404 +1468.1,33 1405 +20,23 1405 +25,32 1405 +1,33 1405 +1469.1,45 1406 +22,25 1406 +41,44 1406 +34,44 1406 +27,44 1406 +27,44 1406 +27,44 1407 +1,45 1406 +1472.9,17 1408 +9,21 1408 +9,21 1409 +9,21 1408 +1474.9,17 1408 +9,21 1408 +9,21 1410 +9,21 1408 +1476.11,19 1408 +11,19 1408 +1484.12,20 1408 +12,24 1408 +12,24 1411 +12,24 1408 +1485.12,20 1408 +12,20 1408 +1486.12,20 1408 +12,20 1408 +1471.2,8 1408 +2,8 1408 +2,8 1408 +2,8 1408 +1473.3,23 1412 +16,19 1412 +21,22 1412 +3,23 1412 +3,23 1408 +1475.3,23 1413 +15,18 1413 +20,22 1413 +3,23 1413 +3,23 1414 +3,23 1408 +1477.7,18 1415 +1478.4,11 1416 +4,11 1417 +1479.4,9 1418 +1481.7,22 1419 +7,22 1420 +1482.4,9 1421 +4,9 1422 +4,9 1408 +4,9 1408 +4,9 1408 +1487.7,22 1423 +1488.4,9 1424 +1490.4,31 1425 +20,23 1425 +25,30 1425 +4,31 1425 +4,31 1425 +4,31 1426 +4,31 1408 +1493.8,11 1427 +1,11 1427 +1524.1,25 1428 +18,19 1428 +21,24 1428 +1,25 1428 +1,25 1428 +1525.1,48 1429 +22,28 1429 +30,33 1429 +35,42 1429 +44,47 1429 +1,48 1429 +1526.5,13 1430 +1527.7,15 1431 +23,34 1432 +17,34 1432 +1528.3,27 1433 +9,12 1433 +14,26 1433 +14,26 1433 +3,27 1433 +3,27 1433 +3,27 1434 +1527.36,41 1435 +36,41 1435 +1530.2,14 1436 +10,13 1436 +2,14 1436 +1531.6,19 1437 +15,18 1437 +6,19 1437 +6,19 1437 +6,19 1437 +21,58 1438 +27,30 1438 +32,57 1438 +21,58 1438 +21,58 1438 +21,58 1439 +1533.1,14 1440 +10,13 1440 +1,14 1440 +1534.8,22 1441 +15,21 1441 +8,22 1441 +8,22 1441 +26,40 1441 +33,39 1441 +26,40 1441 +26,40 1441 +44,58 1441 +51,57 1441 +44,58 1441 +44,58 1441 +62,65 1441 +44,65 1441 +26,65 1441 +1,65 1441 +1,65 1441 +1,65 1442 +1535.5,32 1443 +14,17 1443 +25,31 1443 +22,31 1443 +19,31 1443 +19,31 1444 +5,32 1443 +5,32 1443 +5,37 1443 +1536.6,30 1445 +15,18 1445 +23,29 1445 +20,29 1445 +20,29 1446 +6,30 1445 +6,30 1445 +6,35 1445 +1537.3,24 1447 +12,15 1447 +17,23 1447 +3,24 1447 +3,24 1447 +1538.5,13 1448 +1539.2,31 1449 +14,17 1449 +19,21 1449 +23,26 1449 +28,30 1449 +2,31 1449 +1540.2,47 1450 +18,21 1450 +23,46 1450 +2,47 1450 +2,47 1450 +1541.2,45 1451 +17,20 1451 +22,44 1451 +2,45 1451 +2,45 1451 +2,45 1452 +2,45 1453 +1545.1,17 1454 +1546.0,1 1455 +1550.1,63 1456 +30,40 1456 +19,40 1456 +19,49 1456 +19,49 1457 +51,62 1456 +1,63 1456 +1,63 1456 +1551.5,16 1458 +1552.2,52 1459 +13,17 1459 +19,39 1459 +41,51 1459 +2,52 1459 +2,52 1459 +1553.0,1 1460 +1557.1,57 1461 +7,10 1461 +11,56 1461 +1,57 1461 +1,57 1461 +1,57 1462 +1558.1,57 1463 +7,10 1463 +11,56 1463 +1,57 1463 +1,57 1463 +1,57 1464 +1559.1,49 1465 +20,37 1465 +38,48 1465 +1,49 1465 +1,49 1465 +1560.5,15 1466 +1561.2,21 1467 +7,10 1467 +16,20 1467 +2,21 1467 +2,21 1467 +1562.6,14 1468 +1563.9,14 1469 +9,18 1469 +7,19 1469 +7,27 1469 +36,41 1470 +36,45 1470 +29,46 1470 +1564.24,38 1471 +24,38 1471 +24,38 1471 +3,39 1471 +3,39 1471 +3,39 1471 +3,39 1471 +1565.3,1566.29 1472 +1565.23,42 1472 +44,52 1472 +54,61 1472 +63,70 1472 +63,74 1472 +1566.7,14 1472 +15,21 1472 +22,28 1472 +1565.3,1566.29 1472 +1565.3,1566.29 1472 +1567.3,25 1473 +20,24 1473 +3,25 1473 +3,25 1473 +1568.3,39 1474 +20,38 1474 +20,21 1474 +20,38 1474 +3,39 1474 +3,39 1474 +1569.3,63 1475 +11,14 1475 +15,58 1475 +15,62 1475 +15,62 1476 +3,63 1475 +3,63 1475 +3,63 1477 +1570.3,63 1478 +11,14 1478 +15,58 1478 +15,62 1478 +15,62 1479 +3,63 1478 +3,63 1478 +3,63 1480 +3,63 1481 +3,63 1482 +3,63 1483 +1573.5,14 1484 +5,19 1484 +1574.2,29 1485 +1575.5,14 1486 +5,19 1486 +1576.2,29 1487 +1577.1,21 1488 +7,10 1488 +12,20 1488 +1,21 1488 +1,21 1488 +1,21 1489 +1578.0,1 1490 +1582.3,8 1491 +1,15 1491 +1583.1,9 1492 +1584.1,11 1493 +1585.1,11 1494 +1586.6,12 1495 +18,23 1496 +14,23 1496 +1587.6,10 1497 +6,16 1497 +20,24 1497 +20,30 1497 +1588.7,12 1498 +16,25 1498 +16,29 1498 +34,40 1499 +31,47 1499 +1589.17,20 1500 +9,10 1500 +9,21 1500 +3,21 1500 +3,21 1501 +1590.3,14 1502 +1591.3,12 1503 +3,12 1504 +1593.7,16 1505 +1586.25,28 1506 +25,28 1506 +1595.5,11 1507 +1,15 1507 +1596.8,14 1508 +18,23 1508 +18,30 1508 +32,35 1509 +32,35 1509 +1597.12,15 1510 +8,10 1510 +8,16 1510 +1,16 1510 +1602.1,49 1511 +13,16 1511 +18,48 1511 +1,49 1511 +1,49 1511 +1603.1,49 1512 +13,16 1512 +18,48 1512 +1,49 1512 +1,49 1512 +1604.5,13 1513 +34,35 1514 +27,35 1514 +1605.28,34 1515 +28,38 1515 +24,26 1515 +24,39 1515 +9,15 1515 +9,19 1515 +5,7 1515 +5,20 1515 +5,39 1515 +5,39 1516 +5,39 1517 +48,49 1518 +41,49 1518 +1606.8,9 1519 +1,9 1519 +1611.22,36 1520 +22,36 1520 +22,36 1520 +1,37 1520 +1,37 1520 +1,37 1520 +1,37 1520 +1612.1,48 1521 +17,34 1521 +36,47 1521 +1,48 1521 +1,48 1521 +1613.5,14 1522 +1614.33,1615.58 1523 +1614.45,64 1523 +1615.4,12 1523 +14,21 1523 +23,30 1523 +23,34 1523 +36,43 1523 +44,50 1523 +51,57 1523 +1614.33,1615.58 1523 +1614.33,1615.58 1523 +1614.24,1615.59 1523 +1614.24,1615.59 1523 +1614.24,1615.59 1524 +1614.24,1615.59 1523 +1614.24,1615.59 1523 +1614.2,1615.60 1523 +1614.14,16 1523 +18,22 1523 +18,22 1523 +18,22 1525 +2,1615.60 1523 +1614.2,1615.60 1523 +1617.0,1 1526 +1621.1,52 1527 +20,40 1527 +41,51 1527 +1,52 1527 +1,52 1527 +1622.5,15 1528 +1623.6,12 1529 +14,19 1530 +1624.3,22 1531 +8,11 1531 +17,21 1531 +3,22 1531 +3,22 1531 +1625.7,15 1532 +7,15 1533 +17,22 1534 +1626.7,12 1535 +1627.15,39 1536 +29,30 1536 +31,38 1536 +15,39 1536 +15,39 1536 +1628.25,31 1537 +22,31 1537 +18,31 1537 +18,31 1538 +4,31 1537 +1629.8,14 1539 +18,28 1539 +1630.5,55 1540 +11,14 1540 +16,54 1540 +5,55 1540 +5,55 1540 +5,55 1541 +5,55 1542 +1631.9,57 1543 +15,18 1543 +20,56 1543 +9,57 1543 +9,57 1543 +9,57 1544 +1632.4,78 1545 +10,13 1545 +41,46 1545 +34,46 1545 +14,46 1545 +14,67 1545 +14,71 1545 +14,77 1545 +14,77 1546 +4,78 1545 +4,78 1545 +4,78 1547 +4,78 1548 +4,78 1549 +4,78 1550 +4,78 1551 +1623.21,24 1552 +21,24 1552 +1635.2,22 1553 +8,11 1553 +13,21 1553 +2,22 1553 +2,22 1553 +2,22 1554 +1637.0,1 1555 +1641.1,8 1556 +1642.16,21 1557 +5,13 1557 +5,21 1557 +30,31 1558 +23,31 1558 +1643.6,12 1559 +23,30 1560 +19,30 1560 +33,43 1560 +18,44 1560 +14,44 1560 +1644.20,28 1561 +18,28 1561 +14,15 1561 +14,29 1561 +6,29 1561 +6,29 1562 +31,36 1563 +1643.46,49 1564 +46,49 1564 +1646.8,11 1565 +1,11 1565 +1651.1,1655.16 1566 +1651.33,40 1566 +1652.7,20 1566 +1653.7,42 1566 +1654.7,10 1566 +1655.7,15 1566 +1651.1,1655.16 1566 +1651.1,1655.16 1566 +1656.5,18 1567 +22,32 1567 +22,39 1567 +51,62 1567 +51,66 1567 +43,67 1567 +43,74 1567 +1657.2,8 1568 +1658.1,8 1569 +1659.6,12 1570 +14,25 1571 +1660.6,17 1572 +6,17 1572 +1661.3,23 1573 +13,14 1573 +15,22 1573 +3,23 1573 +3,23 1573 +1662.7,13 1574 +1663.9,20 1575 +9,20 1575 +9,28 1575 +4,28 1575 +4,28 1576 +1664.7,13 1577 +1665.4,22 1578 +1666.4,9 1579 +1668.12,18 1580 +1669.4,19 1581 +1670.3,14 1582 +1659.27,30 1583 +27,30 1583 +1673.5,12 1584 +14,27 1585 +1674.1,51 1586 +8,38 1586 +39,40 1586 +41,43 1586 +44,50 1586 +1,51 1586 +1,51 1586 +1675.0,1 1587 +1681.1,23 1588 +1682.1,27 1589 +1683.1,26 1590 +1684.1,51 1591 +22,28 1591 +30,31 1591 +33,41 1591 +43,50 1591 +1,51 1591 +1685.1,50 1592 +16,17 1592 +18,22 1592 +23,30 1592 +32,40 1592 +42,49 1592 +1,50 1592 +1686.1,17 1593 +1688.9,17 1594 +9,17 1594 +1700.9,16 1594 +9,16 1594 +1687.1,7 1594 +1,7 1594 +1,7 1594 +1,7 1594 +1689.3,23 1595 +1690.7,18 1596 +1691.8,25 1597 +1692.16,51 1598 +30,41 1598 +43,50 1598 +16,51 1598 +16,51 1598 +1693.10,20 1599 +1694.6,25 1600 +18,24 1600 +6,25 1600 +6,25 1600 +1693.22,34 1601 +22,34 1601 +22,34 1602 +22,34 1603 +1696.4,13 1604 +9,12 1604 +4,13 1604 +1697.11,12 1605 +4,12 1605 +1699.15,29 1606 +20,21 1606 +23,28 1606 +15,29 1606 +15,29 1606 +8,29 1606 +1701.3,23 1607 +1702.3,23 1608 +1703.10,11 1609 +3,11 1609 +1710.1,46 1610 +17,33 1610 +34,45 1610 +1,46 1610 +1,46 1610 +1711.5,14 1611 +1712.2,28 1612 +14,16 1612 +18,27 1612 +2,28 1612 +2,28 1612 +1713.14,33 1613 +24,32 1613 +14,33 1613 +14,33 1613 +1714.6,13 1614 +1715.10,12 1615 +3,12 1615 +1716.9,23 1616 +2,23 1616 +1718.8,10 1617 +1,10 1617 +1723.1,30 1618 +21,29 1618 +1,30 1618 +1,30 1618 +1724.5,11 1619 +1725.2,81 1620 +15,68 1620 +69,70 1620 +71,73 1620 +74,80 1620 +2,81 1620 +2,81 1620 +1726.6,13 1621 +1727.10,11 1622 +3,11 1622 +1728.2,24 1623 +1729.2,39 1624 +21,29 1624 +31,38 1624 +2,39 1624 +1730.2,18 1625 +1731.2,13 1626 +1732.6,18 1627 +1733.10,11 1628 +3,11 1628 +1734.9,31 1629 +22,30 1629 +9,31 1629 +9,31 1629 +2,31 1629 +1736.13,14 1630 +6,14 1630 +1741.1,25 1631 +18,19 1631 +21,24 1631 +1,25 1631 +1,25 1631 +1742.1,43 1632 +22,28 1632 +29,32 1632 +33,40 1632 +41,42 1632 +1,43 1632 +1744.6,30 1633 +21,29 1633 +6,30 1633 +6,30 1633 +6,35 1633 +1745.3,8 1634 +1746.2,18 1635 +13,17 1635 +2,18 1635 +2,18 1635 +2,18 1635 +1748.1,17 1636 +1749.0,1 1637 +1753.13,30 1638 +23,24 1638 +26,29 1638 +13,30 1638 +13,30 1638 +1,30 1638 +1754.1,17 1639 +1756.5,15 1640 +1757.2,1761.17 1641 +1757.34,41 1641 +1758.8,21 1641 +1759.16,27 1641 +8,27 1641 +8,50 1641 +8,50 1642 +1760.31,34 1641 +19,34 1641 +8,34 1641 +8,34 1641 +8,34 1643 +1761.8,16 1641 +1757.2,1761.17 1641 +1757.2,1761.17 1641 +1762.6,20 1644 +24,35 1644 +24,42 1644 +1763.3,16 1645 +1764.3,9 1646 +1767.6,21 1647 +1770.5,16 1648 +5,23 1648 +1771.2,28 1649 +12,23 1649 +12,23 1649 +24,27 1649 +2,28 1649 +1772.2,25 1650 +2,25 1650 +1773.2,11 1651 +1775.1,13 1652 +1777.5,16 1653 +5,23 1653 +1778.2,13 1654 +1779.2,25 1655 +2,25 1655 +1782.14,26 1656 +14,30 1656 +5,31 1656 +5,38 1656 +1783.14,25 1657 +14,25 1657 +14,32 1657 +2,32 1657 +2,32 1658 +1785.6,30 1659 +6,30 1659 +6,30 1659 +6,30 1659 +6,30 1659 +13,21 1659 +6,30 1659 +6,30 1659 +6,30 1660 +6,30 1659 +6,30 1659 +6,30 1659 +6,30 1659 +1786.2,20 1661 +1788.1,25 1662 +12,20 1662 +21,24 1662 +1,25 1662 +1,25 1662 +1789.22,25 1663 +12,20 1663 +1,26 1663 +1791.13,30 1664 +31,42 1664 +13,42 1664 +1,49 1664 +1,49 1665 +1792.1,35 1666 +26,34 1666 +1,35 1666 +1,35 1666 +1793.1,12 1667 +1794.5,17 1668 +21,46 1668 +30,41 1668 +30,41 1668 +42,45 1668 +21,46 1668 +21,46 1668 +21,46 1668 +50,58 1668 +1795.27,38 1669 +19,38 1669 +2,57 1669 +2,57 1670 +1796.6,33 1671 +19,32 1671 +6,33 1671 +6,33 1671 +6,45 1671 +1797.3,13 1672 +1798.3,27 1673 +3,27 1674 +1800.7,33 1675 +17,28 1675 +17,28 1675 +29,32 1675 +7,33 1675 +7,33 1676 +1802.1,38 1677 +17,25 1677 +27,37 1677 +1,38 1677 +1,38 1677 +1803.5,17 1678 +21,30 1678 +1804.2,16 1679 +1805.2,8 1680 +1808.1,10 1681 +1811.26,29 1682 +26,29 1682 +1812.22,33 1683 +14,33 1683 +1,52 1683 +1,52 1684 +1813.5,12 1685 +30,54 1686 +37,45 1686 +47,53 1686 +30,54 1686 +30,54 1686 +15,18 1686 +20,26 1686 +20,26 1687 +20,26 1688 +1814.6,52 1689 +24,32 1689 +33,44 1689 +46,51 1689 +6,52 1689 +6,52 1689 +1815.5,15 1690 +1816.2,20 1691 +1817.2,8 1692 +1819.5,13 1693 +18,24 1693 +1820.2,48 1694 +20,29 1694 +30,41 1694 +42,47 1694 +2,48 1694 +2,48 1694 +1821.1,21 1695 +1822.1,32 1696 +1823.1,19 1697 +1825.1,23 1698 +1826.5,15 1699 +1827.17,30 1700 +2,30 1700 +2,30 1701 +1829.2,14 1702 +1830.6,17 1703 +6,29 1703 +31,53 1704 +1831.2,27 1705 +1832.2,31 1706 +16,18 1706 +19,22 1706 +23,30 1706 +2,31 1706 +2,31 1706 +1833.2,11 1707 +1834.25,35 1708 +23,45 1708 +16,45 1708 +2,45 1708 +2,45 1709 +1835.2,18 1710 +1836.6,11 1711 +6,11 1712 +13,18 1713 +1837.2,14 1714 +1838.9,20 1715 +1839.3,30 1716 +20,23 1716 +24,27 1716 +28,29 1716 +3,30 1716 +3,30 1716 +1840.7,13 1717 +7,13 1718 +15,20 1719 +1841.7,17 1720 +19,40 1721 +30,33 1721 +34,37 1721 +38,39 1721 +19,40 1721 +19,40 1721 +1842.3,16 1722 +3,16 1722 +3,16 1723 +3,16 1723 +1845.1,21 1724 +1846.1,17 1725 +1847.1,9 1726 +1848.1,10 1727 +1849.5,20 1728 +24,31 1728 +1850.6,12 1729 +1851.3,24 1730 +1852.3,9 1731 +1854.2,23 1732 +14,22 1732 +2,23 1732 +2,23 1732 +1855.2,24 1733 +14,23 1733 +2,24 1733 +2,24 1733 +1856.6,16 1734 +1857.10,1858.31 1735 +1857.22,70 1735 +1858.5,16 1735 +5,16 1735 +17,21 1735 +22,30 1735 +1857.10,1858.31 1735 +1857.10,1858.31 1735 +1857.3,1858.45 1735 +1857.3,1858.45 1735 +1857.3,1858.45 1736 +33,34 1735 +36,37 1735 +38,44 1735 +1857.3,1858.45 1735 +1857.3,1858.45 1735 +1859.2,15 1737 +1860.2,8 1738 +1864.5,13 1739 +1865.15,26 1740 +15,26 1740 +27,30 1740 +2,44 1740 +2,44 1741 +1866.5,15 1742 +17,65 1743 +24,35 1743 +24,35 1743 +24,53 1743 +24,53 1744 +54,55 1743 +56,57 1743 +58,64 1743 +17,65 1743 +17,65 1743 +1867.1,14 1745 +1868.0,1 1746 +1883.1,12 1747 +1884.1,10 1748 +1,10 1749 +1885.15,67 1750 +34,41 1750 +42,44 1750 +46,49 1750 +51,66 1750 +15,67 1750 +15,67 1750 +2,5 1750 +2,5 1751 +2,5 1752 +1886.16,17 1753 +18,19 1753 +22,25 1753 +26,28 1753 +1887.1,59 1754 +10,17 1754 +27,32 1754 +9:90.18,31 1754 +0:1887.45,46 1754 +47,58 1754 +1,59 1754 +1,59 1754 +1888.1,59 1755 +10,17 1755 +27,32 1755 +9:90.18,31 1755 +0:1888.45,46 1755 +47,58 1755 +1,59 1755 +1,59 1755 +1889.1,59 1756 +10,17 1756 +27,32 1756 +9:90.18,31 1756 +0:1889.45,46 1756 +47,58 1756 +1,59 1756 +1,59 1756 +1890.1,58 1757 +10,17 1757 +27,32 1757 +9:90.18,31 1757 +0:1890.45,46 1757 +47,57 1757 +1,58 1757 +1,58 1757 +1891.1,88 1758 +7,10 1758 +12,87 1758 +1,88 1758 +1,88 1758 +1,88 1759 +1892.1,36 1760 +14,17 1760 +19,25 1760 +26,31 1760 +32,35 1760 +1,36 1760 +1,36 1760 +1,36 1761 +1893.1,40 1762 +14,17 1762 +19,27 1762 +29,39 1762 +1,40 1762 +1,40 1762 +1,40 1763 +1894.6,14 1764 +22,37 1765 +16,37 1765 +1895.2,30 1766 +8,11 1766 +13,29 1766 +13,29 1766 +2,30 1766 +2,30 1766 +2,30 1767 +1894.39,44 1768 +39,44 1768 +1896.22,25 1769 +1897.5,11 1770 +15,43 1770 +24,35 1770 +24,35 1770 +37,42 1770 +15,43 1770 +15,43 1770 +15,43 1770 +47,55 1770 +1898.2,65 1771 +11,18 1771 +32,43 1771 +24,43 1771 +24,47 1771 +24,47 1772 +2,65 1771 +2,65 1771 +1899.5,18 1773 +1900.2,18 1774 +1901.5,18 1775 +1902.2,20 1776 +7,15 1776 +2,20 1776 +2,20 1776 +1903.2,20 1777 +7,15 1777 +2,20 1777 +2,20 1777 +1904.2,1905.38 1778 +1904.8,11 1778 +35,43 1778 +13,43 1778 +13,55 1778 +56,64 1778 +13,64 1778 +13,64 1779 +13,1905.37 1778 +1904.13,1905.37 1780 +1904.2,1905.38 1778 +1904.2,1905.38 1778 +1904.2,1905.38 1781 +1906.2,41 1782 +15,18 1782 +20,27 1782 +29,35 1782 +37,40 1782 +2,41 1782 +2,41 1782 +2,41 1783 +1907.2,64 1784 +8,11 1784 +13,63 1784 +2,64 1784 +2,64 1784 +2,64 1785 +1908.2,67 1786 +8,11 1786 +58,66 1786 +51,66 1786 +13,66 1786 +13,66 1787 +2,67 1786 +2,67 1786 +2,67 1788 +1911.1,58 1789 +7,10 1789 +38,49 1789 +12,49 1789 +12,57 1789 +12,57 1790 +1,58 1789 +1,58 1789 +1,58 1791 +1912.1,19 1792 +11,14 1792 +15,16 1792 +17,18 1792 +1,19 1792 +1913.1,20 1793 +1914.1,33 1794 +20,23 1794 +25,32 1794 +1,33 1794 +1915.1,45 1795 +22,25 1795 +41,44 1795 +34,44 1795 +27,44 1795 +27,44 1795 +27,44 1796 +1,45 1795 +1919.9,17 1797 +9,21 1797 +9,21 1798 +9,21 1797 +1921.9,17 1797 +9,21 1797 +9,21 1799 +9,21 1797 +1923.12,18 1797 +12,18 1797 +1918.2,8 1797 +2,8 1797 +2,8 1797 +2,8 1797 +1920.3,23 1800 +16,19 1800 +21,22 1800 +3,23 1800 +3,23 1797 +1922.3,23 1801 +15,18 1801 +20,22 1801 +3,23 1801 +3,23 1802 +3,23 1797 +1924.8,28 1803 +8,17 1803 +21,27 1803 +8,28 1803 +8,28 1803 +8,28 1803 +1925.4,27 1804 +14,17 1804 +18,24 1804 +25,26 1804 +4,27 1804 +1926.4,22 1805 +1928.7,23 1806 +7,23 1807 +25,30 1808 +1929.7,11 1809 +7,15 1809 +7,23 1809 +7,23 1810 +1930.15,23 1811 +15,19 1811 +15,23 1811 +4,23 1811 +4,23 1812 +1931.4,49 1813 +4,9 1813 +17,18 1813 +19,20 1813 +23,26 1813 +27,29 1813 +33,38 1813 +39,42 1813 +44,45 1813 +46,47 1813 +4,49 1813 +1932.8,18 1814 +1933.5,54 1815 +5,10 1815 +18,23 1815 +24,25 1815 +28,31 1815 +32,34 1815 +38,43 1815 +44,47 1815 +49,50 1815 +51,52 1815 +5,54 1815 +1934.4,53 1816 +4,9 1816 +16,18 1816 +19,20 1816 +22,27 1816 +29,30 1816 +31,32 1816 +34,38 1816 +40,48 1816 +40,44 1816 +40,48 1816 +40,52 1816 +40,52 1817 +4,53 1816 +4,53 1816 +1935.4,35 1818 +10,13 1818 +14,34 1818 +4,35 1818 +4,35 1818 +4,35 1819 +4,35 1820 +1937.12,16 1821 +12,20 1821 +12,28 1821 +12,28 1822 +1938.4,62 1823 +10,13 1823 +41,49 1823 +41,45 1823 +41,49 1823 +15,49 1823 +15,61 1823 +15,61 1824 +4,62 1823 +4,62 1823 +4,62 1825 +4,62 1826 +4,62 1797 +1941.1,12 1827 +1942.0,1 1828 +1946.1,8 1829 +1947.5,10 1830 +1948.2,16 1831 +1949.10,38 1832 +16,19 1832 +21,37 1832 +10,38 1832 +10,38 1832 +1,38 1832 +1,38 1833 +1950.10,39 1834 +16,19 1834 +21,38 1834 +10,39 1834 +10,39 1834 +1,39 1834 +1,39 1835 +1951.1,42 1836 +16,19 1836 +21,41 1836 +1,42 1836 +1,42 1836 +1952.5,14 1837 +18,24 1837 +18,31 1837 +1953.7,14 1838 +2,14 1838 +1954.2,17 1839 +1956.19,36 1840 +18,41 1840 +17,46 1840 +1,46 1840 +1957.19,36 1841 +18,41 1841 +17,46 1841 +1,46 1841 +1958.1,57 1842 +7,10 1842 +30,39 1842 +12,39 1842 +12,46 1842 +47,56 1842 +12,56 1842 +12,56 1843 +12,56 1844 +1,57 1842 +1,57 1842 +1,57 1845 +1959.1,32 1846 +7,10 1846 +12,31 1846 +1,32 1846 +1,32 1846 +1,32 1847 +1960.0,1 1848 +1977.15,66 1849 +34,41 1849 +42,44 1849 +45,48 1849 +50,65 1849 +15,66 1849 +15,66 1849 +2,5 1849 +2,5 1850 +2,5 1851 +1978.1,25 1852 +1979.1,36 1853 +14,17 1853 +19,25 1853 +27,35 1853 +1,36 1853 +1,36 1853 +1,36 1854 +1980.6,14 1855 +22,37 1856 +16,37 1856 +1981.2,30 1857 +8,11 1857 +13,29 1857 +13,29 1857 +2,30 1857 +2,30 1857 +2,30 1858 +1980.39,44 1859 +39,44 1859 +1983.5,12 1860 +1985.6,20 1861 +1986.3,22 1862 +8,17 1862 +3,22 1862 +3,22 1862 +1987.3,22 1863 +8,17 1863 +3,22 1863 +3,22 1863 +1988.3,1989.39 1864 +1988.9,12 1864 +35,43 1864 +14,43 1864 +14,55 1864 +56,64 1864 +14,64 1864 +14,64 1865 +14,1989.38 1864 +1988.14,1989.38 1866 +1988.3,1989.39 1864 +1988.3,1989.39 1864 +1988.3,1989.39 1867 +1990.3,42 1868 +16,19 1868 +21,27 1868 +29,36 1868 +38,41 1868 +3,42 1868 +3,42 1868 +3,42 1869 +1991.3,74 1870 +9,12 1870 +14,73 1870 +3,74 1870 +3,74 1870 +3,74 1871 +1992.3,75 1872 +9,12 1872 +14,74 1872 +3,75 1872 +3,75 1872 +3,75 1873 +3,75 1874 +1996.6,20 1875 +1997.3,22 1876 +8,17 1876 +3,22 1876 +3,22 1876 +1998.3,22 1877 +8,17 1877 +3,22 1877 +3,22 1877 +1999.3,2000.39 1878 +1999.9,12 1878 +35,43 1878 +14,43 1878 +14,55 1878 +56,64 1878 +14,64 1878 +14,64 1879 +14,2000.38 1878 +1999.14,2000.38 1880 +1999.3,2000.39 1878 +1999.3,2000.39 1878 +1999.3,2000.39 1881 +2001.3,42 1882 +16,19 1882 +21,27 1882 +29,36 1882 +38,41 1882 +3,42 1882 +3,42 1882 +3,42 1883 +2002.3,57 1884 +9,12 1884 +14,56 1884 +3,57 1884 +3,57 1884 +3,57 1885 +2003.3,51 1886 +9,12 1886 +14,50 1886 +3,51 1886 +3,51 1886 +3,51 1887 +2004.3,51 1888 +9,12 1888 +14,50 1888 +3,51 1888 +3,51 1888 +3,51 1889 +2008.1,19 1890 +11,14 1890 +15,16 1890 +17,18 1890 +1,19 1890 +2009.1,32 1891 +21,24 1891 +25,31 1891 +1,32 1891 +2010.1,33 1892 +20,23 1892 +25,32 1892 +1,33 1892 +2011.1,45 1893 +22,25 1893 +41,44 1893 +34,44 1893 +27,44 1893 +27,44 1893 +27,44 1894 +1,45 1893 +2015.9,17 1895 +9,21 1895 +9,21 1896 +9,21 1895 +2017.9,17 1895 +9,21 1895 +9,21 1897 +9,21 1895 +2019.11,17 1895 +11,17 1895 +2014.2,8 1895 +2,8 1895 +2,8 1895 +2,8 1895 +2016.3,23 1898 +16,19 1898 +21,22 1898 +3,23 1898 +3,23 1895 +2018.3,23 1899 +15,18 1899 +20,22 1899 +3,23 1899 +3,23 1900 +3,23 1895 +2020.7,20 1901 +7,20 1902 +2030.0,1 1903 +2021.7,20 1904 +2022.4,15 1905 +2023.8,17 1906 +19,28 1907 +24,27 1907 +19,28 1907 +2024.4,22 1908 +2025.4,12 1909 +4,12 1910 +4,12 1911 +2030.0,1 1903 +0,1 1912 +0,1 1895 +2034.1,46 1913 +22,25 1913 +22,25 1913 +27,30 1913 +27,30 1913 +32,38 1913 +32,38 1913 +40,43 1913 +40,43 1913 +2035.5,12 1914 +2036.2,20 1915 +2037.2,8 1916 +2039.1,12 1917 +2040.1,20 1918 +2041.1,12 1919 +2043.7,13 1920 +15,20 1921 +2044.3,18 1922 +14,17 1922 +3,18 1922 +3,18 1922 +2045.3,60 1923 +9,12 1923 +40,47 1923 +14,47 1923 +14,59 1923 +14,59 1924 +3,60 1923 +3,60 1923 +3,60 1925 +2046.8,15 1926 +17,22 1927 +2047.8,28 1928 +8,17 1928 +21,27 1928 +8,28 1928 +8,28 1928 +8,28 1928 +2048.4,28 1929 +14,17 1929 +19,25 1929 +26,27 1929 +4,28 1929 +2049.4,22 1930 +2043.22,25 1931 +22,25 1931 +2053.1,19 1932 +2054.0,1 1933 +2062.5,9 1934 +2063.2,23 1935 +13,16 1935 +18,22 1935 +2,23 1935 +2064.10,45 1936 +16,19 1936 +21,44 1936 +10,45 1936 +10,45 1936 +6,45 1936 +6,45 1937 +2065.7,39 1936 +13,16 1936 +18,38 1936 +7,39 1936 +7,39 1936 +3,39 1936 +3,39 1938 +2064.6,2065.39 1936 +2066.17,26 1936 +14,27 1936 +7,28 1936 +3,28 1936 +2064.2,2066.28 1936 +2067.10,30 1939 +10,23 1939 +10,25 1939 +10,25 1940 +10,30 1939 +10,30 1939 +6,30 1939 +2068.3,27 1941 +7,20 1941 +7,22 1941 +7,22 1942 +3,27 1941 +3,27 1941 +2069.2,26 1943 +6,19 1943 +6,21 1943 +6,21 1944 +2,26 1943 +2,26 1943 +2,26 1945 +2072.2,28 1946 +16,19 1946 +21,24 1946 +26,27 1946 +2,28 1946 +2,28 1946 +2073.2,12 1947 +6,7 1947 +2,12 1947 +2,12 1947 +2074.2,12 1948 +6,7 1948 +2,12 1948 +2,12 1948 +2077.11,43 1949 +17,20 1949 +22,42 1949 +11,43 1949 +11,43 1949 +1,43 1949 +1,43 1950 +2079.11,40 1951 +17,20 1951 +22,39 1951 +11,40 1951 +11,40 1951 +1,40 1951 +1,40 1952 +2080.11,39 1953 +17,20 1953 +22,38 1953 +11,39 1953 +11,39 1953 +1,39 1953 +1,39 1954 +2081.12,47 1955 +18,21 1955 +23,46 1955 +12,47 1955 +12,47 1955 +1,47 1955 +1,47 1956 +2083.1,22 1957 +11,14 1957 +16,21 1957 +1,22 1957 +2084.11,45 1958 +17,20 1958 +22,44 1958 +11,45 1958 +11,45 1958 +1,45 1958 +1,45 1959 +2085.9,15 1960 +5,15 1960 +2086.2,12 1961 +2087.1,23 1962 +13,16 1962 +17,22 1962 +1,23 1962 +2088.10,44 1963 +16,19 1963 +21,43 1963 +10,44 1963 +10,44 1963 +1,44 1963 +1,44 1964 +2089.5,11 1965 +15,19 1965 +2090.2,12 1966 +2092.13,21 1967 +10,22 1967 +9,25 1967 +1,29 1967 +2093.1,22 1968 +12,15 1968 +17,21 1968 +1,22 1968 +2094.1,24 1969 +14,17 1969 +19,23 1969 +1,24 1969 +2095.11,46 1970 +17,20 1970 +22,45 1970 +11,46 1970 +11,46 1970 +1,46 1970 +1,46 1971 +2097.12,60 1972 +18,21 1972 +23,59 1972 +12,60 1972 +12,60 1972 +1,60 1972 +1,60 1973 +2098.9,14 1974 +9,20 1974 +9,26 1974 +5,26 1974 +32,37 1975 +32,41 1975 +28,47 1975 +2101.12,46 1976 +18,21 1976 +23,45 1976 +12,46 1976 +12,46 1976 +1,46 1976 +1,46 1977 +2103.8,14 1978 +8,19 1978 +1,23 1978 +2104.8,13 1979 +1,15 1979 +2106.1,75 1980 +7,10 1980 +42,52 1980 +12,52 1980 +12,63 1980 +64,74 1980 +12,74 1980 +12,74 1981 +12,74 1982 +1,75 1980 +1,75 1980 +1,75 1983 +2108.9,16 1984 +5,16 1984 +2109.2,13 1985 +2110.10,44 1986 +16,19 1986 +21,43 1986 +10,44 1986 +10,44 1986 +1,44 1986 +1,44 1987 +2111.10,45 1988 +16,19 1988 +21,44 1988 +10,45 1988 +10,45 1988 +1,45 1988 +1,45 1989 +2113.1,75 1990 +7,10 1990 +35,43 1990 +12,43 1990 +12,54 1990 +55,63 1990 +12,63 1990 +12,63 1991 +12,74 1990 +12,74 1992 +1,75 1990 +1,75 1990 +1,75 1993 +2114.1,24 1994 +17,20 1994 +22,23 1994 +1,24 1994 +1,24 1994 +2115.0,1 1995 +2119.11,45 1996 +17,20 1996 +22,44 1996 +11,45 1996 +11,45 1996 +1,45 1996 +1,45 1997 +2120.5,13 1998 +17,27 1998 +17,27 1998 +2121.2,58 1999 +8,11 1999 +13,57 1999 +2,58 1999 +2,58 1999 +2,58 2000 +2122.2,59 2001 +8,11 2001 +13,58 2001 +2,59 2001 +2,59 2001 +2,59 2002 +2123.2,69 2003 +8,11 2003 +13,68 2003 +2,69 2003 +2,69 2003 +2,69 2004 +2124.2,12 2005 +2,16 2005 +2126.10,44 2006 +16,19 2006 +21,43 2006 +10,44 2006 +10,44 2006 +1,44 2006 +1,44 2007 +2127.5,13 2008 +17,27 2008 +17,27 2008 +2128.2,61 2009 +8,11 2009 +13,56 2009 +13,60 2009 +13,60 2010 +2,61 2009 +2,61 2009 +2,61 2011 +2129.2,61 2012 +8,11 2012 +13,56 2012 +13,60 2012 +13,60 2013 +2,61 2012 +2,61 2012 +2,61 2014 +2130.2,76 2015 +8,11 2015 +13,75 2015 +2,76 2015 +2,76 2015 +2,76 2016 +2131.2,12 2017 +2,16 2017 +2133.10,44 2018 +16,19 2018 +21,43 2018 +10,44 2018 +10,44 2018 +1,44 2018 +1,44 2019 +2134.5,13 2020 +17,27 2020 +17,27 2020 +2135.2,68 2021 +8,11 2021 +13,67 2021 +2,68 2021 +2,68 2021 +2,68 2022 +2136.2,12 2023 +2,16 2023 +2138.10,44 2024 +16,19 2024 +21,43 2024 +10,44 2024 +10,44 2024 +1,44 2024 +1,44 2025 +2139.5,13 2026 +2140.9,17 2027 +2,17 2027 +2141.20,29 2028 +16,30 2028 +12,30 2028 +6,30 2028 +46,55 2029 +42,56 2029 +32,56 2029 +2142.2,68 2030 +8,11 2030 +57,67 2030 +13,67 2030 +13,67 2031 +2,68 2030 +2,68 2030 +2,68 2032 +2144.0,1 2033 +2148.11,46 2034 +17,20 2034 +22,45 2034 +11,46 2034 +11,46 2034 +1,46 2034 +1,46 2035 +2149.5,13 2036 +2150.2,73 2037 +10,13 2037 +15,72 2037 +2,73 2037 +2,73 2037 +2,73 2038 +2151.2,71 2039 +10,13 2039 +15,70 2039 +2,71 2039 +2,71 2039 +2,71 2040 +2152.2,70 2041 +10,13 2041 +15,69 2041 +2,70 2041 +2,70 2041 +2,70 2042 +2154.10,45 2043 +16,19 2043 +21,44 2043 +10,45 2043 +10,45 2043 +1,45 2043 +1,45 2044 +2155.5,13 2045 +2156.13,57 2046 +19,22 2046 +24,56 2046 +13,57 2046 +13,57 2046 +2,57 2046 +2,57 2047 +2157.9,17 2048 +2,17 2048 +2158.19,28 2049 +15,29 2049 +12,29 2049 +6,29 2049 +44,53 2050 +40,54 2050 +31,54 2050 +2159.2,63 2051 +8,11 2051 +52,62 2051 +13,62 2051 +13,62 2052 +2,63 2051 +2,63 2051 +2,63 2053 +2161.10,45 2054 +16,19 2054 +21,44 2054 +10,45 2054 +10,45 2054 +1,45 2054 +1,45 2055 +2162.5,13 2056 +2163.9,17 2057 +2,17 2057 +2164.20,29 2058 +17,30 2058 +12,30 2058 +6,30 2058 +45,54 2059 +42,55 2059 +32,55 2059 +2165.2,65 2060 +8,11 2060 +54,64 2060 +13,64 2060 +13,64 2061 +2,65 2060 +2,65 2060 +2,65 2062 +2166.2,65 2063 +8,11 2063 +54,64 2063 +13,64 2063 +13,64 2064 +2,65 2063 +2,65 2063 +2,65 2065 +2167.2,65 2066 +8,11 2066 +54,64 2066 +13,64 2066 +13,64 2067 +2,65 2066 +2,65 2066 +2,65 2068 +2169.0,1 2069 +2173.11,46 2070 +17,20 2070 +22,45 2070 +11,46 2070 +11,46 2070 +1,46 2070 +1,46 2071 +2174.5,13 2072 +2175.9,17 2073 +2,17 2073 +2176.6,14 2074 +16,24 2075 +2177.2,65 2076 +8,11 2076 +54,64 2076 +13,64 2076 +13,64 2077 +2,65 2076 +2,65 2076 +2,65 2078 +2178.2,65 2079 +8,11 2079 +54,64 2079 +13,64 2079 +13,64 2080 +2,65 2079 +2,65 2079 +2,65 2081 +2179.2,65 2082 +8,11 2082 +54,64 2082 +13,64 2082 +13,64 2083 +2,65 2082 +2,65 2082 +2,65 2084 +2181.10,45 2085 +16,19 2085 +21,44 2085 +10,45 2085 +10,45 2085 +1,45 2085 +1,45 2086 +2182.5,13 2087 +2183.13,57 2088 +19,22 2088 +24,56 2088 +13,57 2088 +13,57 2088 +2,57 2088 +2,57 2089 +2184.9,17 2090 +2,17 2090 +2185.18,27 2091 +15,28 2091 +12,28 2091 +6,28 2091 +42,51 2092 +39,52 2092 +30,52 2092 +2186.2,63 2093 +8,11 2093 +52,62 2093 +13,62 2093 +13,62 2094 +2,63 2093 +2,63 2093 +2,63 2095 +2188.10,45 2096 +16,19 2096 +21,44 2096 +10,45 2096 +10,45 2096 +1,45 2096 +1,45 2097 +2189.5,13 2098 +2190.2,52 2099 +10,13 2099 +15,51 2099 +2,52 2099 +2,52 2099 +2,52 2100 +2191.2,47 2101 +10,13 2101 +15,46 2101 +2,47 2101 +2,47 2101 +2,47 2102 +2192.2,46 2103 +10,13 2103 +15,45 2103 +2,46 2103 +2,46 2103 +2,46 2104 +2194.0,1 2105 +2198.11,45 2106 +17,20 2106 +22,44 2106 +11,45 2106 +11,45 2106 +1,45 2106 +1,45 2107 +2199.12,58 2108 +18,21 2108 +23,57 2108 +12,58 2108 +12,58 2108 +1,58 2108 +1,58 2109 +2200.5,13 2110 +2201.2,18 2111 +2202.2,13 2112 +2203.6,15 2113 +17,26 2114 +2204.2,68 2115 +8,11 2115 +57,67 2115 +13,67 2115 +13,67 2116 +2,68 2115 +2,68 2115 +2,68 2117 +2206.10,44 2118 +16,19 2118 +21,43 2118 +10,44 2118 +10,44 2118 +1,44 2118 +1,44 2119 +2207.5,13 2120 +2208.2,61 2121 +8,11 2121 +13,60 2121 +2,61 2121 +2,61 2121 +2,61 2122 +2209.2,12 2123 +2,16 2123 +2211.10,44 2124 +16,19 2124 +21,43 2124 +10,44 2124 +10,44 2124 +1,44 2124 +1,44 2125 +2212.5,13 2126 +2213.2,77 2127 +8,11 2127 +51,72 2127 +57,66 2127 +57,70 2127 +51,56 2127 +51,72 2127 +13,72 2127 +13,76 2127 +13,76 2128 +2,77 2127 +2,77 2127 +2,77 2129 +2214.2,77 2130 +8,11 2130 +51,72 2130 +57,66 2130 +57,70 2130 +51,56 2130 +51,72 2130 +13,72 2130 +13,76 2130 +13,76 2131 +2,77 2130 +2,77 2130 +2,77 2132 +2215.2,69 2133 +8,11 2133 +13,68 2133 +2,69 2133 +2,69 2133 +2,69 2134 +2216.2,12 2135 +2,16 2135 +2218.10,44 2136 +16,19 2136 +21,43 2136 +10,44 2136 +10,44 2136 +1,44 2136 +1,44 2137 +2219.5,13 2138 +2220.2,54 2139 +8,11 2139 +13,53 2139 +2,54 2139 +2,54 2139 +2,54 2140 +2221.2,52 2141 +8,11 2141 +13,51 2141 +2,52 2141 +2,52 2141 +2,52 2142 +2222.2,91 2143 +8,11 2143 +72,81 2143 +72,85 2143 +57,66 2143 +57,71 2143 +51,56 2143 +51,86 2143 +13,86 2143 +13,90 2143 +13,90 2144 +2,91 2143 +2,91 2143 +2,91 2145 +2223.2,61 2146 +8,11 2146 +13,60 2146 +2,61 2146 +2,61 2146 +2,61 2147 +2224.2,12 2148 +2,16 2148 +2226.10,44 2149 +16,19 2149 +21,43 2149 +10,44 2149 +10,44 2149 +1,44 2149 +1,44 2150 +2227.5,13 2151 +2228.16,25 2152 +12,26 2152 +2,26 2152 +2229.2,68 2153 +8,11 2153 +57,67 2153 +13,67 2153 +13,67 2154 +2,68 2153 +2,68 2153 +2,68 2155 +2231.0,1 2156 +2240.10,38 2157 +16,19 2157 +21,37 2157 +10,38 2157 +10,38 2157 +1,38 2157 +1,38 2158 +2241.10,37 2159 +16,19 2159 +21,36 2159 +10,37 2159 +10,37 2159 +1,37 2159 +1,37 2160 +2242.10,36 2161 +16,19 2161 +21,35 2161 +10,36 2161 +10,36 2161 +1,36 2161 +1,36 2162 +2243.10,36 2163 +16,19 2163 +21,35 2163 +10,36 2163 +10,36 2163 +1,36 2163 +1,36 2164 +2244.12,13 2165 +14,15 2165 +18,21 2165 +22,25 2165 +2245.8,9 2166 +1,9 2166 +2269.10,37 2167 +16,19 2167 +21,36 2167 +10,37 2167 +10,37 2167 +1,37 2167 +1,37 2168 +2270.10,38 2169 +16,19 2169 +21,37 2169 +10,38 2169 +10,38 2169 +1,38 2169 +1,38 2170 +2271.11,43 2171 +17,20 2171 +22,42 2171 +11,43 2171 +11,43 2171 +1,43 2171 +1,43 2172 +2272.11,42 2173 +17,20 2173 +22,41 2173 +11,42 2173 +11,42 2173 +1,42 2173 +1,42 2174 +2273.11,43 2175 +17,20 2175 +22,42 2175 +11,43 2175 +11,43 2175 +1,43 2175 +1,43 2176 +2274.7,13 2177 +1,17 2177 +2275.7,13 2178 +7,18 2178 +1,22 2178 +2276.1,15 2179 +2277.1,15 2180 +2278.5,12 2181 +2279.2,11 2182 +2280.2,10 2183 +2282.5,12 2184 +2283.2,11 2185 +2284.2,10 2186 +2286.1,64 2187 +7,10 2187 +35,43 2187 +12,43 2187 +12,54 2187 +55,63 2187 +12,63 2187 +12,63 2188 +12,63 2189 +1,64 2187 +1,64 2187 +1,64 2190 +2287.1,69 2191 +7,10 2191 +38,47 2191 +12,47 2191 +12,58 2191 +59,68 2191 +12,68 2191 +12,68 2192 +12,68 2193 +1,69 2191 +1,69 2191 +1,69 2194 +2288.1,21 2195 +7,10 2195 +12,20 2195 +1,21 2195 +1,21 2195 +1,21 2196 +2289.0,1 2197 +2293.1,8 2198 +2294.6,12 2199 +14,25 2200 +2295.6,17 2201 +6,17 2201 +2296.3,13 2202 +11,12 2202 +3,13 2202 +3,13 2202 +2297.7,13 2203 +2298.9,20 2204 +9,20 2204 +9,28 2204 +4,28 2204 +4,28 2205 +2299.7,13 2206 +2300.4,22 2207 +2301.4,9 2208 +2303.12,19 2209 +2304.4,19 2210 +2294.27,30 2211 +27,30 2211 +2307.5,12 2212 +2308.2,53 2213 +9,40 2213 +41,42 2213 +43,45 2213 +46,52 2213 +2,53 2213 +2,53 2213 +2309.0,1 2214 +2314.1,17 2215 +2315.7,17 2216 +2316.29,35 2217 +3,8 2217 +10,14 2217 +10,14 2218 +10,14 2219 +10,14 2220 +2317.6,17 2221 +6,17 2221 +6,24 2221 +6,32 2221 +6,32 2222 +2318.3,43 2223 +9,14 2223 +16,42 2223 +3,43 2223 +3,43 2223 +3,43 2224 +2319.10,11 2225 +3,11 2225 +3,11 2226 +3,11 2227 +2315.19,31 2228 +19,31 2228 +2323.1,23 2229 +2324.1,27 2230 +2325.1,26 2231 +2326.1,25 2232 +2327.1,51 2233 +22,28 2233 +30,31 2233 +33,41 2233 +43,50 2233 +1,51 2233 +2328.1,21 2234 +2329.1,39 2235 +12,13 2235 +14,21 2235 +23,29 2235 +31,38 2235 +1,39 2235 +2330.1,17 2236 +2331.1,12 2237 +2333.9,17 2238 +9,17 2238 +2338.9,16 2238 +9,16 2238 +2332.10,16 2238 +10,16 2238 +10,16 2238 +10,16 2238 +2334.7,18 2239 +2335.4,21 2240 +2336.4,14 2241 +4,14 2242 +4,14 2238 +2339.3,23 2243 +2340.7,13 2244 +2341.11,12 2245 +4,12 2245 +2342.7,14 2246 +2343.11,66 2247 +23,53 2247 +54,65 2247 +54,65 2247 +11,66 2247 +11,66 2247 +4,78 2247 +4,78 2247 +4,78 2248 +67,68 2247 +69,70 2247 +71,77 2247 +4,78 2247 +4,78 2247 +2344.7,14 2249 +23,28 2250 +26,27 2250 +23,28 2250 +23,28 2250 +16,28 2250 +2345.15,16 2251 +8,16 2251 +2352.13,30 2252 +23,24 2252 +26,29 2252 +13,30 2252 +13,30 2252 +1,30 2252 +2353.14,25 2253 +14,25 2253 +1,32 2253 +1,32 2254 +2355.13,30 2255 +31,42 2255 +13,42 2255 +1,49 2255 +1,49 2256 +2356.1,35 2257 +26,34 2257 +1,35 2257 +1,35 2257 +2357.1,12 2258 +2358.5,17 2259 +21,46 2259 +30,41 2259 +30,41 2259 +42,45 2259 +21,46 2259 +21,46 2259 +21,46 2259 +50,58 2259 +2359.27,38 2260 +19,38 2260 +2,57 2260 +2,57 2261 +2360.6,33 2262 +19,32 2262 +6,33 2262 +6,33 2262 +6,45 2262 +2361.3,13 2263 +2362.3,27 2264 +3,27 2265 +2364.7,33 2266 +17,28 2266 +17,28 2266 +29,32 2266 +7,33 2266 +7,33 2267 +2366.5,17 2268 +2367.2,16 2269 +2368.2,8 2270 +2372.1,16 2271 +2373.6,12 2272 +16,24 2272 +2374.22,33 2273 +14,33 2273 +2,52 2273 +2,52 2274 +2375.1,61 2275 +24,32 2275 +34,43 2275 +45,51 2275 +53,60 2275 +1,61 2275 +1,61 2275 +2376.4,14 2276 +2377.6,22 2277 +2378.3,25 2278 +15,24 2278 +3,25 2278 +3,25 2278 +2379.7,13 2279 +2380.3,17 2280 +2385.2,8 2281 +2382.3,30 2282 +13,24 2282 +13,24 2282 +26,29 2282 +3,30 2282 +2383.3,17 2283 +2385.2,8 2281 +2388.2,29 2284 +2389.6,21 2285 +2390.16,27 2286 +16,27 2286 +29,32 2286 +3,46 2286 +3,46 2287 +2391.20,78 2288 +39,46 2288 +48,50 2288 +52,61 2288 +63,77 2288 +20,78 2288 +20,78 2288 +2392.2,27 2289 +2393.2,37 2290 +15,16 2290 +18,25 2290 +27,36 2290 +2,37 2290 +2,37 2290 +2,37 2291 +2394.2,33 2292 +8,9 2292 +11,32 2292 +2,33 2292 +2,33 2292 +2,33 2293 +2395.7,15 2294 +23,34 2295 +17,34 2295 +2396.3,25 2296 +9,10 2296 +12,24 2296 +12,24 2296 +3,25 2296 +3,25 2296 +3,25 2297 +2395.36,41 2298 +36,41 2298 +2397.2,17 2299 +7,12 2299 +2,17 2299 +2,17 2299 +2398.2,18 2300 +8,13 2300 +2,18 2300 +2,18 2300 +2399.2,60 2301 +8,9 2301 +30,38 2301 +11,38 2301 +11,50 2301 +51,59 2301 +11,59 2301 +11,59 2302 +11,59 2303 +2,60 2301 +2,60 2301 +2,60 2304 +2400.2,31 2305 +15,16 2305 +18,22 2305 +23,26 2305 +27,30 2305 +2,31 2305 +2,31 2305 +2,31 2306 +2401.2,63 2307 +8,9 2307 +11,62 2307 +2,63 2307 +2,63 2307 +2,63 2308 +2402.2,62 2309 +8,9 2309 +11,61 2309 +2,62 2309 +2,62 2309 +2,62 2310 +2403.2,63 2311 +8,9 2311 +11,62 2311 +2,63 2311 +2,63 2311 +2,63 2312 +2404.2,58 2313 +8,9 2313 +11,57 2313 +2,58 2313 +2,58 2313 +2,58 2314 +2405.2,74 2315 +8,9 2315 +48,56 2315 +11,56 2315 +11,60 2315 +61,69 2315 +11,69 2315 +11,69 2316 +11,73 2315 +11,73 2317 +2,74 2315 +2,74 2315 +2,74 2318 +2406.2,15 2319 +2407.31,47 2320 +41,42 2320 +43,46 2320 +31,47 2320 +31,47 2320 +2,48 2320 +14,15 2320 +16,25 2320 +26,29 2320 +26,29 2320 +2,48 2320 +2409.2,11 2321 +2410.2,11 2322 +2411.12,42 2323 +18,19 2323 +21,41 2323 +12,42 2323 +12,42 2323 +2,42 2323 +2,42 2324 +2412.11,31 2325 +11,24 2325 +11,26 2325 +11,26 2326 +11,31 2325 +11,31 2325 +11,36 2325 +6,36 2325 +43,63 2327 +43,56 2327 +43,58 2327 +43,58 2328 +43,63 2327 +43,63 2327 +38,68 2327 +2413.11,31 2329 +11,24 2329 +11,26 2329 +11,26 2330 +11,31 2329 +11,31 2329 +6,31 2329 +33,58 2331 +38,51 2331 +38,53 2331 +38,53 2332 +33,58 2331 +33,58 2331 +2414.2,65 2333 +8,9 2333 +33,42 2333 +11,42 2333 +11,54 2333 +55,64 2333 +11,64 2333 +11,64 2334 +11,64 2335 +2,65 2333 +2,65 2333 +2,65 2336 +2415.2,19 2337 +13,14 2337 +15,16 2337 +17,18 2337 +2,19 2337 +2416.2,29 2338 +8,9 2338 +11,28 2338 +2,29 2338 +2,29 2338 +2,29 2339 +2417.2,16 2340 +2418.19,20 2341 +21,22 2341 +2419.2,28 2342 +21,22 2342 +24,27 2342 +2,28 2342 +2420.2,44 2343 +23,24 2343 +40,43 2343 +33,43 2343 +26,43 2343 +26,43 2343 +26,43 2344 +2,44 2343 +2423.10,16 2345 +10,20 2345 +10,20 2346 +10,20 2345 +2425.10,16 2345 +10,20 2345 +10,20 2347 +10,20 2345 +2427.13,20 2345 +13,20 2345 +2482.10,16 2345 +10,20 2345 +10,20 2348 +10,20 2345 +2483.9,15 2345 +9,15 2345 +2484.9,18 2345 +9,18 2345 +2422.16,22 2345 +16,22 2345 +16,22 2345 +16,22 2345 +2424.4,22 2349 +17,18 2349 +20,21 2349 +4,22 2349 +4,22 2345 +2426.4,22 2350 +16,17 2350 +19,21 2350 +4,22 2350 +4,22 2351 +4,22 2345 +2428.16,43 2352 +30,33 2352 +35,42 2352 +16,43 2352 +16,43 2352 +5,6 2352 +8,11 2352 +8,11 2353 +2429.9,15 2354 +9,15 2354 +2431.22,28 2355 +19,28 2355 +6,28 2355 +6,28 2356 +2432.6,2436.17 2357 +2432.39,46 2357 +2433.8,21 2357 +2434.16,27 2357 +8,27 2357 +8,33 2357 +8,52 2357 +8,52 2358 +2435.8,17 2357 +21,24 2357 +8,24 2357 +8,24 2357 +8,24 2359 +8,24 2360 +2436.8,16 2357 +2432.6,2436.17 2357 +2432.6,2436.17 2357 +2437.10,24 2361 +28,39 2361 +28,46 2361 +2438.28,47 2362 +34,42 2362 +43,46 2362 +28,47 2362 +28,47 2362 +28,49 2362 +18,26 2362 +7,50 2362 +2439.20,32 2363 +20,36 2363 +11,37 2363 +11,44 2363 +2440.20,31 2364 +20,31 2364 +20,37 2364 +8,37 2364 +8,37 2365 +2442.12,35 2366 +12,35 2366 +12,35 2366 +12,35 2366 +12,35 2366 +12,35 2366 +12,35 2366 +19,27 2366 +12,35 2366 +12,35 2366 +12,35 2367 +12,35 2366 +12,35 2366 +12,35 2366 +12,35 2366 +2443.8,25 2368 +2444.40,52 2369 +50,51 2369 +40,52 2369 +40,52 2369 +23,53 2369 +30,38 2369 +30,38 2369 +23,53 2369 +23,53 2369 +2445.11,20 2370 +2446.8,16 2371 +2447.12,27 2372 +2448.9,40 2373 +14,21 2373 +33,35 2373 +36,39 2373 +9,40 2373 +9,40 2373 +2449.12,27 2374 +2450.18,39 2375 +23,24 2375 +26,38 2375 +18,39 2375 +18,39 2375 +9,39 2375 +2451.12,19 2376 +2452.47,59 2377 +57,58 2377 +47,59 2377 +47,59 2377 +9,60 2377 +16,27 2377 +16,27 2377 +16,33 2377 +16,42 2377 +16,42 2378 +43,44 2377 +45,46 2377 +45,46 2377 +9,60 2377 +9,60 2377 +9,60 2379 +9,60 2380 +9,60 2381 +2453.9,14 2382 +2455.56,68 2383 +66,67 2383 +56,68 2383 +56,68 2383 +8,69 2383 +34,45 2383 +15,45 2383 +15,51 2383 +15,51 2384 +52,53 2383 +54,55 2383 +54,55 2383 +8,69 2383 +8,69 2383 +2457.12,18 2385 +2458.56,68 2386 +66,67 2386 +56,68 2386 +56,68 2386 +8,69 2386 +34,45 2386 +15,45 2386 +15,51 2386 +15,51 2387 +52,53 2386 +54,55 2386 +54,55 2386 +8,69 2386 +8,69 2386 +8,69 2388 +8,69 2389 +8,69 2390 +2459.7,12 2391 +7,12 2392 +7,12 2393 +7,12 2354 +2463.6,53 2394 +12,13 2394 +29,35 2394 +26,35 2394 +15,35 2394 +15,39 2394 +46,52 2394 +43,52 2394 +40,52 2394 +15,52 2394 +15,52 2395 +15,52 2396 +6,53 2394 +6,53 2394 +6,53 2397 +6,53 2354 +2465.6,19 2398 +6,19 2354 +2467.32,38 2399 +29,38 2399 +25,38 2399 +25,38 2400 +50,56 2399 +47,56 2399 +44,56 2399 +40,56 2399 +40,56 2401 +2469.10,19 2402 +2470.15,37 2403 +16,22 2403 +27,35 2403 +15,37 2403 +15,37 2403 +7,44 2403 +7,44 2403 +42,43 2403 +7,44 2403 +7,44 2403 +2471.7,60 2404 +13,14 2404 +37,50 2404 +16,50 2404 +16,59 2404 +16,59 2405 +7,60 2404 +7,60 2404 +7,60 2406 +2472.7,60 2407 +13,14 2407 +37,50 2407 +16,50 2407 +16,59 2407 +16,59 2408 +7,60 2407 +7,60 2407 +7,60 2409 +2473.7,24 2410 +7,24 2411 +2477.7,24 2412 +2478.7,20 2413 +7,20 2354 +7,20 2414 +7,20 2415 +7,20 2345 +7,20 2345 +7,20 2345 +2485.8,19 2416 +8,19 2417 +8,19 2418 +2486.5,10 2419 +2487.4,30 2420 +25,26 2420 +28,29 2420 +4,30 2420 +4,30 2420 +2488.8,16 2421 +20,24 2421 +20,31 2421 +2489.5,22 2422 +16,17 2422 +18,19 2422 +20,21 2422 +5,22 2422 +5,22 2423 +5,22 2424 +5,22 2345 +2491.2,16 2425 +14,15 2425 +2,16 2425 +2,16 2426 +2,16 2427 +2,16 2428 +2,16 2429 +2493.0,1 2430 +2497.12,31 2431 +22,30 2431 +12,31 2431 +12,31 2431 +2498.5,12 2432 +17,58 2432 +24,45 2432 +24,49 2432 +24,49 2433 +50,51 2432 +52,54 2432 +55,57 2432 +17,58 2432 +17,58 2432 +17,58 2432 +2499.10,13 2434 +14,15 2434 +2,16 2434 +2500.9,48 2435 +21,29 2435 +30,41 2435 +42,47 2435 +9,48 2435 +9,48 2435 +50,51 2435 +1,52 2435 +19 +aSys->Dir 3:26.1,39.2 64 +11 +0:name:28.2,6 s +4:uid:29.2,5 s +8:gid:30.2,5 s +12:muid:31.2,6 s +16:qid:32.2,5 @1 + +32:mode:33.2,6 i +36:atime:34.2,7 i +40:mtime:35.2,7 i +48:length:36.2,8 B +56:dtype:37.2,7 i +60:dev:38.2,5 i +aSys->Qid 11.1,16.2 16 +3 +0:path:13.2,6 B +8:vers:14.2,6 i +12:qtype:15.2,7 i +aDraw->Chans 9:70.1,82.2 4 +1 +0:desc:72.2,6 i +aDraw->Rect 116.1,139.2 16 +2 +0:min:118.2,5 @4 + +8:max:119.2,5 @4 + +aDraw->Point 99.1,113.2 8 +2 +0:x:101.2,3 i +4:y:102.2,3 i +aTk->Toplevel 1:5.1,12.2 32 +5 +0:display:7.2,9 R@6 + +4:wreq:8.2,6 Cs +8:image:9.2,7 R@7 + +12:ctxt:10.2,6 R@9 + +16:screenr:11.2,9 @3 + +aDraw->Display 9:201.1,230.2 20 +5 +0:image:203.2,7 R@7 + +4:white:204.2,7 R@7 + +8:black:205.2,7 R@7 + +12:opaque:206.2,8 R@7 + +16:transparent:207.2,13 R@7 + +aDraw->Image 142.1,198.2 56 +8 +0:r:146.2,3 @3 + +16:clipr:147.2,7 @3 + +32:depth:148.2,7 i +36:chans:149.2,7 @2 + +40:repl:150.2,6 i +44:display:151.2,9 R@6 + +48:screen:152.2,8 R@8 + +52:iname:153.2,7 s +aDraw->Screen 249.1,263.2 16 +4 +0:id:251.2,4 i +4:image:252.2,7 R@7 + +8:fill:253.2,6 R@7 + +12:display:254.2,9 R@6 + +aDraw->Wmcontext 282.1,291.2 28 +7 +0:kbd:284.2,5 Ci +4:ptr:285.2,5 CR@10 + +8:ctl:286.2,5 Cs +12:wctl:287.2,6 Cs +16:images:288.2,8 CR@7 + +20:connfd:289.2,8 R@11 + +24:ctxt:290.2,6 R@12 + +aDraw->Pointer 266.1,271.2 16 +3 +0:buttons:268.2,9 i +4:xy:269.2,4 @4 + +12:msec:270.2,6 i +aSys->FD 3:45.1,48.2 4 +1 +0:fd:47.2,4 i +aDraw->Context 9:274.1,279.2 12 +3 +0:display:276.2,9 R@6 + +4:screen:277.2,8 R@8 + +8:wm:278.2,4 Ct8.2 +0:t0:15,21 s +4:t1:15,21 Ct8.2 +0:t0:32,38 s +4:t1:32,38 R@9 + + + +aMtype 0:1310.0,1312.1 8 +2 +0:text:1311.1,5 s +4:com:7,10 s +aDraw->Font 9:233.1,246.2 16 +4 +0:name:235.2,6 s +4:height:236.2,8 i +8:ascent:237.2,8 i +12:display:238.2,9 R@6 + +aAitem 0:201.0,206.1 28 +7 +0:pname:202.1,6 s +4:desc:7,11 s +8:dtype:203.1,6 i +12:factory:7,14 i +16:read:204.1,5 s +20:location:7,15 s +24:data:205.1,5 Lt8.2 +0:t0:16,22 s +4:t1:16,22 i + +aBufio->Iobuf 6:16.1,50.2 48 +9 +0:fd:41.2,4 R@11 + +4:buffer:42.2,8 Ab +8:index:43.2,7 i +12:size:44.2,6 i +16:dirty:45.2,7 i +24:bufpos:46.2,8 B +32:filpos:47.2,8 B +40:lastop:48.2,8 i +44:mode:49.2,6 i +aImgloaded 0:711.0,714.1 8 +2 +0:name:712.1,5 s +4:imgtype:713.1,8 i +aDaytime->Tm 4:5.1,16.2 40 +10 +0:sec:6.2,5 i +4:min:7.2,5 i +8:hour:8.2,6 i +12:mday:9.2,6 i +16:mon:10.2,5 i +20:year:11.2,6 i +24:wday:12.2,6 i +28:yday:13.2,6 i +32:zone:14.2,6 s +36:tzoff:15.2,7 i +75 +0:init +2 +32:ctxt:0:56.5,9 R@12 + +36:argv:31,35 Ls +3 +40:runfrom:81.1,8 s +44:p:82.1,2 i +60:r:95.1,2 @3 + +n131:getdesc +1 +32:l:214.8,9 Ls +1 +36:s:216.1,2 s +Ls162:getabilities +0 +15 +32:i:237.1,2 i +36:s:240.2,3 s +40:val:257.5,8 i +44:fd:234.1,3 R@16 + +48:k:253.9,10 i +52:noitems:252.4,11 i +56:take:239.2,6 i +60:name:256.5,9 s +80:n:242.3,4 i +84:lst:6,9 Ls +88:n2:255.6,8 i +92:lst2:10,14 Ls +52:max:276.4,7 i +40:min:275.4,7 i +48:mul:277.4,7 i +n436:isat +2 +32:s:311.5,6 s +36:test:16,20 s +2 +40:i:315.6,7 i +44:num:313.1,4 i +i460:isat2 +2 +32:s:321.6,7 s +36:test:17,21 s +2 +40:i:325.6,7 i +44:num:323.1,4 i +i482:nomatches +1 +32:s:332.10,11 s +3 +36:i:335.6,7 i +40:n:334.1,2 i +44:test:336.2,6 s +i501:matches +2 +32:s1:342.8,10 s +36:s2:11,13 s +0 +i515:biggestmatch +3 +32:nm:349.13,15 i +36:s:22,23 s +40:l:33,34 i +3 +44:bigmatch:351.1,9 s +48:match:352.1,6 s +52:p:356.2,3 i +s539:getabllist +0 +9 +32:i:367.6,7 i +36:los:365.1,4 Ls +40:p2:369.2,4 i +44:nm:370.2,4 i +48:p:368.2,3 i +52:tmpl:373.3,7 Ls +56:ar:392.1,3 As +60:tmp:380.3,6 s +64:listitem:388.3,11 s +As613:buildabilitiesframes +1 +32:top:400.21,24 R@5 + +1 +36:k:405.6,7 i +n698:buildabilitiesframe +3 +32:top:421.20,23 R@5 + +36:k:42,43 i +40:chanout:50,57 s +13 +44:frame:428.3,8 s +48:i:425.6,7 i +52:count2:424.1,7 i +56:tmp:463.4,7 Lt8.2 +0:t0:205.16,22 s +4:t1:16,22 i + +60:mul:443.5,8 i +64:s:444.5,6 s +68:max:454.4,7 i +72:name:466.6,10 s +76:val:12,15 i +80:nm:423.1,3 s +84:s:467.5,6 s +60:row:464.4,7 i +60:min:453.4,7 i +n995:getvaluescreen +2 +32:x:511.15,16 s +36:y:17,18 s +7 +40:top:515.2,5 R@5 + +44:s:532.4,5 s +48:inp:528.2,5 s +52:tk1:518.6,9 i +56:chanin:516.1,7 Cs +60:s:524.2,3 i +64:s:526.2,3 R@10 + +i1125:infoscreen +0 +10 +32:top:546.2,5 R@5 + +36:titlebar:7,15 Cs +40:s:556.2,3 s +44:title:573.2,7 s +48:tmp:547.1,4 Lt8.2 +0:t0:227.19,25 s +4:t1:19,25 s + +52:infrow:553.1,7 i +56:d1:557.3,5 s +60:d2:6,8 s +64:s:569.2,3 i +68:s:571.2,3 R@10 + +n1276:settingsscreen +2 +32:k:582.15,16 i +36:ctlchan:23,30 Ci +12 +40:top:594.2,5 R@5 + +44:titlebar:7,15 Cs +48:i:604.6,7 i +52:ltmp:617.2,6 Li +56:l:603.1,2 Li +60:low:584.1,4 Lt16.4 +0:t0:48.21,37 R@5 + +4:t1:21,37 s +8:t2:21,37 Li +12:t3:21,37 i + +64:allread:602.1,8 i +68:chanin:595.1,7 Cs +72:err:601.1,4 i +76:name:586.10,14 s +80:pid:593.1,4 i +84:tplvl:586.3,8 R@5 + +n1416:settingsloop +5 +32:top:630.13,16 R@5 + +36:chanin:36,42 Cs +40:titlebar:43,51 Cs +44:k:69,70 i +48:abls:77,81 Li +10 +52:title:660.2,7 s +56:ctlchan:635.1,8 Ci +60:val:648.5,8 i +64:inp:642.2,5 s +68:pid:633.1,4 i +72:s:638.2,3 i +76:s:640.2,3 R@10 + +104:n:644.4,5 i +108:lst:7,10 Ls +72:i:647.5,6 i +n1563:clearbuffer +1 +32:c:670.12,13 Cs +3 +36:tc:672.1,3 Ci +44:del:675.2,5 s +48:tick:676.2,6 i +n1578:timer +1 +32:tick:681.6,10 Ci +0 +n1584:getval +2 +32:l:687.7,8 Lt8.2 +0:t0:19,25 s +4:t1:19,25 i + +36:s:32,33 s +2 +40:name:690.3,7 s +44:val:8,11 i +i1594:list2string +1 +32:l:697.12,13 Ls +1 +36:s:699.1,2 s +s1609:nocamera +0 +2 +32:n:728.2,3 i +40:dir:4,7 @0 + +i1618:startuptkstuff +2 +32:top:733.15,18 R@5 + +36:ctlchan:38,45 Ci +3 +40:pid:735.1,4 i +52:dirs:738.2,6 AR@0 + +56:n:7,8 i +n1648:tkstuff +0 +34 +32:win:754.2,5 R@5 + +36:titlebar:7,15 Cs +40:title:853.2,7 s +44:ctlchan:765.1,8 Ci +48:butchan:760.1,8 Cs +52:k:831.10,11 i +56:tk1:762.6,9 i +60:title:839.5,10 s +64:val:802.5,8 i +68:e:769.1,2 i +72:err:858.3,6 s +76:fname:873.3,8 s +80:ftype:10,15 i +84:inp:793.2,5 s +88:s:789.2,3 i +92:s:791.2,3 R@10 + +96:si:841.5,7 s +120:n:795.4,5 i +124:lst:7,10 Ls +128:n:860.5,6 i +132:lst:8,11 Ls +64:k:808.10,11 i +88:i:837.5,6 i +64:i:816.10,11 i +64:k:843.10,11 i +64:i:821.10,11 i +88:i:829.5,6 i +88:i:807.5,6 i +88:i:825.5,6 i +88:pid:868.18,21 i +64:val:830.5,8 i +88:i:801.5,6 i +88:val:820.5,8 i +88:nf:815.5,7 i +n2095:dealwithcamera +2 +32:win:881.15,18 R@5 + +36:lst:38,41 Ls +4 +40:ctlchan:883.1,8 Ci +44:e:900.3,4 i +44:i:917.3,4 i +44:i:928.3,4 i +n2241:refresh +2 +32:top:942.8,11 R@5 + +36:ctlchan:31,38 Ci +1 +40:pid:944.1,4 i +n2259:delete +3 +32:top:950.7,10 R@5 + +36:i:30,31 i +40:ctlchan:38,45 Ci +6 +44:loi:955.1,4 Li +48:s:954.1,2 s +52:k:958.7,8 i +56:ok:953.1,3 i +60:pid:952.1,4 i +52:k:971.6,7 i +n2384:delselect +1 +32:n:1000.10,11 i +1 +36:i:1002.6,7 i +n2397:doselect +1 +32:top:1007.9,12 R@5 + +4 +36:i:1010.6,7 i +40:n:1009.1,2 i +44:col:1011.2,5 s +48:s:1019.1,2 s +n2433:takephoto +2 +32:top:1024.10,13 R@5 + +36:ctlchan:33,40 Ci +5 +40:fd:1028.1,3 R@11 + +44:i:1038.8,9 i +48:e:1030.2,3 i +52:n:1037.3,4 i +56:pid:1026.1,4 i +n2488:unnew +2 +32:top:1049.6,9 R@5 + +36:i:29,30 i +1 +40:tmp:1053.1,4 Li +n2516:refreshtime +2 +32:top:1065.12,15 R@5 + +36:ctlchan:35,42 Ci +1 +40:pid:1067.1,4 i +n2546:addtoplevel +4 +32:top:1074.12,15 R@5 + +36:name:35,39 s +40:abls:49,53 Li +44:pid:68,71 i +3 +48:ltmp:1076.1,5 Lt16.4 +0:t0:48.21,37 R@5 + +4:t1:21,37 s +8:t2:21,37 Li +12:t3:21,37 i + +52:isin:1077.1,5 i +56:tplvl:1079.3,8 R@5 + +n2569:deltoplevel +1 +32:top:1086.12,15 R@5 + +5 +36:ltmp:1088.1,5 Lt16.4 +0:t0:17,33 R@5 + +4:t1:17,33 s +8:t2:17,33 Li +12:t3:17,33 i + +40:tplvl:1090.3,8 R@5 + +44:nm:10,12 s +48:loi:14,17 Li +52:p:19,20 i +n2587:resetcam +3 +32:top:1097.9,12 R@5 + +36:show:32,36 i +40:ctlchan:43,50 Ci +7 +44:i:1101.6,7 i +48:ltmp:1104.2,6 Lt16.4 +0:t0:48.21,37 R@5 + +4:t1:21,37 s +8:t2:21,37 Li +12:t3:21,37 i + +52:pid:1099.1,4 i +56:tplvl:1106.4,9 R@5 + +60:nm:11,13 s +64:loi:15,18 Li +68:p:20,21 i +n2636:set +4 +32:top:1116.4,7 R@5 + +36:i:27,28 i +40:s:35,36 s +44:ctlchan:46,53 Ci +4 +48:val:1121.1,4 s +52:mul:1129.3,6 i +56:pid:1118.1,4 i +52:e:1137.1,2 i +n2706:setstate +2 +32:i:1144.9,10 i +36:val:17,20 s +1 +40:fd:1146.1,3 R@11 + +i2732:getabl +1 +32:pname:1163.7,12 s +1 +36:i:1165.6,7 i +i2742:getstate +2 +32:top:1170.9,12 R@5 + +36:i:32,33 i +6 +40:fd:1172.1,3 R@11 + +44:fdi:1176.2,5 R@16 + +48:s:1178.3,4 s +52:val:1181.4,7 s +72:n:1180.5,6 i +76:lst:7,10 Ls +i2799:setmystate +3 +32:top:1191.11,14 R@5 + +36:i:34,35 i +40:val:42,45 s +1 +44:mul:1197.2,5 i +n2843:refreshfilelist +2 +32:win:1209.16,19 R@5 + +36:refresh:39,46 i +22 +40:i:1221.6,7 i +44:si:1248.2,4 s +48:col:1231.1,4 i +52:nocols:1232.1,7 i +56:k:1242.7,8 i +60:row:1230.1,4 i +64:si:1222.2,4 s +68:size:1290.1,5 s +72:w:1234.1,2 i +76:width:1298.1,6 s +80:fd:1212.2,4 R@11 + +84:isnew:1241.2,7 i +88:oldlist:1220.1,8 As +92:thisw:1263.2,7 i +96:dirs:1226.2,6 AR@0 + +100:n:7,8 i +104:height:1297.1,7 s +108:w1:1233.1,3 i +136:e:1256.2,3 s +92:colsize:1299.1,8 i +84:csize:1291.1,6 i +56:rsize:1292.1,6 i +i3273:tkcmd +2 +32:top:1323.6,9 R@5 + +36:cmd:29,32 s +1 +40:e:1332.1,2 s +s3321:loadnewthumb +2 +32:top:1337.13,16 R@5 + +36:ctlchan:36,43 Ci +2 +40:tmp:1342.6,9 Li +44:pid:1339.1,4 i +n3346:loadthumb +3 +32:top:1347.10,13 R@5 + +36:i:33,34 i +40:ctlchan:41,48 Ci +2 +44:k:1352.7,8 i +48:pid:1349.1,4 i +n3378:loadthumbnail +2 +32:top:1360.14,17 R@5 + +36:i:37,38 i +10 +40:fd:1362.1,3 R@11 + +44:image:1374.1,6 R@7 + +48:n:1389.2,3 i +52:x:1394.2,3 i +56:x1:1397.2,4 i +60:y:1395.2,3 i +64:y1:1398.2,4 i +68:h:1396.2,3 i +72:si:1386.2,4 s +100:p:1384.2,3 @4 + +i3600:isloaded +2 +32:name:1406.9,13 s +36:ftype:23,28 i +2 +40:tmp:1408.1,4 L@17 + +44:ic:1410.2,4 @17 + +i3612:delloaded +2 +32:name:1417.10,14 s +36:ftype:24,29 i +2 +40:tmp:1419.1,4 L@17 + +60:ic:1422.2,4 @17 + +n3634:dialog +4 +32:msg:1431.7,10 s +36:diagtype:20,28 i +40:img:30,33 i +44:r:40,41 @3 + +10 +60:win:1441.2,5 R@5 + +64:titlebar:7,15 Cs +68:title:1439.1,6 s +72:tmpimg:1437.1,7 R@7 + +76:diagchan:1442.1,9 Cs +80:fd:1449.2,4 R@11 + +84:inp:1476.2,5 s +88:out:1438.1,4 i +92:s:1472.2,3 i +96:s:1474.2,3 R@10 + +i3850:mainscreen +3 +32:win:1522.11,14 R@5 + +36:opt:34,37 i +40:ctlchan:44,51 Ci +5 +44:lst:1534.1,4 Li +48:tk1:1527.7,10 i +52:pid:1524.1,4 i +76:height:1540.2,8 s +80:width:1541.2,7 s +n3952:kill +1 +32:pid:1548.5,8 i +1 +36:pctl:1550.1,5 R@11 + +n3968:gettime +1 +32:win:1555.8,11 R@5 + +4 +36:s:1561.2,3 s +40:tm:1564.3,5 R@18 + +44:fdi:1559.1,4 R@16 + +48:time:1565.3,7 s +n4059:addzeros +1 +32:s:1580.9,10 s +4 +36:i:1586.6,7 i +40:rs:1583.1,3 s +44:isnum:1585.1,6 i +48:start:1584.1,6 i +s4098:samedate +1 +32:win:1600.9,12 R@5 + +2 +36:s1:1602.1,3 s +40:s2:1603.1,3 s +i4126:settime +0 +2 +32:tm:1611.1,3 R@18 + +36:fd:1612.1,3 R@11 + +n4163:getstore +1 +32:win:1619.9,12 R@5 + +6 +36:i:1623.6,7 i +40:fdi:1621.1,4 R@16 + +44:s:1624.3,4 s +48:val:1628.4,7 s +68:n:1627.5,6 i +72:lst:7,10 Ls +n4230:contains +2 +32:s:1639.9,10 s +36:test:20,24 s +2 +40:i:1643.6,7 i +44:num:1641.1,4 i +i4253:multidownload +0 +4 +32:s:1658.1,2 s +36:getpath:1651.1,8 s +40:k:1659.6,7 i +44:e:1661.3,4 i +n4303:dnld +2 +32:i:1679.5,6 i +36:path:13,17 s +8 +40:chanout:1683.1,8 Cs +44:ctlchan:1681.1,8 Ci +48:ctlchans:1682.1,9 Cs +52:s:1688.2,3 s +56:e:1700.2,3 i +60:pid:1686.1,4 i +72:n:1692.6,7 i +76:lst:8,11 Ls +i4360:filelenrefresh +1 +32:filename:1708.15,23 s +3 +36:fd:1710.1,3 R@11 + +40:n:1713.3,4 i +48:dir:6,9 @0 + +i4382:testfilesize +1 +32:filename:1721.13,21 s +4 +36:ctlchan:1728.2,9 Ci +40:e:1723.1,2 i +44:e2:1725.2,4 i +48:e3:1730.2,4 i +i4414:waittilready +2 +32:filename:1739.13,21 s +36:ctlchan:31,38 Ci +1 +40:pid:1741.1,4 i +n4438:download +5 +32:i:1751.9,10 i +36:path:17,21 s +40:ctlchan:31,38 Ci +44:ctlchans:53,61 Cs +48:chanout:63,70 Cs +19 +52:savename:1755.1,9 s +56:filesize:1792.1,9 i +60:n:1824.1,2 i +64:read:1808.1,5 i +68:fd2:1811.1,4 R@11 + +72:buf:1810.1,4 Ab +76:fd3:1811.6,9 R@11 + +80:cached:1793.1,7 i +84:cachename:1812.1,10 s +88:fd:1802.1,3 R@11 + +92:filename:1791.1,9 s +96:rlen:1829.2,6 i +100:cachefilename:1795.2,15 s +104:confirm:1775.1,8 i +108:n2:1839.3,5 i +112:written:1837.2,9 i +116:cancel:1809.1,7 i +120:p:1788.1,2 i +124:sout:1834.2,6 s +n4700:downloadscreen +4 +32:r:1881.15,16 @3 + +48:i:24,25 i +52:ctlchans:32,40 Cs +56:chanin:42,48 Cs +15 +60:top:1885.2,5 R@5 + +64:tmpimg:1896.1,7 R@7 + +68:text:1923.2,6 s +72:imgbg:1887.1,6 R@7 + +76:tk1:1894.6,9 i +80:w:1902.2,3 i +84:black:1888.1,6 R@7 + +88:h:1903.2,3 i +92:imgfg:1890.1,6 R@7 + +96:s:1921.2,3 R@10 + +100:white:1889.1,6 R@7 + +128:progr:1886.1,6 @3 + +144:oldcoords:1913.1,10 @3 + +80:val:1930.4,7 i +80:s:1919.2,3 i +n4987:centrewin +3 +32:top:1944.10,13 R@5 + +36:r:33,34 @3 + +52:first:42,47 i +6 +56:s:1946.1,2 s +60:tmp:1951.1,4 s +64:h:1950.1,2 i +68:px:1956.1,3 i +72:py:1957.1,3 i +76:w:1949.1,2 i +n5042:workingscreen2 +4 +32:r:1975.15,16 @3 + +48:pid:25,28 i +52:ctlchan:35,42 Ci +56:loading:57,64 i +10 +60:top:1977.2,5 R@5 + +64:chanin:1978.1,7 Cs +68:tk1:1980.6,9 i +72:inp:2019.2,5 s +76:h:1987.3,4 i +80:s:2017.2,3 R@10 + +84:w:1986.3,4 i +76:h:1998.3,4 i +84:s:2015.2,3 i +84:w:1997.3,4 i +n5226:workingupdate +2 +32:top:2032.14,17 R@5 + +36:chanout:37,44 Cs +4 +40:i:2043.7,8 i +44:show:2034.1,5 As +64:hidden:2041.1,7 i +68:oldcoords:2040.1,10 @3 + +n5274:resizemain +2 +32:top:2059.11,14 R@5 + +36:init:34,38 i +14 +40:w:2061.4,5 i +44:h:1,2 i +48:ws:2084.1,3 i +52:hs:2095.1,3 i +56:ht:2077.1,3 i +60:hmax:2092.1,5 i +64:hmb:2097.1,4 i +68:wc2:2101.1,4 i +72:hc1:2103.1,4 i +76:wc1:2104.1,4 i +80:wsb:2081.1,4 i +108:hf:2079.1,3 i +112:wf:2080.1,3 i +116:r:2072.2,3 @3 + +n5482:growwidth +2 +32:top:2117.10,13 R@5 + +36:wc2:33,36 i +1 +40:ws:2119.1,3 i +n5590:growheight +2 +32:top:2146.11,14 R@5 + +36:hc2:34,37 i +2 +40:hs:2148.1,3 i +44:hsc:2156.2,5 i +n5690:shrinkheight +2 +32:top:2171.13,16 R@5 + +36:hc2:36,39 i +2 +40:hs:2173.1,3 i +44:hsc:2183.2,5 i +n5785:shrinkwidth +2 +32:top:2196.12,15 R@5 + +36:wc2:35,38 i +3 +40:ws:2198.1,3 i +44:wib:2199.1,4 i +48:diff:2201.2,6 i +n5932:getcoords +1 +32:top:2238.10,13 R@5 + +5 +36:x:2242.1,2 i +40:y:2243.1,2 i +44:h:2240.1,2 i +48:w:2241.1,2 i +60:r:2244.1,2 @3 + +@3 +5966:resizeview +3 +32:top:2267.11,14 R@5 + +36:wp:34,36 i +40:hp:37,39 i +9 +44:h:2270.1,2 i +48:hc:2275.1,3 i +52:hpc:2277.1,4 i +56:w:2269.1,2 i +60:wc:2274.1,3 i +64:wpc:2276.1,4 i +68:hs:2271.1,3 i +72:ht:2273.1,3 i +76:ws:2272.1,3 i +n6045:multiview +0 +3 +32:k:2294.6,7 i +36:s:2293.1,2 s +40:e:2296.3,4 i +n6076:vw +1 +32:i:2311.3,4 i +11 +36:chanout:2325.1,8 Cs +40:low:2314.1,4 Lt16.4 +0:t0:48.21,37 R@5 + +4:t1:21,37 s +8:t2:21,37 Li +12:t3:21,37 i + +44:ctlchan:2323.1,8 Ci +48:e:2338.2,3 i +52:chanin:2326.1,7 Cs +56:ctlchans:2324.1,9 Cs +60:killed:2331.1,7 i +64:name:2316.10,14 s +68:s:2333.2,3 s +72:tplvl:2316.3,8 R@5 + +96:pid:2330.1,4 i +i6160:view +4 +32:i:2350.5,6 i +36:ctlchan:13,20 Ci +40:chanin:35,41 Cs +44:chanout:43,50 Cs +32 +48:t:2391.3,4 R@5 + +52:titlechan:6,15 Cs +56:savename:2432.6,14 s +60:ftype:2431.6,11 s +64:cachepath:2372.1,10 s +68:img:2371.1,4 R@7 + +72:s:2482.3,4 s +76:h:2398.2,3 i +80:w:2397.2,3 i +84:cached:2357.1,7 i +88:filename:2355.1,9 s +92:filesize:2356.1,9 i +96:h1:2409.2,4 i +100:scrolling:2417.2,11 i +104:tk1:2395.7,10 i +108:w1:2410.2,4 i +112:butchan:2392.2,9 Cs +116:cachefilename:2359.2,15 s +120:fd:2444.8,10 R@11 + +124:cancel:12,18 i +128:ht:2411.2,4 i +132:titlename:2353.1,10 s +136:e:2487.4,5 s +140:inp:2427.3,6 s +144:s:2423.3,4 i +148:s:2425.3,4 R@10 + +176:n:2428.5,6 i +180:lst:8,11 Ls +184:newpoint:2467.6,14 @4 + +192:origin:2418.2,8 @4 + +216:diff:2470.7,11 @4 + +144:n2:2446.8,10 i +n6707:create +2 +32:filename:2495.7,15 s +36:co:25,27 @3 + +2 +56:n:2497.2,3 i +64:dir:4,7 @0 + +t8.2 +0:t0:2495.37,48 R@11 + +4:t1:37,48 i +51 +1580:abilities:212.0,9 A@15 + +1588:ablmenu:228.0,7 As +1624:bufio:16.1,6 mBufio +6:1.0,57.1 0 + +1684:context:0:30.0,7 R@12 + +1688:coords:37.0,6 @3 + +1704:ctime:2233.7,12 s +1720:daytime:12.1,8 mDaytime +4:1.0,53.1 0 + +1740:display:0:29.0,7 R@6 + +1752:downloadscr:1870.0,11 As +1756:draw:24.1,5 mDraw +9:1.0,298.1 0 + +1772:filelist:0:717.0,8 As +1776:fnew:721.0,4 Li +1796:font:40.0,4 R@14 + +1816:getvaluescr:488.0,11 As +1960:hfs:2235.0,3 i +1964:imgloaded:722.0,9 L@17 + +1968:inflist:227.0,7 Lt8.2 +0:t0:19,25 s +4:t1:19,25 s + +2028:loadimg:50.0,7 R@7 + +2032:ltime:2233.0,5 s +2040:maxsize:45.0,7 @4 + +2048:menu:1314.0,4 A@13 + +2076:nilrect:46.0,7 @3 + +2092:noabilities:211.0,11 i +2100:nofiles:716.0,7 i +2104:noselected:720.0,10 i +2108:nothumbs:724.0,8 i +2184:processing:36.0,10 i +2188:procimg:49.0,7 R@7 + +2208:readdir:14.1,8 mReaddir +5:1.0,19.1 0 + +2212:readjpg:0:27.1,8 mReadjpg +10:1.0,95.1 0 + +2216:reducew:0:2236.0,7 Ai +2228:runwithoutcam:47.0,13 i +2244:scrollx:2056.0,7 i +2248:scrolly:2057.0,7 i +2252:selected:719.0,8 Ai +2256:selectfile:19.1,11 mSelectfile +7:1.0,13.1 0 + +2268:snapscr:0:1496.0,7 As +2276:ssize:44.0,5 i +2288:str:22.1,4 mString +8:1.0,39.1 0 + +2292:sys:0:10.1,4 mSys +3:4.0,160.1 0 + +2304:thumbimg:0:718.0,8 AR@7 + +2308:thumbscr:133.0,8 As +2312:tibuild:745.0,7 i +2316:tk:6.1,3 mTk +1:1.0,25.1 0 + +2324:tkclient:0:8.1,9 mTkclient +2:1.0,26.1 0 + +2344:toplevels:0:48.0,9 Lt16.4 +0:t0:21,37 R@5 + +4:t1:21,37 s +8:t2:21,37 Li +12:t3:21,37 i + +2352:usecache:34.0,8 i +2368:viewscr:2248.0,7 As +2372:wfs:2234.0,3 i +2380:working:35.0,7 i +2384:workingscr2:1962.0,11 As |
