diff --git a/base/ape/acto/core.hook b/base/ape/acto/core.hook index cab01db91..d681621e3 100644 --- a/base/ape/acto/core.hook +++ b/base/ape/acto/core.hook @@ -57,7 +57,7 @@ ++ colm (cook |=(a=@ (sub a '1')) (shim '1' '3')) :: row or column ++ come ;~(plug colm ;~(pfix fas colm)) :: coordinate -- :: -|_ [hid=hide moz=(list move) axle] :: per agent +|_ [hid=hide moz=(list move) axle] :: per server ++ et :: |_ [from say=sole-share] :: per console client ++ abet +>(q.eye (~(put by q.eye) ost say)) :: continue diff --git a/base/ape/dojo/core.hook b/base/ape/dojo/core.hook index 134731064..e56599d47 100644 --- a/base/ape/dojo/core.hook +++ b/base/ape/dojo/core.hook @@ -278,7 +278,7 @@ ++ dy-amok +>(poy ~) :: terminate ++ dy-beak :: XX rethink ^- beak - [our.hid %base [%da lat.hid]] + [our.hid %home [%da lat.hid]] :: ++ dy-ford :: send work to ford |= [way=wire kas=silk] @@ -640,8 +640,7 @@ [%gent ~] dy-made-gent:dye [%edit ~] dy-made-edit:dye == - %| ~& [%he-made-fail way] - (he-diff(poy ~) %tan p.reg) + %| (he-diff(poy ~) %tan p.reg) == :: ++ he-unto :: result from behn @@ -727,7 +726,7 @@ :- [ost ~] ^- session :* *sole-share :: say=sole-share - %base :: syd=desk + %home :: syd=desk ~ :: luc=(unit case) ~ :: poy=(unit dojo-project) ~ :: var=(map term cage) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index a037be6ae..f73c83de8 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -2,100 +2,53 @@ :::: /hook/core/hood/ape :: :: :: :: :: /? 314 :: zuse version -/+ sole, talk, helm, kiln :: libraries +/+ sole, talk, helm, kiln, drum :: libraries :: :: :: :::: :: :: !: :: :: => |% :: module boilerplate + ++ hood-0 :: + ,[%0 lac=(map ,@tas hood-part)] :: ++ hood-good :: |* hed=hood-head :: |= paw=hood-part :: ?- hed :: + %drum ?>(?=(%drum -.paw) `drum-part`paw) :: %helm ?>(?=(%helm -.paw) `helm-part`paw) :: %kiln ?>(?=(%kiln -.paw) `kiln-part`paw) :: == :: ++ hood-head ,_-:*hood-part :: ++ hood-make :: - |* hed=hood-head :: + |* [our=@p hed=hood-head] :: ?- hed :: + %drum (drum-port our) :: %helm *helm-part :: %kiln *kiln-part :: == :: ++ hood-part :: - $? helm-part :: - kiln-part :: + $% [%drum %0 drum-pith] :: + [%helm %0 helm-pith] :: + [%kiln %0 kiln-pith] :: == :: -- :: :: :: :: :::: :: :: :: :: :: |_ $: hid=hide :: system state - [%0 lac=(map ,@tas hood-part)] :: part system + hood-0 :: server state == :: ++ able :: find/make part |* hed=hood-head =+ rep=(~(get by lac) hed) - =+ par=?^(rep u.rep `hood-part`(hood-make hed)) + =+ par=?^(rep u.rep `hood-part`(hood-make our.hid hed)) ((hood-good hed) par) :: ++ ably :: save part |* [moz=(list) rep=hood-part] - [(flop moz) +>(lac (~(put by lac) -.rep rep))] + [(flop moz) %_(+> lac (~(put by lac) -.rep rep))] :: :: :: :::: :: :: :: :: :: -++ poke-hood-begin :: - |= [from hood-begin] - (ably (poke-begin:(helm-work [hid +<-] (able %helm)) +<+)) -:: -++ poke-hood-init :: - |= [from hood-init] - (ably (poke-init:(helm-work [hid +<-] (able %helm)) +<+)) -:: -++ poke-hood-reload :: - |= [from hood-reload] - (ably (poke-reload:(helm-work [hid +<-] (able %helm)) +<+)) -:: -++ poke-hood-reset :: - |= [from ~] - (ably (poke-reset:(helm-work [hid +<-] (able %helm)) +<+)) -:: -++ poke-hood-verb :: - |= [from ~] - (ably (poke-verb:(helm-work [hid +<-] (able %helm)) +<+)) -:: -++ poke-hood-start :: - |= [from hood-start] - (ably (poke-start:(helm-work [hid +<-] (able %helm)) +<+)) -:: -++ poke-will :: - |= [from (unit will)] - (ably (poke-will:(helm-work [hid +<-] (able %helm)) +<+)) -:: -++ poke-hood-merge :: - |= [from hood-merge] - (ably (poke-merge:(kiln-work [hid +<-] (able %kiln)) +<+)) -:: -++ poke-hood-sync :: - |= [from hood-sync] - (ably (poke-sync:(kiln-work [hid +<-] (able %kiln)) +<+)) -:: -++ poke-hood-unix :: - |= [from hood-unix] - (ably (poke-unix:(kiln-work [hid +<-] (able %kiln)) +<+)) -:: -++ onto-helm :: - |= [then saw=(each ,[term @tas @da] tang)] - (ably (take-onto:(helm-work [hid ost src] (able %helm)) +<+)) -:: -++ mere-kiln :: - |= [then are=(each (set path) (pair term tang))] - (ably (take-mere:(kiln-work [hid ost src] (able %kiln)) way +<+)) -:: -++ made-kiln :: - |= [then @uvH (each gage tang)] - (ably (take-made:(kiln-work [hid ost src] (able %kiln)) way +<+)) -:: ++ coup-kiln-fancy :: |= [then saw=(unit tang)] (ably (take-coup-fancy:(kiln-work [hid ost src] (able %kiln)) way +<+)) @@ -105,6 +58,94 @@ ~? ?=(^ saw) [%kiln-spam-lame u.saw] [~ +>] :: +++ coup-drum :: + |= [then saw=(unit tang)] + (ably (take-coup:(drum-work [hid ost src] (able %drum)) way +<+)) +:: +++ diff-sole-effect-drum + |= [then sole-effect] + (ably (diff-sole-effect:(drum-work [hid ost src] (able %drum)) way +<+)) +:: +++ poke-hood-begin :: + |= [from hood-begin] + (ably (poke-begin:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-helm-init :: + |= [from hood-init] + (ably (poke-init:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-hood-mass :: + |= [from ~] + (ably poke-mass:(helm-work [hid +<-] (able %helm))) +:: +++ poke-hood-merge :: + |= [from hood-merge] + (ably (poke-merge:(kiln-work [hid +<-] (able %kiln)) +<+)) +:: +++ poke-hood-reload :: + |= [from hood-reload] + (ably (poke-reload:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-hood-reset :: + |= [from ~] + (ably (poke-reset:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-hood-sync :: + |= [from hood-sync] + (ably (poke-sync:(kiln-work [hid +<-] (able %kiln)) +<+)) +:: +++ poke-hood-unix :: + |= [from hood-unix] + (ably (poke-unix:(kiln-work [hid +<-] (able %kiln)) +<+)) +:: +++ poke-hood-verb :: + |= [from ~] + (ably (poke-verb:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-hood-start :: + |= [from drum-start] + (ably (poke-start:(drum-work [hid +<-] (able %drum)) +<+)) +:: +++ poke-dill-belt + |= [from dill-belt] + (ably (poke-dill-belt:(drum-work [hid +<-] (able %drum)) +<+)) +:: +++ poke-will :: + |= [from (unit will)] + (ably (poke-will:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ mere-kiln :: + |= [then are=(each (set path) (pair term tang))] + (ably (take-mere:(kiln-work [hid ost src] (able %kiln)) way +<+)) +:: +++ made-kiln :: + |= [then @uvH (each gage tang)] + (ably (take-made:(kiln-work [hid ost src] (able %kiln)) way +<+)) +:: +++ init-helm :: + |= [then *] + [~ +>] +:: +++ note-helm :: + |= [then (pair ,@tD tank)] + (ably (take-note:(helm-work [hid ost src] (able %helm)) way +<+)) +:: +++ reap-drum + |= [then saw=(unit tang)] + (ably (reap:(drum-work [hid ost src] (able %drum)) way +<+)) +:: +++ onto-drum :: + |= [then saw=(each ,[term @tas @da] tang)] + (ably (take-onto:(drum-work [hid ost src] (able %drum)) way +<+)) +:: +++ peer-drum + |= [from pax=path] + (ably (peer:(drum-work [hid +<-] (able %drum)) +<+)) +:: +++ quit-drum + |= then + (ably (quit:(drum-work [hid ost src] (able %drum)) way)) +:: ++ went-helm :: |= [then her=ship kay=cape] (ably (take-went:(helm-work [hid ost src] (able %helm)) way +<+)) diff --git a/base/ape/octo/core.hook b/base/ape/octo/core.hook index e49722fae..009f8c41d 100644 --- a/base/ape/octo/core.hook +++ b/base/ape/octo/core.hook @@ -1,11 +1,11 @@ -:: ::::::::::::::: -:::: /hook/core/octo/ape :: :: :: build - :: ::::::::::::::: +:: :: :: +:::: /hook/core/acto/ape :: :: dependencies + :: :: :: /- *sole :: structures /+ sole :: libraries -:: ::::::::::::::: -:::: :: :: :: logic - !: ::::::::::::::: +:: :: :: +:::: :: :: structures + !: :: :: => |% :: board logic ++ board ,@ :: one-player bitfield ++ point ,[x=@ y=@] :: coordinate @@ -43,9 +43,9 @@ ++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table -- :: -- :: -:: ::::::::::::::: -:::: :: :: :: agent - :: ::::::::::::::: +:: :: :: +:::: :: :: server + :: :: :: => |% :: arvo structures ++ axle ,[%1 eye=face but=tube gam=game] :: agent state ++ axon $?(axle [%0 eye=face gam=game]) :: historical state @@ -65,7 +65,7 @@ => |% :: parsers ++ colm (cook |=(a=@ (sub a '1')) (shim '1' '3')) :: row or column ++ come ;~(plug colm ;~(pfix fas colm)) :: coordinate - ++ comb (pick come (punt ;~(pfix sig comp))) :: all command input + ++ comb (pick come ;~(pfix sig (punt comp))) :: all command input ++ comp ;~(plug fed:ag ;~(pfix ace (flag %x %o))) :: login command ++ cope |=(? ?:(+< (stag %| (cold ~ sig)) comb)) :: with wait mode -- :: @@ -101,7 +101,7 @@ ++ plow |= [lev=?(%0 %1 %2) mus=(unit tape)] :: complete print abet:(mean:(play lev) mus) :: ++ prom %^ emit %pro %& :- %octo :: update prompt - ?: wait "(xir turn) " :: + ?: wait "(their turn) " :: ": {~[(icon who.gam)]} to move (row/col): " :: ++ plan |= mut=(unit mote) :: peer command ?~ mut ?~(but abet:beep stop:abet) :: @@ -119,8 +119,8 @@ ++ flet |=(from ~(. et +< (~(got by q.eye) ost))) :: in old client ++ fret |=(from ~(. et +< *sole-share)) :: in new client ++ like |=(xir=ship |*(* [/octo [xir %octo] +<])) :: to friend -++ link |= mot=mote %- dish(but `[| mot]) :: subscribe to friend - peer/((like p.mot) /octo/[?:(q.mot %x %o)]) :: +++ link |= mot=mote %+ dish(but `[| mot]) %peer :: subscribe to friend + ((like p.mot) /octo/net/[?:(q.mot %x %o)]) :: ++ pals %+ turn (pale hid (prix /sole)) |= sink :: per console [[p=p.+< q=q.+<] r=(~(got by q.eye) p.+<)] :: ++ park |= [lev=?(%0 %1 %2) mus=(unit tape)] :: update all @@ -140,23 +140,28 @@ ?. &(?=([~ %& *] but) =(src p.q.u.but)) +> :: ?: =(^gam gam) +> :: (park(gam gam) %2 ~) :: -++ peer-octo :: linked by friend +++ peer-octo-net :: urbit peer |= [from pax=path] =< abet :: =+ who==(%x -.pax) :: - ?^ but (park %2 ~) :: [~ %& !who src] - (park:(link src !who) %2 `"link by {}") :: + ?^ but (park %2 ~) :: + (park:(link src !who) %2 `"net from {}") :: +++ peer-octo-web :: web peer + |= [from pax=path] =< abet :: + ~& [%peer-web +<] :: + ?^ but (park %2 ~) :: + %+ park(but `[%& src !who.gam]) %2 :: + `"web from {}" :: ++ peer-sole :: console subscribe - |= [from *] =< abet :: + |= [from pax=path] =< abet :: (plow:(fret +<-) %2 ~) :: ++ poke-sole-action :: console input |= [from act=sole-action] =< abet :: (work:(flet +<-) act) :: -++ poke-octo-move - |= [from wha=point] =< abet - =^ dud gam ~(m ~(at go gam) wha) - ?> dud - =+ mus=~(res go gam) :: - (park(gam ?^(mus *game gam)) %2 mus) +++ poke-octo-move :: + |= [from wha=point] =< abet :: + =^ dud gam ~(m ~(at go gam) wha) :: + ?> dud =+ mus=~(res go gam) :: + (park(gam ?^(mus *game gam)) %2 mus) :: ++ prep |= [from old=(unit ,[(list move) axon])] :: initialize =< abet ?~ old +> :: =< (park %2 ~) :: @@ -165,8 +170,8 @@ %0 +>(eye.+< eye.+>.old, gam.+< gam.+>.old):: == :: ++ pull-octo :: - |= [from ~] =< abet :: - (park(but ~) %0 `"dropped") :: + |= [from *] =< abet :: + (park(but ~) %2 `"dropped") :: ++ pull-sole :: disconnect console |= [from *] =< abet :: amok:(flet +<-) :: diff --git a/base/ape/sole/core.hook b/base/ape/sole/core.hook index ea9ec524b..ccc872a8b 100644 --- a/base/ape/sole/core.hook +++ b/base/ape/sole/core.hook @@ -65,7 +65,6 @@ [%peer wire dock path] :: [%poke wire dock pear] :: [%pull wire dock ~] :: - [%pass wire note] :: == :: ++ move (pair bone card) :: user-level move -- :: @@ -134,8 +133,9 @@ ++ se-drop :: passive drop |= gyl=gill ^+ +> + ?. (~(has by feg) gyl) +> + =. +> (se-blit %out (tuba "[disconnected from {}]")) =< se-prom - ?> (~(has by feg) gyl) %_ +> feg (~(del by feg) gyl) apt (skip apt |=(a=gill =(gyl a))) @@ -198,7 +198,7 @@ |= gyl=gill ^+ +> =. +> ?. =(p.gyl src) +> - (se-emit ost %conf (se-path gyl) gyl %load src %base) + (se-emit ost %conf (se-path gyl) gyl %load src %home) (se-join:(se-peer gyl /sole) gyl) :: ++ se-blit :: give output @@ -253,10 +253,6 @@ |= gyl=gill (se-emit ost %pull (se-path gyl) gyl ~) :: - ++ se-pass :: pass an action - |= [gyl=gill noh=note] - (se-emit ost %pass (se-path gyl) noh) - :: ++ se-tame |= gyl=gill ^+ ta @@ -614,6 +610,10 @@ == == :: +++ gull + |= way=wire ^- (pair ship gill) + ?>(?=([@ @ @ ~] way) [(slav %p i.way) (slav %p i.t.way) i.t.t.way]) +:: ++ poke-dill-belt |= [from bet=dill-belt] ^- (quip move +>) @@ -634,18 +634,23 @@ ?~ yog ~& [%sole-diff-stale ost way] [~ +>.$] - ?> ?=([@ @ @ ~] way) =< se-abet =< se-view - =+ gyl=[(slav %p i.t.way) i.t.t.way] - (~(se-diff se [~ ~] [(slav %p i.way) ost] u.yog) gyl fec) + =+ yaw=(gull way) + (~(se-diff se [~ ~] [p.yaw ost] u.yog) q.yaw fec) :: ++ coup |= [then saw=(unit tang)] ^- (quip move +>) ?~ saw [~ +>] - :_ +> :_ ~ - [ost %flog ~ %crud %coup u.saw] + =+ yog=(~(get by bin) ost) + ?~ yog + ~& [%sole-coup-stale ost way] + [~ +>.$] + =< se-abet + =< se-view + =+ yaw=(gull way) + (~(se-drop se [[ost %flog ~ %crud %coup u.saw]~ ~] [p.yaw ost] u.yog) q.yaw) :: ++ reap |= [then saw=(unit tang)] @@ -657,7 +662,14 @@ ++ quit |= then ^- (quip move +>) - [~ +>] + =+ yog=(~(get by bin) ost) + ?~ yog + ~& [%sole-quit-stale ost way] + [~ +>.$] + =< se-abet + =< se-view + =+ yaw=(gull way) + (~(se-drop se [~ ~] [p.yaw ost] u.yog) q.yaw) :: ++ onto |= [then saw=(each suss tang)] @@ -669,7 +681,7 @@ == :: ++ pull - |= from + |= [from pax=path] ^- (quip move +>) :: ~& [%sole-pull ost] =^ moz +> diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 51038f566..896e43ab6 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1,6 +1,6 @@ -:: -:::: /hook/core/talk/app - :: +:: :: :: +:::: /hook/core/talk/app :: :: + :: :: :: /? 314 /- *talk, *sole /+ talk, sole @@ -957,13 +957,10 @@ |= mov=move %_(+> moves [mov moves]) :: - ++ ra-ever :: emit success - . - :: ++ ra-evil :: emit error |= msg=cord - ~& [%ra-evil msg] - +> + ~| [%ra-evil msg] + !! :: ++ ra-house :: emit partners |= ost=bone @@ -999,13 +996,11 @@ ?~ q.cod ?. (~(has by stories) p.cod) (ra-evil %talk-no-story) - =. +>.$ (ra-config p.cod *config) - ra-ever(stories (~(del by stories) p.cod)) - =. +>.$ (ra-config p.cod u.q.cod) - ra-ever + (ra-config(stories (~(del by stories) p.cod)) p.cod *config) + (ra-config p.cod u.q.cod) :: - %review ra-ever:(ra-think | her +.cod) - %publish ra-ever:(ra-think & her +.cod) + %review (ra-think | her +.cod) + %publish (ra-think & her +.cod) == :: ++ ra-config :: configure story @@ -1036,6 +1031,11 @@ %- (ra-know man) |= par=_pa =< pa-abet (pa-quit:par %& cuz) :: + ++ ra-retry :: subscription resend + |= [man=span cuz=station] + %- (ra-know man) |= par=_pa =< pa-abet + (pa-acquire:par [%& cuz]~) + :: ++ ra-coup-repeat :: |= [[num=@ud her=@p man=span] saw=(unit tang)] (ra-repeat num [%& her man] saw) @@ -1055,13 +1055,12 @@ (ra-think | our.hid u.oot ~) :: ++ ra-cancel :: drop a bone - ^+ . - =+ hep=(~(get by sup.hid) ost) - ?~ hep + - ?. ?=([@ @ *] q.u.hep) - +(general (~(del in general) ost)) - %- (ra-know i.t.q.u.hep) |= par=_pa =< pa-abet - (pa-notify:pa-cancel:par p.u.hep %gone *human) + |= [src=ship pax=path] + ^+ +> + ?. ?=([@ @ *] pax) + +>(general (~(del in general) ost)) + %- (ra-know i.t.pax) |= par=_pa =< pa-abet + (pa-notify:pa-cancel:par src %gone *human) :: ++ ra-human :: look up person |= her=ship @@ -1238,6 +1237,9 @@ ++ pa-diff-talk-report :: subscribed update |= [cuz=station rad=report] ^+ +> + ?. (~(has in sources.shape) [%& cuz]) + ~& [%pa-diff-unexpected cuz rad] + +> ?+ -.rad ~|([%talk-odd-friend rad] !!) %cabal (pa-cabal cuz +.rad) %group (pa-remind [%& cuz] +.rad) @@ -1307,7 +1309,7 @@ pa-monitor :: ++ pa-cancel :: unsubscribe from - :: ~& [%pa-cancel ost] + ~& [%pa-cancel ost] %_ . guests (~(del by guests) ost) viewers (~(del in viewers) ost) @@ -1549,7 +1551,7 @@ == == ++ ta-best :: most relevant - |=(two=partner ?:((ta-beat two) one two)) + |=(two=partner ?:((ta-beat two) two one)) :: ++ ta-full (ta-show ~) :: render full width ++ ta-show :: render partner @@ -1658,6 +1660,7 @@ ++ peer :: accept subscription |= [from pax=path] ^- [(list move) _+>] + :: ~& [%talk-peer src ost pax] ?: ?=([%sole *] pax) ?> =(our.hid src) ?< (~(has by shells) ost) @@ -1708,16 +1711,24 @@ =+ wer=(etch way) ?>(?=(%repeat -.wer) (fun p.wer q.wer r.wer)) :: +++ reap-friend :: + |= [then saw=(unit tang)] + ^- (quip move +>) + ?~ saw [~ +>] + %+ etch-friend [%friend way] |= [man=span cuz=station] + ~& [%reap-friend-fail man cuz u.saw] + ra-abet:(~(ra-quit ra ost ~) man cuz) +:: ++ quit-friend :: |= then %+ etch-friend [%friend way] |= [man=span cuz=station] - ra-abet:(~(ra-quit ra ost ~) man cuz) + ra-abet:(~(ra-retry ra ost ~) man cuz) :: ++ pull :: - |= [from *] + |= [from pax=path] ^- [(list move) _+>] - :: ~& [%talk-pull `*`ost] - =^ moz +>.$ ra-abet:ra-ever:~(ra-cancel ra ost ~) + ~& [%talk-pull src ost pax] + =^ moz +>.$ ra-abet:(~(ra-cancel ra ost ~) src pax) [moz +>.$(shells (~(del by shells) ost))] :: ::++ poke-bit diff --git a/base/ape/ucto/core.hook b/base/ape/ucto/core.hook index a746b49c5..a22146447 100644 --- a/base/ape/ucto/core.hook +++ b/base/ape/ucto/core.hook @@ -1,11 +1,11 @@ -:: ::::::::::::::: -:::: /hook/core/acto/ape :: :: :: build - :: ::::::::::::::: -/- *sole :: structures -/+ sole :: libraries -:: ::::::::::::::: -:::: :: :: :: logic - !: ::::::::::::::: +:: :: :: +:::: /hook/core/acto/ape :: :: dependencies + :: :: :: +/- *sole :: structure +/+ sole :: library +:: :: :: +:::: :: :: structures + !: :: :: => |% :: board logic ++ board ,@ :: one-player bitfield ++ point ,[x=@ y=@] :: coordinate @@ -19,6 +19,9 @@ ++ win %- lien :_ |=(a=@ =(a (dis a bud))) :: test for win (rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: -- :: + :: :: :: + :::: :: :: semantics + :: :: :: ++ go :: per game |_ game :: ++ at |_ point :: per point @@ -43,9 +46,9 @@ ++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table -- :: -- :: -:: ::::::::::::::: -:::: :: :: :: agent - :: ::::::::::::::: +:: :: :: +:::: :: :: server + :: :: :: => |% :: arvo structures ++ axle ,[%0 eye=face gam=game] :: agent state ++ card ,[%diff lime] :: update @@ -59,7 +62,7 @@ -- :: |_ [hid=hide moz=(list move) axle] :: per agent ++ et :: - |_ [from say=sole-share] :: per console client + |_ [from say=sole-share] :: per console ++ abet +>(q.eye (~(put by q.eye) ost say)) :: continue ++ amok +>(q.eye (~(del by q.eye) ost)) :: discontinue ++ beep (emit %bel ~) :: bad user @@ -102,9 +105,9 @@ ++ park |= [lev=?(%0 %1 %2) mus=(unit tape)] :: general update =+ pals |- ^+ +>.^$ ?~ +< +>.^$ :: $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: -:: ::::::::::::::: -:::: :: :: :: hooks - :: ::::::::::::::: +:: :: :: +:::: :: :: events + :: :: :: ++ peer-sole :: console subscribe |= [from *] =< abet :: (plow:(fret +<-) %2 ~) :: diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index 5f6d77cff..ad3922acd 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -413,7 +413,7 @@ vix=(bex +((cut 0 [25 2] mag))) :: width of sender tay=(cut 0 [27 5] mag) :: message type == - ?> =(5 vez) + ?> =(7 vez) ?> =(chk (end 0 20 (mug bod))) :+ [(end 3 wix bod) (cut 3 [wix vix] bod)] (kins tay) @@ -433,7 +433,7 @@ =+ tay=(ksin q.kec) %+ mix %+ can 0 - :~ [3 5] + :~ [3 7] [20 (mug bod)] [2 yax] [2 qax] @@ -1018,7 +1018,7 @@ ++ gnaw :: gnaw:am |= [kay=cape ryn=lane pac=rock] :: process packet ^- [p=(list boon) q=fort] - ?. =(5 (end 0 3 pac)) [~ fox] + ?. =(7 (end 0 3 pac)) [~ fox] =+ kec=(bite pac) ?: (goop p.p.kec) [~ fox] ?. (~(has by urb.ton.fox) q.p.kec) @@ -1648,7 +1648,6 @@ == :: %cake - :: ~& [%cake p.bon q.bon r.bon] :_ fox :~ [s.bon %give %woot q.p.bon r.bon] == @@ -1932,8 +1931,8 @@ :: ++ wegh ^- mass + :- %ames :- %| :~ fox/`fox - :: cor/`. == -- diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index e6b5de048..83c19e1ac 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -247,8 +247,6 @@ ?. ?=([%sing %v *] rav) rav [%many %| [%ud let.dom] `case`q.p.rav r.p.rav] =+ inx=nix.u.ref - ~? ?=([%sing %x *] vaw) - [%remote-x-ing vaw hen] %= +>+.$ say [[hen [(scot %ud inx) ~] for [inx syd ~ vaw]] say] nix.u.ref +(nix.u.ref) @@ -865,8 +863,8 @@ !! :: %x - =< ?> ?=(^ ref) . - (rand-to-rant u.rut) + =< ?>(?=(^ ref) .) + (validate-x p.p.u.rut q.p.u.rut q.u.rut r.u.rut) :: %w =. haw.u.ref @@ -933,6 +931,27 @@ :: == :: == :: + ++ validate-x + |= [car=care cas=case pax=path peg=page] + ^+ +> + =- %_(+>.$ tag [- tag]) + :* hen %pass + [%foreign-x (scot %p who) (scot %p for) syd car (scot cas) pax] + %f %exec who [for syd cas] ~ + %vale p.peg for q.peg + == + :: + ++ take-foreign-x + |= [car=care cas=case pax=path res=(each gage tang)] + ^+ +> + ?> ?=(^ ref) + ?: ?=(%| -.res) + ~| "validate foreign plops failed" + ~| [%plop-fail (turn p.res |=(tank ~(ram re +<)))] + !! + ?> ?=(@ p.p.res) + wake(haw.u.ref (~(put by haw.u.ref) [car cas pax] `p.res)) + :: ++ validate-plops |= [cas=case pop=(set plop)] ^+ +> @@ -1680,8 +1699,6 @@ %that ?: =(r.ali.dat r.bob.dat) (done:he ~) - ?: (~(has in (reachable-takos r.bob.dat)) r.ali.dat) - (done:he ~) =. new.dat (make-yaki [r.ali.dat r.bob.dat ~] q.ali.dat now) =. hut.ran (~(put by hut.ran) r.new.dat new.dat) =. erg.dat @@ -2097,7 +2114,7 @@ ?~ cay ~ `[pax u.cay] - =^ hat lat.ran :: new content + =^ hot lat.ran :: new content ^- [(map path lobe) (map lobe blob)] %+ roll (~(tap by can)) =< .(lat lat.ran) @@ -2112,13 +2129,13 @@ [(lobe-to-mark u.-) u.-] [p q.q]:cay [(~(put by hat) pax p.bol) (~(put by lat) p.bol bol)] - =. hat :: all the content + =+ ^- hat=(map path lobe) :: all the content %- ~(uni by old) %- ~(uni by new.dal.dat) %- ~(uni by new.dob.dat) %- ~(uni by cal.dal.dat) %- ~(uni by cal.dob.dat) - %- ~(uni by hat) + %- ~(uni by hot) cas =+ ^- del=(map path ,?) (~(run by (~(uni by old.dal.dat) old.dob.dat)) |=(~ %|)) @@ -2127,7 +2144,13 @@ (make-yaki [r.ali.dat r.bob.dat ~] hat now) =. hut.ran (~(put by hut.ran) r.new.dat new.dat) =. erg.dat %- ~(uni by del) - `(map path ,?)`(~(run by hat) |=(lobe %&)) + ^- (map path ,?) + %. |=(lobe %&) + %~ run by + %- ~(uni by new.dal.dat) + %- ~(uni by cal.dal.dat) + %- ~(uni by cas) + hot checkout :: ++ checkout @@ -2414,10 +2437,16 @@ :: %init :_ ..^$(fat.ruf (~(put by fat.ruf) p.q.hic [hen ~ ~])) - =+ bos=(sein p.q.hic) - ~& [%bos bos p.q.hic] - ?: =(bos p.q.hic) ~ - [hen %pass / %c %font p.q.hic %base bos %kids]~ + =+ [bos=(sein p.q.hic) can=(clan p.q.hic)] + %- zing ^- (list (list move)) + :~ ~& [%bos bos p.q.hic] + ?: =(bos p.q.hic) ~ + [hen %pass / %c %font p.q.hic %base bos %kids]~ + :: + ~ + :: ?. ?=(?(%king %czar) can) ~ + :: [hen %pass / %c %font p.q.hic %kids p.q.hic %base]~ + == :: %info ?: =(%$ q.q.hic) @@ -2544,9 +2573,15 @@ %wegh :_ ..^$ :_ ~ :^ hen %give %mass + :- %clay :- %| - :~ ruf/`ruf - :: cor/`..^$ + :~ domestic/`fat.ruf + foreign/`hoy.ruf + :- %object-store :- %| + :~ commits/`hut.ran.ruf + blobs/`lat.ran.ruf + == + autosync/`sor.ruf == == :: @@ -2594,7 +2629,7 @@ =* sud i.t.t.t.t.tea =* sat i.t.t.t.t.t.tea =+ une=(un our now hen ruf) - =+ wak=wake:une + =+ wak=une =+ wex=(di:wak syd) =+ dat=?-(+<.q.hin %writ [%& p.q.hin], %made [%| q.q.hin]) =+ ^- kan=(unit ankh) @@ -2605,7 +2640,8 @@ ank.dom =+ wao=abet:(route:(me:ze:wex [her sud] kan) sat dat) =+ woo=abet:wao - [(weld -.wak -.woo) ..^$(ruf abet:(pish:une syd +.woo ran.wao))] + =+ sip=wake:(pish:une syd +.woo ran.wao) + [(weld -.sip -.woo) ..^$(ruf abet:[+.sip])] ?: ?=([%auto @ @ @ @ ~] tea) =+ our=(slav %p i.t.tea) =* syd i.t.t.tea @@ -2617,7 +2653,7 @@ =. sor.ruf (~(put by sor.ruf) [our syd her sud] [nex hen]) =+ `move`[hen %pass tea %c %warp [our her] sud ~ %sing %y [%ud nex] /] ?: ?=(%& -.p.+.q.hin) - ~& ['merge succeeded' p.p.+.q.hin] + :: ~& ['merge succeeded' p.p.+.q.hin] [[- ~] ..^$] ~& :^ "merge failed" "please manually merge the desks with" @@ -2764,6 +2800,24 @@ =+ zot=abet.zat [-.zot (posh her syd +.zot ruf)] [mos ..^$(ran.ruf ran.zat)] + :: + %foreign-x + ?> ?=([@ @ @ @ @ *] t.tea) + =+ our=(slav %p i.t.tea) + =+ her=(slav %p i.t.t.tea) + =+ syd=(slav %tas i.t.t.t.tea) + =+ car=((hard care) i.t.t.t.t.tea) + =+ ^- cas=case + =+ (slay i.t.t.t.t.t.tea) + ?> ?=([~ %$ case] -) + ->+ + =* pax t.t.t.t.t.t.tea + =+ zax=(do now hen [our her] syd ruf) + =+ zat=(take-foreign-x:zax car cas pax q.q.hin) + =^ mos ruf + =+ zot=abet.zat + [-.zot (posh her syd +.zot ruf)] + [mos ..^$(ran.ruf ran.zat)] == :: %mere !! diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 98426399c..c70b5a9d7 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -6,11 +6,26 @@ ++ gill (pair ship term) :: general contact -- :: => |% :: console protocol -++ axle :: all dill state +++ all-axle ?(old-axle axle) :: +++ old-axle :: all dill state $: %2 :: ore=(unit ship) :: identity once set hey=(unit duct) :: default duct dug=(map duct axon) :: conversations + == :: +++ axle :: + $: %3 :: + ore=(unit ship) :: identity once set + hey=(unit duct) :: default duct + dug=(map duct axon) :: conversations + $= hef :: other weights + $: a=(unit mass) :: + c=(unit mass) :: + e=(unit mass) :: + f=(unit mass) :: + g=(unit mass) :: + t=(unit mass) :: + == :: == :: ++ axon :: dill per duct $: ram=term :: console program @@ -22,24 +37,7 @@ -- => :: |% :: protocol below ++ gift gift-dill :: out result <-$ -++ kiss :: in request ->$ - $% [%belt p=belt] :: terminal input - [%blew p=blew] :: terminal config - [%boot p=*] :: weird %dill boot - [%crud p=@tas q=(list tank)] :: error with trace - [%flog p=flog] :: wrapped error - [%flow p=@tas q=(list gill)] :: terminal config - [%hail ~] :: terminal refresh - [%hook ~] :: this term hung up - [%harm ~] :: all terms hung up - [%init p=ship] :: after gall ready - [%noop ~] :: no operation - [%talk p=tank] :: - [%text p=tape] :: - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: +++ kiss kiss-dill :: in request ->$ -- => :: |% :: protocol outward ++ mess :: @@ -63,6 +61,7 @@ == :: ++ note-dill :: note to self, odd $% [%crud p=@tas q=(list tank)] :: + [%heft ~] :: [%init p=ship] :: [%text p=tape] :: [%veer p=@ta q=path r=@t] :: install vane @@ -74,11 +73,12 @@ [%deal p=sock q=cush] :: == :: ++ note :: out request $-> + $? [?(%a %c %e %f %g %t) %wegh ~] :: $% [%a note-ames] :: [%c note-clay] :: [%d note-dill] :: [%g note-gall] :: - == :: + == == :: ++ riff ,[p=desk q=(unit rave)] :: see %clay ++ sign-ames :: $% [%nice ~] :: @@ -103,12 +103,13 @@ $% [%wake ~] :: == :: ++ sign :: in result $<- + $? [?(%a %c %e %f %g %t) %mass p=mass] :: $% [%a sign-ames] :: [%c sign-clay] :: [%d sign-dill] :: [%g sign-gall] :: [%t sign-time] :: - == :: + == == :: :::::::: :: dill tiles -- =| all=axle @@ -134,6 +135,29 @@ %crud :: (send `dill-belt`[%cru p.kyz q.kyz]) (crud p.kyz q.kyz) %blew (send %rez p.p.kyz q.p.kyz) + %heft heft + %tick =+ ^= ges ^- gens + ^- gens + :- %en + =+ can=(clan p.kyz) + ?- can + %czar [%czar ~] + %duke [%duke %anon ~] + %earl [%earl (scot %p p.kyz)] + %king :- %king + ?: =(~doznec p.kyz) :: so old tickets work + 'Urban Republic' + (scot %p p.kyz) + %pawn [%pawn ~] + == + =+ yen=(scot %p (shax :(mix %ticket eny now))) + =+ ^= beg ^- [his=@p tic=@p yen=@t ges=gens] + [p.kyz q.kyz yen ges] + =+ cag=`cage`[%hood-begin !>(beg)] + %= +>.$ + moz + :_(moz [hen %pass ~ %g %deal [our our] %hood %poke cag]) + == %veer (dump kyz) %vega (dump kyz) %verb (dump kyz) @@ -179,16 +203,32 @@ (dump %logo ~) (done %blit [bit ~]) :: + ++ heft + %_ . + moz + :* [hen %pass /heft/ames %a %wegh ~] + [hen %pass /heft/clay %c %wegh ~] + [hen %pass /heft/eyre %e %wegh ~] + [hen %pass /heft/ford %f %wegh ~] + [hen %pass /heft/gall %g %wegh ~] + [hen %pass /heft/time %t %wegh ~] + moz + == + == + :: ++ init :: initialize - ~& [%dill-init our] + ~& [%dill-init our ram] =+ myt=(flop (need tem)) + =+ can=(clan our) =. tem ~ =. moz :_(moz [hen %pass / %c %font our %home our %base]) - =. moz :_(moz [hen %pass ~ %g %conf [[our ram] %load our %base]]) - =. moz :_(moz [hen %pass ~ %g %deal [our our] ram %peer ~]) - |- ^+ +> - ?~ myt +> - $(myt t.myt, +> (send i.myt)) + =. moz ?. ?=(?(%king %czar) can) moz + :_(moz [hen %pass / %c %font our %kids our %base]) + =. moz :_(moz [hen %pass ~ %g %conf [[our ram] %load our %home]]) + =. +> peer + |- ^+ +>+ + ?~ myt +>+ + $(myt t.myt, +>+ (send i.myt)) :: ++ into :: preinitialize |= gyl=(list gill) @@ -213,6 +253,11 @@ :_ moz [hen %pass ~ %g %deal [our our] ram %poke [%dill-belt -:!>(bet) bet]] == + ++ peer + %_ . + moz + :_(moz [hen %pass ~ %g %deal [our our] ram %peer /drum]) + == :: ++ pump :: send diff ack %_ . @@ -224,6 +269,9 @@ |= sih=sign ^+ +> ?- sih + [?(%a %c %e %f %g %t) %mass *] + (wegt -.sih p.sih) + :: [%a %nice *] :: ~& [%take-nice-ames sih] +> @@ -252,8 +300,10 @@ :: ~& [%take-gall-unto +>.sih] ?- -.+>.sih %coup ?~(p.p.+>.sih +>.$ (crud %coup u.p.p.+>.sih)) - %quit !! :: ?? - %reap ?~(p.p.+>.sih +>.$ (crud %reap u.p.p.+>.sih)) + %quit peer + %reap ?~ p.p.+>.sih + +>.$ + (dump:(crud %reap u.p.p.+>.sih) %logo ~) %diff pump:(from ((hard dill-blit) q:`vase`+>+>.sih)) == :: @@ -270,6 +320,38 @@ :: ~& %dill-wake +> == + :: + ++ wegh + ^- mass + :- %dill + :- %| + :~ all/`[ore hey dug]:all + == + :: + ++ wegt + |= [lal=?(%a %c %e %f %g %t) mas=mass] + ^+ +> + =. hef.all + ?- lal + %a ~?(?=(^ a.hef.all) %double-mass-a hef.all(a `mas)) + %c ~?(?=(^ c.hef.all) %double-mass-c hef.all(c `mas)) + %e ~?(?=(^ e.hef.all) %double-mass-e hef.all(e `mas)) + %f ~?(?=(^ f.hef.all) %double-mass-f hef.all(f `mas)) + %g ~?(?=(^ g.hef.all) %double-mass-g hef.all(g `mas)) + %t ~?(?=(^ t.hef.all) %double-mass-t hef.all(t `mas)) + == + ?. ?& ?=(^ a.hef.all) + ?=(^ c.hef.all) + ?=(^ e.hef.all) + ?=(^ f.hef.all) + ?=(^ g.hef.all) + ?=(^ t.hef.all) + == + +>.$ + %+ done(hef.all [~ ~ ~ ~ ~ ~]) + %mass + => [hef.all d=wegh] + [%vanes %| ~[u.a u.c d u.e u.f u.g u.t]] -- :: ++ ax :: make ++as @@ -287,7 +369,7 @@ [~ ~] 80 0 - (tuba "<{(trip p.kyz)}>") + (tuba "") == -- |% :: poke/peek pattern @@ -313,6 +395,8 @@ ?: ?=([%crud %hax-init [%leaf *] ~] p.q.hic) =+ him=(slav %p (crip p.i.q.p.q.hic)) :_(..^$ ?~(hey.all ~ [u.hey.all %give %init him]~)) + ?: ?=([%crud %hax-heft ~] p.q.hic) + :_(..^$ ?~(hey.all ~ [u.hey.all %slip %d %heft ~]~)) :_(..^$ ?~(hey.all ~ [u.hey.all %slip %d p.q.hic]~)) =. hey.all ?^(hey.all hey.all `hen) ?: ?=(%init -.q.hic) @@ -322,15 +406,7 @@ =: ore.all `p.q.hic dug.all ~ == - =+ ^= flo ^- (list (pair ship term)) - =+ myr=(clan p.q.hic) - ?: =(%pawn myr) - [[p.q.hic %dojo] [p.q.hic %hood] ~] - ?: =(%earl myr) - =+ fap=(sein p.q.hic) - [[fap %dojo] [fap %talk] [fap %hood] ~] - [[p.q.hic %dojo] [p.q.hic %talk] [p.q.hic %hood] ~] - =^ moz all abet:(need (ax (need hey.all) [%flow %sole flo])) + =^ moz all abet:(need (ax (need hey.all) [%flow %hood ~])) ?: |((lth p.q.hic 256) (gte p.q.hic (bex 64))) [moz ..^$] :: XX HORRIBLE [:_(moz [(need hey.all) %give %init p.q.hic]) ..^$] =+ nus=(ax hen q.hic) @@ -346,7 +422,9 @@ ~ :: ++ load :: trivial - |= old=axle + |= old=all-axle + ?: ?=(%2 -.old) + $(old [%3 ore hey dug ~ ~ ~ ~ ~ ~]:old) ..^$(all old) :: |= old=* :: diable :: ..^$(ore.all `~zod) @@ -379,4 +457,3 @@ [moz ..^$] -- -:: good test diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 32e824a8c..e897f2fb0 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -119,7 +119,7 @@ [%get him=ship rem=pork] [%js ~] [%json ~] - [%try him=ship cod=cord] + [%try him=ship paz=(unit cord)] [%xen ses=hole rem=pork] == :: @@ -157,18 +157,19 @@ ++ session-from-cookies |= [nam=@t maf=math] ^- (unit hole) - =+ ^= cok ^- (list ,@t) - =+ cok=(~(get by maf) 'cookie') - ?~(cok ~ u.cok) - |- ^- (unit hole) + (from-cookies maf |=([k=@t v=@] &(=(nam k) !=('~' v)))) +:: +++ ship-from-cookies + |= maf=math ^- (unit ship) + (biff (from-cookies maf |=([k=@ @] =(%ship k))) (slat %p)) +:: +++ from-cookies + |= [maf=math fil=$+([@t @t] ?)] + =+ `cot=(list ,@t)`(~(get ju maf) 'cookie') + =+ `cok=quay`(zing `(list quay)`(murn cot (curr rush cock:epur))) + |- ^- (unit cord) ?~ cok ~ - =+ mar=`(unit (list ,[p=@t q=@t]))`(rush i.cok cock:epur) - ?~ mar $(cok t.cok) - |- ^- (unit hole) - ?~ u.mar ^$(cok t.cok) - ?: &(=(nam p.i.u.mar) !=('~' q.i.u.mar)) - [~ q.i.u.mar] - $(u.mar t.u.mar) + ?:((fil i.cok) [~ q.i.cok] $(cok t.cok)) :: ++ wush |= [wid=@u tan=tang] @@ -184,9 +185,11 @@ hit(q (weld cuh q.hit)) :: ++ add-poll :: inject dependency - |= [dep=@uvH max=[[%html ~] [[%head ~] hed=marl] [[%body ~] manx marl] ~]] + |= [dep=@uvH max=[[%html ~] [[%head ~] hed=marl] [[%body ~] tal=marl] ~]] ^- manx - =. hed.max :_(hed.max ;meta(charset "utf-8", urb_injected "");) + =: hed.max :_(hed.max ;meta(charset "utf-8", urb_injected "");) + tal.max (welp tal.max ;script(urb_injected ""):"{(trip etag:js)}" ~) + == ?~ dep max max(hed :_(hed.max ;script@"/~/on/{}.js"(urb_injected "");)) :: @@ -274,19 +277,30 @@ }) } - if(window.ship) ship.innerText = urb.ship urb.foreign = /^\/~\/am/.test(window.location.pathname) + urb.redir = function(ship){ + if(ship) document.location.pathname = + document.location.pathname.replace(/^\/~~|\/~\/as\/any/,'/~/as/~'+ship) + else document.location = + document.location.hash.match(/#[^?]+/)[0].slice(1) + + document.location.pathname.replace( + /^\/~\/am\/[^/]+/, + '/~/as/~' + urb.ship) + + document.location.search + } + if(urb.foreign && urb.auth.indexOf(urb.ship) !== -1){ + req("/~/auth.json?PUT", + {ship:urb.ship,code:null}, + function(){urb.redir()}) + } urb.submit = function(){ + if(urb.ship !== $ship.text().toLowerCase()) + return urb.redir($ship.text().toLowerCase()) // XX redundant? req( "/~/auth.json?PUT", - {ship: ship.innerText, code: pass.value}, + {ship:ship.innerText.toLowerCase(), code:pass.value}, function(){ - if(urb.foreign) document.location = - document.location.hash.match(/#[^?]+/)[0].slice(1) + - document.location.pathname.replace( - /^\/~\/am\/[^/]+/, - '/~/as/~' + urb.ship) + - document.location.search + if(urb.foreign) urb.redir() else document.location.reload() }) } @@ -294,30 +308,78 @@ function(){document.getElementById("c").innerHTML = "

Goodbye.

" } )} ''' + ++ etag + ''' + if(!window.urb) window.urb = {} + urb.fetchTag = function(){ + var tag = JSON.parse(this.getResponseHeader("etag")) + if(tag) urb.wasp(tag) + } + urb.headReq = function(url){ + var xhr = new XMLHttpRequest() + xhr.open("HEAD", url) + xhr.onload = urb.fetchTag + xhr.send() + } + Array.prototype.map.call(document.querySelectorAll('script'), function(ele){ + if((new URL(ele.src)).host == document.location.host) + urb.headReq(ele.src) + }) + Array.prototype.map.call(document.querySelectorAll('link'), function(ele){ + if((new URL(ele.href)).host == document.location.host) + urb.headReq(ele.href) + }) + ''' -- ++ xml |% ++ login-page - %+ titl 'Log in' - ;= ;div#c - ;p: Please log in. - ;p.mono: ~;{span#ship(contenteditable "")} - ;input#pass(onchange "urb.submit()"); - ;pre:code#err; - ;script@"/~/at/~/auth.js"; + %+ titl 'Log in :urbit' + ;= ;h1: Please log in + ;p.ship + ;div.sig: ~ + ;span#ship(contenteditable ""); == - ;link(rel "stylesheet", href "/home/lib/base.css"); + ;input#pass(type "password"); + ;pre:code#err; + ;script@"/~/at/~/auth.js"; + ;script:''' + $(function() { + $ship = $('#ship') + $pass = $('#pass') + $ship.on('keydown', function(e) { + if(e.keyCode === 13 || e.keyCode === 9) { + if(urb.ship !== $ship.text().toLowerCase()) + urb.redir($ship.text().toLowerCase()) + $pass.show() + $pass.focus() + e.preventDefault() + } + }) + $ship.on('focus', function(e) { + $pass.hide() + }) + $pass.on('keydown', function(e) { + if(e.keyCode === 13) { + urb.submit() + } + }) + if(window.ship) { + $ship.text(urb.ship) + $pass.focus() + } else { + $pass.hide() + } + }) + ''' == :: ++ logout-page %+ titl 'Log out' - ;= ;div#c - ;p: Goodbye ~;{span#ship}. - ;button#act(onclick "urb.away()"): Log out - ;pre:code#err; - ;script@"/~/at/~/auth.js"; - == - ;link(rel "stylesheet", href "/home/lib/base.css"); + ;= ;h1: Goodbye ~;{span#ship}. + ;button#act(onclick "urb.away()"): Log out + ;pre:code#err; + ;script@"/~/at/~/auth.js"; == :: ++ poke-test @@ -333,7 +395,18 @@ } ''' == - ++ titl |=([a=cord b=marl] ;html:(head:title:"{(trip a)}" body:"*{b}")) + ++ titl + |= [a=cord b=marl] + ;html + ;head + ;meta(charset "utf-8"); + ;title:"{(trip a)}" + ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/". + "libs/jquery/2.1.1/jquery.min.js"); + ;link(rel "stylesheet", href "/home/lib/base.css"); + == + ;body:div#c:"*{b}" + == -- -- |% :: functions @@ -385,7 +458,7 @@ =. p.p.pul |(p.p.pul ?=(hoke r.p.pul)) =+ her=(host-to-ship r.p.pul) ?: |(?=(~ her) =(our u.her)) - (handle pul [q.+.kyz anon] [p.heq maf s.heq]) + (handle pul [q.+.kyz |] [p.heq maf s.heq]) =+ han=(sham hen) =. pox (~(put by pox) han hen) (ames-gram u.her [%get ~] han +.kyz) @@ -428,6 +501,9 @@ %hat (foreign-hat:(ses-ya p.u.mez) q.p.kyz q.u.mez) %get (pass-note ay/(dray p/uv/~ q.p.kyz p.u.mez) [%e %this q.u.mez]) %got + ?. (~(has by pox) p.u.mez) + ~& lost-gram-thou/p.kyz^p.u.mez + +>.$ =: hen (~(got by pox) p.u.mez) pox (~(del by pox) p.u.mez) == @@ -582,7 +658,7 @@ (~(has in aut.u.cyz) our) :: ++ ses-ya |=(ses=hole ~(. ya ses (~(got by wup) ses))) - ++ our-host `hart`[& ~ `/com/urbit/(rsh 3 1 (scot %p our))] + ++ our-host `hart`[& ~ `/org/urbit/(rsh 3 1 (scot %p our))] :: [| [~ 8.445] `/localhost] :: XX testing :: ++ ames-gram @@ -590,7 +666,8 @@ :: ++ back :: %ford bounce |= [tea=whir dep=@uvH mar=mark cay=cage] - (pass-note tea (ford-req root-beak [%cast mar %done ~ cay])) :: XX deps + =+ sil=`silk`[%cast mar %flag dep %done ~ cay] + (pass-note tea (ford-req root-beak sil)) :: ++ ford-kill (pass-note ~ %f [%exec our *beak ~]) :: XX unused ++ ford-req |=([bek=beak kas=silk] [%f [%exec our bek `kas]]) @@ -626,8 +703,8 @@ ++ host-to-ship :: host to ship |= hot=host ^- (unit ship) - =+ gow=(~(get by dop) hot) - ?^ gow gow + :: =+ gow=(~(get by dop) hot) :: XX trust + :: ?^ gow gow ?. ?=(& -.hot) ~ =+ dom=(flop p.hot) :: domain name ?~ dom ~ @@ -642,7 +719,7 @@ :: ++ handle |= $: [hat=hart pok=pork quy=quay] :: purl, parsed url - [cip=clip him=ship] :: client ip, ship + [cip=clip aut=?] :: client ip, nonymous? [mef=meth maf=math bod=(unit octs)] :: method/headers/body == =< apex @@ -658,7 +735,9 @@ :: ++ ford-get-beam |= [bem=beam ext=term] - =: s.bem [%web ~(rent co (fcgi quy fcgi-cred:for-client)) s.bem] + =+ yac=for-client + =. him.yac ?.(aut anon him.yac) + =: s.bem [%web ~(rent co (fcgi quy fcgi-cred.yac)) s.bem] r.bem ?+(r.bem r.bem [%ud %0] da/now) == (ford-req -.bem [%boil ext bem ~]) @@ -743,11 +822,65 @@ [?(%ico %png) %favicon ~] :- ~ %^ resp 200 image//png - 0w89wg.GV4jA.l9000.00dPb.YzBT6.giO00.o100d.wZcqc.a9tg-.VTG0b. - AUIvE.HBM3g.cK4SE.0aagi.l090p.I1P5g.Y-80r.y1YS9.1xE~Y.qgpFY. - vKN1V.905y0.2UwvL.43TUw.uL406.0-31h.xwoJF.Ul454.ilk00.00Yps. - BNumh.xpl9B.pS5Ji.i1BoC.ZAgg1.BsC5T.t6pLk.Thohn.gp000.0ov~P. - 7M000.0o840.00010.0001i.h4x93.g0000.Eq2wR.7jB29 + 0w3.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~LX-.~~HW-.L~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.Rdjk~.VWuDL.-3wUf.~zEWe. + ~Yj4N.f~Y~f.P~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~-~LX.~~lBp.m~~nR.Zv~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.RZvn~.GqCF~.Qt7h~.Ya2wH.~0000.~M000.fY000.3~0w8.2~Qx8.if~eP.IX~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~fP. + Y~QB9.ivY00.03~k5.1g~Z~.vT~~~.~~~~~.~~~~~.~~~~~.FWuD~.CpCp~.P8OcL.Y0003.~0000.~M000.fY000.3~000.0~M00.0fY00.03~00.00~Nk.l5v-W.KHH~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~-QJ.bj~00.00~M0.00fY0.003~6.hAp~S.FGqL-.6xEr~.oC9y~.NUu7L.Y0003.~0000.~M000.fY000.3~000.0~M00.0fY00.03~00. + 00~M0.00fY0.003~0.000~N.sn5~~.fPY~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~Z7.hQvYr.6NL~0.000~M.000fY.0003~.0000~.M000f.Y0003.~0000. + ~M000.fY000.3~000.0~M00.0fYJb.iT~sT.dP~Vu.nB~ZZ.vnT~a.iAF~M.000fY.0003~.0000~.VGqCL.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~Y.D9OvY.B9in~.0000~.M000f.Y0003.~0000.~M000.fY000.3~000.0~M41.0vZ1g.k7~Ha.OI~~n.RZv~~.~~~~~.~~~~~.~~~~~.HW-L~.jAVe~.M000f.YNcj7.~YLbO.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.-byUL.ZzoSf.~3MYf.~M000.fY000.3~000.0~MQd.3vZik.Bb~Kb.yU~~P.Y~f~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~IXeP.~ezEW.~WGGG.L~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~pSt.D~DFW.u~Uu7.x~-tD.pT~RZ. + vn~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~IXe.P~-LH.W~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~0000.00000.00000.00000. + 00000.50000.00002.000g0.00400.000w0.000a0.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000. + 00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000. + 00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.3~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.Rdjk~.~bOYL.~~~~~.~~~~~.~~TZ~.v-ZLr.T~r6N.I~Rtn.l~-rC.VL~-~.LX~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.ZLrS~.OMIbf.Z2gAb.~JHqS.~V-vD.~Y-fz.X~000. + 0~M00.0fY00.03~00.00~S1.wof~U.-fz~~.~~~~~.~~~~~.~~~~~.~~~~~.~DV-v.ZDpSv.~0000.~M000.fY000.3~000.0~Qp6.hL-FG.qD~LX.-~~Qt.7h~Yw.823~Y.LbO~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~LX-.~WCFG.vZtnl.T~rmR.J~Yf3.M~~~~.~~~~~.~~~~~.~~~~J.XuT~N.Yv7~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~. + ~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~0000.00000.00000.00000.00000.1g000.00002.000g0.00200. + 000g0.000a0.001kU.001gE.02000.g0082.00000.C0005.a00w0.04001.0g008.00g00 :: [%txt %robots ~] :- ~ @@ -778,7 +911,7 @@ [[%'PUT' ~] ~] %put == |- - ?: ?=([%'~~' *] q.pok) :: auth shortcut + ?: ?=([%'~~' *] q.pok) :: auth shortcuts $(q.pok ['~' %as %own t.q.pok]) ?. ?=([%'~' @ *] q.pok) ~ :- ~ ^- perk @@ -796,7 +929,7 @@ :_ pok(q t.but) ?+ i.but (slav %p i.but) %anon anon - %own our + %own (fall (ship-from-cookies maf) our) == :: %on @@ -853,7 +986,7 @@ %get [%json ~] %put ~| parsing/bod - [%try (need-body (ot ship/(su fed:ag) code/so ~):jo)] + [%try (need-body (ot ship/(su fed:ag) code/(mu so) ~):jo)] :: %delt ~| parsing/bod @@ -881,7 +1014,8 @@ =+ ext=(fall p.pok %urb) =+ bem=?-(-.hem %beam p.hem, %spur [root-beak p.hem]) =+ wir=?+(mef !! %get ~, %head [%he ~]) - [%& %| wir (ford-get-beam bem ext)] + =- ?.(aut [%& %| -] [%| (pass-note -)]) :: XX properly + [wir (ford-get-beam bem ext)] :: %bugs ?- p.hem @@ -937,7 +1071,7 @@ :: %at =. ..ya abet.yac - =+ pez=process(pok p.ham) + =+ pez=process(pok p.ham, aut |) ?. ?=(%& -.pez) ~|(no-inject/p.ham !!) ?~ p.pez pez ?+ -.p.pez ~&(bad-inject/p.pez !!) @@ -953,13 +1087,17 @@ :: %del =. ..ya (logoff:yac p.ham) - =+ cug=[(cat 3 cookie-prefix '=~; Path=/')]~ + =+ cug=[(set-cookie cookie-prefix '~')]~ [%| (give-json 200 cug (joba %ok %b &))] :: %get + |- ~| aute/ham ?: |(=(anon him.ham) (~(has in aut.yac) him.ham)) - process(him him.ham, pok rem.ham) + =. ..ya abet.yac(him him.ham) + =+ pez=process(pok rem.ham, aut &) + ?: ?=(%| -.pez) pez + [%| (resolve ~ p.pez)] ?. =(our him.ham) [%| ((teba foreign-auth.yac) him.ham hat rem.ham quy)] (show-login-page ~) @@ -968,9 +1106,12 @@ :- %| ?. =(our him.ham) ~|(stub-foreign/him.ham !!) - ?. =(load-secret cod.ham) + ?. ?| (~(has in aut.yac) him.ham) + ?~(paz.ham | =(u.paz.ham load-secret)) + == ~|(try/`@t`load-secret !!) :: XX security =^ jon ..ya stat-json:(logon:yac him.ham) + =. cug.yac :_(cug.yac (set-cookie %ship (scot %p him.ham))) (give-json 200 cug.yac jon) == :: @@ -983,10 +1124,31 @@ ?: (~(has by wup) u.ses) [%& %htme login-page:xml] =+ yac=(new-ya u.ses) - =. ..ya abet.yac - [%| (give-html 401 cug.yac login-page:xml)] + =+ =- lon=?~(- | (~(has in aut.u.-) our)) + (biff (session-from-cookies cookie-prefix maf) ~(get by wup)) + =. yac ?.(lon yac (logon.yac our)) + [%| (give-html(..ya abet.yac) 401 cug.yac login-page:xml)] :: ++ cookie-prefix (rsh 3 1 (scot %p our)) + ++ cookie-domain + ^- cord + ?- r.hat + [%| @] (cat 3 '; Domain=' (rsh 3 1 (scot %if p.r.hat))) + [%& %org %urbit *] '; Domain=.urbit.org' + [%& @ @ *] =+ dom=p.r.hat + =- (rap 3 i.dom '.' i.t.dom -) + |-(?~(t.t.dom ~ ['.' i.t.t.dom $(dom t.dom)])) + [%& *] '' :: XX security? + == + :: + ++ set-cookie + |= [key=@t val=@t] + %+ rap 3 :~ + key '=' val + :: '; HttpOnly' ?.(sec '' '; Secure') :: XX security + cookie-domain + '; Path=/; HttpOnly' + == ++ need-ixor (oryx-to-ixor (need grab-oryx)) ++ for-view ^+(ix (ire-ix need-ixor)) :: @@ -1000,18 +1162,18 @@ ?~ cyz ~& bad-cookie/u.lig (new-ya (rsh 3 1 (scot %p (end 6 1 ney)))) - ~(. ya u.lig u.cyz(him him, cug ~)) + ~(. ya u.lig u.cyz(cug ~)) :: ++ new-ya |=(ses=hole ~(. ya ses (new-cyst ses))) ++ new-cyst |= ses=hole =* sec p.hat - =+ pef=cookie-prefix ^- cyst :* ^- cred :* hat(p sec) ~ - 'not-yet-implemented' ::(rsh 3 1 (scot %p (end 6 1 (shaf %oryx ses)))) + 'not-yet-implemented' + ::(rsh 3 1 (scot %p (end 6 1 (shaf %oryx ses)))) :: =+ lag=(~(get by maf) %accept-language) ?~(lag ~ ?~(u.lag ~ [~ i.u.lag])) @@ -1021,11 +1183,7 @@ == [anon ~] :: - :_ ~ - %^ cat 3 - (cat 3 (cat 3 pef '=') ses) - :: (cat 3 '; HttpOnly' ?.(sec '' '; Secure')) - '; Path=/; HttpOnly' + [(set-cookie cookie-prefix ses)]~ :: now ~ @@ -1058,7 +1216,7 @@ %- give-thou:abet (add-cookies cug [307 [location/(crip url)]~ ~]) :: - ++ logon + ++ logon |= her=ship %_ +> him her @@ -1133,7 +1291,8 @@ :: ++ del-subs :: XX per path? |= [a=dock %json b=wire c=path] ^+ ..ix - (hurl-note [a b] [%g %deal [him -.a] +.a %pull ~]) + =. ..ix (hurl-note [a b] [%g %deal [him -.a] +.a %pull ~]) + (nice-json:pop-duct:(ire-ix ire)) :: XX gall ack :: ++ get-rush |= [a=whir-of b=json] ^+ ..ix @@ -1228,9 +1387,9 @@ ?: ?=(%wegh -.q.hic) :_ ..^$ :_ ~ :^ hen %give %mass + :- %eyre :- %| :~ bol/`bol - :: cor/`..^$ == =+ our=`@p`0x100 :: XX sentinel =+ ska=(slod ski) diff --git a/base/arvo/ford.hoon b/base/arvo/ford.hoon index f1c4a696c..26a197661 100644 --- a/base/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -230,6 +230,8 @@ |= dep=@uvH ?~ dep ~&(dep-empty/hen +>.$) + ?: =(dep 0vtest) :: upstream testing + +>.$(mow :_(mow [hen %give %news ~])) =+ dap=(~(get by deh.bay) dep) ?~ dap ~&(dep-missed/dep +>.$) :: XX ~| !! :: ~& awap/[dep u.dap] @@ -1111,9 +1113,17 @@ $(kas [%done p.kas u.q.kas]) :: %file - %+ cool |.(leaf/"ford: file {}") (lear cof p.kas) + :: + %flag + ?~ p.kas $(kas q.kas) + =+ dap=(~(get by deh.bay) p.kas) + ?~ dap ~&(flag-missed/p.kas $(kas q.kas)) + =+ dep=?-(-.u.dap %init p.u.dap, %sent q.u.dap, %done [[bek ~] ~ ~]) + =+ rez=$(kas q.kas) :: XX revisit ^ during dependency review + ?: ?=(%1 -.q.rez) rez + rez(p.q (~(uni in p.q.rez) `(set beam)`dep)) :: %join %+ cool @@ -1587,9 +1597,9 @@ ?: ?=(%wegh -.q.hic) :_ ..^$ :_ ~ :^ hen %give %mass + :- %ford :- %| :~ lex/`lex - :: cor/`..^$ == =+ ^= our ^- @p ?- -.q.hic diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index d93c45339..801b89daa 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -23,8 +23,7 @@ $% [%meta p=@tas q=vase] :: [%send p=ship q=cush] :: == :: -++ cove (pair duct (mold cote cuft)) :: internal move -++ cute (pair bone (mold cote cuft)) :: internal move +++ cove (pair bone (mold cote cuft)) :: internal move ++ move ,[p=duct q=(mold note-arvo gift-arvo)] :: typed move -- :: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %gall state @@ -134,7 +133,10 @@ |= [dap=dude pup=scup dep=@uvH gux=(each gage tang)] ^+ +> ?- -.gux - %| (mo-give %onto %| p.gux) + %| + =. +> (mo-bold dap dep) + =. +> (mo-give %onto %| p.gux) + +> %& ?> ?=(@ p.p.gux) ?. (mo-okay q.p.gux) @@ -237,8 +239,7 @@ ?- why %peer (mo-give %unto %reap tug) %poke (mo-give %unto %coup tug) - %pull ~& [%pull-fail tug] - +>.$ + %pull +>.$ == :: ++ mo-bale :: assign outbone @@ -398,7 +399,7 @@ ^- beak :: =+ pup=pup:(~(got by bum) dap) :: [p.pup q.pup [%da now]] :: XX this is wrong; save the build case - [our %base %da now] :: XX really wrong + [our %home %da now] :: XX really wrong :: ++ mo-club :: local action |= [dap=dude pry=prey cub=club] @@ -411,6 +412,7 @@ :: ++ mo-gawk :: ames forward |= [him=@p dap=dude num=@ud rok=rook] + =. +> ?.(?=(%u -.rok) +> (mo-give %mack ~)) %+ mo-pass [%sys %req (scot %p him) dap (scot %ud num) ~] ^- note-arvo @@ -428,14 +430,15 @@ [%sys %rep (scot %p him) dap (scot %ud num) ~] [%f %exec our (mo-beak dap) ~ %vale p.ron our q.ron] :: - %x (mo-give(hen (mo-ball him num)) %unto %quit ~) + %x =. +> (mo-give %mack ~) :: XX should crash + (mo-give(hen (mo-ball him num)) %unto %quit ~) == :: ++ ap :: agent engine |_ $: $: dap=dude pry=prey ost=bone - zip=(list cute) + zip=(list cove) dub=(list (each suss tang)) == seat @@ -478,14 +481,21 @@ =+ ded=(~(tap in ful) ~) |- ^+ +>.^$ ?~ ded +>.^$ - $(ded t.ded, +>.^$ ap-kill(ost i.ded)) + %= $ + ded t.ded + +>.^$ + %= ap-kill + ost i.ded + q.q.pry p:(~(got by sup.ged) i.ded) + == + == ?. ?=([%give %diff *] q.i.pyz) $(pyz t.pyz) =^ vad +> ap-fill(ost p.i.pyz) $(pyz t.pyz, ful ?:(vad ful (~(put in ful) p.i.pyz))) :: - ++ ap-aver :: cute to move - |= cov=cute + ++ ap-aver :: cove to move + |= cov=cove ^- move :- (~(got by r.zam) p.cov) ?- -.q.cov @@ -525,9 +535,10 @@ ++ ap-diff :: pour a diff |= [her=ship pax=path cag=cage] =. q.cag (spec q.cag) - =+ cug=(ap-find [%diff p.cag pax]) + =+ cug=(ap-find [%diff p.cag +.pax]) ?~ cug - (ap-pump:(ap-lame %diff (ap-suck "pour: no diff")) | her pax) + %. [| her +.pax] + ap-pump:(ap-lame %diff (ap-suck "diff: no {<`path`[p.cag pax]>}")) =+ ^= arg ^- vase %- slop ?: =(0 p.u.cug) @@ -538,16 +549,16 @@ (ap-pump:(ap-lame q.u.cug u.cam) | her pax) (ap-pump & her pax) :: - ++ ap-pump :: break subscription + ++ ap-pump :: update subscription |= [oak=? her=ship pax=path] =+ way=[(scot %p her) %out pax] - :: ~& [%ap-pump-path oak pax] ?: oak (ap-pass way %send her -.pax %pump ~) (ap-pass:(ap-give %quit ~) way %send her -.pax %pull ~) :: ++ ap-fall :: drop from queue ^+ . + ?. (~(has by sup.ged) ost) . =+ soy=(~(get by qel.ged) ost) ?: |(?=(~ soy) =(0 u.soy)) ~& [%ap-fill-under [our dap] q.q.pry ost] @@ -573,10 +584,10 @@ ++ ap-fill :: add to queue ^- [? _.] =+ suy=(fall (~(get by qel.ged) ost) 0) - ?: =(8 suy) + ?: =(20 suy) ~& [%ap-fill-full [our dap] q.q.pry ost] [%| +] - :: ~? !=(8 suy) [%ap-fill-add [[our dap] q.q.pry ost] +(suy)] + :: ~? !=(20 suy) [%ap-fill-add [[our dap] q.q.pry ost] +(suy)] [%& +(qel.ged (~(put by qel.ged) ost +(suy)))] :: ++ ap-find :: general arm @@ -619,7 +630,7 @@ :: ++ ap-move :: process each move |= vax=vase - ^- (each cute tang) + ^- (each cove tang) ?@ q.vax [%| (ap-suck "move: invalid move (atom)")] ?^ -.q.vax [%| (ap-suck "move: invalid move (bone)")] ?@ +.q.vax [%| (ap-suck "move: invalid move (card)")] @@ -639,14 +650,14 @@ :: ++ ap-move-quit :: give quit move |= [sto=bone vax=vase] - ^- (each cute tang) + ^- (each cove tang) ?^ q.vax [%| (ap-suck "move: improper quit")] - [%& `cute`[sto %give `cuft`[%quit ~]]] + [%& `cove`[sto %give `cuft`[%quit ~]]] :: ++ ap-move-diff :: give diff move |= [sto=bone vax=vase] =. vax (spec vax) - ^- (each cute tang) + ^- (each cove tang) ?. &(?=(^ q.vax) ?=(@ -.q.vax) ((sane %tas) -.q.vax)) [%| (ap-suck "move: improper diff")] [%& sto %give %diff `cage`[-.q.vax (slot 3 (spec vax))]] @@ -665,21 +676,21 @@ :: ++ ap-move-pass :: pass general move |= [sto=bone wut=* vax=vase] - ^- (each cute tang) + ^- (each cove tang) ?. &(?=(@ wut) ((sane %tas) wut)) [%| (ap-suck "move: malformed card")] =+ pux=((soft path) -.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "move: malformed path")] =+ huj=(ap-vain wut) - ?~ huj [%| (ap-suck "move: unknown note {<`@tas`wut>}")] + ?~ huj [%| (ap-suck "move: unknown note {(trip wut)}")] :^ %& sto %pass :- [(scot %p q.q.pry) %inn u.pux] [%meta u.huj (slop (ap-term %tas wut) (slot 3 vax))] :: ++ ap-move-poke :: pass %poke |= [sto=bone vax=vase] - ^- (each cute tang) + ^- (each cove tang) =+ yep=(ap-move-mess vax) ?: ?=(%| -.yep) yep =+ gaw=(slot 7 vax) @@ -691,7 +702,7 @@ :: ++ ap-move-peer :: pass %peer |= [sto=bone vax=vase] - ^- (each cute tang) + ^- (each cove tang) =+ yep=(ap-move-mess vax) ?: ?=(%| -.yep) yep =+ pux=((soft path) +>.q.vax) @@ -703,7 +714,7 @@ :: ++ ap-move-pull :: pass %pull |= [sto=bone vax=vase] - ^- (each cute tang) + ^- (each cove tang) =+ yep=(ap-move-mess vax) ?: ?=(%| -.yep) yep ?. =(~ +>.q.vax) @@ -714,7 +725,7 @@ :: ++ ap-move-send :: pass gall action |= [sto=bone vax=vase] - ^- (each cute tang) + ^- (each cove tang) ?. ?& ?=([p=* [q=@ r=@] [s=@ t=*]] q.vax) (gte 1 (met 7 q.q.vax)) ((sane %tas) r.q.vax) @@ -756,15 +767,16 @@ ++ ap-peer :: apply %peer |= pax=path ^+ +> + =. +> (ap-peon pax) =+ cug=(ap-find %peer pax) - ?~ cug - (ap-peon pax) + ?~ cug +>.$ + =+ old=zip + =. zip ~ =^ cam +>.$ %+ ap-call q.u.cug !>([[`@ud`ost `@p`q.q.pry] `path`(slag p.u.cug pax)]) - ?^ cam - (ap-give %reap cam) - (ap-give:(ap-peon pax) %reap ~) + =. zip (weld zip `(list cove)`[[ost %give %reap cam] old]) + ?^(cam ap-pule +>.$) :: ++ ap-peon :: add subscriber |= pax=path @@ -778,7 +790,7 @@ ^+ +> =+ cug=(ap-find %poke p.cag ~) ?~ cug - (ap-give %coup `(ap-suck "no poke arm")) + (ap-give %coup `(ap-suck "no poke arm for {(trip p.cag)}")) :: ~& [%ap-poke dap p.cag cug] =^ tur +>.$ %+ ap-call q.u.cug @@ -793,7 +805,7 @@ ^+ +> =+ cug=(ap-find /lame) ?~ cug - ~> %slog.[0 rose/[" " "[" "]"]^[>%ap-lame< >wut< why]] + ~& [%ap-lame wut why] +>.$ =^ cam +>.$ %+ ap-call q.u.cug @@ -843,6 +855,7 @@ ?. (ap-fond %prep) ?~ vux `+>.$ + =+ [new=p:(slot 13 hav) old=p:(slot 13 u.vux)] ?. (~(nest ut p:(slot 13 hav)) %| p:(slot 13 u.vux)) :_(+>.$ `(ap-suck "prep mismatch")) `+>.$(+13.q.hav +13.q.u.vux) @@ -853,7 +866,16 @@ ?~(vux !>(~) (slop !>(~) (slot 13 u.vux))) ?~(tur `+>.$ :_(+>.$ `u.tur)) :: - ++ ap-pull :: pull inbound + ++ ap-pule :: silent delete + =+ wim=(~(get by sup.ged) ost) + ?~ wim + + %_ + + sup.ged (~(del by sup.ged) ost) + pus.ged (~(del ju pus.ged) q.u.wim ost) + qel.ged (~(del by qel.ged) ost) + == + :: + ++ ap-pull :: load delete =+ wim=(~(get by sup.ged) ost) ?~ wim ~&(%ap-pull-none +) =: sup.ged (~(del by sup.ged) ost) @@ -888,7 +910,7 @@ :: ++ ap-safe :: process move list |= vax=vase - ^- (each (list cute) tang) + ^- (each (list cove) tang) ?~ q.vax [%& ~] ?@ q.vax [%| (ap-suck "move: malformed list")] =+ sud=(ap-move (slot 2 vax)) @@ -989,7 +1011,7 @@ [~ ..^$(pol.all (~(put by pol.all) p.q.hic [hen ~ ~ ~]))] :: %rote - ~& [%gall-rote p.q.hic] + :: ~& [%gall-rote p.q.hic] ?. (~(has by pol.all) p.p.q.hic) ~& [%gall-not-ours p.q.hic] [~ ..^$] @@ -1013,6 +1035,14 @@ =+ mes=((hard ,[@ud roon]) r.q.hic) =< mo-abet (mo-gawd:(mo-abed:mo our hen) him dap mes) + :: + %wegh + :_ ..^$ :_ ~ + :^ hen %give %mass + :- %gall + :- %| + :~ all/`all + == == :: ++ doze :: sleep until diff --git a/base/arvo/hoon.hoon b/base/arvo/hoon.hoon index 910b46f23..6cdef6d2d 100644 --- a/base/arvo/hoon.hoon +++ b/base/arvo/hoon.hoon @@ -9648,7 +9648,7 @@ $% [%tabl p=(list (pair marc marc))] :: map == :: ++ mark ,@tas :: content type -++ mass (each noun (list (pair cord ,mass))) :: memory usage +++ mass (pair cord (each noun (list ,mass))) :: memory usage ++ mill (each vase milt) :: vase/metavase ++ milt ,[p=* q=*] :: metavase ++ monk (each ship ,[p=@tas q=@ta]) :: general identity @@ -10108,12 +10108,13 @@ :_ -.avo %= i.ova q.q + :- %userspace :- %| - :~ [%hoon `pit] - [%zuse `bud] - [%hoon-cache `p.niz] - [%vanes q.q.i.ova] - [%dot `.] + :~ hoon/`pit + zuse/`bud + hoon-cache/`p.niz + q.q.i.ova + dot/`. == == =+(avo=$(ova t.ova) [[i.ova -.avo] +.avo]) diff --git a/base/arvo/time.hoon b/base/arvo/time.hoon index 040cb9c9c..52244c3eb 100644 --- a/base/arvo/time.hoon +++ b/base/arvo/time.hoon @@ -190,9 +190,9 @@ %wegh :_ tym :_ ~ :^ hen %give %mass + :- %time :- %| :~ tym/`tym - :: cor/`..^$ == == [mof ..^$] diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index f8fadd68c..b76695f44 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -2366,6 +2366,7 @@ == :: ++ flog :: sent to %dill $% [%crud p=@tas q=(list tank)] :: + [%heft ~] :: [%text p=tape] :: [%veer p=@ta q=path r=@t] :: install vane [%vega p=path] :: reboot by path @@ -2378,6 +2379,7 @@ [%blit p=(list blit)] :: terminal output [%init p=@p] :: set owner [%logo ~] :: logout + [%mass p=mass] :: memory usage [%veer p=@ta q=path r=@t] :: install vane [%vega p=path] :: reboot by path [%verb ~] :: verbose mode @@ -2390,9 +2392,11 @@ [%flog p=flog] :: wrapped error [%flow p=@tas q=(list gill)] :: terminal config [%hail ~] :: terminal refresh + [%heft ~] :: memory report [%hook ~] :: this term hung up [%harm ~] :: all terms hung up [%init p=ship] :: after gall ready + [%tick p=@p q=@p] :: initial ticket [%noop ~] :: no operation [%talk p=tank] :: [%text p=tape] :: @@ -2475,6 +2479,7 @@ [%dude p=tank q=silk] :: error wrap [%dune p=(set beam) q=(unit gage)] :: unit literal [%file p=beam] :: from clay + [%flag p=@uvH q=silk] :: re-apply user deps [%join p=mark q=silk r=silk] :: merge [%mash p=mark q=milk r=milk] :: annotate [%mute p=silk q=(list (pair wing silk))] :: mutant @@ -2521,6 +2526,7 @@ ++ cush (pair term club) :: internal kiss ++ dude term :: server identity ++ scup (pair ship desk) :: autoupdate +++ well (pair desk term) :: ++ suss (trel dude ,@tas ,@da) :: config report :::: :: ++ kiss-gall :: incoming request @@ -2529,9 +2535,11 @@ [%deal p=sock q=cush] :: full transmission [%rote p=sack q=path r=*] :: remote request [%roth p=sack q=path r=*] :: remote response + [%wegh ~] :: report memory == :: ++ gift-gall :: outgoing result - $% [%onto p=(each suss tang)] :: about agent + $% [%mass p=mass] :: memory usage + [%onto p=(each suss tang)] :: about agent [%unto p=cuft] :: within agent [%mack p=(unit tang)] :: message ack == :: diff --git a/base/cat/hood/mass/gate.hook b/base/cat/hood/mass/gate.hook new file mode 100644 index 000000000..d1fc14ea0 --- /dev/null +++ b/base/cat/hood/mass/gate.hook @@ -0,0 +1,11 @@ +:: +:::: /hook/gate/mass/hood/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [arg=~ ~] + == +[%hood-mass ~] diff --git a/base/fap/bang/core.hook b/base/fap/bang/core.hook deleted file mode 100644 index ebe91350e..000000000 --- a/base/fap/bang/core.hook +++ /dev/null @@ -1,21 +0,0 @@ -:: Bang: send cards to arvo -:: -:::: /hook/core/bang/app - :: -/+ sh-utils -!: -:::: - :: -|_ [hide ~] -++ lima |*(a=(pole) ?~(a ~ [i t]=a(+ (..$ +.a)))) -++ poke--args - |* [ost=bone @ a=[* (pole)]] - => .(a ^.(lima a)) - :_(+> (turn a |*(b=_i.a [ost %pass / b]))) -:: -++ pour - %- add-exit - |= [@ * sih=*] - ~& bang-resp/(,[term term] [&1 &2]:sih) - `+>.$ --- diff --git a/base/fap/began/core.hook b/base/fap/began/core.hook deleted file mode 100644 index 3b6394a17..000000000 --- a/base/fap/began/core.hook +++ /dev/null @@ -1,58 +0,0 @@ -|% -++ sign - $% $: %a - $% [%went p=ship q=cape] - [%init p=@p] - == == == -++ began-args ,[his=@p tic=@p eny=@t ges=gens ~] --- -:: -!: -:::: - :: -|_ [hid=hide %0 ust=bone his=@p mac=mace] -++ peer ,_`. -++ poke-began-args - |= [ost=bone you=ship began-args] - =+ bur=(shax :(mix (jam ges) eny)) - =+ loy=(bruw 2.048 bur) - :_ +>.$(ust ost, his his, mac [0 sec:ex:loy]~) - :~ :* ost %pass /ticketing %a %want [our.hid (sein his)] /q/ta - his tic ges pub:ex:loy - == - == -:: -++ poke-will - |= [ost=bone you=ship wil=(unit will)] - :_ +>.$ - ?~ wil - [ust %give %mean ~ %rejected ~]~ - :~ [ust %pass / %a %cash his mac u.wil] - [ust %pass / %c %plug our.hid %main (sein our.hid) %main] - [ust %pass / %c %plug our.hid %arvo (sein our.hid) %arvo] - [ust %pass / %c %plug our.hid %try (sein our.hid) %try] - [ust %give %nice ~] - == -:: -++ pour - |= [ost=bone pax=path sih=*] - =+ sih=((soft sign) sih) :: seem to get blits - ?~ sih `+>.$ - :_ +>.$ - ?- +<.u.sih - %init [ost %give +.u.sih]~ - %went ~ - == -:: -++ poke-will - |= [ost=bone you=ship wil=(unit will)] - :_ +>.$ - ?~ wil - [ust %give %mean ~ %rejected ~]~ - :~ [ust %pass / %a %cash his mac u.wil] - [ust %pass / %c %plug our.hid %main (sein our.hid) %main] - [ust %pass / %c %plug our.hid %arvo (sein our.hid) %arvo] - [ust %pass / %c %plug our.hid %try (sein our.hid) %try] - [ust %give %nice ~] - == --- diff --git a/base/fap/begin/core.hook b/base/fap/begin/core.hook deleted file mode 100644 index c9c6a5dcd..000000000 --- a/base/fap/begin/core.hook +++ /dev/null @@ -1,442 +0,0 @@ -|% -++ sign - $% $: %g - $% [%init p=@p] - [%nice ~] - [%mean p=ares] - [%rush %txt p=cord] - == == == -++ form ,[his=@p tic=@p eny=@t ges=gens] -++ state - $? %begin %his %tic %eny %lag - %name %form %psect %pname %year - %govt %sect %fname %mname %nname - %lname %done - == -++ tepe ,[(unit ,[cord prom cord]) (list cord)] --- -:: -!: -:::: - :: -|_ [hid=hide sat=state form] -++ peer ,_`. -++ done - |= ost=bone - :_ +>.$ - :* :* ost %pass /to-gan %g %mess [our.hid /began] our.hid - %began-args !>([his tic eny ges ~]) - == - (spam %rush %prompt '[waiting...]' %text '') - == -:: -++ loon - %+ cook - |= all=(list ,@t) - |- ^- @t - ?~ all %$ - ?~ t.all i.all - (cat 3 i.all (cat 3 ' ' $(all t.all))) - (most ace (cook |=(a=(list ,@) (rap 3 a)) (plus prn))) -:: -++ next - |= txt=cord - ^- [tepe _+>.$] - ?- sat - %begin - :_ +>.$(sat %his) - :- `['Your ship: ~' %text ''] - %- lore %- crip - """ - Do you have a ship and a ticket? If not, please ask - urbit@urbit.org for one. - """ - %his - =+ a=(rush txt fed:ag) - ?~ a [[~ 'invalid input' ~] +>.$] - => .(-.q.ges (clan u.a)) - =+ ^= cow - |- ^- @ud - ?- -.q.ges - %czar 256 - %king (mul 255 $(-.q.ges %czar)) - %duke (mul 65.535 $(-.q.ges %king)) - %earl (mul (dec (bex 32)) $(-.q.ges %duke)) - %pawn (sub (bex 128) $(-.q.ges %earl)) - == - =+ ^= ves ^- tape - ?- -.q.ges - %czar "carriers" - %king "cruisers" - %duke "destroyers" - %earl "yachts" - %pawn "submarines" - == - :_ ^+ +>.$ +>.$(his u.a, sat %tic) - :- `['Your ticket: ~' %text ''] - %- lore %- crip - """ - - Launching {(scow %p u.a)}, one of {} Urbit {ves}... - - If I did not build for myself - for whom should I build? - - -- Bunting, _Chomei at Toyama_ - - Let's configure your identity. Warning - it's nontrivial to - change this data once you've sent it to the server. If you enter - something wrong, hit ^D to cancel, then run the program again. - - """ - :: - %tic - =+ a=(rush txt fed:ag) - ?~ a [[~ 'invalid input' ~] +>.$] - :_ +>.$(tic u.a, sat %eny) - :- `['Entropy: ' %pass ''] - %- lore %- crip - """ - - Enter a passphrase or other unusual text. You (or your enemies) - can regenerate your ship from this entropy. - - """ - :: - %eny - =+ a=(rush txt (boss 256 (more gon qit))) - ?~ a [[~ 'invalid input' ~] +>.$] - =. u.a (shax u.a) - :_ +>.$(eny u.a, sat %lag) - :- `['Language: ' %text 'en'] - %- lore %- crip - """ - Entropy check: {<`@p`(mug u.a)>} - - What language would your ship rather speak? Enter it as a - two-letter (ISO 639-1) code, like "en" for English. Whatever - language you pick, it'll all be English now, but in future - we'll be more sensitive to your needs. - - """ - :: - %lag - =+ ^= par - %+ sear - |= [a=@ b=@] - ^- (unit ,@ta) - =+ c=(cat 3 a b) - =+(d=(glon c) ?~(d ~ [~ c])) - ;~(plug low low) - =+ a=(rush txt par) - ?~ a [[~ 'invalid input' ~] +>.$] - ?. ?=(%duke -.q.ges) - :_ +>.$(p.ges u.a, sat %name) - [`['Name: ' %text ''] ~] - :_ +>.$(p.ges u.a, sat %form) - :- `['Form: %' %text 'lady'] - %- lore %- crip - """ - - Please select one of the pre-chosen forms: - - %lady female-identified individual - %lord male-identified individual - %punk opaque handle - %anon totally anonymous - - """ - :: - %name - ?> ?=(?(%earl %king) -.q.ges) - =+ a=(rush txt (boss 256 (more gon qit))) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ gos=?-(-.q.ges %earl [%earl u.a], %king [%king u.a]) - :_ +>.$(q.ges gos, sat %done) - [`['' %text ''] ~] - :: - %form - =+ ^= par - ;~ pose - (jest %anon) - (jest %lady) - (jest %lord) - (jest %punk) - == - =+ a=(rush txt par) - ?~ a [[~ 'invalid input' ~] +>.$] - ?+ u.a !! - %anon [[`['' %text ''] ~] +>.$(q.ges [%duke %anon ~], sat %done)] - %punk - :_ +>.$(q.ges [%duke %punk *sect ''], sat %pname) - [`['Handle: ' %text ''] ~] - ?(%lady %lord) - =+ wat=?-(u.a %lady [%lady *whom], %lord [%lord *whom]) - :_ +>.$(q.ges `gcos`[%duke wat], sat %year) - :- `['Year you were born: ' %text '19'] - %- lore %- crip - """ - - You've selected a personal identity. For a %lord or a %lady, - please use your real name only. If you'd prefer a fictitious - handle, you can hit ^D and start over as a %punk. Or you can - use %anon and go by your ship name alone. - - As a real person, we're going to ask you for a little bit of - personal information - not enough to compromise your privacy, - just enough to make everyone on Urbit feel like a neighbor. - - What we're going to ask you for is information that's (a) - public (would be obvious, or at least easy to guess, for - someone who met you in person); (b) durable (doesn't change - often); and (c) relevant (helps you connect with friends). - - For example, we'll ask for the year (not day) you were born, - because your age is easy to guess in person, doesn't change, - and has a big effect on how people perceive you. - - """ - == - :: - %pname - =+ a=(rush txt loon) - ?~ a [[~ 'invalid input' ~] +>.$] - :_ +>.$(q.ges [%duke %punk *sect u.a], sat %psect) - :- `['Banner: %' %text 'white'] - %- lore %- crip - """ - - One basic human instinct is the urge to form political tribes. - In a network that fights this need, these tribes form anyway and - they form badly. Urbit designs them into the infrastructure. - Inspired by the Qing Dynasty, you'll align yourself with one of - five colored "banners" - %red, %blue, %orange, %black or %white. - - Political discourse across tribal boundaries is almost always an - antisocial act - less communication, than symbolic violence. In - Urbit, messages marked political stay within your own banner; - your friends in other banners simply won't see them. Between - banners, politics doesn't erode apolitical relationships; inside - each banner, political discourse is harmonious and productive. - - Pick a banner by the adjective you feel best describes you: - - %red far left: radical, anarchist - %blue center-left: moderate, liberal - %orange center-right: conservative, libertarian - %black far right: traditionalist, reactionary - - Or if digital agitation isn't your cup of tea, choose %white, and - your Urbit experience will remain politics-free. - - """ - :: - %psect - ?> ?=(%duke -.q.ges) - ?> ?=(%punk -.p.q.ges) - =+ ^= par - ;~ pose - (jest %white) - (jest %blue) - (jest %red) - (jest %black) - (jest %orange) - == - =+ a=(rush txt par) - ?~ a [[~ 'invalid input' ~] +>.$] - :- [`['' %text ''] ~] - %= +>.$ - q.ges [%duke %punk ((hard sect) u.a) q.p.q.ges] - sat %done - == - :: - %year - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lord %lady) -.p.q.ges) - =+ a=(rush txt dim:ag) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ woh=`whom`[u.a *govt *sect *name] - =+ wat=`what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - :_ +>.$(q.ges [%duke wat], sat %govt) - :- `['Location ' %text 'us/94103'] - %- lore %- crip - """ - - Where are you? This is totally optional, but we'd like to - know your vague general location. You can enter nothing at - all, just a country code, or country and postal code. - - """ - :: - %govt - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lord %lady) -.p.q.ges) - =+ ^= par - ;~ pose - ;~ plug (cook |=([a=@ b=@] (cat 3 a b)) ;~(plug low low)) - ;~ pfix fas - %+ cook - |=(a=tape (rap 3 ^-((list ,@) a))) - (star ;~(pose hig hep nud)) - == - (easy ~) - == - == - =+ a=(rush txt par) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ woh=`whom`[p.p.p.q.ges u.a *sect *name] - =+ wat=`what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - :_ +>.$(q.ges [%duke wat], sat %sect) - :- `['Banner: %' %text 'white'] - %- lore %- crip - """ - - One basic human instinct is the urge to form political tribes. - In a network that fights this need, these tribes form anyway and - they form badly. Urbit designs them into the infrastructure. - Inspired by the Qing Dynasty, you'll align yourself with one of - five colored "banners" - %red, %blue, %orange, %black or %white. - - Political discourse across tribal boundaries is almost always an - antisocial act - less communication, than symbolic violence. In - Urbit, messages marked political stay within your own banner; - your friends in other banners simply won't see them. Between - banners, politics doesn't erode apolitical relationships; inside - each banner, political discourse is harmonious and productive. - - Pick a banner by the adjective you feel best describes you: - - %red far left: radical, anarchist - %blue center-left: moderate, liberal - %orange center-right: conservative, libertarian - %black far right: traditionalist, reactionary - - Or if digital agitation isn't your cup of tea, choose %white, and - your Urbit experience will remain politics-free. - - """ - :: - %sect - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lord %lady) -.p.q.ges) - =+ ^= par - ;~ pose - (jest %white) - (jest %blue) - (jest %red) - (jest %black) - (jest %orange) - == - =+ a=(rush txt par) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges (sect u.a) *name] - =+ wat=`what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - :_ +>.$(q.ges [%duke wat], sat %fname) - [`['First name: ' %text ''] ~] - :: - %fname - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lord %lady) -.p.q.ges) - =+ a=(rush txt loon) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ nam=[u.a *(unit ,@t) *(unit ,@t) *@t] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nam] - =+ wat=`what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - :_ +>.$(q.ges [%duke wat], sat %mname) - [`['Middle name (or blank): ' %text ''] ~] - :: - %mname - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lord %lady) -.p.q.ges) - =+ a=(rush txt ;~(pose (stag ~ loon) (easy ~))) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ nam=[p.s.p.p.q.ges u.a *(unit ,@t) *@t] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nam] - =+ wat=`what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - :_ +>.$(q.ges [%duke wat], sat %nname) - [`['Nickname/handle (or blank): ' %text ''] ~] - :: - %nname - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lord %lady) -.p.q.ges) - =+ a=(rush txt ;~(pose (stag ~ loon) (easy ~))) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ nam=[p.s.p.p.q.ges q.s.p.p.q.ges u.a *@t] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nam] - =+ wat=`what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - :_ +>.$(q.ges [%duke wat], sat %lname) - [`['Last name: ' %text ''] ~] - :: - %lname - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lord %lady) -.p.q.ges) - =+ a=(rush txt loon) - ?~ a [[~ 'invalid input' ~] +>.$] - =+ nam=[p.s.p.p.q.ges q.s.p.p.q.ges r.s.p.p.q.ges u.a] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nam] - =+ wat=`what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - :_ +>.$(q.ges [%duke wat], sat %done) - [`['' %text ''] ~] - :: - %done !! :: can't actually complete event because vere commits suicide - ::[[`['[waiting...]' %text ''] ~] +>.$] - == -:: -++ poke-begin-args - |= [ost=bone you=ship arg=$|(~ [his=ship ~])] - =^ res +>.$ - ^- [[pot=(unit ,[cord prom cord]) tak=(list cord)] _+>.$] - ?~ arg - (next(sat %begin) '') - (next(sat %his) (rsh 3 1 (scot %p his.arg))) - :_ +>.$ - %+ welp - :~ [ost %pass /in %g %show [our.hid +.imp.hid] you /in/[-.imp.hid]] - [ost %give %nice ~] - == - %+ welp - ?~(pot.res ~ (spam %rush %prompt u.pot.res)) - %^ spam %rush %tang - (turn tak.res |=(a=cord [%leaf (trip a)])) -:: -++ pour - |= [ost=bone pax=path sih=*] - =+ sih=((hard sign) sih) - ?: ?=(%init +<.sih) - [[ost %give +.sih]~ +>.$] - ?: ?=([%in ~] pax) - ?. ?=(%rush +<.sih) `+>.$ - =^ res +>.$ - ^- [[pot=(unit ,[cord prom cord]) tak=(list cord)] _+>.$] - (next p.sih) - ?: ?=(%done sat) - (done ost) - :_ +>.$ - %+ welp - ?~(pot.res ~ (spam %rush %prompt u.pot.res)) - %^ spam %rush %tang - (turn tak.res |=(a=cord [%leaf (trip a)])) - :_ +>.$ - :- [ost %give +.sih] - ?+ +<.sih ~ - %nice - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - [%leaf "begin successful"] - %mean - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - [%leaf "begin failed"] - == - -:: -++ spam - |* git=* - %+ turn - (~(tap in (~(get ju pus.hid) /out))) - |=(a=bone [a %give git]) --- diff --git a/base/fap/cat/core.hook b/base/fap/cat/core.hook deleted file mode 100644 index 86348b2ac..000000000 --- a/base/fap/cat/core.hook +++ /dev/null @@ -1,35 +0,0 @@ -:: ConCATenate file listings -:: -:::: /hook/core/cat/app - :: -/+ sh-utils -// /%%%/ls/subdir -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke--args - %+ args-into-gate . - |= [arg=(list path)] - =- tang/(zing -) - %+ turn arg - |= pax=path - ^- tang - =+ ark=;;(arch .^(%cy pax)) - ?^ q.ark - :- leaf/(spud pax) - %+ turn (lore ;;(@t .^(%cx pax))) - |=(a=cord leaf/(trip a)) - ?- r.ark :: handle ambiguity - ~ - [rose/[" " `~]^~[leaf/"~" (smyt pax)]]~ - [[@t ~] ~ ~] - $(pax (welp pax /[p.n.r.ark])) - * - =- [palm/[": " ``~]^-]~ - :~ rose/[" " `~]^~[leaf/"*" (smyt pax)] - `tank`(subdir pax r.ark) - == - == --- diff --git a/base/fap/chat/core.hook b/base/fap/chat/core.hook deleted file mode 100644 index fb00c9f01..000000000 --- a/base/fap/chat/core.hook +++ /dev/null @@ -1,496 +0,0 @@ -/- mess,user,users,zing,zong,zung -:: -[sed=!>(.) .] -:: -!: -=> |% - ++ axle - $: %0 - air=(map path station) - pom=(unit ship) - sen=(set mess) - $= fal - $: eth=? - qit=? - let=? - sat=path - pad=ship - == - == - ++ blitz - $% [%prompt p=cord q=prom r=cord] - [%tang p=(list tank)] - [%txt p=cord] - [%zong p=zong] - [%user p=user] - == - ++ chat :: user action - $% [%all p=mess] :: say - [%back p=?(%da %dr %ud) q=@] :: backlog - [%def p=mess] :: use current prompt - [%how ~] :: help - [%priv p=@p q=mess] :: private - [%who ~] :: who - == :: - ++ chat-arg - $? %monitor %quiet %noob %leet %time - [%s p=path] - [%tower p=ship] - == - ++ idad ,[p=@p q=@t] - ++ iron - $% [%prompt p=cord q=prom r=cord] - [%txt p=cord] - [%zongs p=(list zong)] - [%users p=users] - [%hymn p=manx] :: HTML format - [%json p=json] :: JSON format - == - ++ gift - $% [%mean ares] - [%nice ~] - [%rush blitz] - [%rust iron] - == - ++ hapt ,[p=ship q=path] - ++ move ,[p=bone q=(mold note gift)] - ++ note - $? $: %g - $% [%mess p=hapt q=ship r=cage] - [%nuke p=hapt q=ship] - [%show p=hapt q=ship r=path] - [%took p=hapt q=ship] - == == == - ++ sign - $? $: %g - $% [%mean p=ares] - [%nice ~] - $: %rush - $= p - $% [%txt p=cord] - [%user p=user] - [%zong p=zong] - == == - $: %rust - $= p - $% [%txt p=cord] - [%users p=users] - [%zongs p=(list zong)] - == == - == == == - ++ station - $: msg=(list zong) - sub=(unit bone) - ami=(map ,@p ,@t) - == - -- -!: -:::: - :: -=| lat=@da -|% -++ chat - =< - %+ cook |=(a=^chat a) - ;~ pose - (cold [%how ~] wut) - (cold [%who ~] tis) - (stag %back dat) - (stag %priv ;~(plug ;~(pfix sig fed:ag) ;~(pfix ace mess))) - (stag %all ;~(pfix pam mess)) - (stag %def mess) - == - |% - ++ dat - %+ sear - |= p=coin - ?. ?=([%$ ?(%da %dr %ud) @] p) ~ - (some +.p) - ;~(pfix bas bas (star ace) nuck:so) - :: - ++ expn - %- sear - :_ text - |= a=@t - ^- (unit ,[p=@t q=tank]) - =+ hun=(rush a wide:(vang | &1:% &2:% (scot %da lat) |3:%)) - ?~ hun ~ - ?~(a ~ [~ a (sell (slap sed u.hun))]) - :: - ++ mess - %+ cook |=(a=^mess a) - ;~ pose - (stag %do ;~(pfix pat text)) - (stag %exp ;~(pfix hax expn)) - (stag %do (full (easy ''))) - (stag %say text) - == - :: - ++ text (boss 256 (star prn)) - -- --- -!: -:::: - :: -|_ [hid=hide axle] -++ exec-cmd - |= [ost=bone txt=cord] - ^- [(list move) _+>] - ?: =(0 txt) [~ +>.$] - =+ rey=(rush txt chat(lat lat.hid)) - ?~ rey - [(print %leaf "invalid input") +>.$] - |- - ?- -.u.rey - %all =+ ^= mof - ?~ pom ~ - (send /out %rush %prompt '& ' %text '') - =^ mow +>.^$ - (poke-zung(pom ~) ost our.hid %mess sat.fal p.u.rey) - [(welp mof mow) +>.^$(sen (~(put in sen) p.u.rey))] - %back - :_ +>.^$ - %+ send /out :+ %rush %tang - %- turn :_ |=(a=zong (zong-to-tank | a)) - %- flop - ?- p.u.rey - %ud (scag q.u.rey msg:(grab sat.fal)) - %da (since msg:(grab sat.fal) q.u.rey) - %dr (since msg:(grab sat.fal) (sub lat.hid q.u.rey)) - == - %def $(u.rey ?~(pom [%all p.u.rey] [%priv u.pom p.u.rey])) - %priv - :_ +>.^$(pom `p.u.rey) - :- :* ost %pass /priv %g - %mess [p.u.rey %chat ~] our.hid %mess !>(q.u.rey) - == - ?: =(pom [~ p.u.rey]) ~ - (send /out %rush %prompt (cat 3 (scot %p p.u.rey) ' ') %text '') - %who - :_ +>.^$ - %^ print %rose [", " "" ""] - %+ turn (~(tap by ami:(grab sat.fal))) - |= a=idad - :- %leaf - %- trip %^ cat 3 %^ cat 3 (scot %p p.a) ' ' q.a - %how - :_ +>.^$ - %+ send /out :+ %rush %tang - %- turn :_ |=(a=@t [%leaf (trip a)]) - %- lore - %- (hard ,@t) - .^(/cx/(scot %p our.hid)/main/(scot %da lat.hid)/pub/src/doc/chat/help/txt) - == -:: -++ grab - |= sta=path - (fall (~(get by air) sta) *station) -:: -++ iden - |= her=ship - ^- tape - ?: let.fal (scow %p her) - =+ ide=(trip (fall (~(get by ami:(grab sat.fal)) her) '')) - %+ welp (scow %p her) - ?~ ide "" - [' ' ide] -:: -++ peer - |= [ost=bone you=ship pax=path] - ^- [(list move) _+>] - :_ +>.$ - ?: ?=(~ pax) - [ost %give %rust %hymn page]~ - =+ ya=(grab t.pax) - ?+ i.pax !! - %out - [ost %give %rust %prompt '& ' %text '']~ - %private - ~ - %amigos - [ost %give %rust %users (~(tap by ami.ya))]~ - %mensajes - [ost %give %rust %zongs msg.ya]~ - == -++ page - ^- manx - ;html - ;head - ;title: Radio - ;script(type "text/javascript", src "//use.typekit.net/fkv0sjk.js"); - ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs". - "/jquery/2.1.1/jquery.min.js"); - ;script:'try{Typekit.load();}catch(e){}' - ;link(rel "stylesheet", type "text/css", href "/main/pub/src/chat/main.css"); - == - ;body - ;div#c; - ;script(type "text/javascript", src "/main/lib/urb.js"); - ;script(type "text/javascript", src "/main/pub/src/chat/main.js"); - == - == -:: -++ poke-chat-args - |= [ost=bone you=ship arg=(list chat-arg)] - ^- [(list move) _+>] - =. fal (process-args arg) - =^ mow +>.$ (poke-zung ost you %init pad.fal sat.fal) - :_ +>.$ - %+ welp - :+ [ost %pass /cmd-in %g %show [our.hid +.imp.hid] you /in/[-.imp.hid]] - [ost %pass /private %g %show [our.hid /chat] you /private] - (send /out %rush %prompt '& ' %text '') - mow -:: -++ poke-mess - |= [ost=bone you=ship mes=mess] - ^- [(list move) _+>] - [[[ost %give %nice ~] (spam & %mess lat.hid you mes)] +>.$] -:: -++ poke-zung :: nice should be moved out - |= [ost=bone you=ship zug=zung] - ^- [(list move) _+>] - ?. =(you our.hid) - [[ost %give %mean ~ %no-sos-mi-amigo ~]~ +>.$] - ?- -.zug - %mess - :: ~& [%send-mess zug] - :_ +>.$ :_ ~ - :* ost %pass /mesg %g - %mess [pad.fal %radio ~] you %zing !>(zug) - == - :: - %init - =+ ya=(grab q.zug) - ?: =(sub.ya ~) - =. pad.fal p.zug - =. sub.ya `ost - =. air (~(put by air) q.zug ya) - :_ +>.$ - :~ - :* ost %pass radi-m/q.zug %g - %show [[p.zug /radio] you mensajes/q.zug] - == - :* ost %pass radi-a/q.zug %g - %show [[p.zug /radio] you amigos/q.zug] - == - == - [[ost %give %nice ~]~ +>.$] - == -:: -++ pull - |= ost=bone - ^- [(list move) _+>] - ?: ?=([* ~ ~] sup.hid) - :_ +>.$(pad.fal *@p, air ~) - %- ^zing %+ turn (~(tap by air)) - |= [pax=path sta=station] - ?~ sub.sta - ~ - :~ [u.sub.sta %pass radi-a/pax %g %nuke [[pad.fal /radio] our.hid]] - [u.sub.sta %pass radi-m/pax %g %nuke [[pad.fal /radio] our.hid]] - == - [~ +>.$] -:: -++ took - |= [ost=bone pax=path imp=path moz=(list move)] - :_ +>.$ - :_(moz [ost %pass pax %g %took [our.hid imp] our.hid]) -:: -++ pour - |= [ost=bone pax=path sih=*] - ^- [(list move) _+>] - :: ~& sih=sih - =+ sih=((hard sign) sih) - ?~ pax ~& %chat-pour-strange-path !! - :: ~& [%pour-mess pax] - ?+ i.pax ~& %chat-pour-strange-path !! - %cmd-in - ?- +<.sih - %nice [~ +>.$] - %mean [(send /out +.sih) +>.$] - ?(%rush %rust) - ?> ?=(%txt -.p.sih) - =^ moz +>.$ (exec-cmd ost p.p.sih) - (took ost pax +.imp.hid moz) - == - :: - ?(%mesg %priv) - ?> ?=(?(%mean %nice) +<.sih) - [[ost %give +.sih]~ +>.$] - :: - %private - ?: ?=(?(%nice %mean) +<.sih) - [~ +>.$] - ?> ?=(%rush +<.sih) - ?> ?=(%zong -.p.sih) - (took ost pax /chat (print (zong-to-tank & p.p.sih))) - :: - ?(%radi-a %radi-m) - ?: ?=(%nice +<.sih) - :_ +>.$ - ?: ?=(%radi-a i.pax) ~ - [ost %give +.sih]~ - ?: ?=(%mean +<.sih) - :_ +>.$ :_ ~ - =- ~& [%trying-again -] - - :* ost %pass pax %g %show - [pad.fal /radio] our.hid - ?-(i.pax %radi-a %amigos, %radi-m %mensajes) - sat.fal - == - =+ ya=(grab t.pax) - =. ya - ?- i.pax - %radi-a - %_ ya - ami - ^- (set idad) - ?- +<.sih - %rust ?>(?=(%users -.p.sih) (sa p.p.sih)) - %rush - ?> ?=(%user -.p.sih) - ?- -.p.p.sih - %in (~(put by ami.ya) p.p.p.sih) - %out (~(del by ami.ya) p.p.p.p.sih) - == - == - == - %radi-m - %_ ya - msg - ^- (list zong) - ?- +<.sih - %rush ?>(?=(%zong -.p.sih) [p.p.sih msg.ya]) - %rust ?>(?=(%zongs -.p.sih) p.p.sih) - == - == - == - =+ ^= pout ?:(=(i.pax %radi-a) %amigos %mensajes) - =. air (~(put by air) t.pax ya) - =+ mow=(send [pout t.pax] +.sih) - =< (took ost pax /radio mow) - :: =< [mow +>.$] - :: XX yes, I just used an inline comment - :: XX and multiple XX's. why? because - :: XX tmi is incredibly lame. - ^+ . - ?: =(%zong -.p.sih) - =+ zog=((hard zong) p.p.sih) - :: ?: &(=(our.hid q.zog) (~(has in sen) r.zog)) - :: + :: suppress own messages - :: ?: &(=(our.hid q.zog) =(`r.zog ~(top to sen))) - :: %_(+ sen ^+(sen ~(nap to sen))) - %_ + - mow - (welp mow (print (zong-to-tank | zog))) - == - ?: =(%zongs -.p.sih) - =+ zos=(scag 200 ((hard (list zong)) p.p.sih)) - |- ^+ +>.$ - ?: =(~ zos) +>.$ :: XX tm freakin i - =+ zoy=((hard zong) -.zos) - =. +>.$ $(zos +.zos) - ?: &(=(our.hid &3.zoy) (~(has in sen) &4.zoy)) - +>.$ - :: ?: &(=(our.hid &3.zoy) =(`&4.zoy ~(top to sen))) - :: %_(+>.$ sen `(qeu mess)`~(nap to sen)) - %_ +>.$ - mow - (welp mow (print (zong-to-tank | zoy))) - == - ?: =(%user -.p.sih) - =+ use=((hard user) p.p.sih) - %_ + - mow - ?: let.fal ~ - %+ print %leaf - %+ weld - ?: eth.fal "" (timestamp lat.hid) - %+ weld "{(iden p.p.use)} " - ?- -.use - %in "comes on the air" - %out "signs off" - == - == - . :: XX users? - == -:: -++ process-args - |= arg=(list chat-arg) - ^- [? ? ? path ship] - %+ roll arg - =< .(|4.b (sein our.hid)) - |= [a=chat-arg b=[? ? ? path ship]] - ?- a - %time b(&1 |) - %monitor b(&2 |) - %quiet b(&2 &) - %noob b(&3 |) - %leet b(&3 &) - [%s *] b(&4 p.a) - [%tower *] b(|4 p.a) - == -:: -++ print |=(a=tank (send /out %rush %tang [a]~)) -++ send - |= [pax=path msg=gift] - ^- (list move) - :: ~& [%send pus.hid] - %+ turn (~(tap in (~(get ju pus.hid) pax))) - |=(ost=bone [ost %give msg]) -:: -++ since - |= [ya=msg=(list zong) tim=@da] - |- ^- (list zong) - ?: |(?=(~ msg.ya) (lth p.i.msg.ya tim)) ~ - [i.msg.ya $(msg.ya t.msg.ya)] -:: -++ spam - |= [pri=? zog=zong] - ^- (list move) - %+ welp - (send /private %rush %zong zog) - %+ welp - (print (zong-to-tank pri zog)) - %+ murn (~(tap by sup.hid)) - |= [ost=bone her=ship pax=path] - ?~ pax ~ - ?. ?=(%mensajes i.pax) ~ - (some [ost %give %rush %zong zog]) -:: -++ timestamp - |= t=@da - =+ da=(yell t) - "{?:((gth 10 h.da) "0" "")}{(scow %ud h.da)}:". - "{?:((gth 10 m.da) "0" "")}{(scow %ud m.da)} " -:: -++ zong-to-tank - |= [pri=? zog=zong] - ^- tank - =+ pre=?.(pri "" "(private) ") - ?- -.r.zog - %do - =+ mes=?:(=(0 p.r.zog) "remains quietly present" (trip p.r.zog)) - :- %leaf - %+ weld - ?: eth.fal "" (timestamp p.zog) - "{pre}{(iden q.zog)} {mes}" - :: - %exp - :~ %rose - [" " "" ""] - :- %leaf - %+ weld - ?: eth.fal "" (timestamp p.zog) - "{pre}{(iden q.zog)} {(trip p.r.zog)}" - q.r.zog - == - :: - %say - :- %leaf - %+ weld - ?: eth.fal "" (timestamp p.zog) - "{pre}{(iden q.zog)}: {(trip p.r.zog)}" - == --- diff --git a/base/fap/code/core.hook b/base/fap/code/core.hook deleted file mode 100644 index d5b698a4d..000000000 --- a/base/fap/code/core.hook +++ /dev/null @@ -1,9 +0,0 @@ -:: Show passcode -/+ sh-utils -|_ [hide ~] -++ peer ,_`. -++ poke--args - %+ args-into-gate . - =+ pax=/(crip )/code/(crip )/(crip ) - ,_tang/~[leaf/"{<(,@p .^(%a pax))>}"] --- diff --git a/base/fap/cp/core.hook b/base/fap/cp/core.hook deleted file mode 100644 index adafd219a..000000000 --- a/base/fap/cp/core.hook +++ /dev/null @@ -1,18 +0,0 @@ -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke-cp-args - |= [ost=bone you=ship input=path output=path ~] - :_ +>.$ - :* [ost %pass /cp %c %info our.hid (foal output .^(%cx input))] - [ost %pass / %g %cide %$] - [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - leaf/"copied" - == --- diff --git a/base/fap/curl/core.hook b/base/fap/curl/core.hook deleted file mode 100644 index 530288193..000000000 --- a/base/fap/curl/core.hook +++ /dev/null @@ -1,20 +0,0 @@ -:: Command-line URL fetch, :curl "http://example.com" -:: -:::: - :: -/+ sh-utils -!: -|_ [hide *] -++ peer ,_`. -++ poke--args - %+ gate-bang - |=([a=tape ~] [%e %them ~ ~|([%bad-url a] (scan a auri:epur)) %get ~ ~]) - ,_`. -:: -++ pour - %+ args-into-gate . - |= [%e %thou @ mess a=(unit octs)] - :- %tang - ?~ a ~ - (turn (lore q.u.a) |=(b=cord leaf/(trip b))) --- diff --git a/base/fap/dojo/core.hook b/base/fap/dojo/core.hook deleted file mode 100644 index b59a9a426..000000000 --- a/base/fap/dojo/core.hook +++ /dev/null @@ -1,740 +0,0 @@ -:: :: :: -:::: /hook/core/dojo/app :: :::: - :: :: :: -/? 314 :: arvo kelvin -/- *sole :: console structures -/+ sole :: console library -:: :: :: -:::: :: :::: - !: :: :: -=> |% :: external structures - ++ house :: all state - $: hoc=(map bone session) :: conversations - == :: - ++ session :: per conversation - $: say=sole-share :: command-line state - syd=desk :: active desk - luc=(unit case) :: special case - poy=(unit dojo-project) :: working - var=(map term cage) :: variable state - old=(set term) :: used TLVs - == :: - ++ dojo-command :: - $% [%flat p=path q=dojo-source] :: noun to unix atom - [%pill p=path q=dojo-source] :: noun to unix pill - :: [%tree p=path q=dojo-source] :: noun to unix tree - [%poke p=goal q=dojo-source] :: make and poke - [%show p=dojo-source] :: print - [%verb p=term q=dojo-source] :: store variable - == :: - ++ dojo-source :: construction node - $: p=@ud :: assembly index - q=dojo-build :: general build - == :: - ++ dojo-build :: one ford step - $% [%ex p=twig] :: hoon expression - [%di p=dojo-model] :: dialog - [%dv p=path] :: gate from source - [%fi p=dojo-filter q=dojo-source] :: filter - [%ge p=dojo-model] :: generator - [%sc p=dojo-model] :: script - [%tu p=(list dojo-source)] :: tuple - [%va p=term] :: dojo variable - == :: - ++ dojo-filter :: pipeline filter - $% [%a p=twig] :: function gate - [%b p=mark] :: simple transmute - [%c p=dojo-model] :: formal filter - == :: - ++ dojo-model :: data construction - $: p=dojo-server :: core source - q=dojo-config :: configuration - == :: - ++ dojo-server :: numbered device - $: p=@ud :: assembly index - q=path :: gate path - == :: - ++ dojo-config :: configuration - $: p=(list dojo-source) :: by order - q=(map term (unit dojo-source)) :: by keyword - == :: - ++ dojo-project :: construction state - $: mad=dojo-command :: operation - num=@ud :: number of tasks - cud=(unit dojo-source) :: now solving - pux=(unit path) :: ford working - pro=(unit vase) :: prompting loop - per=(unit sole-edit) :: pending reverse - job=(map ,@ud dojo-build) :: problems - rez=(map ,@ud cage) :: results - == :: - ++ bead ,[p=(set beam) q=cage] :: computed result - ++ goal ,[p=ship q=term] :: flat application - ++ gift :: out result <-$ - $% [%mean p=ares] :: error - [%nice ~] :: acknowledge - [%rush %sole-effect sole-effect] :: - == :: - ++ hapt ,[p=ship q=path] :: - ++ move ,[p=bone q=(mold note gift)] :: - ++ hood :: assembly plan - $: zus=@ud :: zuse kelvin - sur=(list hoot) :: structures - lib=(list hoof) :: libraries - fan=(list horn) :: resources - src=(list hoop) :: program - == :: - ++ hoof (pair term (unit (pair case ship))) :: resource reference - ++ hoot (pair bean hoof) :: structure gate/core - ++ hoop :: source in hood - $% [%& p=twig] :: direct twig - [%| p=beam] :: resource location - == :: - ++ horn :: resource tree - $% [%ape p=twig] :: /~ twig by hand - [%arg p=twig] :: /$ argument - [%day p=horn] :: /| list by @dr - [%dub p=term q=horn] :: /= apply face - [%fan p=(list horn)] :: /. list - [%for p=path q=horn] :: /, descend - [%hel p=@ud q=horn] :: /% propagate heel - [%hub p=horn] :: /@ list by @ud - [%man p=(map span horn)] :: /* hetero map - [%nap p=horn] :: /_ homo map - [%now p=horn] :: /& list by @da - [%saw p=twig q=horn] :: /; operate on - [%see p=beam q=horn] :: /: relative to - [%sic p=tile q=horn] :: /^ cast - [%toy p=mark] :: /mark/ static - == :: - ++ silk :: construction layer - $& [p=silk q=silk] :: cons - $% [%bake p=mark q=beam r=path] :: local synthesis - [%boil p=mark q=beam r=path] :: general synthesis - [%call p=silk q=silk] :: slam - [%cast p=mark q=silk] :: translate - [%done p=(set beam) q=cage] :: literal - [%dude p=tank q=silk] :: error wrap - [%dune p=(set beam) q=(unit cage)] :: unit literal - [%mute p=silk q=(list (pair wing silk))] :: mutant - [%plan p=beam q=spur r=hood] :: structured assembly - [%reef ~] :: kernel reef - [%ride p=twig q=silk] :: silk thru twig - [%vale p=mark q=ship r=*] :: validate [our his] - == :: - ++ note-ford :: note to ford - $% [%exec p=@p q=beak r=(unit silk)] :: make / kill - == :: - ++ note-gall :: note to %gall - $% [%mess p=[p=ship q=path] q=ship r=cage] :: - == :: - ++ sign-gall :: sign from %gall - $% [%mean p=ares] :: - [%nice ~] :: - == :: - ++ sign-ford :: sign from ford - $% [%made p=@uvH q=(each gage tang)] :: computed result - == :: - ++ note :: out request $-> - $% [%f note-ford] :: - [%g note-gall] :: - == :: - ++ sign :: in result $<- - $% [%f sign-ford] :: - [%g sign-gall] :: - == :: - -- :: -:: :: -:::: :: - :: :: -|_ $: hid=hide :: system state - house :: program state - == :: -++ he :: per session - |_ [[ost=bone moz=(list move)] session] :: - ++ dp :: dojo parser - |% - ++ dp-command :: ++dojo-command - %+ knee *dojo-command |. ~+ - ;~ pose - %+ stag %poke - ;~ pfix col - %+ cook - |= [a=goal b=(each dojo-source (trel term path dojo-config))] - ^- (pair goal dojo-source) - :- a - ?- -.b - %& p.b - %| ?+ p.p.b !! - %di [0 %di [0 [%dog q.a q.p.b]] r.p.b] - %ge [0 %ge [0 [%cat q.a q.p.b]] r.p.b] - %sc [0 %sc [0 [%pig q.a q.p.b]] r.p.b] - == - == - ;~ plug - dp-goal - ;~ pose - (stag %& ;~(pfix ace dp-source)) - %+ stag %| - ;~ plug - ;~ pose - (cold %di wut) - (cold %ge lus) - (cold %sc pam) - == - (most fas sym) - dp-config - == - == - == - == - :: - %+ stag %verb - ;~ pfix tis - ;~(plug sym ;~(pfix ace dp-source)) - == - :: - %+ stag %flat - ;~ pfix pat - ;~(plug (most fas sym) ;~(pfix ace dp-source)) - == - :: - %+ stag %pill - ;~ pfix dot - ;~(plug (most fas sym) ;~(pfix ace dp-source)) - == - :: - (stag %show dp-source) - == - ++ dp-source (stag 0 dp-build) :: ++dojo-source - ++ dp-build :: ++dojo-build - %+ knee *dojo-build |. ~+ - ;~ pose - ;~(pfix lus (stag %ge dp-model-cat)) - ;~(pfix wut (stag %di dp-model-dog)) - ;~(pfix pam (stag %sc dp-model-pig)) - ;~(pfix buc (stag %va sym)) - (stag %ex dp-twig) - (ifix [sel ser] (stag %tu (most ace dp-source))) - == - :: - ++ dp-goal :: ++goal - %+ cook |=(a=goal a) - ;~ pose - ;~ plug - ;~(pfix sig fed:ag) - ;~(pfix fas sym) - == - (cook |=(a=term `goal`[our.hid a]) sym) - == - ++ dp-model-cat ;~(plug dp-server-cat dp-config) :: ++dojo-model - ++ dp-model-dog ;~(plug dp-server-dog dp-config) :: ++dojo-model - ++ dp-model-pig ;~(plug dp-server-pig dp-config) :: ++dojo-model - ++ dp-server-cat (stag 0 (stag %cat dp-device)) :: ++dojo-server - ++ dp-server-dog (stag 0 (stag %dog dp-device)) :: ++dojo-server - ++ dp-server-pig (stag 0 (stag %pig dp-device)) :: ++dojo-server - ++ dp-twig wide:(vang | ~) :: ++twig - ++ dp-device (most fas sym) :: ++dojo-device - ++ dp-value :: ++dojo-source - %+ cook |=(a=dojo-source a) - %+ stag 0 - ;~ pose - (ifix [kel ker] (stag %tu (most ace dp-source))) - (stag %va ;~(pfix buc sym)) - (stag %ex dp-twig) - == - :: - ++ dp-config :: ++dojo-config - %+ cook |=(a=dojo-config a) - ;~ plug - (star ;~(pfix ace dp-value)) - %+ cook - ~(gas by *(map term (unit dojo-source))) - %+ more - ;~(plug com ace) - ;~ plug - ;~(pfix tis sym) - ;~ pose - ;~(pfix ace (stag ~ dp-value)) - (easy ~) - == - == - == - -- - :: - ++ dy :: project work - |_ dojo-project :: - ++ dy-abet +>(poy `+<) :: resolve - ++ dy-amok +>(poy ~) :: terminate - ++ dy-ford :: send work to ford - |= [pax=path kas=silk] - ^+ +>+> - ?> ?=(~ pux) - =+ bek=[our.hid %home %da lat.hid] - (he-pass(poy `+>+<.$(pux `pax)) pax %f %exec our.hid bek `kas) - :: - ++ dy-stop :: stop work - ^+ +> - ?~ pux +> - =+ bek=[our.hid %home %da lat.hid] - (he-pass(poy ~) u.pux %f %exec our.hid bek ~) - :: - ++ dy-slam :: call by ford - |= [pax=path gat=vase sam=vase] - ^+ +>+> - (dy-ford pax %call [%done ~ %noun gat] [%done ~ %noun sam]) - :: - ++ dy-rush :: send effects, abet - |= fec=sole-effect - ^+ +>+> - (he-rush(poy `+>+<) fec) - :: - ++ dy-rash :: send effects, amok - |= fec=sole-effect - ^+ +>+> - (he-rush(poy ~) fec) - :: - ++ dy-init-command :: ++dojo-command - |= mad=dojo-command - ^+ [mad +>] - ?- -.mad - %flat =^(src +>.$ (dy-init-source q.mad) [[%flat p.mad src] +>.$]) - %pill =^(src +>.$ (dy-init-source q.mad) [[%pill p.mad src] +>.$]) - %poke =^(src +>.$ (dy-init-source q.mad) [[%poke p.mad src] +>.$]) - %show =^(src +>.$ (dy-init-source p.mad) [[%show src] +>.$]) - %verb =^(src +>.$ (dy-init-source q.mad) [[%verb p.mad src] +>.$]) - == - :: - ++ dy-init-source-unit :: (unit dojo-source) - |= urc=(unit dojo-source) - ^+ [urc +>] - ?~ urc [~ +>] - =^ src +> (dy-init-source u.urc) - [`src +>.$] - :: - ++ dy-init-source :: ++dojo-source - |= src=dojo-source - ^+ [src +>] - =^ bul +> (dy-init-build q.src) - =: p.src num - q.src bul - == - [src +>.$(num +(num), job (~(put by job) num q.src))] - :: - ++ dy-init-build :: ++dojo-build - |= bul=dojo-build - ^+ [bul +>] - ?- -.bul - %ex [bul +>.$] - %di =^(mod +>.$ (dy-init-model p.bul) [[%di mod] +>.$]) - %dv [bul +>.$] - %fi !! - %ge =^(mod +>.$ (dy-init-model p.bul) [[%ge mod] +>.$]) - %sc !! - %tu =^ dof +>.$ - |- ^+ [p.bul +>.^$] - ?~ p.bul [~ +>.^$] - =^ dis +>.^$ (dy-init-source i.p.bul) - =^ mor +>.^$ $(p.bul t.p.bul) - [[dis mor] +>.^$] - [[%tu dof] +>.$] - %va [bul +>.$] - == - :: - ++ dy-init-model :: ++dojo-model - |= mol=dojo-model - ^+ [mol +>] - =^ one +>.$ (dy-init-server p.mol) - =^ two +>.$ (dy-init-config q.mol) - [[one two] +>.$] - :: - ++ dy-init-server :: ++dojo-server - |= srv=dojo-server - =. p.srv num - [srv +>.$(num +(num), job (~(put by job) num [%dv q.srv]))] - :: - ++ dy-init-config :: prepare config - |= cig=dojo-config - ^+ [cig +>] - =^ ord +>.$ (dy-init-ordered p.cig) - =^ key +>.$ (dy-init-named q.cig) - [[ord key] +>.$] - :: - ++ dy-init-ordered :: (list dojo-source) - |= ord=(list dojo-source) - ^+ [ord +>] - ?~ ord [~ +>.$] - =^ fir +>.$ (dy-init-source i.ord) - =^ mor +>.$ $(ord t.ord) - [[fir mor] +>.$] - :: - ++ dy-init-named :: (map @tas dojo-src) - |= key=(map term (unit dojo-source)) - ^+ [key +>.$] - ?~ key [~ +>.$] - =^ top +>.$ (dy-init-source-unit q.n.key) - =^ lef +>.$ $(key l.key) - =^ rit +>.$ $(key r.key) - [[[p.n.key top] lef rit] +>.$] - :: - ++ dy-init :: full initialize - ^+ . - =^(dam . (dy-init-command mad) +(mad dam)) - :: - ++ dy-hand :: complete step - |= cag=cage - ^+ +>+> - ?> ?=(^ cud) - (dy-step(cud ~, rez (~(put by rez) p.u.cud cag)) +(p.u.cud)) - :: - ++ dy-meal :: vase to cage - |= vax=vase - ?. &(?=(@ -.q.vax) ((sane %tas) -.q.vax)) - ~& %dy-meal-cage - (dy-rash %bel ~) - (dy-hand -.q.vax (slot 3 vax)) - :: - ++ dy-made-edit :: sole edit - |= cag=cage - ^+ +>+> - ?> ?=(^ per) - ?: ?| ?=(^ q.q.cag) - =((lent buf.say) q.q.cag) - !&(?=(%del -.u.per) =(+(p.u.per) (lent buf.say))) - == - dy-abet(per ~) - =^ lic say (~(transmit cs say) u.per) - (dy-rush(per ~) %mor [%det lic] [%err q.q.cag] ~) - :: - ++ dy-done :: dialog submit - |= txt=tape - ?> ?=(^ pro) - (dy-slam /dial u.pro !>(txt)) - :: - ++ dy-over :: finish construction - ^+ +> - ?- -.mad - %poke - %- he-pass(poy ~) - :* /poke - %g - %mess - [p.p.mad [q.p.mad ~]] - our.hid - (~(got by rez) p.q.mad) - == - :: - %flat - =+ out=q.q:(~(got by rez) p.q.mad) - ?^ out - (dy-rash %tan [%leaf "not an atom"]~) - (dy-rash %sav p.mad out) - :: - %pill - (dy-rash %sag p.mad q.q:(~(got by rez) p.q.mad)) - :: - %verb - dy-amok(var (~(put by var) p.mad (~(got by rez) p.q.mad))) - :: - %show - (dy-rash %tan (sell q:(~(got by rez) p.p.mad)) ~) - == - :: - ++ dy-edit :: handle edit - |= cal=sole-change - ^+ +>+> - =^ dat say (~(transceive cs say) cal) - ?: |(?=(^ per) ?=(^ pux) ?=(~ pro)) - ~& %dy-edit-busy - =^ lic say (~(transmit cs say) dat) - (dy-rush %mor [%det lic] [%bel ~] ~) - (dy-slam(per `dat) /edit u.pro !>((tufa buf.say))) - :: - ++ dy-type :: sole action - |= act=sole-action - ?- -.act - %det (dy-edit +.act) - %ret (dy-done (tufa buf.say)) - == - :: - ++ dy-cage |=(num=@ud (~(got by rez) num)) :: known cage - ++ dy-vase |=(num=@ud q:(dy-cage num)) :: known vase - ++ dy-silk-vase |=(vax=vase [%done ~ %noun vax]) :: vase to silk - ++ dy-silk-config :: configure - |= [cag=cage cig=dojo-config] - ^- silk - :+ %ride [%cnzy %$] - :+ %mute [%done ~ cag] - ^- (list (pair wing silk)) - :* :- [[~ 12] ~] - (dy-silk-vase !>([now=lat.hid eny=eny.hid bec=he-beak])) - :: - :- [[~ 26] ~] - %- dy-silk-vase - |- ^- vase - ?~ p.cig !>(~) - (slop (dy-vase p.i.p.cig) $(p.cig t.p.cig)) - :: - %+ turn (~(tap by q.cig)) - |= [a=term b=(unit dojo-source)] - ^- (pair wing silk) - :- [a [~ 27] ~] - %- dy-silk-vase - ?~(b !>([~ ~]) (dy-vase p.u.b)) - == - :: - ++ dy-silk-init-modo :: init and config - |= [cag=cage cig=dojo-config] - ^- silk - (dy-silk-config cag cig) - :: - ++ dy-silk-device :: device to silk - |= pax=path - ^- silk - [%boil %gate [he-beak (flop pax)] ~] - :: - ++ dy-twig-head :: dynamic state - ^- vase - :(slop !>(`our=@p`our.hid) !>(`tym=@da`lat.hid) !>(`eny=@uvI`eny.hid)) - :: - ++ dy-made-dial :: dialog product - |= cag=cage - ^+ +>+> - ?. ?=(^ q.q.cag) - (dy-rush %err q.q.cag) - =+ tan=((list tank) +2.q.q.cag) - =. +>+>.$ (he-rush %tan tan) - =+ vax=(spec (slot 3 q.cag)) - ?+ -.q.vax !! - %& - ?~ +.q.vax - ~& %dy-made-dial-abort - (dy-rash %bel ~) - (dy-meal (slot 7 vax)) - :: - %| - =< he-pone - %- dy-rush(pro `(slap (slot 7 vax) [%cnzy %q])) - =+ pom=(sole-prompt +<.q.vax) - [%pro pom(cad [':' ' ' cad.pom])] - == - :: - ++ dy-made-gent :: generator product - |= cag=cage - (dy-meal q.cag) - :: - ++ dy-make :: build step - ^+ +> - ?> ?=(^ cud) - %- dy-ford - ^- (pair path silk) - ?+ -.q.u.cud !! - %di [/dial (dy-silk-init-modo (dy-cage p.p.p.q.u.cud) q.p.q.u.cud)] - %ge [/gent (dy-silk-init-modo (dy-cage p.p.p.q.u.cud) q.p.q.u.cud)] - %dv [/hand (dy-silk-device p.q.u.cud)] - %ex [/hand [%ride p.q.u.cud [[%done ~ %$ dy-twig-head] [%reef ~]]]] - %tu :- /hand - :+ %done ~ - :- %noun - |- ^- vase - ?~ p.q.u.cud !! - =+ hed=(dy-vase p.i.p.q.u.cud) - ?~ t.p.q.u.cud hed - (slop hed $(p.q.u.cud t.p.q.u.cud)) - == - :: - ++ dy-step :: advance project - |= nex=@ud - ^+ +>+> - ?> ?=(~ cud) - ?: =(nex num) - dy-over - dy-make(cud `[nex (~(got by job) nex)]) - -- - :: - ++ he-dope :: sole user of ++dp - |= txt=tape :: - ^- (each (unit dojo-command) hair) :: prefix/result - =+ vex=(dp-command:dp [1 1] txt) :: - ?. =(+((lent txt)) q.p.vex) :: fully parsed - [%| p.p.vex (dec q.p.vex)] :: syntax error - [%& ?~(q.vex ~ `p.u.q.vex)] :: prefix/complete - :: - ++ he-duke :: ++he-dope variant - |= txt=tape - ^- (each dojo-command ,@ud) - =+ foy=(he-dope txt) - ?- -.foy - %| [%| q.p.foy] - %& ?~(p.foy [%| (lent txt)] [%& u.p.foy]) - == - :: - ++ he-abet :: resolve - [(flop moz) %_(+> hoc (~(put by hoc) ost +<+))] - :: - ++ he-beak :: logical beam - ^- beak - [our.hid syd ?^(luc u.luc [%da lat.hid])] - :: - ++ he-give :: emit gift - |= git=gift - ^+ +> - %_(+> moz [[ost %give git] moz]) - :: - ++ he-pass - |= [pax=path noy=note] - %_(+> moz [[ost %pass pax noy] moz]) - :: - ++ he-rush :: emit update - |= fec=sole-effect - ^+ +> - (he-give %rush %sole-effect fec) - :: - ++ he-stop :: abort work - ^+ . - ?~(poy . ~(dy-stop dy u.poy)) - :: - ++ he-peer :: subscribe to - he-prom - :: - ++ he-pine :: restore prompt - ^+ . - ?^ poy . - he-prom:he-pone - :: - ++ he-pone :: clear prompt - ^+ . - =^ cal say (~(transmit cs say) [%set ~]) - (he-rush %mor [%det cal] ~) - :: - ++ he-prom :: send prompt - %- he-rush - :- %pro - [& %$ "> "] - :: - ++ he-made :: result from ford - |= [pax=path dep=@uvH rey=(each gage tang)] - ^+ +> - ?> ?=(^ poy) - =< he-pine - ?- -.rey - %& ?> ?=(@ p.p.rey) - %. p.rey - =+ dye=~(. dy u.poy(pux ~)) - ?+ pax !! - [%hand ~] dy-hand:dye - [%dial ~] dy-made-dial:dye - [%gent ~] dy-made-gent:dye - [%edit ~] dy-made-edit:dye - == - %| ~& [%he-made-fail pax] - (he-rush(poy ~) %tan p.rey) - == - :: - ++ he-like :: accept line - |= buf=(list ,@c) - =(%& -:(he-dope (tufa buf))) - :: - ++ he-stir :: apply change - |= cal=sole-change - ^+ +> - :: ~& [%his-clock ler.cal] - :: ~& [%our-clock ven.say] - =^ dat say (~(transceive cs say) cal) - ?. ?& ?=(%del -.dat) - =(+(p.dat) (lent buf.say)) - == - +>.$ - =+ foy=(he-dope (tufa buf.say)) - ?: ?=(%& -.foy) +>.$ - :: ~& [%bad-change dat ted.cal] - =^ lic say (~(transmit cs say) dat) - :: ~& [%our-leg leg.say] - (he-rush %mor [%det lic] [%err q.p.foy] ~) - :: - ++ he-plan :: execute command - |= mad=dojo-command - ^+ +> - ?> ?=(~ poy) - he-pine:(dy-step:~(dy-init dy mad [0 ~ ~ ~ ~ ~ ~]) 0) - :: - ++ he-done :: parse command - |= txt=tape - ^+ +> - ?~ txt - %- he-rush - :~ %mor - [%txt "> "] - [%nex ~] - == - =+ doy=(he-duke txt) - ?- -.doy - %| (he-rush [%err p.doy]) - %& - =+ old=(weld "> " (tufa buf.say)) - =^ cal say (~(transmit cs say) [%set ~]) - %. p.doy - =< he-plan - %- he-rush - :~ %mor - [%txt old] - [%nex ~] - [%det cal] - == - == - :: - ++ he-type :: apply input - |= act=sole-action - ^+ +> - ?^ poy - he-pine:(~(dy-type dy u.poy) act) - ?- -.act - %det (he-stir +.act) - %ret (he-done (tufa buf.say)) - == - -- -:: -++ peer - |= [ost=bone her=ship pax=path] - ^- [(list move) _+>] - ~? !=(her our.hid) [%dojo-peer ost her pax] - ?< (~(has by hoc) ost) - ?> =(/sole pax) - :: ?> =(her our.hid) - =< he-abet - %~ he-peer he - :- [ost ~] - ^- session - :* *sole-share :: say=sole-share - %home :: syd=desk - ~ :: luc=(unit case) - ~ :: poy=(unit dojo-project) - ~ :: var=(map term cage) - ~ :: old=(set term) - == -:: -++ poke-sole-action - |= [ost=bone her=ship act=sole-action] - ^- [(list move) _+>] - :: ~? !=(her our.hid) [%dojo-poke ost her] - he-abet:(~(he-type he [ost [ost %give %nice ~]~] (~(got by hoc) ost)) act) -:: -++ pour - |= [ost=bone pax=path sih=sign] - ^- [(list move) _+>] - :: ~& [%dojo-pour pax] - ?- -.sih - %f - he-abet:(~(he-made he [[ost ~] (~(got by hoc) ost)]) pax +>.sih) - :: - %g - [~ +>.$] - == -:: -++ pull - |= ost=bone - ^- [(list move) _+>] - =^ moz +> - he-abet:~(he-stop he [[ost ~] (~(got by hoc) ost)]) - [moz +>.$(hoc (~(del by hoc) ost))] --- diff --git a/base/fap/gnab/core.hook b/base/fap/gnab/core.hook deleted file mode 100644 index 00797a380..000000000 --- a/base/fap/gnab/core.hook +++ /dev/null @@ -1,21 +0,0 @@ -:: gnaB: send gift to arvo -:: -:::: /hook/core/gnab/app - :: -/+ sh-utils -!: -:::: - :: -|_ [hide ~] -++ lima |*(a=(pole) ?~(a ~ [i t]=a(+ (..$ +.a)))) -++ poke--args - |* [ost=bone @ a=[* (pole)]] - => .(a ^.(lima a)) - :_(+> (turn a |*(b=_i.a [ost %give b]))) -:: -++ pour - %- add-exit - |= [@ * sih=*] - ~& gnab-resp/(,[term term] [&1 &2]:sih) - `+>.$ --- diff --git a/base/fap/grep/core.hook b/base/fap/grep/core.hook deleted file mode 100644 index a0260cbae..000000000 --- a/base/fap/grep/core.hook +++ /dev/null @@ -1,66 +0,0 @@ -|% -++ sign - $% $: %g - $% [%nice ~] - $: %rush - $% [%txt p=cord] - [%tang p=(list tank)] - == == == - == == --- -:: -!: -:::: - :: -|_ [hid=hide arg=cord] -++ poke-grep-args - |= [ost=bone you=ship arg=cord ~] - =. ^arg arg - :_ +>.$ - ~& [%grep-subscribing-to /in/[-.imp.hid]] - :~ [ost %pass / %g %show [our.hid +.imp.hid] you /in/[-.imp.hid]] - == -++ peer |=(* `+>) -++ pour - |= [ost=bone pax=path sih=*] - =+ sih=;;(sign sih) - ::~& grep-por/[pax sih] - ?^ pax `+>.$ - :_ +>.$ - ?- &2.sih - %nice - [ost %give %nice ~]~ - %rush - %+ weld (spam %rush %prompt 'searching for {}...' %text ~) - %- spam - ?- &3.sih - %txt - ?. (match (trip p.sih)) [%rush %tang ~] - +.sih - %tang - =< [%rush %tang .] - %+ murn p.sih - |= a=tank - ^- (unit tank) - ?- -.a - %leaf - ?.((match p.a) ~ `a) - ?(%palm %rose) - =. q.a (murn q.a ..$) - ?~ q.a ~ - (some a) - == - == == -++ match - |= a=tape - =+ tag=(trip arg) - ?: =(tag (scag (lent tag) a)) - & - ?~ a | - $(a t.a) -++ spam - |* git=* - %+ turn - (~(tap in (~(get ju pus.hid) /out))) - |=(a=bone [a %give git]) --- diff --git a/base/fap/helm/core.hook b/base/fap/helm/core.hook deleted file mode 100644 index 21e79afb3..000000000 --- a/base/fap/helm/core.hook +++ /dev/null @@ -1,505 +0,0 @@ -:: :: :: -:::: /hook/core/helm/app :: :: - :: :: :: -/? 314 :: zuse version -/- *sole, *talk :: structures -/+ sole, talk :: libraries -:: :: :: -:::: :: :: - !: :: :: -=> |% :: principal structures - ++ helm-house :: all state - $: %0 :: state version - bur=(unit (pair ship mace)) :: requesting ticket - hoc=(map bone helm-session) :: consoles - rem=(map desk merge-state) :: active merges - == :: - ++ helm-session :: - $: say=sole-share :: - mud=(unit (sole-dialog ,@ud)) :: - == :: - ++ merge-state :: merge data - $: auto=? :: escalate on failure - gem=germ :: strategy - her=@p :: from ship - sud=@tas :: from desk - cas=case :: at case - == :: - ++ funk (pair ,@ ,@) :: - ++ begs ,[his=@p tic=@p eny=@t ges=gens] :: begin data - ++ helm-wish :: - $| $? %reset :: reset kernel - %verb :: verbose mode - == :: - $% [%reload p=(list term)] :: reload vanes - [%sync p=@tas q=@p r=@tas ~] :: - == :: - ++ dill-flog :: sent to %dill - $% [%crud p=%hax-init [%leaf p=tape] ~] :: initialize ship - [%heft ~] :: weigh memory - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: - :: :: - ++ gift :: out result <-$ - $% [%mean p=ares] :: error - [%nice ~] :: acknowledge - [%rush %sole-effect sole-effect] :: effect - == :: - ++ hapt ,[p=ship q=path] :: - ++ milk (trel ship desk silk) :: - ++ silk :: - $& [p=silk q=silk] :: cons - $% [%diff p=silk q=silk] :: diff - [%done p=(set beam) q=gage] :: literal - [%file p=beam] :: from clay - [%mash p=mark q=milk r=milk] :: merge - [%tabl p=(list (pair silk silk))] :: list - == :: - ++ tage :: %tabl gage - ,[[%tabl p=(list (pair marc marc))] q=vase] :: - ++ move ,[p=bone q=(mold note gift)] :: - ++ note-clay :: filesystem command - $% [%font p=@p q=@tas r=@p s=@tas] :: - [%info p=@p q=@tas r=nori] :: - [%lynx p=@p q=@tas r=(unit ,?)] :: - [%merg p=@p q=@tas r=@p s=@tas t=germ] :: - == :: - ++ note-dill :: system command - $% [%flog p=dill-flog] :: - == :: - ++ note-ford :: - $% [%exec p=@p q=beak r=(unit silk)] :: - == :: - ++ note-gall :: note to %gall - $% [%mess p=[p=ship q=path] q=ship r=cage] :: - [%show p=[p=ship q=path] q=ship r=path] :: - [%took p=[p=ship q=path] q=ship] :: - == :: - ++ note :: out request $-> - $% [%c note-clay] :: - [%d note-dill] :: - [%f note-ford] :: - [%g note-gall] :: - == :: - ++ sign-clay :: - $% [%mere are=(each (set path) (pair term tang))]:: - == :: - ++ sign-ford :: - $% [%made p=@uvH q=(each gage tang)] :: - == :: - ++ sign-gall :: - $% [%mean p=ares] :: - [%nice ~] :: - == :: - ++ sign :: - $% [%c sign-clay] :: - [%f sign-ford] :: - [%g sign-gall] :: - == :: - -- :: -:: :: -:::: :: - :: :: -|_ $: hid=hide :: system state - helm-house :: program state - == :: -++ he :: per session - |_ [[ost=bone moz=(list move)] helm-session] :: - ++ he-abet :: resolve - [(flop moz) %_(+> hoc (~(put by hoc) ost +<+))] :: - :: :: - ++ he-give :: emit gift - |= git=gift - %_(+> moz [[ost %give git] moz]) - :: - ++ he-wish-reset - ^+ . - =- %_(+ moz (weld (flop zum) moz)) - ^- zum=(list move) - =+ top=`path`/(scot %p our.hid)/home/(scot %da lat.hid)/arvo - :- [ost %pass /reset %d %flog %vega (weld top `path`/hoon)] - %+ turn - ^- (list ,[p=@tas q=@tas]) - :~ [%$ %zuse] - [%a %ames] - [%c %clay] - [%d %dill] - [%e %eyre] - [%f %ford] - [%g %gall] - [%t %time] - == - |= [p=@tas q=@tas] - =+ pax=`path`(welp top /[q]) - =+ txt=((hard ,@) .^(%cx (welp pax /hoon))) - [ost %pass /reset %d %flog %veer p pax txt] - :: - ++ he-wish-reload - |= all=(list term) - =- %_(+ moz (weld (flop zum) moz)) - ^- zum=(list move) - =+ top=`path`/(scot %p our.hid)/home/(scot %da lat.hid)/arvo - %+ turn all - =+ ark=(arch .^(%cy /(scot %p our.hid)/home/(scot %da lat.hid)/arvo)) - =+ van=(~(tap by r.ark)) - |= nam=@tas - =. nam - ?. =(1 (met 3 nam)) - nam - =+ ^- zaz=(list ,[p=span ~]) - (skim van |=([a=term ~] =(nam (end 3 1 a)))) - ?> ?=([[@ ~] ~] zaz) - `term`p.i.zaz - =+ tip=(end 3 1 nam) - =. tip ?:(=('z' tip) %$ tip) - =+ pax=`path`(welp top /[nam]) - =+ txt=((hard ,@) .^(%cx (welp pax /hoon))) - [ost %pass /reload %d %flog %veer tip pax txt] - :: - ++ he-wish-sync - |= [syd=desk her=ship sud=desk ~] - %_ . - moz - :_ moz - [ost %pass /sync %c %font our.hid syd her sud] - == - :: - ++ he-wish-unix - |= [syd=desk syn=(unit ,?)] - %_ . - moz - :_ moz - [ost %pass /unix %c %lynx our.hid syd syn] - == - :: - ++ he-wish-verb - %_ . - moz - :_ moz - [ost %pass /verb %d %flog %verb ~] - == - :: - ++ he-wish-mass - %_ . - moz - :_ moz - [ost %pass /heft %d %flog %heft ~] - == - :: - ++ he-wish-init - |= him=ship - %_ +>.$ - moz - :_ moz - [ost %pass /init %d %flog %crud %hax-init leaf/(scow %p him) ~] - == - :: - ++ he-wish-merge - |= syd=desk - =+ ^- merge-state - %+ fall (~(get by rem) syd) - =+ *merge-state - %_(- cas [%da lat.hid]) - |% - ++ merge-abet - ..he-wish-merge(rem (~(put by rem) syd auto gem her sud cas)) - :: - ++ blab - |= new=(list move) - ^+ +> - +>.$(moz (welp new moz)) - :: - ++ win (blab [ost %give %nice ~] ~) - ++ lose (blab [ost %give %mean ~] ~) - :: - ++ gage-to-tage - |= res=gage - ^- tage - ?@ p.res - ~|(%bad-marc !!) - res - :: - ++ tage-to-cages - |= tab=tage - ^- (list (pair cage cage)) - ?~ p.tab - ~ - :_ $(p.tab t.p.tab, q.tab (slot 3 q.tab)) - ~| %strange-gage - :- [?^(p.i.p.tab !! p.i.p.tab) (slot 4 q.tab)] - [?^(q.i.p.tab !! q.i.p.tab) (slot 5 q.tab)] - :: - ++ merge - ^+ . - (blab [ost %pass /merge/[syd]/merge %c %merg our.hid syd her sud gem] ~) - :: - ++ fancy-merge :: recurse - |= [syd=desk her=@p sud=desk gem=?(%auto germ)] - ^+ +> - %- blab :_ ~ - :* ost %pass /merge/[^syd]/fancy %g %mess [our.hid imp.hid] - our.hid %helm-merge !>([syd her sud gem]) - == - :: - ++ spam - |= mes=(list tank) - %- blab :_ ~ - :* ost %pass /merge/[syd]/spam %g %mess - [our.hid /talk] our.hid %talk-command -:!>(*command) - %publish - %- flop - =< acc - %+ roll mes - =< .(eny eny.hid) - |= [tan=tank acc=(list thought) eny=@uvI] - ^- [acc=(list thought) eny=@uvI] - =+ (sham eny mes) - :_ - - :_ acc - ^- thought - :+ - - [[[%& our.hid (main our.hid)] [*envelope %pending]] ~ ~] - [lat.hid *bouquet [%app (crip ~(ram re tan))]] - == - ++ start - |= [her=@p sud=@tas gim=?(%auto germ)] - ^+ +> - =. cas [%da lat.hid] - ?. ?=(%auto gim) - merge(auto |, gem gim, her her, sud sud) - ?: =(0 .^(%cw /(scot %p our.hid)/[syd]/(scot %da lat.hid))) - => $(gim %init) - .(auto &) - => $(gim %fine) - .(auto &) - :: - ++ work - |= sih=sign - ^+ +> - ~| [%working auto=auto gem=gem syd=syd her=her sud=sud] - ?: ?=(%meld gem) - ?- -.sih - %g - ?: ?=(%nice +<.sih) - => (spam leaf/"%melding %{(trip sud)} into scratch space" ~) - %- blab :_ ~ - :* ost %pass /merge/[syd]/scratch %c %merg our.hid - (cat 3 syd '-scratch') her sud gem - == - =+ :- "failed to set up conflict resolution scratch space" - "I'm out of ideas" - lose:(spam leaf/-< leaf/-> ~) - :: - %c - ?: ?=(%& -.are.sih) - ?. auto - =+ "successfully merged with strategy {}" - win:(spam leaf/- ?~(p.are.sih ~ [>`(set path)`p.are.sih< ~])) - =+ "mashing conflicts" - => .(+>.$ (spam leaf/- ~)) - =+ tic=(cat 3 syd '-scratch') - %- blab :_ ~ - :* ost %pass /merge/[syd]/mash - %f %exec our.hid [our.hid tic %da lat.hid] ~ %tabl - ^- (list (pair silk silk)) - %+ turn (~(tap in p.are.sih)) - |= pax=path - ^- (pair silk silk) - :- [%done ~ %path -:!>(*path) pax] - =+ base=[%file [our.hid tic %da lat.hid] (flop pax)] - =+ alis=[%file [her sud cas] (flop pax)] - =+ bobs=[%file [our.hid syd %da lat.hid] (flop pax)] - =+ dali=[%diff base alis] - =+ dbob=[%diff base bobs] - =+ ^- for=mark - =+ (slag (dec (lent pax)) pax) - ?~(- %$ i.-) - [%mash for [her sud dali] [our.hid syd dbob]] - == - =+ "failed to merge with strategy {}" - lose:(spam leaf/- q.p.are.sih) - :: - %f - ?: ?=(%| -.q.sih) - =+ "failed to mash" - lose:(spam leaf/- p.q.sih) - =+ ^- can=(list (pair path (unit miso))) - %+ turn (tage-to-cages (gage-to-tage p.q.sih)) - |= [pax=cage dif=cage] - ^- (pair path (unit miso)) - ?. ?=(%path p.pax) - ~| "strange path mark: {}" - !! - [((hard path) q.q.pax) ?:(?=(%null p.dif) ~ `[%dif dif])] - =+ notated=(skid can |=([path a=(unit miso)] ?=(^ a))) - =+ annotated=(turn `(list (pair path ,*))`-.notated head) - =+ unnotated=(turn `(list (pair path ,*))`+.notated head) - =+ (trip (cat 3 syd '-scratch')) - =+ ^- tan=(list tank) - %- zing - ^- (list (list tank)) - :~ :~ leaf/"" - leaf/"done setting up scratch space in %{-}" - leaf/"please resolve the following conflicts and run" - leaf/":helm+merge %{(trip syd)} {} %{-}" - == - ?~ annotated - ~ - :~ leaf/"" - leaf/"annotated conflicts in:" - >`(list path)`annotated< - == - ?~ unnotated - ~ - :~ leaf/"" - leaf/"some conflicts could not be annotated." - leaf/"for these, the scratch space contains" - leaf/"the most recent common ancestor of the" - leaf/"conflicting content." - leaf/"" - leaf/"unannotated conflicts in:" - >`(list path)`unnotated< - == - == - =< win - %- blab:(spam tan) - :_ ~ - :* ost %pass /merge/[syd]/dash %c %info - our.hid (cat 3 syd '-scratch') - %& *cart - %+ murn can - |= [p=path q=(unit miso)] - `(unit (pair path miso))`?~(q ~ `[p u.q]) - == - == - ?> ?=(%c -.sih) - ?: ?=(%& -.are.sih) - =+ "successfully merged with strategy {}" - win:(spam leaf/- ?~(p.are.sih ~ [>`(set path)`p.are.sih< ~])) - ?. auto - =+ "failed to merge with strategy {}" - lose:(spam leaf/- q.p.are.sih) - ?+ gem - (spam leaf/"strange auto" >gem< ~) - :: - %init - =+ :- "auto merge failed on strategy %init" - "I'm out of ideas" - lose:(spam leaf/-< leaf/-> [>p.p.are.sih< q.p.are.sih]) - :: - %fine - ?. ?=(%bad-fine-merge p.p.are.sih) - =+ "auto merge failed on strategy %fine" - lose:(spam leaf/- >p.p.are.sih< q.p.are.sih) - => (spam leaf/"%fine merge failed, trying %meet" ~) - merge(gem %meet) - :: - %meet - ?. ?=(%meet-conflict p.p.are.sih) - =+ "auto merge failed on strategy %meet" - lose:(spam leaf/- >p.p.are.sih< q.p.are.sih) - => (spam leaf/"%meet merge failed, trying %mate" ~) - merge(gem %mate) - :: - %mate - ?. ?=(%mate-conflict p.p.are.sih) - =+ "auto merge failed on strategy %mate" - lose:(spam leaf/- >p.p.are.sih< q.p.are.sih) - => .(gem %meld) - =+ tic=(cat 3 syd '-scratch') - => =+ :- "%mate merge failed with conflicts," - "setting up scratch space at %{(trip tic)}" - [tic=tic (spam leaf/-< leaf/-> ~)] - (fancy-merge tic our.hid syd %auto) - == - -- - -- -:: -++ hake :: poke core - |= [ost=bone her=ship] - ?> =(her our.hid) - ~(. he [ost [ost %give %nice ~]~] (fall (~(get by hoc) ost) *helm-session)) -:: -++ hoke :: poke sans ack - |= [ost=bone her=ship] - ?> =(her our.hid) - ~(. he [ost ~] (fall (~(get by hoc) ost) *helm-session)) -:: -++ poke-helm-reset - |= [ost=bone her=ship ~] - ~& %poke-helm-reset - he-abet:he-wish-reset:(hake ost her) -:: -++ poke-helm-verb - |= [ost=bone her=ship ~] - ~& %poke-helm-verb - he-abet:he-wish-verb:(hake ost her) -:: -++ poke-helm-mass - |= [ost=bone her=ship ~] - ~& %poke-helm-mass - he-abet:he-wish-mass:(hake ost her) -:: -++ poke-helm-init - |= [ost=bone her=ship him=ship] - ~& %poke-helm-init - he-abet:(he-wish-init:(hake ost her) him) -:: -++ poke-helm-reload - |= [ost=bone her=ship all=(list term)] - ~& %poke-helm-reload - he-abet:(he-wish-reload:(hake ost her) all) -:: -++ poke-helm-merge - |= [ost=bone her=ship syd=@tas ali=@p sud=@tas gem=?(%auto germ)] - ~& %poke-helm-merge - he-abet:merge-abet:(start:(he-wish-merge:(hoke ost her) syd) ali sud gem) -:: -++ poke-helm-sync - |= [ost=bone her=ship all=[desk ship desk ~]] - ~& %poke-helm-sync - he-abet:(he-wish-sync:(hake ost her) all) -:: -++ poke-helm-unix - |= [ost=bone her=ship all=[desk (unit ,?)]] - ~& %poke-helm-unix - he-abet:(he-wish-unix:(hake ost her) all) -:: -++ poke-helm-begin - |= [ost=bone you=ship begs] - ~& %poke-helm-begin - ?> ?=(~ bur) - =+ buz=(shax :(mix (jam ges) eny)) - =+ loy=(bruw 2.048 buz) - :_ +>.$(bur `[his [0 sec:ex:loy]~]) - :~ :* ost %pass /ticketing %a %want [our.hid (sein his)] /q/ta - his tic ges pub:ex:loy - == - [ost %give %nice ~] - == -:: -++ poke-will - |= [ost=bone you=ship wil=(unit will)] - ?> ?=(^ bur) - :_ +>.$(bur ~) - ?~ wil - [ost %give %mean ~ %rejected ~]~ - :~ [ost %pass / %a %cash p.u.bur q.u.bur u.wil] - [ost %pass / %c %plug our.hid %home (sein our.hid) %kids] - [ost %give %nice ~] - == -:: -++ pour - |= [ost=bone pax=path sih=*] - ^- [(list move) _+>] - =+ sih=((soft sign) sih) - ?~ sih [~ +>.$] - ?+ pax [~ +>.$] - [%merge @tas @ ~] - ?: ?=(%spam i.t.t.pax) - [~ +>.$] - he-abet:merge-abet:(work:(he-wish-merge:(hoke ost our.hid) i.t.pax) u.sih) - == --- diff --git a/base/fap/hi/core.hook b/base/fap/hi/core.hook deleted file mode 100644 index 286cdfd6b..000000000 --- a/base/fap/hi/core.hook +++ /dev/null @@ -1,50 +0,0 @@ -:: Hi, send optional message to a ship -:: -:::: /hook/core/hi/bin - :: -/+ sh-utils -:: -:::: - :: -|% -++ sign :: - $% $: %g :: - $% [%nice ~] :: - [%mean p=ares] :: - == == == -++ flog :: sent to %dill - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - == :: --- -!: -:::: - :: -|_ [hid=hide ~] -++ peer - |= [ost=bone ^] - ~& per=ost - `+> -++ poke--args - |= [bone you=ship her=ship mes=?(~ [tex=tape ~])] - %. +< - %+ add-resp - =+ mez=[%txt !>(?~(mes '' (crip tex.mes)))] - [%pass /hi/(scot %p her) %g %mess [her /hi] you mez] - (add-nice ,_`+>.$) -:: -++ poke-txt - %- add-nice - |= [ost=bone him=ship cor=@t] - ~& from=ost - :_ +>.$ - [ost %pass /di %d %flog %text "< {}: {(trip cor)}"]~ -:: -++ pour - |= [ost=bone pax=path sih=sign] - ?> ?=([%hi @t ~] pax) - %. +< - =+ ack=?+(+<.sih "unsuccesful" %nice "succesful") - (add-exit (print +>.$ "hi {(trip i.t.pax)} {ack}")) -:: --- diff --git a/base/fap/into/core.hook b/base/fap/into/core.hook deleted file mode 100644 index 637d1bc3f..000000000 --- a/base/fap/into/core.hook +++ /dev/null @@ -1,19 +0,0 @@ -:: Over/write to location, usage :into %/foo/txt 'Contents' -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke-into-args - |= [ost=bone you=ship pax=path dat=cage ~] - :_ +>.$ - :* [ost %pass /into %c %info our.hid (foal pax dat)] - [ost %pass / %g %cide %$] - [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - leaf/"written" - == --- diff --git a/base/fap/label/core.hook b/base/fap/label/core.hook deleted file mode 100644 index 63698f2a4..000000000 --- a/base/fap/label/core.hook +++ /dev/null @@ -1,13 +0,0 @@ -!: -:::: - :: -|_ [hid=hide ~] -++ poke-label-args - |= [ost=bone you=ship syd=@tas lab=@tas ~] - :_ +>.$ - :~ [ost %pass /label %c %info our.hid syd %| lab] - [ost %pass / %g %cide %$] - [ost %give %nice ~] - == -++ peer |=(* `+>) --- diff --git a/base/fap/ls/core.hook b/base/fap/ls/core.hook deleted file mode 100644 index 9a47fa0d2..000000000 --- a/base/fap/ls/core.hook +++ /dev/null @@ -1,17 +0,0 @@ -:: LiSt directory subnodes -:: -:::: - :: -/+ sh-utils -// /%%/subdir -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke-ls-args - %+ args-into-gate . - |= [arg=path ~] - =+ lon=((hard arch) .^(%cy arg)) - tang/[?~(r.lon leaf/"~" (subdir arg r.lon))]~ --- diff --git a/base/fap/ls/subdir.hoon b/base/fap/ls/subdir.hoon deleted file mode 100644 index a665d47ba..000000000 --- a/base/fap/ls/subdir.hoon +++ /dev/null @@ -1,20 +0,0 @@ -|% -++ subdir - |= [pax=path des=(map ,@t ,~)] - ^- tank - :+ %rose [" " `~] - %+ turn (sort (~(tap by des)) aor) - |= [kid=@ta ~] - =+ paf=`path`/[kid] - =- :+ %rose ["/" ~ ?:(dir "/" ~)] - (turn paf |=(a=span leaf/(trip a))) - |- ^- [dir=? paf=path] - =+ arf=;;(arch .^(%cy (weld pax paf))) - ?^ q.arf - [| paf] - ?~ r.arf - [& paf] :: !! - ?. ?=([^ ~ ~] r.arf) - [& paf] - $(paf (welp paf /[p.n.r.arf])) --- diff --git a/base/fap/matrix/hymn.hook b/base/fap/matrix/hymn.hook deleted file mode 100644 index d301f0719..000000000 --- a/base/fap/matrix/hymn.hook +++ /dev/null @@ -1,165 +0,0 @@ -:: Matrix GUI -:: -:::: /hook/hymn/matr/app - :: -/? 310 -|% -++ cdnj |=(a=tape ;script(src "//cdnjs.cloudflare.com/ajax/libs/{a}");) --- -:: -:::: - :: -^- manx -;html - ;head - ;title: Matrix - ;* %- turn :_ cdnj ^- wall - :~ "jquery/2.1.1/jquery.min.js" - "mousetrap/1.4.6/mousetrap.js" - "react/0.11.0/react.js" - == - ;script(src "/~/at/home/lib/urb.js"); - ;script: urb.appl = 'sole' - ;style:''' - #term { - width: 100%; - } - #term * { - margin: 0px; - } - ''' - == - ;body - ;div#err; - ;div#term:"" - ;script(type "text/coffeescript") ;- %- trip - ''' - [DOM,recl,rend] = [React.DOM, React.createClass, React.renderComponent] - [div, pre] = [DOM.div, DOM.pre] - Matr = recl render: -> - [pro,cur] = [@props.prompt + " ", @props.cursor + 1] - prompt = "#{pro.slice(0,cur)}\u0332#{pro.slice(cur)}" - lines = [prompt, @props.rows...] - div {}, lines.slice().reverse().map (lin)-> - pre {}, lin - - $ -> - termRev = 0 - pressed = [] - deltim = null - - met = $('
').text('m').css(display: 'none').appendTo(term).width()
-        subs = ""
-        # $(window).resize -> 
-        #   window.termWif = ($(term).width() / met).toFixed()
-        #   path =  "/new/#{termWif}"
-        #   if path is subs
-        #     return
-        #   if subs
-        #     urb.unsubscribe {path:subs}
-        #   subs = path
-        #   urb.subscribe {path}, (err,dat)->
-        #       if err or dat.data.ok
-        #         return;
-        #       syncRev = dat.data.rev
-        #       unless termRev > syncRev
-        #         termRev = syncRev
-        #         matr.setProps rows: dat.data.stak
-        #         document.title = "Matrix"  # XX  debug
-        # $(window).resize()
-
-        matr = rend (Matr rows:[], prompt:"", cursor:1), term
-        flash = ($el, background)->
-          $el.css {background}
-          if background
-            setTimeout (()-> flash $el,''), 50
-        
-        peer = (ruh) ->
-          switch false
-            when !ruh.map then ruh.map peer
-            when !ruh.pro then matr.setProps prompt: ruh.pro
-            when !ruh.hop then matr.setProps cursor: ruh.hop
-            when !ruh.out 
-              matr.setProps rows: [ruh.out, matr.props.rows...]
-            when !ruh.act then switch ruh.act
-              when 'clr' then matr.setProps rows:[]
-              when 'bel' then flash ($ 'body'), 'black'
-              else throw "Unknown "+(JSON.stringify ruh)
-            else console.log ruh
-        
-        urb.bind "", (err,d)->
-          if d.data then peer d.data
-
-        #later = (data)->
-        #  if data
-        #    pressed.push data
-        #  clearTimeout deltim
-        #  setTimeout (->
-        #    if urb.reqq.length > 0 
-        #      return deltim = later()
-        #    urb.send data: pressed
-        #    pressed = []
-        #  ), 500
-
-        Mousetrap.handleKey = (char, mod, e)->
-          norm = {
-            capslock:  'caps'
-            pageup:    'pgup'
-            pagedown:  'pgdn'
-            backspace: 'baxp'
-            enter:     'entr'
-          }
-          key = 
-            if char.length is 1
-              if e.type is 'keypress'
-                str: char
-            else if e.type is 'keydown'
-              if char isnt 'space'
-                act: norm[char] ? char
-            else if e.type is 'keyup' and norm[key] is 'caps'
-              act: 'uncap'
-          if key
-            e.preventDefault()
-            urb.send mark: 'dill-belt', data: {mod,key}
-            
-            # amod = (arr)->
-            #   for i in arr
-            #     unless mod.indexOf(i) < 0
-            #       return yes
-            #   no
-            # if key.str or key.act is 'baxp' or key.act is 'entr'
-            #   termRev++
-            #   [bot, rest...] = old = matr.props.rows
-            #   matr.setProps rows:(
-            #     switch  key.act 
-            #       when 'baxp'
-            #         if amod ['ctrl', 'meta']
-            #           ['', rest...]
-            #         else if amod ['alt']
-            #           [(bot.replace /\ *[^ ]*$/, ''), rest...]
-            #         else if bot and bot.length 
-            #           [bot.slice(0, -1), rest...]
-            #         else if rest[0] and rest[0].length
-            #           res = rest.slice()
-            #           res[0] = res[0].slice(0, -1)
-            #           res
-            #         else rest
-            #       when 'entr'
-            #         ['', old...]
-            #       when undefined
-            #         if mod.length > 1 or (mod.length and !amod ['shift'])
-            #           old
-            #         else unless old and bot isnt null
-            #           [key.str]
-            #         #else if bot.length is termWif
-            #         #  [key.str, old...]
-            #         else [bot + key.str, rest...]
-            #   )
-            #   document.title = "Matri"  # XX  debug
-            # later {mod, key}
-
-
-      '''
-    ==
-    ;+  (cdnj "coffee-script/1.7.1/coffee-script.min.js")
-==  ==
diff --git a/base/fap/mv/core.hook b/base/fap/mv/core.hook
deleted file mode 100644
index 3048d3775..000000000
--- a/base/fap/mv/core.hook
+++ /dev/null
@@ -1,17 +0,0 @@
-::  MoVe file from one location to another
-::
-::::  /hook/core/mv/app
-  ::
-/+    sh-utils
-!:
-::::
-  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke--args
-  %+  gate-bang  
-    |=  [input=path output=path ~]
-    :^  %c  %info  our.hid
-    (furl (foal output .^(%cx input)) (fray input))
-  (args-into-gate . ,_[%txt 'moved'])
---
diff --git a/base/fap/nop/core.hook b/base/fap/nop/core.hook
deleted file mode 100644
index 93c6b28bc..000000000
--- a/base/fap/nop/core.hook
+++ /dev/null
@@ -1 +0,0 @@
-|_  ^  ++  poke-nop-args  ,_`.  --
diff --git a/base/fap/peek/core.hook b/base/fap/peek/core.hook
deleted file mode 100644
index 0b9f0ea89..000000000
--- a/base/fap/peek/core.hook
+++ /dev/null
@@ -1,34 +0,0 @@
-::  Peek imp path || Poke ship imp path. Subscribe to an app.
-!:
-::::
-  ::
-|_  [hide ~]
-++  ptah  ,[p=path q=path ~]
-++  poke-peek-args
-  |=  [ost=bone @ a=?(ptah [her=ship ptah])]
-  =-  :_(+>.$ ~[[ost %give %nice ~] [ost %pass / %g %show -]])
-  ^-  [p=[ship path] q=ship r=path]
-  ?^  |2.a  [[her p]:a our q.a]
-  [[our p.a] our q.a]
-::
-++  posh
-  |*  [@ * git=[@tas *]]
-  ~&  peek-posh/git
-  `+>
-++  pour
-  |=  [ost=bone * sih=*]
-  ~&  =+  cod=(,[term term] [&1 &2]:sih)
-      ?+  +.cod  peek-resp/cod
-        %nice  %peek-nice
-        %mean  
-          =+  are=((soft ares) |2.sih)
-          ?~  are  %peek-mean
-          ?~  u.are  %peek-done
-          ~&  >  p.u.u.are
-          |-
-          ?~  q.u.u.are  %peek-mean
-          ~>  %slog.`rose/[~ "! " ~]^[i.q.u.u.are]~
-          $(q.u.u.are t.q.u.u.are)
-      ==
-  :_(+> ?+(&2.sih ~ %mean [ost %pass / %g %cide %$]~))
---
diff --git a/base/fap/poke/core.hook b/base/fap/poke/core.hook
deleted file mode 100644
index 602c6843e..000000000
--- a/base/fap/poke/core.hook
+++ /dev/null
@@ -1,30 +0,0 @@
-::  Poke path [mark *] || Poke ship path [mark *]. Send message to an app.
-!:
-::::
-  ::
-|_  [hide ~]
-++  mess  ,[p=path q=[@ *] ~]
-++  pock-poke-args
-  |=  [ost=bone @ a=type b=?(mess [her=ship mess])]
-  =-  :_(+>.$ [ost %pass / %g %mess -]~)
-  ^-  [p=[ship path] q=ship r=cage]
-  ?^  |2.b  [[her p]:b our -.q.b (slot 29 [a b])]       ::  +.&3
-  [[our p.b] our -.q.b (slot 13 [a b])]                 ::  +.&2
-::
-++  pour
-  |=  [ost=bone * sih=*]
-  ~&  =+  cod=(,[term term] [&1 &2]:sih)
-      ?+  +.cod  poke-resp/cod
-        %nice  %poke-nice
-        %mean  
-          =+  are=((soft ares) |2.sih)
-          ?~  are  %poke-mean
-          ?~  u.are  %poke-nil-mean
-          ~&  >  p.u.u.are
-          |-
-          ?~  q.u.u.are  %poke-mean
-          ~>  %slog.`rose/[~ "! " ~]^[i.q.u.u.are]~
-          $(q.u.u.are t.q.u.u.are)
-      ==
-  :_(+> [ost %pass / %g %cide %$]~)
---
diff --git a/base/fap/pope/core.hook b/base/fap/pope/core.hook
deleted file mode 100644
index 7b129eb51..000000000
--- a/base/fap/pope/core.hook
+++ /dev/null
@@ -1,47 +0,0 @@
-::  Pope, generate key for carrier
-::
-::::  /hook/core/pope/app
-  ::
-/+    sh-utils
-!:
-::::
-  ::
-|%
-++  gilt  $%([%tang (list tank)] [%prompt @t prom @t])
-++  sign
-  $%  [%t %wake ~]
-      [%g $%([%nice ~] [%rush %txt p=cord])]
-  ==
---
-!:
-::::
-  ::
-=+  cryp=bruw                         ::  XX  change to ec2 ++brew eventually
-|_  [hide who=@p fra=@t]
-++  peer  ,_`.
-++  poke--args
-  |=  [@ @ who=ship ~]
-  ?>  ?=(%czar (clan who))
-  =.  ^who  who
-  =-  %.(+<.$ (add-nice (gate-bang ,_noe (return git))))
-  :-  noe=[%g %show our^+.imp our /in/[-.imp]]             ::  request input
-  git=prompt/['passphrase: ' %pass '']
-::
-++  return  |=(a=gilt (add-output +> rush/a ,_`+>))
-++  pour
-  |=  [@ * sih=*]
-  =+  sih=;;(sign sih)
-  ?-  -.sih
-    %g  ?.  ?=(%rush +<.sih)  `+>.$
-        =.  fra  p.sih
-        =-  %.(+<.$ (gate-bang ,_noe (return tang/~[leaf/msg])))
-        :-  noe=[%t %wait (add ~s1 lat)]                ::  set print timeout
-        msg="generating carrier {(scow %p who)} (#{(scow %ud who)})"
-  ::
-    %t  =-  %.(+<.$ (add-exit (return tang/-)))
-        =+  bur=(shax (add who (shax fra)))
-        =+  arc=(cryp 2.048 bur)
-        :~  leaf/"generator: {(scow %uw bur)}"
-            leaf/"fingerprint: {(scow %uw fig:ex:arc)}"
-  ==    ==
---
diff --git a/base/fap/reboot/core.hook b/base/fap/reboot/core.hook
deleted file mode 100644
index 49d8c3c92..000000000
--- a/base/fap/reboot/core.hook
+++ /dev/null
@@ -1,37 +0,0 @@
-::  Reboot %zuse and all kernel vanes
-::
-::::  /hook/core/reboot/app
-  ::
-/+    sh-utils
-!:
-::::
-  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke--args
-  %^  add-output  .
-    rush/tang/[leaf/"done"]~
-  %+  args-into-resp  .
-  |=  arg=~
-  %-  turn   
-  :_  |=  [tip=@tasD nam=@tas]
-      =+  pax=[(scot %p our.hid) %arvo (scot %da lat.hid) nam %hoon ~]
-      [%veer tip pax (,@ +:.^(%cx pax))]
-  ^-  (list ,[p=@tas q=@tas])
-  :~  [%$ %zuse]
-      [%a %ames]
-      [%c %clay]
-      [%d %dill]
-      [%e %eyre]
-      [%f %ford]
-      [%g %gall]
-      [%t %time]
-  ==
-++  pour
-  %+  gate-bang
-    =+  pax=/(scot %p our.hid)/=/(scot %da lat.hid)/==count/txt
-    =+  nuf=(file pax)
-    =+  num=?~(nuf 0 +((fall (slaw %ud (,@t u.nuf)) 0)))
-    ,_[%c %info our.hid (foal pax num)]                 ::  touch clay to reload apps
-  ,_`.
---
diff --git a/base/fap/reload/core.hook b/base/fap/reload/core.hook
deleted file mode 100644
index 6ddca0341..000000000
--- a/base/fap/reload/core.hook
+++ /dev/null
@@ -1,30 +0,0 @@
-::  Reload kernel vanes, specified by name or letter
-::
-::::  /hook/core/reload/app
-  ::
-/+    sh-utils
-!:
-::::
-  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke--args
-  %^  add-output  .
-    rush/tang/[leaf/"done"]~
-  %+  args-into-resp  .
-  |=  all=(list ,@tas)
-  %+  turn  all
-  =+  ark=(arch .^(%cy /(scot %p our.hid)/main/(scot %da lat.hid)/arvo))
-  =+  van=(~(tap by r.ark))
-  |=  nam=@tas
-  =.  nam
-    ?.  =(1 (met 3 nam))
-      nam
-    =+  ^-  zaz=(list ,[p=span ~])
-        (skim van |=([a=term ~] =(nam (end 3 1 a))))
-    ?>  ?=([[@ ~] ~] zaz)
-    `term`p.i.zaz
-  =+  tip=(end 3 1 nam)
-  =+  pax=[(scot %p our.hid) %main (scot %da lat.hid) %arvo nam ~]
-  [%veer ?:(=('z' tip) %$ tip) pax (,@ .^(%cx (welp pax /hoon)))]
---
diff --git a/base/fap/reset/core.hook b/base/fap/reset/core.hook
deleted file mode 100644
index cc78b3cf1..000000000
--- a/base/fap/reset/core.hook
+++ /dev/null
@@ -1,38 +0,0 @@
-::  Reset: recompile arvo, from hoon/hoon up
-!:
-::::
-  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke-reset-args
-  |=  [ost=bone you=ship arg=$|(~ [_| ~])]
-  :_  +>.$
-  =+  top=`path`/(scot %p our.hid)/arvo/(scot %da lat.hid)
-  :^    [ost %give %nice ~]
-      [ost %pass ?~(arg /refresh /) %t %wait lat.hid]
-    [ost %give %vega (weld top `path`/hoon)]
-  %+  turn
-    ^-  (list ,[p=@tas q=@tas])
-    :~  [%$ %zuse]
-        [%a %ames]
-        [%c %clay]
-        [%d %dill]
-        [%e %eyre]
-        [%f %ford]
-        [%g %gall]
-        [%t %time]
-    ==
-  |=  [p=@tas q=@tas]
-  =+  pax=`path`(welp top /[q])
-  =+  txt=((hard ,@) .^(%cx (welp pax /hoon)))
-  [ost %give %veer p pax txt]
-++  pour
-  |=  [ost=bone pax=path *]
-  :_  +>.$  
-  ?~  pax  ~
-  :_  ~
-  =+  paf=/(scot %p our.hid)/=/(scot %da lat.hid)/==count/txt
-  =+  nuf=(file paf)
-  =+  num=?~(nuf 0 +((fall (slaw %ud (,@t u.nuf)) 0)))
-  [ost %pass /touch %c %info our.hid (foal paf num)]
---
diff --git a/base/fap/rm/core.hook b/base/fap/rm/core.hook
deleted file mode 100644
index d706aa111..000000000
--- a/base/fap/rm/core.hook
+++ /dev/null
@@ -1,18 +0,0 @@
-!:
-::::
-  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke-rm-args
-  |=  [ost=bone you=ship pax=path ~]
-  :_  +>.$
-  :*  [ost %pass /rm %c %info our.hid (fray pax)]
-      [ost %pass / %g %cide %$]
-      [ost %give %nice ~]
-      %+  turn  (~(tap by sup.hid))
-      |=  [ost=bone *]
-      :^  ost  %give  %rush
-      :-  %tang  :_  ~
-      leaf/"removed"
-  ==
---
diff --git a/base/fap/shell/core.hook b/base/fap/shell/core.hook
deleted file mode 100644
index 03219aa83..000000000
--- a/base/fap/shell/core.hook
+++ /dev/null
@@ -1,569 +0,0 @@
-::    Shell
-::
-::::  /hook/core/shell/app
-  ::
-/?    314
-/-    term-line, kyev
-/=    pit  /~  !>(+)                                    ::  kernel vase
-::
-::::  structures
-  !:
-|%                                                      ::
-++  axle                                                ::
-  $:  %1                                                ::  version
-      tiv=?                                             ::  typing?
-      wit=[p=@u q=(map ,@u coma)]                       ::  waiting commands
-      pid=@u                                            ::  next process id
-      pax=_`path`/=base=/try                            ::  working directory
-      act=(unit span)                                   ::  active child
-      pip=(jar span span)                               ::  pipe out->in
-      pop=(jar span span)                               ::  pipe in->out
-      pot=(map span ,[cord prom cord])                  ::  prompts
-      var=(map term vase)                               ::  variables
-  ==                                                    ::
-++  gift                                                ::
-  $%  [%rush p=gilt]                                    ::
-      [%init p=@p]                                      ::
-      [%logo p=@]                                       ::
-      [%mean p=ares]                                    ::
-      [%nice ~]                                         ::
-      [%meta p=vase]                                    ::
-      [%sage p=path q=*]                                ::
-      [%verb ~]                                         ::
-      [%veer p=@ta q=path r=@t]                         ::
-      [%vega p=path]                                    ::
-  ==                                                    ::
-++  gilt                                                ::
-  $%  [%term-line p=term-line]                          ::
-      [%txt p=cord]                                     ::
-      [%type p=?]                                       ::
-  ==                                                    ::
-++  glas  ?(%out [%in p=cord] [%active p=cord])         ::
-++  hapt  ,[p=ship q=path]                              ::
-++  move  ,[p=bone q=(mold note gift)]                  ::
-++  note                                                ::
-  $%  $:  %c                                            ::
-  $%  [%info p=@p q=toro]                               ::
-      ==  ==                                            ::
-      $:  %g                                            ::
-  $%  [%cide p=span]                                    ::
-      [%show p=hapt q=ship r=path]                      ::
-      [%sire p=term q=span]                             ::
-      [%mess p=hapt q=ship r=cage]                      ::
-      [%meta p=vase]                                    ::
-      [%nuke p=hapt q=ship]                             ::
-      [%took p=hapt q=ship]                             ::
-  ==  ==  ==                                            ::
-++  mand  ,[p=term q=(list twig)]                       ::  name and arguments
-++  coma                                                ::
-  $%  [%run p=(list mand) q=mand]                       ::  pipe into
-      [%end p=(each ,@u cord)]                          ::  kill pid/name
-      [%path p=path]                                    ::  chdir
-      [%del p=path]                                     ::  rm file
-      [%ins p=path q=(unit twig)]                       ::  add file
-      [%mut p=path q=(unit twig)]                       ::  change file
-      [%hoon p=twig]                                    ::  eval expression
-      [%comt ~]                                         ::  comment
-      [%var p=term q=twig]                              ::  set variable
-      [%rvar p=term]                                    ::  unset variable
-      [%help p=term]                                    ::  info about command
-  ==                                                    ::
-++  sign                                                ::
-  $%  $:  %g                                            ::
-  $%  [%gone p=hapt]                                    ::
-      [%init p=@p]                                      ::
-      [%dumb ~]                                         ::
-      [%mean p=ares]                                    ::
-      [%nice ~]                                         ::
-      [%rush p=mark q=*]                                ::
-      [%rust p=mark q=*]                                ::
-      [%sage p=path q=*]                                ::
-      [%verb ~]                                         ::
-      [%veer p=@ta q=path r=@t]                         ::
-      [%vega p=path]                                    ::
-  ==  ==  ==                                            ::
---
-::
-::::  parsers
-  !:
-|%
-++  maybe  |*(fel=_rule (cook |*(a=(unit) (fall a ~)) (opts fel)))
-++  opts                                                ::  parse unit
-  |*  fel=_rule
-  ;~  pose
-    (cook some fel)
-    (easy ~)
-  ==
-::
-++  from                                                ::  parse door
-  =+  tol=`?(0 1 2)`%2                                  ::  wide, tallish, tall
-  |_  [pax=path lat=time]
-  ++  rail                                              ::  build from wide/tall
-    |*  [wid=_rule wif=_rule tal=_rule]
-    ?~  tol  wid
-    =-  ;~(pose wif wid)
-    ^=  wif
-    ?:  ?=(1 tol)  wif
-    ;~(pose tal wif)
-  ::
-  ++  rais  |*([wid=_rule tal=_rule] (rail wid wid tal))
-  ::
-  ++  parse                                             ::  top level
-    ^-  $+(nail (like coma))
-    =+  paf=pax
-    =.  pax  ?.(&(?=([@ @ @ *] pax) =('0' &3.pax)) pax pax(&3 (scot da/lat)))
-    %+  ifix  [(star ace) gaw]
-    ;~  pose
-      (stag %run ;~(plug (star ;~(sfix (task(tol %0) bar) ace)) (task col)))
-      (stag %end ;~(pfix col sem ;~(pose (stag %& dem) (stag %| sym))))
-      (stag %del ;~(pfix hep (plus ace) loca))
-      (stag %mut ;~(pfix col (plus ace) ;~(plug loca (opts expg))))
-      (stag %ins ;~(pfix lus (plus ace) ;~(plug loca (opts expg))))
-      (stag %help ;~(pfix wut ace ;~(pfix col sym)))
-      (stag %path (full ;~(sfix loca(pax paf) (star ace))))
-      (stag %var ;~(plug ;~(pfix tis sym) expg))
-      (stag %rvar ;~(pfix ;~(plug tis tis) sym))
-      (stag %hoon expr)
-      (stag %comt ;~(pfix col col (cold ~ (star prn))))
-      (stag %comt (easy ~))
-    ==
-  ::
-  ++  expg  (rais ;~(pfix ace expr(tol %1)) ;~(pfix gap expr))
-  ++  expr  (rais [wide tall]:(vang | pax))
-  ++  loca  %+  sear  ;~(biff plex:(vang | pax) vabe)   ::  path in %clay
-            [;~(pose rood ;~(simu cen scat))]:(vang | pax)
-  ++  vabe  |=(a=path ?~((tome a) ~ (some a)))          ::  check valid beam
-  ++  args                                              ::  task arguments
-    %^  rail
-        (ifix sel^ser (most ace expr))
-      (plus ;~(pfix ace expr))
-    ;~(sfix (plus ;~(pfix gap expr)) ;~(plug gap duz))
-  ::
-  ++  task  |*(fel=_rule ;~(pfix fel ;~(plug sym (maybe args))))
-  ::
-  --
---
-::
-::::  per event
-  !:
-|%
-++  ve
-  |=  [hid=hide ost=bone axle]
-  =*  vat  +<+>
-  =|  mow=(list move)
-  |%
-  ++  abet
-    ^-  [(list move) axle]
-    [(flop mow) vat]
-  ::
-  ++  blab
-    |=  mof=(list move)
-    +>.$(mow (welp (flop mof) mow))
-  ::
-  ++  chew-file
-    |=  [paf=path mor=$|(cord toro)]
-    %-  blab
-    ^-  (list move)
-    ?@  mor
-      (print palm/[" " ~ ~ ~]^~[leaf/(trip mor) (dank:ut paf)])
-    [ost %pass writ/paf %c %info our.hid mor]~
-  ::
-  ++  cubs                                              ::  tasks with open /in
-    %-  sort  :_  |=([a=span b=span] (lth (slav %ud a) (slav %ud b)))
-    ^-  (list span)
-    %+  murn  (~(tap by cub.hid))
-    |=  [a=span @]
-    ?.(=([~ ~] (~(get by pop) a)) ~ (some a))
-  ::
-  ++  eat
-    |=  [you=ship com=coma]
-    ?-  -.com
-      %comt  +>.$
-      %del   (eat-del +.com)
-      %end   (eat-end +.com)
-      %hoon  (eat-hoon +.com)
-      %ins   (eat-ins +.com)
-      %mut   (eat-mut +.com)
-      %help  (eat-help +.com)
-      %path  (eat-path +.com)
-      %run   (eat-run you +.com)
-      %rvar  (eat-rvar +.com)
-      %var   (eat-var +.com)
-    ==
-  ::
-  ++  eat-del
-    |=  paf=path
-    ^+  +>
-    %+  chew-file  paf
-    ?~  (file paf)  '! none'
-    (fray paf)
-  ::
-  ++  eat-end                                           ::  XX  clean up state
-    |=  poc=(each ,@u cord)
-    ^+  +>
-    ?-    -.poc
-        %&
-      =+  cil=(scot %ud p.poc)
-      =+  cin=(trip (~(got by cub.hid) cil))
-      %-  blab
-      %+  welp
-        (kill cil)
-      (print leaf/"- :{cin}({(trip cil)})")
-    ::
-        %|
-      =+  ^-  moz=(list move)
-          %-  zing
-          %+  turn  (~(tap by cub.hid))
-          |=  [a=span b=term]
-          ?.  =(b p.poc)  ~
-          (kill a)
-      %-  blab  %+  welp  moz
-      (print leaf/"-{<(lent moz)>} :{(trip p.poc)}")
-    ==
-  ::
-  ++  eat-hoon
-    |=  gen=twig
-    ^+  +>
-    %+  with  gen  |=  rez=vase
-    (blab (print (sell rez)))
-  ::
-  ++  eat-ins
-    |=  [paf=path gen=(unit twig)]
-    ^+  +>
-    ?^  (file paf)  (chew-file paf '! exists')
-    %+  with  (fall gen [%bczp atom/%t])
-    |=  new=vase
-    =+  for=((hard mark) -:(flop paf))
-    (chew-file paf (foal paf for new))
-  ::
-  ++  eat-mut
-    |=  [paf=path gen=(unit twig)]
-    ^+  +>
-    =+  fel=(file paf)  
-    ?^  fel
-      ?~  gen
-        (blab (stray (crip ": {(spud paf)} {<(,@t u.fel)>}"))) 
-      %+  with  u.gen  |=  new=vase
-      =+  for=((hard mark) -:(flop paf))
-      (chew-file paf (foal paf for new))
-    =+  ark=;;(arch .^(%cy paf))
-    ?-  r.ark
-      ~        (chew-file paf '! none')
-      [^ ~ ~]  $(paf (welp paf /[p.n.r.ark]))
-      *        (chew-file paf '! many')
-    ==
-  ::
-  ++  eat-help
-    |=  app=term
-    ^+  +>
-    %-  blab  %-  print
-    ^-  tank
-    =+  rup=/(scot %p our.hid)/main/(scot %da lat.hid)
-    =+  paf=`path`(welp rup /app/[app]/core/hook)
-    =+  src=(file paf)
-    ?.  ?=([~ @t] src)
-      leaf/"app {} does not exist"
-    =+  cot=;~(pfix col col (plus ace) (star prn))
-    =+  led=(cot 1^1 (trip u.src))
-    ?^  q.led
-      leaf/"::  {(wonk led)}"
-    palm/[" " ``~]^~[leaf/"no leading comment in" >paf<]
-  ::
-  ++  eat-path
-    |=  paf=path
-    ^+  +>
-    =.  pax  paf
-    (blab (print leaf/"=% {(spud paf)}"))
-  ::
-  ++  eat-run
-    |=  [you=ship mud=(list mand) mad=mand]
-    ^+  +>
-    ::  =.  +>.$  (blab (print leaf/"+ :{(trip p.mad)}"))
-    ?.  =-  (~(has by r:(arch -)) %core)
-        .^(%cy /(scot %p our.hid)/main/(scot %da lat.hid)/app/[p.mad])
-      (blab (print leaf/"app {} does not exist"))
-    =+  liz=`(list mand)`(welp mud mad ~)
-    %+  with  [%clsg (turn liz |=(mand [%clsg q]))]  
-    |=  arg=vase
-    =|  inp=(unit span)
-    |-
-    ?~  liz  ..eat-run
-    =+  cil=(scot %ud pid)
-    %_    $
-        liz  t.liz
-        arg  (slot 3 arg)
-        pid  +(pid)
-        pip  ?~  inp  pip  (~(add ja pip) cil u.inp)
-        pop  ?~  inp  pop  (~(add ja pop) u.inp cil)
-        inp  `cil
-        mow
-      =<  mow                         ::  XX  side effects?
-      %-  blab
-      =+  yon=[our.hid cil imp.hid]
-      =+  mez=[(cat 3 p.i.liz '-args') (slot 2 arg)]
-      ^-  (list move)
-      :~  [ost %pass /child/[cil]/fork %g %sire p.i.liz cil]
-          [ost %pass /child/[cil]/out %g %show yon you /out]
-          [ost %pass /child/[cil]/main %g %meta !>([%mess yon you mez])]
-      ==
-    ==
-  ::
-  ++  eat-rvar
-    |=  vor=term
-    ^+  +>
-    =+  mod=(~(has by var) vor)
-    =.  var  (~(del by var) vor)
-    (blab (print leaf/"{?:(mod "var gone" "no var")} {}"))
-  ::
-  ++  eat-var
-    |=  [vor=term gen=twig]
-    ^+  +>
-    %+  with  gen  |=  new=vase
-    =+  old=(~(get by var) vor)
-    =+  mod=?~(old "new var" ?:(=(new u.old) "same var" "changed"))
-    =.  var  (~(put by var) vor new)
-    (blab (print leaf/"{mod} {}"))
-  ::
-  ++  with
-    |=  [gen=twig coz=$+(vase _..with)]
-    %-  coz
-    %-  slap  :_  gen
-    %+  slop
-      %+  slop  [[%face %our p] q]:!>(our.hid)
-      %+  slop  [[%face %tym p] q]:!>(lat.hid)
-      [[%face %eny p] q]:!>(eny.hid)
-    %+  roll  (~(tap by var))
-    =<  .(q pit)
-    |=  [[n=term v=vase] q=vase]
-    (slop [[%face n p.v] q.v] q)
-  ::
-  ++  kill
-    |=  cil=span
-    ^-  (list move)
-    :~  [ost %pass /child/[cil]/fork %g %cide cil]
-        ::[ost %pass /child/[cil]/out %g %nuke [our.hid cil imp.hid] our.hid]
-    ==
-  ::
-  ++  next-act                                          ::  rotate active task
-    =+  ^-  nex=(unit span)
-        =+  opt=[i=`(unit span)`~ t=(turn cubs |=(a=span `(unit span)`[~ a]))]
-        |-
-        ?~  t.opt  ~
-        ?:  =(act i.opt)
-          i.t.opt
-        $(opt t.opt)
-    ?.  tiv  +(act nex)
-    %-  blab(act nex) 
-    %+  weld
-      ?~  nex  ~
-      (spam /active/[u.nex] %rush %type %&)
-    ?~  act  ~
-    (spam /active/[u.act] %rush %type %|)
-  ::
-  ++  peer
-    |=  [you=ship gal=glas]
-    ^+  +>
-    ?@  gal
-      %_  +>.$
-        mow  :_(mow [ost %give %rush %term-line prompt ~ ~])
-      ==
-    ?:  ?=(%active -.gal)
-      (blab [ost %give %rush %type %|] ~)
-    ?.  (~(has by cub.hid) p.gal)  +>.$
-    ?:  (~(has by pop) p.gal)  +>.$
-    =:  act  `p.gal
-        pop  (~(put by pop) p.gal ~)                      ::  .=(~ standard-in)
-      ==
-    (blab ping)
-  ::
-  ++  ping  (print-vase !>(*tang))
-  ++  poke-kyev
-    |=  [you=ship key=kyev]
-    ^+  +>
-    ?:  ?=([~ @] key)  (poke-txt you q.key)             ::  simple keypress ?
-    ?>  ?=([[%ctrl ~ ~] @t] key)
-    ?+    q.key
-        %+  blab
-          [ost %give %nice ~]
-        (print leaf/"no command \\{(trip q.key)}")
-      %d  ?~  act
-            %^    blab
-                [ost %give %nice ~]
-              [ost %give %logo ~]
-            ~
-          (eat-end:next-act %& (slav %ud u.act))
-      %g  =+  =-  tak=rose/[" " "[" "]"]^(turn (~(tap by cub.hid)) -)
-              =+  c=(sa cubs)
-              |=  [a=span b=term]
-              :-  %leaf
-              =+  (trip (rap 3 b '(' a ')' ~))
-              ?.((~(has in c) a) - ?.(=([~ a] act) ['+' -] ['*' -]))
-          (blab [ost %give %nice ~] (print tak))
-      %x  =.  +>.$  next-act
-          (blab [ost %give %nice ~] ping)
-    ==
-  ::
-  ++  poke-txt                                            ::  handle command
-    |=  [you=ship txt=cord]
-    ^+  +>
-    ?^  act                                               ::  pipe to child
-      %+  blab
-        [ost %give %nice ~]
-      (spam /in/[u.act] %rush %txt txt)
-    =+  pas=((full ~(parse from pax lat.hid)) [1 1] (trip txt))
-    ?~  q.pas
-      =-  (blab (weld (stray txt) (print leaf/-)))
-      "}>"
-    =+  com=(wonk pas)
-    =>  .(+>.$ (eat you com))
-    =.  +>.$  (blab (stash txt))
-    +>.$(mow :_(mow [ost %give %nice ~]))
-  ::
-  ++  poke-type
-    |=  [you=ship tiv=?]
-    ^+  +>
-    =.  tiv  tiv
-    ?^  act
-      %+  blab
-        [ost %give %nice ~]
-      (spam /active/[u.act] %rush %type tiv)
-    (blab [ost %give %nice ~] ~)
-  ::
-  ++  print  |=(a=tank (print-vase !>(`tang`[a ~])))
-  ++  print-vase
-    |=  tan=vase ::  [p=p:!>(*tang) q=*]
-    ^-  (list move)
-    %^  spam  /out  %meta
-    :(slop !>(%rush) !>(%term-line) !>(prompt) !>(~) tan)
-  ::
-  ++  prompt
-    ^-  [p=cord q=prom r=cord]
-    ?^  act
-      =+  por=(~(get by pot) u.act)
-      ?^  por  u.por
-      [(rap 3 (~(got by cub.hid) u.act) '(' u.act ') ' ~) %text '']
-    :_  [%text '']
-    ?.  &(?=([@ @ @ *] pax) =('0' &3.pax))
-      (rsh 3 1 (cat 3 (spat pax) '> '))
-    (rap 3 &1.pax '/' &2.pax '=' ?~(|3.pax ~['> '] ~[(spat |3.pax) '> ']))
-  ::
-  ++  purr
-    |=  [cil=span fom=?(%fork %out %main) typ=type sih=sign]
-    ^+  +>
-    ?<  ?=(?(%init %sage %verb %veer %vega) +<.sih)
-    ?-    fom
-        %fork
-      ?>  ?=(%gone +<.sih)
-      =.  mow  :_(mow [ost %give %nice ~])
-      ?.  =(act [~ cil])  +>.$
-      =.  act  ~
-      (blab ping)
-    ::
-        %main
-      ?>  ?=(?(%nice %mean) +<.sih)
-      %+  blab
-        [ost %give +.sih]
-      ?.  ?=(%mean +<.sih)  
-        ping 
-      (welp ping (kill cil))
-    ::
-        %out
-      ?.  ?=(?(%rust %rush) +<.sih)  +>.$
-      =>  .(+<.sih %rush)
-      ?:  ?=(%prompt p.sih)
-        ?^  (~(get ja pip) cil)  +>.$
-        =.  pot  (~(put by pot) cil (,[cord prom cord] q.sih))
-        (blab ping)
-      %-  blab
-      ?:  (~(has by pip) cil)
-        =+  inp=(~(get ja pip) cil)
-        |-  
-        ?~  inp  ~
-        %+  weld  $(inp t.inp)
-        (spam /in/[i.inp] %meta (slot 3 typ sih))
-      %-  print-vase
-      ?+  p.sih 
-        !>([(sell (slot 15 [typ sih]))]~)
-          %tang  (slam !>(flop) p:!>(*tang) q.sih)
-          %txt
-        ?^  q.sih  !!                                   ::  move to vase space?
-        !>([leaf/(trip q.sih)]~)
-      ==
-    ==
-  ::
-  ++  spam
-    |=  [pax=path gip=gift]
-    ^-  (list move)
-    %+  turn
-      (~(tap in (~(get ju pus.hid) pax)))
-    |=(a=bone [a %give gip])
-  ::
-  ++  stash
-    |=  a=cord
-    %^  spam  /out  %meta
-    !>([%rush %term-line `term-line`[prompt [a]~ ~]])
-  ::
-  ++  stray
-    |=  a=cord
-    %^  spam  /out  %meta
-    =+  pro=prompt
-    !>([%rush %term-line `term-line`[pro(r a) ~ ~]])
-  --
---
-::
-::::  formal interface
-  !:
-|_  [hid=hide vat=axle]
-::
-++  peer                                                ::  handle subscription
-  |=  [ost=bone you=ship pax=path]
-  ^-  [(list move) _+>]
-  ?~  pax  `+>.$
-  ?.  ?=(?(%in %out %active) i.pax)  `+>.$
-  =+  ^=  gal
-      ?:  ?=(%out i.pax)  %out
-      ?:  ?=(%in i.pax)   [%in ?<(?=(~ t.pax) i.t.pax)]
-      [%active ?<(?=(~ t.pax) i.t.pax)]
-  =+  abet:(peer:(ve hid ost vat) you gal)
-  [-< +>.$(vat ->)]
-::
-++  poke-kyev                                           ::  handle key event
-  |=  [ost=bone you=ship key=kyev]
-  ^-  [(list move) _+>]
-  =+  abet:(poke-kyev:(ve hid ost vat) you key)
-  [-< +>.$(vat ->)]
-::
-++  poke-txt                                            ::  handle command
-  |=  [ost=bone you=ship txt=cord]
-  ^-  [(list move) _+>]
-  =+  abet:(poke-txt:(ve hid ost vat) you txt)
-  [-< +>.$(vat ->)]
-::
-++  poke-type                                           ::  handle command
-  |=  [ost=bone you=ship tiv=?]
-  ^-  [(list move) _+>]
-  =+  abet:(poke-type:(ve hid ost vat) you tiv)
-  [-< +>.$(vat ->)]
-::
-++  purr
-  |=  [ost=bone pax=path typ=type sih=sign]
-  ^-  [(list move) _+>]
-  ?:  ?=(%init +<.sih)                                  ::  vomit
-    [[ost %give +.sih]~ +>.$]
-  ?:  ?=(%dumb +<.sih)                                  ::  sleep
-    [~ +>.$]
-  ?:  ?=(%sage +<.sih)                                  ::  vomit
-    [[ost %give +.sih]~ +>.$]
-  ?:  ?=(%verb +<.sih)                                  ::  vomit
-    [[ost %give +.sih]~ +>.$]
-  ?:  ?=(%veer +<.sih)                                  ::  vomit
-    [[ost %give +.sih]~ +>.$]
-  ?:  ?=(%vega +<.sih)                                  ::  vomit
-    [[ost %give +.sih]~ +>.$]
-  ?~  pax  ~&  %no-path  !!
-  ?>  ?=([%child span ?(%fork %out %main) ~] pax)
-  =^  moz  vat  abet:(purr:(ve hid ost vat) i.t.pax i.t.t.pax typ sih)
-  :_  +>.$
-  ?.  ?=(%rush +<.sih)  moz
-  [[ost %pass pax %g %took [our.hid i.t.pax imp.hid] our.hid] moz]
---
diff --git a/base/fap/sole/core.hook b/base/fap/sole/core.hook
deleted file mode 100644
index cf5248a6b..000000000
--- a/base/fap/sole/core.hook
+++ /dev/null
@@ -1,643 +0,0 @@
-::                                                      ::  ::
-::::  /hook/core/sole/app                               ::  ::
-  ::                                                    ::  ::
-/?  314                                                 ::  zuse version
-/-  *sole                                               ::  console structures
-/+  sole                                                ::  console library
-::                                                      ::  ::
-::::                                                    ::  ::
-  !:                                                    ::  ::
-=>  |%                                                  ::  data structures
-    ++  house                                           ::  all state
-      $:  bin=(map bone source)                         ::  input devices
-      ==                                                ::
-    ++  source                                          ::  input device
-      $:  edg=_79                                       ::  terminal columns
-          off=@ud                                       ::  window offset
-          kil=(unit (list ,@c))                         ::  kill buffer
-          apt=(list gill)                               ::  application ring
-          maz=master                                    ::  master window
-          feg=(map gill target)                         ::  live applications
-          mir=(pair ,@ud (list ,@c))                    ::  mirrored terminal
-      ==                                                ::
-    ++  master                                          ::  master buffer
-      $:  liv=?                                         ::  master is live
-          tar=target                                    ::  master target
-      ==                                                ::
-    ++  history                                         ::  past input
-      $:  pos=@ud                                       ::  input position
-          num=@ud                                       ::  number of entries
-          lay=(map ,@ud (list ,@c))                     ::  editing overlay
-          old=(list (list ,@c))                         ::  entries proper
-      ==                                                ::
-    ++  search                                          ::  reverse-i-search
-      $:  pos=@ud                                       ::  search position
-          str=(list ,@c)                                ::  search string
-      ==                                                ::
-    ++  target                                          ::  application target
-      $:  ris=(unit search)                             ::  reverse-i-search
-          hit=history                                   ::  all past input
-          pom=sole-prompt                               ::  static prompt
-          inp=sole-command                              ::  input state
-      ==                                                ::
-    ++  ukase                                           ::  master command
-      $%  [%add p=(list gill)]                          ::  add agents
-          [%del p=(list gill)]                          ::  delete agents
-      ==                                                ::
-    ++  gift                                            ::  out result <-$
-      $%  [%mean p=ares]                                ::  
-          [%nice ~]                                     ::
-          [%rush %dill-blit dill-blit]                  ::
-      ==                                                ::
-    ++  sign-gall                                       ::  sign from %gall
-      $%  [%mean p=ares]                                ::
-          [%nice ~]                                     ::
-          [%rush %sole-effect sole-effect]              ::
-      ==                                                ::
-    ++  sign                                            ::  in result $<-
-      $%  [%g sign-gall]                                ::
-      ==                                                ::
-    ++  move  ,[p=bone q=(mold note gift)]              ::
-    ++  note-gall                                       ::  note to %gall
-      $%  [%mess p=[p=ship q=path] q=ship r=cage]       ::
-          [%nuke p=[p=ship q=path] q=ship]              ::
-          [%show p=[p=ship q=path] q=ship r=path]       ::
-          [%took p=[p=ship q=path] q=ship]              ::
-      ==                                                ::
-    ++  note                                            ::  out request $->
-      $%  [%g note-gall]                                ::
-      ==                                                ::
-    --                                                  ::
-|_  $:  hid=hide                                        ::  system state
-        house                                           ::  program state
-    ==                                                  ::
-++  sp
-  |%  ++  sp-ukase
-        %+  knee  *ukase  |.  ~+
-        ;~  pose
-          (stag %add ;~(pfix lus sp-gills))
-          (stag %del ;~(pfix hep sp-gills))
-        ==
-      ::
-      ++  sp-gills
-        ;~  pose
-          (most ;~(plug com ace) sp-gill)
-          %+  cook
-            |=  a=ship
-            [[a %dojo] [a %talk] ~]
-          ;~(pfix sig fed:ag)
-        ==
-      ::
-      ++  sp-gill
-        ;~  pose
-          (stag our.hid sym)
-          ;~  plug
-            ;~(pfix sig fed:ag)
-            ;~(pfix fas sym)
-          ==
-        ==
-  --
-++  se                                                  ::  per source
-  |_  $:  [moz=(list move) biz=(list dill-blit)]
-          [her=ship ost=bone] 
-          source
-      ==
-  ++  se-abet                                           ::  resolve
-    :_  %_(+> bin (~(put by bin) ost +<+>))
-    %+  welp  (flop moz) 
-    ^-  (list move)
-    ?~  biz  ~
-    [ost %give %rush %dill-blit ?~(t.biz i.biz [%mor (flop biz)])]~
-  ::
-  ++  se-belt                                           ::  handle input
-    |=  bet=dill-belt
-    ^+  +>
-    ?:  ?=(%rez -.bet)
-      +>(edg (dec p.bet))
-    ?:  ?=(%yow -.bet)
-      (se-link p.bet)
-    =+  gyl=?^(apt i.apt [~zod %$])
-    =+  taz=~(. ta [& liv.maz gyl] ?:(liv.maz tar.maz (~(got by feg) gyl)))
-    =<  ta-abet
-    ?-  -.bet
-      %aro  (ta-aro:taz p.bet)
-      %bac  ta-bac:taz
-      %cru  (ta-cru:taz p.bet q.bet)
-      %ctl  (ta-ctl:taz p.bet)
-      %del  ta-del:taz
-      %met  (ta-met:taz p.bet)
-      %ret  ta-ret:taz
-      %txt  (ta-txt:taz p.bet)
-    ==
-  ::
-  ++  se-drop                                           ::  passive drop
-    |=  gyl=gill
-    ^+  +>
-    =<  se-prom
-    ?>  (~(has by feg) gyl)
-    %_  +>
-      feg      (~(del by feg) gyl)
-      apt      (skip apt |=(a=gill =(gyl a)))
-      liv.maz  ?~(apt & liv.maz)
-    ==
-  ::
-  ++  se-join                                           ::  add connection
-    |=  gyl=gill
-    ^+  +>
-    =<  se-prom
-    ?:  (~(has by feg) gyl)
-      (se-blit %bel ~)
-    +>(liv.maz |, apt [gyl apt], feg (~(put by feg) gyl *target))
-  ::
-  ++  se-nuke                                           ::  active drop
-    |=  gyl=gill
-    ^+  +>
-    (se-drop:(se-send(liv.maz |) gyl %nuke [p.gyl ~[q.gyl]] her) gyl)
-  ::
-  ++  se-like                                           ::  act in master
-    |=  kus=ukase
-    ?-    -.kus
-        %add  
-      |-  ^+  +>.^$
-      ?~  p.kus  +>.^$
-      $(p.kus t.p.kus, +>.^$ (se-link i.p.kus))
-    ::
-        %del
-      |-  ^+  +>.^$
-      ?~  p.kus  +>.^$
-      $(p.kus t.p.kus, +>.^$ (se-nuke i.p.kus))
-    ==
-  ::
-  ++  se-prom                                           ::  set master prompt
-    ^+  .
-    %_    .
-        cad.pom.tar.maz
-      ^-  tape
-      %+  welp 
-        (scow %p our.hid)
-      =+  ^=  mux  
-          |-  ^-  tape
-          ?~  apt  ~
-          =+  ^=  mor  ^-  tape
-              ?~  t.apt  ~
-              [',' ' ' $(apt t.apt)]
-          %+  welp
-            ^-  tape
-            =+  txt=(trip q.i.apt)
-            ?:  =(our.hid p.i.apt)
-              txt
-            :(welp "~" (scow %p p.i.apt) "/" txt)
-          mor
-      ?~  mux
-        "# "
-      :(welp ":" mux "# ")
-    ==
-  ::
-  ++  se-link                                           ::  connect to app
-    |=  gyl=gill
-    ^+  +>
-    %.  gyl
-    =<  se-join
-    (se-send gyl %show [p.gyl ~[q.gyl]] her /sole)
-  ::
-  ++  se-blit                                           ::  give output
-    |=  bil=dill-blit
-    +>(biz [bil biz])
-  ::
-  ++  se-show                                           ::  show buffer, raw
-    |=  lin=(pair ,@ud (list ,@c))
-    ^+  +>
-    ?:  =(mir lin)  +>
-    =.  +>  ?:(=(q.mir q.lin) +> (se-blit %pro q.lin))
-    =.  +>  ?:(=(p.mir p.lin) +> (se-blit %hop p.lin))
-    +>(mir lin)
-  ::
-  ++  se-just                                           ::  adjusted buffer 
-    |=  lin=(pair ,@ud (list ,@c))
-    ^+  +>
-    =.  off  ?:((lth p.lin edg) 0 (sub p.lin edg))
-    (se-show (sub p.lin off) (scag edg (slag off q.lin)))
-  ::
-  ++  se-view                                           ::  flush buffer
-    ?:  liv.maz
-      (se-just ~(ta-vew ta [& & ~zod %$] tar.maz))
-    ?~  apt  
-      se-view(liv.maz &)
-    %-  se-just
-    ~(ta-vew ta [& | i.apt] (~(got by feg) i.apt))
-  ::
-  ++  se-kill                                           ::  kill a source
-    =+  tup=apt
-    |-  ^+  +>
-    ?~  tup  +>(apt ~)
-    $(tup +.tup, +> (se-nuke i.tup))
-  ::
-  ++  se-emit                                           ::  emit move
-    |=  mov=move
-    %_(+> moz [mov moz])
-  ::
-  ++  se-send                                           ::  send a message
-    |=  [gyl=gill nog=note-gall]
-    (se-emit ost %pass [(scot %p her) (scot %p p.gyl) q.gyl ~] %g nog)
-  ::
-  ++  se-tame
-    |=  gyl=gill
-    ^+  ta
-    ~(. ta [& %| gyl] (~(got by feg) gyl))
-  ::
-  ++  se-pour                                           ::  receive results
-    |=  [gyl=gill sil=sign-gall]
-    ^+  +>
-    ?-    -.sil
-        %mean  
-      +>.$
-    ::  
-        %nice  
-      +>.$
-    ::
-        %rush
-      ta-abet:ta-rap:(ta-fec:(se-tame gyl) +>.sil)
-    ==
-  ::
-  ++  ta                                                ::  per target
-    |_  $:  $:  liv=?                                   ::  don't delete
-                mav=?                                   ::  showing master
-                gyl=gill                                ::  target app
-            ==                                          ::
-            target                                      ::  target state
-        ==                                              ::
-    ++  ta-abet                                         ::  resolve
-      ^+  ..ta
-      =.  liv.maz  mav
-      ?:  mav
-        ?.  liv
-          (se-blit `dill-blit`[%qit ~])
-        +>(tar.maz +<+)
-      ?.  liv  
-        =.  ..ta  (se-nuke gyl) 
-        ..ta(liv.maz =(~ apt))
-      %_(+> feg (~(put by feg) gyl +<+))
-    ::
-    ++  ta-ant                                          ::  toggle master
-      ^+  .
-      ?:  mav
-        ?~  apt  ta-bel
-        %_  .
-          mav      |
-          +<+      (~(got by feg) gyl)
-          tar.maz  +<+
-        ==
-      %_  .
-        mav  &
-        +<+  tar.maz
-        feg  (~(put by feg) gyl +<+) 
-      ==
-    ::
-    ++  ta-act                                          ::  send action
-      |=  act=sole-action
-      ^+  +>
-      ?:  mav  
-        +>.$
-      %_    +> 
-          +> 
-        (se-send gyl %mess [p.gyl ~[q.gyl]] her %sole-action !>(act))
-      ==
-    ::
-    ++  ta-aro                                          ::  hear arrow
-      |=  key=?(%d %l %r %u)
-      ^+  +>
-      ?-  key
-        %d  =.  ris  ~
-            ?.  =(num.hit pos.hit) 
-              (ta-mov +(pos.hit))
-            ?:  =(0 (lent buf.say.inp))
-              ta-bel
-            (ta-hom:ta-nex %set ~)
-        %l  ?^  ris  ta-bel
-            ?:  =(0 pos.inp)  ta-bel 
-            +>(pos.inp (dec pos.inp))
-        %r  ?^  ris  ta-bel
-            ?:  =((lent buf.say.inp) pos.inp) 
-              ta-bel
-            +>(pos.inp +(pos.inp))
-        %u  =.  ris  ~
-            ?:(=(0 pos.hit) ta-bel (ta-mov (dec pos.hit)))
-      ==
-    ::
-    ++  ta-bel  .(+> (se-blit %bel ~))                  ::  beep
-    ++  ta-cat                                          ::  mass insert
-      |=  [pos=@ud txt=(list ,@c)]
-      ^-  sole-edit
-      :-  %mor
-      |-  ^-  (list sole-edit)
-      ?~  txt  ~
-      [[%ins pos i.txt] $(pos +(pos), txt t.txt)]
-    ::
-    ++  ta-cut                                          ::  mass delete
-      |=  [pos=@ud num=@ud]
-      ^-  sole-edit
-      :-  %mor
-      |-(?:(=(0 num) ~ [[%del pos] $(num (dec num))]))
-    ::
-    ++  ta-det                                          ::  send edit
-      |=  ted=sole-edit
-      ^+  +>
-      (ta-act %det [[his.ven.say.inp own.ven.say.inp] (sham buf.say.inp) ted])
-    ::
-    ++  ta-bac                                          ::  hear backspace
-      ^+  .
-      ?^  ris
-        ?:  =(~ str.u.ris)
-          ta-bel
-        .(str.u.ris (scag (dec (lent str.u.ris)) str.u.ris))
-      ?:  =(0 pos.inp)
-        .(+> (se-blit %bel ~))
-      =+  pre=(dec pos.inp)
-      (ta-hom(pos.inp pre) %del pre)
-    ::
-    ++  ta-ctl                                          ::  hear control
-      |=  key=@c
-      ^+  +>
-      ?+    key  ta-bel
-          %a  +>(pos.inp 0)
-          %b  (ta-aro %l)
-          %c  ta-bel(ris ~)
-          %d  ?:  &(=(0 pos.inp) =(0 (lent buf.say.inp)))
-                +>(liv |)
-              ta-del
-          %e  +>(pos.inp (lent buf.say.inp))
-          %f  (ta-aro %r)
-          %g  ta-bel(ris ~)
-          %k  =+  len=(lent buf.say.inp)
-              ?:  =(pos.inp len)
-                ta-bel 
-              %-  ta-hom(kil `(slag pos.inp buf.say.inp))
-              (ta-cut pos.inp (sub len pos.inp))
-          %l  +>(+> (se-blit %clr ~))
-          %n  (ta-aro %d)
-          %p  (ta-aro %u)
-          %r  ?~  ris 
-                +>(ris `[pos.hit ~]) 
-              ?:  =(0 pos.u.ris)
-                ta-bel
-              (ta-ser ~)
-          %t  =+  len=(lent buf.say.inp)
-              ?:  |(=(0 pos.inp) (lth len 2))
-                ta-bel
-              =+  sop=?:(=(len pos.inp) (dec pos.inp) pos.inp) 
-              =.  pos.inp  +(sop)
-              %-  ta-hom
-              :~  %mor
-                  [%del sop]
-                  [%ins (dec sop) (snag sop buf.say.inp)]
-              ==
-          %u  ?:  =(0 pos.inp)
-                ta-bel
-              %-  ta-hom(pos.inp 0, kil `(scag pos.inp buf.say.inp))
-              (ta-cut 0 pos.inp)
-          %v  ta-ant
-          %x  ?:  =(~ apt)  ta-bel
-              ?:  mav  ta-bel
-              +>(apt (welp (slag 1 apt) [(snag 0 apt) ~]))
-          %y  ?~  kil  ta-bel 
-              %-  ta-hom(pos.inp (add pos.inp (lent u.kil)))
-              (ta-cat pos.inp u.kil)
-      ==
-    ::
-    ++  ta-cru                                          ::  hear crud
-      |=  [lab=@tas tac=(list tank)]
-      =.  +>+>  (se-blit %out (tuba (trip lab)))
-      (ta-tan tac)
-    ::
-    ++  ta-del                                          ::  hear delete
-      ^+  .
-      ?:  =((lent buf.say.inp) pos.inp)
-        .(+> (se-blit %bel ~))
-      (ta-hom %del pos.inp)
-    ::
-    ++  ta-erl                                          ::  hear local error
-      |=  pos=@ud 
-      ta-bel(pos.inp (min pos (lent buf.say.inp)))
-    ::
-    ++  ta-err                                          ::  hear remote error
-      |=  pos=@ud 
-      (ta-erl (~(transpose cs say.inp) pos))
-    ::
-    ++  ta-fec                                          ::  apply effect
-      |=  fec=sole-effect
-      ^+  +>
-      ?-    -.fec
-        %bel  ta-bel
-        %blk  +>
-        %clr  +>(+> (se-blit fec))
-        %det  (ta-got +.fec)
-        %err  (ta-err +.fec)
-        %mor  |-  ^+  +>.^$
-              ?~  p.fec  +>.^$
-              $(p.fec t.p.fec, +>.^$ ^$(fec i.p.fec))
-        %nex  ta-nex
-        %pro  (ta-pro +.fec)
-        %tan  (ta-tan p.fec)
-        %sag  +>(+> (se-blit fec))
-        %sav  +>(+> (se-blit fec))
-        %txt  $(fec [%tan [%leaf p.fec]~])
-      ==
-    ::
-    ++  ta-rap                                          ::  send %took
-      .(+> (se-send gyl %took [p.gyl ~[q.gyl]] her))
-    ::
-    ++  ta-dog                                          ::  change cursor
-      |=  ted=sole-edit
-      %_    +>
-          pos.inp
-        =+  len=(lent buf.say.inp)
-        %+  min  len
-        |-  ^-  @ud
-        ?-  -.ted
-          %del  ?:((gth pos.inp p.ted) (dec pos.inp) pos.inp)
-          %ins  ?:((lte pos.inp p.ted) +(pos.inp) pos.inp)
-          %mor  |-  ^-  @ud
-                ?~  p.ted  pos.inp
-                $(p.ted t.p.ted, pos.inp ^$(ted i.p.ted))
-          %nop  pos.inp
-          %set  len
-        ==
-      ==
-    ::
-    ++  ta-got                                          ::  apply change
-      |=  cal=sole-change
-      =^  ted  say.inp  (~(receive cs say.inp) cal)
-      (ta-dog ted)
-    ::
-    ++  ta-hom                                          ::  local edit
-      |=  ted=sole-edit
-      ^+  +>
-      =.  +>  (ta-det ted)
-      =.  +>  (ta-dog(say.inp (~(commit cs say.inp) ted)) ted)
-      +>
-    ::
-    ++  ta-met                                          ::  meta key
-      |=  key=@c
-      ~&  [%ta-met key]
-      +>
-    ::
-    ++  ta-mov                                          ::  move in history
-      |=  sop=@ud
-      ^+  +>
-      ?:  =(sop pos.hit)  +>
-      %+  %=  ta-hom
-            pos.hit  sop
-            lay.hit  %+  ~(put by lay.hit)  
-                       pos.hit 
-                     buf.say.inp
-          ==
-        %set
-      %-  (bond |.((snag (sub num.hit +(sop)) old.hit)))
-      (~(get by lay.hit) sop)
-    ::
-    ++  ta-nex                                          ::  advance history
-      %_  .
-        num.hit  +(num.hit)
-        pos.hit  +(num.hit)
-        ris  ~
-        lay.hit  ~
-        old.hit  [buf.say.inp old.hit]
-      ==
-    ::
-    ++  ta-pro                                          ::  set prompt
-      |=  pom=sole-prompt
-      +>(pom pom(cad :(welp (scow %p p.gyl) ":" (trip q.gyl) cad.pom)))
-    ::
-    ++  ta-ret                                          ::  hear return
-      ?.  mav
-        (ta-act %ret ~)
-      =+  txt=(tufa buf.say.inp)
-      =+  fey=(rose txt sp-ukase:sp)
-      ?-  -.fey
-        %|  (ta-erl (lent (tuba (scag p.fey txt))))
-        %&  ?~  p.fey 
-              (ta-erl (lent buf.say.inp))
-            =.  +>+>  (se-like u.p.fey)
-            =.  pom  pom.tar.maz
-            (ta-hom:ta-nex %set ~)
-      ==
-    ::
-    ++  ta-ser                                          ::  reverse search
-      |=  ext=(list ,@c)
-      ^+  +>
-      ?:  |(?=(~ ris) =(0 pos.u.ris))  ta-bel
-      =+  tot=(weld str.u.ris ext)
-      =+  dol=(slag (sub num.hit pos.u.ris) old.hit)
-      =+  sop=pos.u.ris
-      =+  ^=  ser
-          =+  ^=  beg
-              |=  [a=(list ,@c) b=(list ,@c)]  ^-  ?
-              ?~(a & ?~(b | &(=(i.a i.b) $(a t.a, b t.b))))
-          |=  [a=(list ,@c) b=(list ,@c)]  ^-  ?
-          ?~(a & ?~(b | |((beg a b) $(b t.b))))
-      =+  ^=  sup  
-          |-  ^-  (unit ,@ud)
-          ?~  dol  ~
-          ?:  (ser tot i.dol)
-            `sop
-          $(sop (dec sop), dol t.dol)
-      ?~  sup  ta-bel
-      (ta-mov(str.u.ris tot, pos.u.ris (dec u.sup)) (dec u.sup))
-    ::
-    ++  ta-tan                                          ::  print tanks
-      |=  tac=(list tank)
-      =+  wol=`wall`(zing (turn tac |=(a=tank (~(win re a) [0 edg]))))
-      |-  ^+  +>.^$
-      ?~  wol  +>.^$
-      $(wol t.wol, +>+>.^$ (se-blit %out (tuba i.wol)))
-    ::
-    ++  ta-txt                                          ::  hear text
-      |=  txt=(list ,@c)
-      ^+  +>
-      ?^  ris
-        (ta-ser txt)
-      :: ~&  ven.say.inp
-      %-  ta-hom(pos.inp (add (lent txt) pos.inp))
-      :-  %mor
-      |-  ^-  (list sole-edit)
-      ?~  txt  ~
-      [[%ins pos.inp i.txt] $(pos.inp +(pos.inp), txt t.txt)]
-    ::
-    ++  ta-vew                                          ::  computed prompt
-      |-  ^-  (pair ,@ud (list ,@c))
-      ?^  ris
-        %=    $
-            ris  ~
-            cad.pom 
-          :(welp "(reverse-i-search)'" (tufa str.u.ris) "': ")
-        ==
-      =-  [(add pos.inp (lent p.vew)) (weld (tuba p.vew) q.vew)]
-      ^=  vew  ^-  (pair tape (list ,@c))
-      ?:  vis.pom  [cad.pom buf.say.inp]
-      :-  %+  welp  cad.pom
-          ?~  buf.say.inp  ~
-          "<{(scow %p (end 4 1 (sham buf.say.inp)))}> "
-      (turn buf.say.inp ,_`@c`'*')
-    --
-  --
-++  peer
-  |=  [ost=bone her=ship pax=path]
-  ^-  [(list move) _+>]
-  ::  ~&  [%sole-peer ost her pax]
-  ?<  (~(has by bin) ost)
-  :-  [ost %give %rush %dill-blit %pro [`@c`0x23 `@c`0x20 ~]]~
-  %=    +>
-      bin
-    %+  ~(put by bin)  ost
-    ^-  source
-    :*  80
-        0
-        ~
-        ~
-        :*  %&
-            *(unit search)
-            *history
-            `sole-prompt`[%& %sole "{(scow %p our.hid)}# "]
-            *sole-command
-        ==
-        ~
-        [0 ~]
-    ==
-  ==
-::
-++  poke-dill-belt
-  |=  [ost=bone her=ship bet=dill-belt]
-  ^-  [(list move) _+>]
-  ::  ~&  [%sole-poke ost her bet]
-  =+  yog=(~(get by bin) ost)
-  ?~  yog
-    ~&  [%sole-poke-stale ost]
-    [~ +>.$]
-  =<  se-abet
-  =<  se-view
-  (~(se-belt se [[ost %give %nice ~]~ ~] [her ost] u.yog) bet)
-::
-++  pour
-  |=  [ost=bone pax=path sih=*]
-  ^-  [(list move) _+>]
-  =+  yog=(~(get by bin) ost)
-  ?~  yog
-    ~&  [%sole-pour-stale ost pax]
-    [~ +>.$] 
-  =+  sih=((hard sign) sih)
-  ?>  ?=([@ @ @ ~] pax)
-  =<  se-abet
-  =<  se-view
-  =+  gyl=[(slav %p i.t.pax) i.t.t.pax]
-  (~(se-pour se [~ ~] [(slav %p i.pax) ost] u.yog) gyl +.sih)
-::
-++  pull
-  |=  ost=bone
-  ^-  [(list move) _+>]
-  ::  ~&  [%sole-pull ost]
-  =^  moz  +>  
-    =<  se-abet
-    =<  se-view
-    ~(se-kill se [~ ~] [our.hid ost] (~(got by bin) ost))
-  [moz +>.$(bin (~(del by bin) ost))]
---
diff --git a/base/fap/solid/core.hook b/base/fap/solid/core.hook
deleted file mode 100644
index 6bbac3629..000000000
--- a/base/fap/solid/core.hook
+++ /dev/null
@@ -1,41 +0,0 @@
-!:
-::::
-  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke-solid-args
-  |=  [ost=bone you=ship ~]
-  :_  +>.$
-  =+  top=`path`/(scot %p our.hid)/main/(scot %da lat.hid)/arvo
-  =+  pax=`path`(weld top `path`[%hoon ~])
-  ~&  %solid-start
-  =+  gen=(reck pax)
-  ~&  %solid-parsed
-  =+  ken=q:(~(mint ut %noun) %noun gen)
-  ~&  %solid-compiled
-  =+  ^=  all
-      =+  all=.*(0 ken)
-      =+  ^=  vay  ^-  (list ,[p=@tas q=@tas])
-          :~  [%$ %zuse]
-              [%g %gall]
-              [%f %ford]
-              [%a %ames]
-              [%c %clay]
-              [%d %dill]
-              [%e %eyre]
-              [%t %time]
-          ==
-      |-  ^+  all
-      ?~  vay  all
-      =+  pax=(weld top `path`[q.i.vay ~])
-      =+  txt=((hard ,@) .^(%cx (weld pax `path`[%hoon ~])))
-      =+  sam=[lat.hid `ovum`[[%gold ~] [%veer p.i.vay pax txt]]]
-      ~&  [%solid-veer i.vay]
-      =+  gat=.*(all .*(all [0 42]))
-      =+  nex=+:.*([-.gat [sam +>.gat]] -.gat)
-      $(vay t.vay, all nex)
-  :~  [ost %give %sage [%urbit %pill ~] [ken all]]
-      [ost %pass / %g %cide %$]
-      [ost %give %nice ~]
-  ==
---
diff --git a/base/fap/sync/core.hook b/base/fap/sync/core.hook
deleted file mode 100644
index fd5e2e5a2..000000000
--- a/base/fap/sync/core.hook
+++ /dev/null
@@ -1,16 +0,0 @@
-::  Desk sync
-::  
-::::  /hook/core/sync/app
-  ::
-/+    sh-utils
-!:
-::::
-  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke--args
-  %+  gate-bang  
-    |=  [syd=@tas her=@p sud=@tas ~]
-    [%c %font our.hid syd her sud]
-  (print . "synced")
---
diff --git a/base/fap/talk/core.hook b/base/fap/talk/core.hook
deleted file mode 100644
index f9d7c6e2b..000000000
--- a/base/fap/talk/core.hook
+++ /dev/null
@@ -1,1896 +0,0 @@
-::
-::::  /hook/core/talk/app
-  ::
-/?  314
-/-  *talk, *twitter, *sole
-/+  talk, sole
-::
-::::
-  ::
-!:
-=>  |%                                                  ::  data structures
-    ++  house  ,[%1 house-1]                            ::  full state
-    ++  house-any                                       ::  app history
-      $%  [%1 house-1]                                  ::  1: talk
-          [%0 house-0]                                  ::  0: initial version
-      ==                                                ::
-    ++  house-1                                         ::
-      $:  stories=(map span story)                      ::  conversations
-          general=(set bone)                            ::  meta-subscribe
-          outbox=(pair ,@ud (map ,@ud thought))         ::  urbit outbox
-          folks=(map ship human)                        ::  human identities
-          shells=(map bone shell)                       ::  interaction state
-      ==                                                ::
-    ++  house-0                                         ::  legacy state
-      %+  map  path                                     ::
-      ,[p=(list zong) q=(map ship ,?)]                  ::
-    ::                                                  ::
-    ++  zong                                            ::  legacy messages
-      $%  $:  %mess  p=@da  q=ship                      ::
-            $=  r                                       ::
-              $%  [%do p=@t]                            ::
-                  [%exp p=@t q=tank]                    ::
-                  [%say p=@t]                           ::
-      ==  ==  ==                                        ::
-    ++  story                                           ::  wire content
-      $:  count=@ud                                     ::  (lent grams)
-          grams=(list telegram)                         ::  all history
-          locals=(map ship (pair ,@da status))          ::  local presence
-          remotes=(map partner atlas)                   ::  remote presence
-          mirrors=(map station config)                  ::  remote config
-          sequence=(map partner ,@ud)                   ::  partners heard
-          shape=config                                  ::  configuration
-          known=(map serial ,@ud)                       ::  messages heard
-          guests=(map bone river)                       ::  message followers
-          viewers=(set bone)                            ::  presence followers
-          owners=(set bone)                             ::  config followers
-      ==                                                ::
-    ++  shell                                           ::  console session
-      $:  her=ship                                      ::  client identity
-          man=span                                      ::  mailbox
-          count=@ud                                     ::  messages shown
-          say=sole-share                                ::  console state
-          active=(unit (set partner))                   ::  active targets
-          passive=(set partner)                         ::  passive targets
-          guests=register                               ::  presence mirror
-          harbor=(map span (pair posture cord))         ::  stations mirror
-          system=cabal                                  ::  config mirror
-      ==                                                ::
-    ++  river  (pair point point)                       ::  stream definition
-    ++  point                                           ::  stream endpoint
-      $%  [%ud p=@ud]                                   ::  by number
-          [%da p=@da]                                   ::  by date
-      ==                                                ::
-    ++  gift                                            ::  result
-      $%  [%rush salt]                                  ::  refresh
-          [%mean ares]                                  ::  cancel
-          [%nice ~]                                     ::  accept
-      ==                                                ::
-    ++  sign                                            ::  response
-      $%  $:  %e                                        ::  from %eyre
-      $%  [%thou p=httr]                                ::  HTTP response
-          ==  ==                                        ::
-          $:  %g                                        ::  application
-      $%  [%mean p=ares]                                ::  cancel
-          [%nice ~]                                     ::  acknowledge
-          [%rush p=silt]                                ::  subs data
-          ==  ==                                        ::
-          $:  %t                                        ::
-      $%  [%wake ~]                                     ::  timer wakeup
-      ==  ==  ==                                        ::
-    ++  salt                                            ::  output rush
-      $%  [%talk-report p=report]                       ::
-          [%sole-effect p=sole-effect]                  ::
-      ==                                                ::
-    ++  silt                                            ::  input rush
-      $%  [%talk-report p=report]                       ::  refresh
-          [%twit-stat p=twit-stat]                      ::  tweet receipt
-          [%twit-feed p=(list twit-stat)]               ::  tweet receipt
-      ==                                                ::
-    ++  move  ,[p=bone q=(mold note gift)]              ::  all actions
-    ++  hapt  ,[p=ship q=path]                          ::  app instance
-    ++  note                                            ::  requests
-      $%  $:  %c                                        ::
-      $%  [%info p=@p q=@tas r=nori]                    ::
-          ==  ==                                        ::
-          $:  %g                                        ::  network
-      $%  [%mess p=hapt q=ship r=cage]                  ::  message
-          [%nuke p=hapt q=ship]                         ::  cancel
-          [%show p=hapt q=ship r=path]                  ::  subscribe
-          [%took p=hapt q=ship]                         ::  acknowledge
-          ==  ==                                        ::
-          $:  %t                                        ::
-      $%  [%wait p=@da]                                 ::
-      ==  ==  ==                                        ::
-    ::                                                  ::
-    ++  work                                            ::  interface action
-      $%  [%number p=? q=@ud]                           ::  activate by number
-          [%join p=(set partner)]                       ::  
-          [%say p=speech]                               ::
-          [%invite p=span q=(list partner)]             ::
-          [%banish p=span q=(list partner)]             ::
-          [%target p=(set partner)]                     ::  set active targets
-          ::  [%destroy p=span]                         ::
-          [%create p=posture q=span r=cord]             ::
-          [%probe p=station]                            ::
-      ==                                                ::
-    ::                                                  ::
-    ++  sigh                                            ::  assemble label
-      |=  [len=@ud pre=tape yiz=cord]
-      ^-  tape
-      =+  nez=(trip yiz)
-      =+  lez=(lent nez)
-      ?>  (gth len (lent pre))
-      =.  len  (sub len (lent pre))
-      ?.  (gth lez len)  
-        =.  nez  (welp pre nez)
-        ?.  (lth lez len)  nez
-        (runt [(sub len lez) '-'] nez)
-      :(welp pre (scag (dec len) nez) "+")  
-    --
-|_  [hid=hide house]
-++  ra                                                  ::  transaction core
-  |_  [ost=bone moves=(list move)]
-  ++  sh                                                ::  console interface
-    |_  $:  coz=(list command)                          ::  talk actions
-            she=shell
-        ==
-    ++  sh-purl  (ifix [gay gay] auri:urlp)             ::  url with spaces
-    ++  sh-scad                                         ::  command parser
-      =+  vag=(vang | [&1:% &2:% '0' |3:%])
-      =<  work
-      |%  
-      ++  dare                                          ::  @dr
-        %+  sear
-          |=  a=coin
-          ?.  ?=([%$ %dr @] a)  ~
-          (some `@dr`+>.a)
-        nuck:so
-      ::
-      ++  ship  ;~(pfix sig fed:ag)                     ::  ship
-      ++  shiz                                          ::  ship set
-        %+  cook
-          |=(a=(list ^ship) (~(gas in *(set ^ship)) a))
-        (most ;~(plug com (star ace)) ship)
-      ::
-      ++  pasp                                          ::  passport
-        ;~  pfix  pat
-          ;~  pose
-            (stag %twitter ;~(pfix ;~(plug (jest 't') col) urs:ab))
-          ==
-        ==
-      ::
-      ++  stan                                          ::  station
-        ;~  pose
-          (cold [our.hid man.she] tis)
-          ;~(pfix cen (cook |=(a=term [our.hid a]) sym))
-          ;~(pfix fas (cook |=(a=term [(sein our.hid) a]) sym))
-        ::
-          %+  cook
-            |=  [a=@p b=(unit term)]
-            [a ?^(b u.b (main a))]
-          ;~  plug
-            ship
-            ;~(pose (stag ~ ;~(pfix fas urs:ab)) (easy ~))
-          ==
-        ==
-      ::
-      ++  parn                                          ::  partner
-        ;~  pose
-          (stag %& stan)
-          (stag %| pasp)
-        ==
-      ++  parq                                          ::  non-empty partners
-        %+  cook
-          |=(a=(list partner) (~(gas in *(set partner)) a))
-        (most ;~(plug com (star ace)) parn)
-      ::
-      ++  parz                                          ::  partner set
-        %+  cook
-          |=(a=(list partner) (~(gas in *(set partner)) a))
-        (more ;~(plug com (star ace)) parn)
-      ::
-      ++  nump                                          ::  number reference
-        ;~  pose
-          (stag %& dem:ag)
-          (stag %| ;~(pfix (just '0') dem:ag))
-        ==
-      ::
-      ++  pore                                          ::  posture
-        ;~  pose
-          (cold %black (jest %channel))
-          (cold %white (jest %village))
-          (cold %green (jest %journal))
-          (cold %brown (jest %mailbox))
-        ==
-      ::
-      ++  work
-        %+  knee  *^work  |.  ~+
-        ;~  pose
-          %+  stag  %create
-          ;~  pfix  (jest %create)
-            ;~  plug
-              ;~(pfix ace pore)
-              ;~(pfix ;~(plug ace cen) sym)
-              ;~(pfix ace qut)
-            ==
-          ==
-        ::
-          %+  stag  %join
-          ;~(pfix (jest %join) ;~(pfix ace parq))
-        ::
-          (stag %number nump)
-          (stag %target parz)
-        ==
-      --
-    ++  sh-abet
-      ^+  +>
-      =+  zoc=(flop coz)
-      |-  ^+  +>+>
-      ?~  zoc  +>+>.$(shells (~(put by shells) ost she))
-      $(zoc t.zoc, +>.$ (sh-deal i.zoc))
-    ::
-    ++  sh-deal                                         ::  apply from shell
-      |=  cod=command
-      ^+  +>
-      ?-    -.cod
-          %design
-        ?~  q.cod
-          =.  +>+>.$  (ra-config p.cod *config)
-          +>.$(stories (~(del by stories) p.cod))
-        +>(+> (ra-config p.cod u.q.cod))
-      ::
-          %review   +>(+> (ra-think | her.she +.cod))
-          %publish  +>(+> (ra-think & her.she +.cod))
-      ==
-    ::
-    ++  sh-fact                                         ::  send console effect
-      |=  fec=sole-effect
-      ^+  +>
-      +>(moves :_(moves [ost %give %rush %sole-effect fec]))
-    ::
-    ++  sh-peep                                         ::  peer to path
-      |=  pax=path
-      ^+  +>
-      +>(+> (~(ra-subscribe ra ost ~) her.she pax))
-    ::
-    ++  sh-peer                                         ::  subscribe shell
-      =<  sh-prod
-      %_    .
-          +>
-        %-  ra-subscribe:(~(ra-subscribe ra ost ~) her.she ~)
-        [her.she [%afx man.she ~]]
-      ==
-    ::
-    ++  sh-prod                                         ::  show prompt
-      ^+  .
-      %+  sh-fact  %pro
-      :+  &  %talk-line
-      ^-  tape
-      =+  ^=  rew  ^-  (pair (pair ,@t ,@t) (set partner))
-          ?~  active.she
-            [['(' ')'] passive.she]
-          [['[' ']'] u.active.she]
-      =+  por=~(te-prom te man.she q.rew)
-      (weld `tape`[p.p.rew por] `tape`[q.p.rew ' ' ~])
-    ::
-    ++  sh-pact                                         ::  update active aud
-      |=  lix=(set partner)
-      ^+  +>
-      =+  act=?~(lix ~ `(sh-pare lix))
-      ?:  =(active.she act)  +>.$
-      sh-prod(active.she act)
-    ::
-    ++  sh-pare                                         ::  adjust target list
-      |=  paz=(set partner)
-      ?:  (sh-pear paz)  paz
-      (~(put in paz) [%& our.hid man.she])
-    ::
-    ++  sh-pear                                         ::  hearback
-      |=  paz=(set partner)
-      ?~  paz  |
-      ?|  $(paz l.paz) 
-          $(paz r.paz)
-          (~(has in sources.shape:(~(got by stories) man.she)) `partner`n.paz)
-      ==
-    ::
-    ++  sh-pass                                         ::  passive from aud
-      |=  aud=audience
-      %-  sh-poss
-      %-  ~(gas in *(set partner))
-      (turn (~(tap by aud)) |=([a=partner *] a))
-    ::
-    ::
-    ++  sh-poss                                         ::  passive update
-      |=  lix=(set partner)
-      =+  sap=(sh-pare lix)
-      ?:  =(sap passive.she)
-        +>.$
-      sh-prod(passive.she sap)
-    ::
-    ++  sh-pest                                         ::  report listen
-      |=  tay=partner
-      ^+  +>
-      ?.  ?=(%& -.tay)  +>
-      =+  sib=(~(get by ham.system.she) `station`p.tay)
-      ?.  |(?=(~ sib) !?=(%white p.cordon.u.sib))
-        +>.$
-      (sh-poss [tay ~ ~])
-    ::
-    ++  sh-rend                                         ::  print on one line
-      |=  gam=telegram
-      (sh-pass:(sh-fact %txt ~(tr-line tr man.she gam)) q.q.gam) 
-    ::
-    ++  sh-numb                                         ::  print msg number
-      |=  num=@ud
-      ^+  +>
-      =+  bun=(scow %ud num)
-      ::  =+  pad=(sub 36 (lent bun))
-      ::  =+  now=`@da`(dis lat.hid 0xffff.ffff.ffff.ffff.0000.0000.0000.0000)
-      %+  sh-fact  %txt
-      (runt [(sub 15 (lent bun)) '-'] "[{bun}]")
-    ::
-    ++  sh-repo-house-diff
-      |=  [one=shelf two=shelf]
-      =|  $=  ret
-          $:  old=(list (pair span (pair posture cord)))
-              new=(list (pair span (pair posture cord)))
-              cha=(list (pair span (pair posture cord)))
-          ==
-      ^+  ret
-      =.  ret
-        =+  eno=(~(tap by one))
-        |-  ^+  ret
-        ?~  eno  ret
-        =.  ret  $(eno t.eno)
-        =+  unt=(~(get by two) p.i.eno)
-        ?~  unt
-          ret(old [i.eno old.ret])
-        ?:  =(q.i.eno u.unt)  ret 
-        ret(cha [[p.i.eno u.unt] cha.ret])
-      =.  ret
-        =+  owt=(~(tap by two))
-        |-  ^+  ret
-        ?~  owt  ret
-        =.  ret  $(owt t.owt)
-        ?:  (~(has by one) p.i.owt)
-          ret
-        ret(new [i.owt new.ret])
-      ret 
-    ::
-    ++  sh-repo-atlas-diff
-      |=  [one=atlas two=atlas]
-      =|  $=  ret
-          $:  old=(list (pair ship status))
-              new=(list (pair ship status))
-              cha=(list (pair ship status))
-          ==
-      ^+  ret
-      =.  ret
-        =+  eno=(~(tap by one))
-        |-  ^+  ret
-        ?~  eno  ret
-        =.  ret  $(eno t.eno)
-        =+  unt=(~(get by two) p.i.eno)
-        ?~  unt
-          ret(old [i.eno old.ret])
-        ?:  =(q.i.eno u.unt)  ret 
-        ret(cha [[p.i.eno u.unt] cha.ret])
-      =.  ret
-        =+  owt=(~(tap by two))
-        |-  ^+  ret
-        ?~  owt  ret
-        =.  ret  $(owt t.owt)
-        ?:  (~(has by one) p.i.owt)
-          ret
-        ret(new [i.owt new.ret])
-      ret 
-    ::
-    ++  sh-repo-cabal-diff
-      |=  [one=(map station config) two=(map station config)]
-      =|  $=  ret
-          $:  old=(list (pair station config))
-              new=(list (pair station config))
-              cha=(list (pair station config))
-          ==
-      ^+  ret
-      =.  ret
-        =+  eno=(~(tap by one))
-        |-  ^+  ret
-        ?~  eno  ret
-        =.  ret  $(eno t.eno)
-        =+  unt=(~(get by two) p.i.eno)
-        ?~  unt
-          ret(old [i.eno old.ret])
-        ?:  =(q.i.eno u.unt)  ret 
-        ret(cha [[p.i.eno u.unt] cha.ret])
-      =.  ret
-        =+  owt=(~(tap by two))
-        |-  ^+  ret
-        ?~  owt  ret
-        =.  ret  $(owt t.owt)
-        ?:  (~(has by one) p.i.owt)
-          ret
-        ret(new [i.owt new.ret])
-      ret
-    ::
-    ++  sh-repo-rogue-diff
-      |=  [one=(map partner atlas) two=(map partner atlas)]
-      =|  $=  ret
-          $:  old=(list (pair partner atlas))
-              new=(list (pair partner atlas))
-              cha=(list (pair partner atlas))
-          ==
-      ^+  ret
-      =.  ret
-        =+  eno=(~(tap by one))
-        |-  ^+  ret
-        ?~  eno  ret
-        =.  ret  $(eno t.eno)
-        =+  unt=(~(get by two) p.i.eno)
-        ?~  unt
-          ret(old [i.eno old.ret])
-        ?:  =(q.i.eno u.unt)  ret 
-        ret(cha [[p.i.eno u.unt] cha.ret])
-      =.  ret
-        =+  owt=(~(tap by two))
-        |-  ^+  ret
-        ?~  owt  ret
-        =.  ret  $(owt t.owt)
-        ?:  (~(has by one) p.i.owt)
-          ret
-        ret(new [i.owt new.ret])
-      ret
-    ::
-    ++  sh-repo-whom-diff
-      |=  [one=(set partner) two=(set partner)]
-      =|  $=  ret
-          $:  old=(list partner)
-              new=(list partner)
-          ==
-      ^+  ret
-      =.  ret
-        =+  eno=(~(tap by one))
-        |-  ^+  ret
-        ?~  eno  ret
-        =.  ret  $(eno t.eno)
-        ?:  (~(has in two) i.eno)
-          ret
-        ret(old [i.eno old.ret])
-      =.  ret
-        =+  owt=(~(tap by two))
-        |-  ^+  ret
-        ?~  owt  ret
-        =.  ret  $(owt t.owt)
-        ?:  (~(has in one) i.owt)
-          ret
-        ret(new [i.owt new.ret])
-      ret
-    ::
-    ++  sh-repo-ship-diff
-      |=  [one=(set ship) two=(set ship)]
-      =|  $=  ret
-          $:  old=(list ship)
-              new=(list ship)
-          ==
-      ^+  ret
-      =.  ret
-        =+  eno=(~(tap by one))
-        |-  ^+  ret
-        ?~  eno  ret
-        =.  ret  $(eno t.eno)
-        ?:  (~(has in two) i.eno)
-          ret
-        ret(old [i.eno old.ret])
-      =.  ret
-        =+  owt=(~(tap by two))
-        |-  ^+  ret
-        ?~  owt  ret
-        =.  ret  $(owt t.owt)
-        ?:  (~(has in one) i.owt)
-          ret
-        ret(new [i.owt new.ret])
-      ret 
-    ::
-    ++  sh-puss
-      |=  a=posture  ^-  tape
-      ?-  a
-        %black  "channel"
-        %brown  "mailbox"
-        %white  "village"
-        %green  "journal"
-      ==
-    ::
-    ++  sh-repo-config-exceptions
-      |=  [pre=tape por=posture old=(list ship) new=(list ship)]
-      =+  out=?:(?=(?(%black %brown) por) "try " "cut ")
-      =+  inn=?:(?=(?(%black %brown) por) "ban " "add ")
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  old  +>.^$
-          =.  +>.^$  $(old t.old)
-          (sh-note :(weld pre out " " (scow %p i.old)))
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  new  +>.^$
-          =.  +>.^$  $(new t.new)
-          (sh-note :(weld pre out " " (scow %p i.new)))
-      +>.$
-    ::
-    ++  sh-repo-config-sources
-      |=  [pre=tape old=(list partner) new=(list partner)]
-      ^+  +>
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  old  +>.^$
-          =.  +>.^$  $(old t.old)
-          (sh-note (weld pre "off {~(ta-full ta man.she i.old)}"))
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  new  +>.^$
-          =.  +>.^$  $(new t.new)
-          (sh-note (weld pre "hey {~(ta-full ta man.she i.new)}"))
-      +>.$
-    ::
-    ++  sh-repo-config-show
-      |=  [pre=tape laz=config loc=config]
-      ^+  +>
-      =.  +>.$
-        ?:  =(caption.loc caption.laz)  +>.$
-        (sh-note :(weld pre "cap " (trip caption.loc)))
-      =.  +>.$
-          %+  sh-repo-config-sources
-            (weld (trip man.she) ": ")
-          (sh-repo-whom-diff sources.laz sources.loc)
-      ?:  !=(p.cordon.loc p.cordon.laz)
-        =.  +>.$  (sh-note :(weld pre "but " (sh-puss p.cordon.loc)))
-        %^    sh-repo-config-exceptions  
-            (weld (trip man.she) ": ")  
-          p.cordon.loc
-        [~ (~(tap in q.cordon.loc))]
-      %^    sh-repo-config-exceptions  
-          (weld (trip man.she) ": ")
-        p.cordon.loc
-      (sh-repo-ship-diff q.cordon.laz q.cordon.loc)
-    ::
-    ++  sh-repo-cabal-changes
-      |=  $:  laz=(map station config)
-              old=(list (pair station config))
-              new=(list (pair station config))
-              cha=(list (pair station config))
-          ==
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  new  +>.^$
-          =.  +>.^$  $(new t.new)
-          =.  +>.^$  (sh-pest [%& p.i.new])
-          %+  sh-repo-config-show  
-            (weld ~(sn-phat sn man.she p.i.new) ": ")
-          [*config q.i.new]
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  cha  +>.^$
-          =.  +>.^$  $(cha t.cha)
-          %+  sh-repo-config-show  
-            (weld ~(sn-phat sn man.she p.i.cha) ": ")
-          [(~(got by laz) `station`p.i.cha) q.i.cha]
-      +>.$
-    ::
-    ++  sh-repo-cabal
-      |=  bal=cabal
-      ^+  +>
-      =+  laz=system.she
-      =.  system.she  bal
-      =.  +>.$
-          %+  sh-repo-cabal-changes  ham.laz
-          (sh-repo-cabal-diff ham.laz ham.bal)
-      (sh-repo-config-show "" loc.laz loc.bal)
-    ::
-    ++  sh-repo-house
-      |=  awl=(map span (pair posture cord))
-      ^+  +>
-      =+  dif=(sh-repo-house-diff harbor.she awl) 
-      =.  harbor.she  awl
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  old.dif  +>.^$
-          =.  +>.^$  $(old.dif t.old.dif)
-          (sh-note "cut {(sh-puss p.q.i.old.dif)} %{(trip p.i.old.dif)}")
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  new.dif  +>.^$
-          =.  +>.^$  $(new.dif t.new.dif)
-          =+  :*  nam=(trip p.i.new.dif)
-                  por=(sh-puss p.q.i.new.dif)
-                  des=(trip q.q.i.new.dif)
-              ==
-          (sh-note "new {por} %{nam}: {des}")
-      =.  +>.$ 
-          |-  ^+  +>.^$
-          ?~  cha.dif  +>.^$
-          =.  +>.^$  $(cha.dif t.cha.dif)
-          =+  :*  nam=(trip p.i.cha.dif)
-                  por=(sh-puss p.q.i.cha.dif)
-                  des=(trip q.q.i.cha.dif)
-              ==
-          (sh-note "mod %{nam}: {por}, {des}")
-      +>.$
-    ::
-    ++  sh-note                                         ::  shell message
-      |=  txt=tape
-      ^+  +>
-      (sh-fact %txt (runt [16 '-'] `tape`['|' ' ' (scag 62 txt)]))
-    ::
-    ++  sh-spaz                                         ::  print status
-      |=  saz=status
-      ^-  tape
-      ['%' (trip p.saz)]
-    ::
-    ++  sh-repo-group-diff-here                         ::  print atlas diff
-      |=  $:  pre=tape 
-            $=  cul
-            $:  old=(list (pair ship status))
-                new=(list (pair ship status))
-                cha=(list (pair ship status))
-            ==
-          ==
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  old.cul  +>.^$
-          =.  +>.^$  $(old.cul t.old.cul)
-          (sh-note (weld pre "bye {(scow %p p.i.old.cul)}"))
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  new.cul  +>.^$
-          =.  +>.^$  $(new.cul t.new.cul)
-          %-  sh-note
-          (weld pre "met {(scow %p p.i.new.cul)} {(sh-spaz q.i.new.cul)}")
-      =.  +>.$ 
-          |-  ^+  +>.^$
-          ?~  cha.cul  +>.^$
-          %-  sh-note 
-          (weld pre "set {(scow %p p.i.cha.cul)} {(sh-spaz q.i.cha.cul)}")
-      +>.$
-    ::
-    ++  sh-repo-group-here                              ::  update local
-      |=  loc=atlas
-      ^+  +>
-      =+  cul=(sh-repo-atlas-diff p.guests.she loc)
-      =.  p.guests.she  loc
-      (sh-repo-group-diff-here "" cul)
-    ::
-    ++  sh-repo-group-there                             ::  update foreign
-      |=  yid=(map partner atlas)
-      =+  day=(sh-repo-rogue-diff q.guests.she yid)
-      =+  dun=q.guests.she
-      =.  q.guests.she  yid
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  old.day  +>.^$
-          =.  +>.^$  $(old.day t.old.day)
-          (sh-note (weld "not " (~(ta-show ta man.she p.i.old.day) ~)))
-      =.  +>.$
-          |-  ^+  +>.^$
-          ?~  new.day  +>.^$
-          =.  +>.^$  $(new.day t.new.day)
-          =.  +>.^$
-              (sh-note (weld "new " (~(ta-show ta man.she p.i.new.day) ~)))
-          (sh-repo-group-diff-here "--" ~ (~(tap by q.i.new.day)) ~)
-      =.  +>.$ 
-          |-  ^+  +>.^$
-          ?~  cha.day  +>.^$
-          =.  +>.^$  $(cha.day t.cha.day)
-          =.  +>.^$
-              (sh-note (weld "for " (~(ta-show ta man.she p.i.cha.day) ~)))
-          =+  yez=(~(got by dun) p.i.cha.day)
-          %+  sh-repo-group-diff-here  "--"
-          (sh-repo-atlas-diff yez q.i.cha.day)
-      +>.$
-    ::
-    ++  sh-repo-group
-      |=  ges=register
-      ^+  +>
-      =.  +>  (sh-repo-group-here p.ges)
-      =.  +>  (sh-repo-group-there q.ges)
-      +>
-    ::
-    ++  sh-repo-gram
-      |=  [num=@ud gam=telegram]
-      ^+  +>
-      ?:  =(num count.she)
-        =.  +>  ?:(=(0 (mod num 5)) (sh-numb num) +>)
-        (sh-rend(count.she +(num)) gam)
-      ?:  (gth num count.she)
-        =.  +>  (sh-numb num)
-        (sh-rend(count.she +(num)) gam)
-      +> 
-    ::
-    ++  sh-repo-grams                                   ::  apply telegrams
-      |=  [num=@ud gaz=(list telegram)]
-      ^+  +>
-      ?~  gaz  +>
-      $(gaz t.gaz, num +(num), +> (sh-repo-gram num i.gaz))
-    ::
-    ++  sh-repo                                         ::  apply report
-      |=  rad=report
-      ^+  +>
-      ::  ~&  [%sh-repo rad]
-      ?-  -.rad
-        %cabal   (sh-repo-cabal +.rad)
-        %grams   (sh-repo-grams +.rad)
-        %group   (sh-repo-group +.rad)
-        %house   (sh-repo-house +.rad)
-      ==
-    ::
-    ++  sh-sane-chat                                    ::  sanitize chatter
-      |=  buf=(list ,@c)
-      ^-  (list sole-edit)
-      =+  :-  inx=0
-          ^=  fix
-          |=  [inx=@ud cha=@t lit=(list sole-edit)]
-          ^+  lit
-          [[%mor [%del inx] [%ins inx `@c`cha] ~] lit]
-      |-  ^-  (list sole-edit)
-      ?:  =(62 inx)
-        |-  ^-  (list sole-edit)
-        ?~(buf ~ [[%del 62] $(buf t.buf)])
-      ?~  buf  ~
-      =+  lit=$(inx +(inx), buf t.buf)
-      ?:  |((lth i.buf 32) (gth i.buf 126))
-        (fix inx '?' lit)
-      ?:  &((gte i.buf 'A') (lte i.buf 'Z'))
-        (fix inx (add 32 i.buf) lit)
-      ?:  &(=('/' i.buf) ?=([47 *] t.buf))
-       (fix inx '\\' lit)
-      lit
-    ::
-    ++  sh-sane-rule                                    ::  sanitize by rule
-      |*  sef=_rule
-      |=  [inv=sole-edit txt=tape]
-      ^-  (list sole-edit)
-      =+  ryv=(rose txt sef)
-      ?:(-.ryv ~ [inv ~])
-    ::
-    ++  sh-sane                                         ::  sanitize input
-      |=  [inv=sole-edit buf=(list ,@c)]
-      ^-  (list sole-edit)
-      ?~  buf  ~
-      =+  txt=(tufa buf)
-      ?:  =(';' -.txt)
-        ((sh-sane-rule sh-scad) inv +.txt)
-      ?:  =('@' i.buf)
-        (sh-sane-chat +.buf)
-      =+  ryv=(rose txt sh-purl)
-      ?:  -.ryv  ~
-      (sh-sane-chat buf)
-    ::
-    ++  sh-slug                                         ::  edit to sanity
-      |=  lit=(list sole-edit)
-      ^+  +>
-      ?~  lit  +>
-      =^  lic  say.she
-          (~(transmit cs say.she) `sole-edit`?~(t.lit i.lit [%mor lit]))
-      (sh-fact [%mor [%det lic] ~])
-    ::
-    ++  sh-stir                                         ::  apply edit
-      |=  cal=sole-change
-      ^+  +>
-      =^  inv  say.she  (~(transceive cs say.she) cal)
-      =+  lit=(sh-sane inv buf.say.she)
-      ?~  lit
-        +>.$
-      (sh-slug lit)
-    ::
-    ++  sh-pork                                         ::  parse work
-      ^-  (unit work)
-      ?~  buf.say.she  ~
-      =+  txt=(tufa buf.say.she)
-      ?:  =(';' -.txt)
-        (rust +.txt sh-scad)
-      ?:  =('@' -.buf.say.she)
-        `[%say %lin | (crip (tufa +.buf.say.she))]
-      =+  rul=(rust txt sh-purl)
-      ?^  rul  `[%say %url u.rul]
-      `[%say %lin & (crip (tufa buf.say.she))]
-    ::
-    ++  sh-lame                                         ::  send error
-      |=  txt=tape
-      (sh-fact [%txt txt])
-    ::
-    ++  sh-whom                                         ::  current audience
-      ^-  audience
-      %-  ~(gas by *audience)
-      %+  turn  (~(tap in ?~(active.she passive.she u.active.she)))
-      |=(a=partner [a *envelope %pending])
-    ::
-    ++  sh-tell                                         ::  add command
-      |=  cod=command
-      %_(+> coz [cod coz])
-    ::
-    ++  sh-work                                         ::  do work
-      |=  job=work
-      ^+  +>
-      =+  roy=(~(got by stories) man.she)
-      =<  work
-      |%
-      ++  work
-        ?-  -.job
-          %number  (number +.job)
-          %join    (join +.job)
-          %invite  (invite +.job)
-          %banish  (banish +.job)
-          %create  (create +.job)
-          %target  (target +.job)
-          %probe   (probe +.job)
-          %say     (say +.job)
-        ==
-      ::
-      ++  activate                                      ::  from %number
-        |=  gam=telegram
-        ^+  +>+>+>
-        =.  +>+>+>  ?.  ?=(%url -.r.r.q.gam)  +>+>+>
-          (sh-fact %txt (earn p.r.r.q.gam))
-        sh-prod(active.she `~(tr-pals tr man.she gam))
-      ::
-      ++  join                                          ::  %join
-        |=  lix=(set partner)
-        ^+  +>+>+>
-        =+  loc=loc.system.she
-        %^  sh-tell  %design  man.she
-        :-  ~
-        =+  tal=(~(tap in lix))
-        %_    loc
-            sources
-          |-  ^-  (set partner)
-          ?~  tal  sources.loc
-          ?:  (~(has in sources.loc) i.tal)
-            $(tal t.tal, sources.loc (~(del in sources.loc) i.tal))
-          $(tal t.tal, sources.loc (~(put in sources.loc) i.tal))
-        ==
-      ::
-      ++  invite                                        ::  %invite
-        |=  [nom=span tal=(list partner)]
-        ^+  +>+>+>
-        !!
-      ::
-      ++  banish                                        ::  %banish
-        |=  [nom=span tal=(list partner)]
-        ^+  +>+>+>
-        !!
-      ::
-      ++  create                                        ::  %create
-        |=  [por=posture nom=span txt=cord]
-        ^+  +>+>+>
-        ?:  (~(has in stories) nom) 
-          (sh-lame "{(trip nom)}: already exists")
-        =.  +>+>+>
-            %^  sh-tell  %design  nom
-            :-  ~
-            :+  *(set partner)
-              (end 3 62 txt)
-            [por ~]
-        (join [[%& our.hid nom] ~ ~])
-      ::
-      ++  target                                        ::  %target
-        |=  lix=(set partner)
-        (sh-pact lix)
-      ::
-      ++  number                                        ::  %number
-        |=  [rel=? num=@ud]
-        ^+  +>+>+>
-        =+  roy=(~(got by stories) man.she)
-        =.  num
-            ?.  rel  num
-            =+  dog=|-(?:(=(0 num) 1 (mul 10 $(num (div num 10)))))
-            (add num (mul dog (div count.roy dog)))
-        ?:  (gte num count.roy)
-          (sh-lame "{(scow %ud num)}: no such telegram")
-        (activate (snag (sub count.roy +(num)) grams.roy))
-      ::
-      ++  probe                                         ::  inquire
-        |=  cuz=station
-        ^+  +>+>+>
-        ~&  [%probe cuz]
-        +>+>+>
-      ::
-      ++  say                                           ::  publish
-        |=  sep=speech
-        ^+  +>+>+>
-        =^  sir  +>+>+>  sh-uniq
-        %=    +>+>+>.$
-            coz  :_  coz
-          [%publish [[sir sh-whom [lat.hid ~ sep]] ~]]
-        ==
-      --
-    ::
-    ++  sh-done                                         ::  apply result
-      =+  lit=(sh-sane [%nop ~] buf.say.she)
-      ?^  lit
-        (sh-slug lit)
-      =+  jub=sh-pork
-      ?~  jub  (sh-fact %bel ~)
-      =.  +>  (sh-work u.jub)
-      =+  buf=buf.say.she
-      =^  cal  say.she  (~(transmit cs say.she) [%set ~])
-      %-  sh-fact
-      :*  %mor
-          [%nex ~]
-          [%det cal]
-          ?.  ?=([%';' *] buf)  ~ 
-          :_  ~
-          [%txt (weld "----------------| " (tufa buf))]
-      ==
-    ::
-    ++  sh-sole                                         ::  apply edit
-      |=  act=sole-action
-      ^+  +>
-      ?-  -.act
-        %det  (sh-stir +.act)
-        %ret  sh-done
-      ==
-    ::
-    ++  sh-uniq
-      ^-  [serial _.]
-      [(shaf %serial eny.hid) .(eny.hid (shax eny.hid))]
-    --
-  ++  ra-abed                                           ::  resolve core
-    ^-  [(list move) _+>]
-    :_  +>
-    =+  ^=  yop  
-        |-  ^-  (pair (list move) (list sole-effect))
-        ?~  moves  [~ ~]
-        =+  mor=$(moves t.moves)
-        ?:  ?&  =(ost p.i.moves) 
-                ?=([%give %rush %sole-effect *] q.i.moves)
-            ==
-          [p.mor [+>+.q.i.moves q.mor]]
-        [[i.moves p.mor] q.mor]
-    =+  :*  moz=(flop p.yop)
-            ^=  foc  ^-  (unit sole-effect)
-            ?~  q.yop  ~ 
-            ?~(t.q.yop `i.q.yop `[%mor (flop `(list sole-effect)`q.yop)])
-        ==
-    ?~(foc moz [[ost %give %rush %sole-effect u.foc] moz])
-  ::
-  ++  ra-abet                                           ::  complete core
-    ra-abed:ra-axel
-  ::
-  ++  ra-axel                                           ::  rebound reports
-    ^+  .
-    =+  ^=  rey
-        |-  ^-  (pair (list move) (list (pair bone report)))
-        ?~  moves
-          [~ ~]
-        =+  mor=$(moves t.moves)
-        ?.  ?&  (~(has by shells) `bone`p.i.moves)
-                ?=([%give %rush %talk-report *] q.i.moves)
-            ==  
-          [[i.moves p.mor] q.mor]
-        [p.mor [[p.i.moves +>+.q.i.moves] q.mor]]
-    =.  moves  p.rey
-    ?:  =(q.rey ~)  +
-    =.  q.rey  (flop q.rey)
-    |-  ^+  +>
-    ?~  q.rey  ra-axel
-    $(q.rey t.q.rey, +> (ra-back(ost p.i.q.rey) q.i.q.rey))
-  ::
-  ++  ra-back
-    |=  rad=report
-    ^+  +>
-    sh-abet:(~(sh-repo sh ~ (~(got by shells) ost)) rad)
-  ::
-  ++  ra-sole
-    |=  act=sole-action
-    ^+  +>
-    =+  shu=(~(get by shells) ost)
-    ?~  shu
-      ~&  [%ra-console-broken ost]
-      +>.$
-    sh-abet:(~(sh-sole sh ~ (~(got by shells) ost)) act)
-  ::  
-  ++  ra-emil                                           ::  ra-emit move list
-    |=  mol=(list move)
-    %_(+> moves (welp (flop mol) moves))
-  ::
-  ++  ra-emit                                           ::  emit a move
-    |=  mov=move
-    %_(+> moves [mov moves])
-  ::
-  ++  ra-ever                                           ::  emit success
-    (ra-emit ost %give %nice ~)
-  ::
-  ++  ra-evil                                           ::  emit error
-    |=  msg=cord
-    ~&  [%ra-evil msg]
-    (ra-emit ost %give %mean ~ msg ~)
-    ::  (ra-emit ost %give %nice ~)
-  ::
-  ++  ra-house                                          ::  emit partners
-    |=  ost=bone
-    %+  ra-emit  ost
-    :^  %give  %rush  %talk-report
-    :-  %house
-    %-  ~(gas in *(map span (pair posture cord)))
-    %+  turn  (~(tap by stories)) 
-    |=([a=span b=story] [a p.cordon.shape.b caption.shape.b])
-  ::
-  ++  ra-homes                                          ::  update partners
-    =+  gel=general
-    |-  ^+  +>
-    ?~  gel  +>
-    =.  +>  $(gel l.gel)
-    =.  +>  $(gel r.gel)
-    (ra-house n.gel)
-  ::
-  ++  ra-init                                           ::  initialize talk
-    %+  ra-apply  our.hid
-    :+  %design  (main our.hid)
-    :-  ~  :-  ~
-    :-  'default home'
-    [%brown ~] 
-  ::
-  ++  ra-apply                                          ::  apply command
-    |=  [her=ship cod=command]
-    ^+  +>
-    ?-    -.cod
-        %design
-      ?.  =(her our.hid)
-        (ra-evil %talk-no-owner)
-      ?~  q.cod
-        ?.  (~(has by stories) p.cod)
-          (ra-evil %talk-no-story)
-        =.  +>.$  (ra-config p.cod *config)
-        ra-ever(stories (~(del by stories) p.cod))
-      =.  +>.$  (ra-config p.cod u.q.cod)
-      ra-ever
-    ::
-        %review   ra-ever:(ra-think | her +.cod)
-        %publish  ra-ever:(ra-think & her +.cod)
-    ==
-  ::
-  ++  ra-config                                         ::  configure story
-    |=  [man=span con=config]
-    ^+  +>
-    =+  :-  neu=(~(has by stories) man)
-        pur=(fall (~(get by stories) man) *story)
-    =.  +>.$  pa-abet:(~(pa-reform pa man pur) con)
-    ?:(neu +>.$ ra-homes)
-  ::
-  ++  ra-friend                                         ::  %friend response
-    |=  [man=span tay=partner sih=sign]
-    ^+  +>
-    =+  pur=(~(get by stories) man)
-    ?~  pur  ~&  [%ra-friend-none man]  +>.$
-    pa-abet:(~(pa-friend pa man u.pur) tay sih)
-  ::
-  ++  ra-twitter                                        ::  %twitter response
-    |=  [[num=@ud man=span] sih=sign]
-    ^+  +>
-    ?+    sih  ~|([%talk-bad-twitter sih] !!)
-        [%g ?(%nice %mean) ~]
-      +>
-        [%g %mean ^]
-      (ra-repeat num [%| %twitter man] sih)
-        [%g %rush %twit-stat *]
-      (ra-repeat num [%| %twitter man] [%g %nice ~])
-    ==
-  ::
-  ++  ra-repeat                                         ::  %repeat response
-    |=  [num=@ud pan=partner sih=sign]
-    =+  oot=(~(get by q.outbox) num)
-    ?~  oot  ~&  [%ra-repeat-none num]  +>.$
-    =.  q.outbox  (~(del by q.outbox) num)
-    =.  q.u.oot
-      =+  olg=(~(got by q.u.oot) pan)
-      %+  ~(put by q.u.oot)  pan
-      :-  -.olg
-      ?+  sih  !!
-        [%g %mean *]  ~&([%talk-repeat-rejected num pan sih] %rejected)
-        [%g %nice ~]  %received
-      ==
-    (ra-think | our.hid u.oot ~)
-  ::
-  ++  ra-cancel                                         ::  drop a bone
-    ^+  .
-    =+  hep=(~(get by sup.hid) ost)
-    ?~  hep  +
-    ?.  ?=([@ @ *] q.u.hep)
-      +(general (~(del in general) ost))
-    =*  man  i.t.q.u.hep
-    =+  pur=(~(get by stories) man)
-    ?~  pur  +>
-    pa-abet:(pa-notify:~(pa-cancel pa man u.pur) p.u.hep %gone *human)
-  ::
-  ++  ra-human                                          ::  look up person
-    |=  her=ship
-    ^-  [human _+>]
-    =^  who  folks
-        =+  who=(~(get by folks) her)
-        ?^  who  [u.who folks]
-        =+  who=`human`[~ `(scot %p her)]               ::  XX do right
-        [who (~(put by folks) her who)]
-    [who +>.$]
-  ::
-  ++  ra-console                                        ::  console subscribe
-    |=  [her=ship pax=path]
-    ^+  +>
-    =+  man=`span`?~(pax (main her) ?>(?=(~ t.pax) i.pax))
-    =+  ^=  she  ^-  shell
-        [her man 0 *sole-share ~ [[%& our.hid man] ~ ~] [~ ~] ~ *cabal]
-    sh-abet:~(sh-peer sh ~ she)
-  ::
-  ++  ra-subscribe                                      ::  listen to
-    |=  [her=ship pax=path]
-    ^+  +>
-    ::  ~&  [%ra-subscribe ost her pax]
-    ?:  ?=(~ pax)
-      (ra-house(general (~(put in general) ost)) ost)
-    ?.  ?=([@ @ *] pax)
-      (ra-evil %talk-bad-path)
-    =+  ^=  vab  ^-  (set ,@tas)
-        =|  vab=(set ,@tas)
-        |-  ^+  vab
-        ?:  =(0 i.pax)  vab
-        $(i.pax (rsh 3 1 i.pax), vab (~(put in vab) (end 3 1 i.pax)))
-    =+  pur=(~(get by stories) i.t.pax)
-    ?~  pur
-      ~&  [%bad-subscribe-story-c i.t.pax]
-      (ra-evil %talk-no-story)
-    =+  soy=~(. pa i.t.pax u.pur)
-    =.  soy  ?.((~(has in vab) %a) soy (pa-watch:soy her))
-    =.  soy  ?.((~(has in vab) %x) soy (pa-master:soy her))
-    =.  soy  ?.((~(has in vab) %f) soy (pa-listen:soy her t.t.pax))
-    =^  who  +>.$  (ra-human her)
-    pa-abet:(pa-notify:soy her %hear who)
-  ::
-  ++  ra-think                                          ::  publish/review
-    |=  [pub=? her=ship tiz=(list thought)]
-    ^+  +>
-    ?~  tiz  +>
-    $(tiz t.tiz, +> (ra-consume pub her i.tiz))
-  ::
-  ++  ra-normal                                         ::  normalize
-    |=  tip=thought
-    ^-  thought
-    ?.  ?=([%lin *] r.r.tip)  tip
-    %_    tip
-        q.r.r
-      %-  crip
-      %+  scag  62
-      %-  tufa
-      %+  turn  (tuba (trip q.r.r.tip))
-      |=  a=@c
-      ?:  &((gte a 'A') (lte a 'Z'))
-        (add a 32)
-      ?:  |((lth a 32) (gth a 126))
-        `@`'?'
-      a
-    ==
-  ::
-  ++  ra-consume                                        ::  consume thought
-    |=  [pub=? her=ship tip=thought]
-    =.  tip  (ra-normal tip)
-    =+  aud=(~(tap by q.tip) ~)
-    |-  ^+  +>.^$
-    ?~  aud  +>.^$
-    $(aud t.aud, +>.^$ (ra-conduct pub her p.i.aud tip))
-  ::
-  ++  ra-conduct                                        ::  thought to partner
-    |=  [pub=? her=ship tay=partner tip=thought]
-    ^+  +>
-    ::  ~&  [%ra-conduct pub her tay]
-    ?-  -.tay
-      %&  ?:  pub
-            =.  her  our.hid                            ::  XX security!
-            ?:  =(her p.p.tay)
-              (ra-record q.p.tay p.p.tay tip)
-            (ra-transmit p.tay tip)
-          ?.  =(our.hid p.p.tay)
-            +>
-          (ra-record q.p.tay her tip)
-      %|  ?.  pub  +>
-          ?-    -.p.tay
-              %twitter
-            (ra-tweet p.p.tay tip)
-    ==    ==
-  ::
-  ++  ra-record                                         ::  add to story
-    |=  [man=span gam=telegram]
-    ^+  +>
-    =+  pur=(~(get by stories) man)
-    ?~  pur
-      ~&  [%no-story man]
-      +>.$
-    pa-abet:(~(pa-learn pa man u.pur) gam)
-  ::
-  ++  ra-transmit                                       ::  send to neighbor
-    |=  [cuz=station tip=thought]
-    ^+  +>
-    =.  +>
-        %+  ra-emit  ost
-        :*  %pass
-            /repeat/(scot %ud p.outbox)/(scot %p p.cuz)/[q.cuz]
-            %g
-            %mess
-            [p.cuz /talk]
-            our.hid
-            [%talk-command !>(`command`[%review tip ~])]
-        ==
-    +>(p.outbox +(p.outbox), q.outbox (~(put by q.outbox) p.outbox tip))
-  ::
-  ++  ra-tweet                                          ::  send to /twit
-    |=  [man=span tip=thought]
-    =*  sta  r.tip
-    ?>  ?=(%lin -.r.sta)
-    =.  q.outbox  (~(put by q.outbox) p.outbox tip)
-    %^    ra-emil(p.outbox +(p.outbox))
-        :*  ost
-            %pass  /twitter/stat/(scot %ud p.outbox)/[man]
-            %g  %mess
-            [our.hid /twit]  our.hid
-            [%twit-do !>(`twit-do`[man %post p.tip q.r.sta])]
-        ==
-      :*  ost
-          %pass  /twitter/stat/(scot %ud p.outbox)/[man]
-          [%g %show [our.hid /twit] our.hid /post/(scot %uv p.tip)]
-      ==
-    ~
-  ++  pa                                                ::  story core
-    |_  $:  man=span
-            story
-        ==
-    ++  pa-abet
-      ^+  +>
-      +>(stories (~(put by stories) man `story`+<+))
-    ::
-    ++  pa-admire                                       ::  accept from
-      |=  her=ship
-      ^-  ?
-      ::?-  -.cordon.shape
-      ::  %&  (~(has in p.cordon.shape) her)
-      ::  %|  !(~(has in p.cordon.shape) her)
-      ::==
-      &
-    ::
-    ++  pa-watch                                        ::  watch presence
-      |=  her=ship
-      ?.  (pa-admire her)
-        (pa-sauce ost [[%mean ~ %talk-watch-unauthorized ~] ~])
-      =.  viewers  (~(put in viewers) ost)
-      (pa-display ost ~ ~)
-    ::
-    ++  pa-master                                       ::  hear config
-      |=  her=ship
-      ?.  (pa-admire her)
-        (pa-sauce ost [[%mean ~ %talk-master-unauthorized ~] ~])
-      =.  owners  (~(put in owners) ost)
-      ::  ~&  [%pa-master her man shape]
-      (pa-sauce ost [[%rush %talk-report %cabal shape mirrors] ~])
-    ::
-    ++  pa-display                                      ::  update presence
-      |=  vew=(set bone)
-      =+  ^=  reg
-          :_  remotes
-          |-  ^-  atlas
-          ?~  locals  ~
-          [[p.n.locals q.q.n.locals] $(locals l.locals) $(locals r.locals)]
-      ::  ~&  [%pa-display man reg]
-      |-  ^+  +>.^$
-      ?~  vew  +>.^$
-      =.  +>.^$  $(vew l.vew)
-      =.  +>.^$  $(vew r.vew)
-      (pa-sauce n.vew [[%rush %talk-report %group reg] ~])
-    ::
-    ++  pa-monitor                                      ::  update config
-      =+  owe=owners
-      |-  ^+  +>
-      ?~  owe  +>
-      =.  +>  $(owe l.owe)
-      =.  +>  $(owe r.owe)
-      ::  ~&  [%pa-monitor man shape]
-      (pa-sauce n.owe [[%rush %talk-report %cabal shape mirrors] ~])
-    ::
-    ++  pa-cabal
-      |=  [cuz=station con=config ham=(map station config)]
-      ^+  +>
-      =+  old=mirrors
-      =.  mirrors  (~(put by mirrors) cuz con)
-      ?:  =(mirrors old)
-        +>.$
-      pa-monitor 
-    ::
-    ++  pa-friend                                       ::  subscribed update
-      |=  [tay=partner sih=sign]
-      ^+  +>
-      ?+    sih  ~|([%talk-bad-friend sih] !!)
-          [%g %nice ~]
-        +>.$
-      ::
-          [%g %mean *]
-        ?~  +>.sih
-          ?.  (~(has in sources.shape) tay)  +>.$  ::  XX hack for odd mean
-          (pa-acquire [tay ~])
-        pa-monitor(sources.shape (~(del in sources.shape) tay))
-      ::
-          [%g %rush %twit-feed *]
-        %-  pa-lesson
-        %+  turn  p.p.sih  |=  twit-stat
-        ^-  telegram
-        :^    our.hid                 ::  XX inaccurate
-            (shas %twit id)
-          `audience`[[tay [& ~ tay] %received] `~]      ::  current party?
-        ^-  statement
-        :+  now
-          ~                           ::  XX  hashtags
-        [%lin & txt]
-    ::
-          [%g %rush %talk-report *]
-        ::  ~&  [%pa-friend-report +>+.sih]
-        ?>  ?=(%& -.tay)
-        =.  +>  %+  pa-scrub  ost 
-                :_  ~
-                :-  /friend/show/[man]/(scot %p p.p.tay)/[q.p.tay]
-                [%g %took [p.p.tay /talk] our.hid]
-        ?+  -.p.p.sih  ~|([%talk-odd-friend sih] !!)
-          %cabal  (pa-cabal `station`p.tay `cabal`+.p.p.sih)
-          %group  (pa-remind tay +.p.p.sih)
-          %grams  (pa-lesson q.+.p.p.sih)
-        ==
-      ==
-    ::
-    ++  pa-scrub                                        ::  pass forward
-      |=  [ost=bone bub=(list (pair path note))]
-      %_    +>.$
-          moves
-        (welp (flop (turn bub |=(a=(pair path note) [ost %pass a]))) moves)
-      ==
-    ::
-    ++  pa-sauce                                        ::  send backward
-      |=  [ost=bone gub=(list gift)]
-      %_    +>.$
-          moves
-        (welp (flop (turn gub |=(a=gift [ost %give a]))) moves)
-      ==
-    ::
-    ++  pa-abjure                                       ::  unsubscribe move
-      |=  tal=(list partner)
-      %+  pa-scrub  0
-      %-  zing
-      %+  turn  tal
-      |=  tay=partner
-      ?-  -.tay
-        %|  ~&  tweet-abjure/p.p.tay
-            !!
-            ::  :~  :-  /friend/nuke/[man]/twitter/[p.p.tay]
-            ::      [%g %nuke [our.hid /twit] our.hid]
-            ::  ==
-      ::
-        %&  ~&  [%pa-abjure [our.hid man] [p.p.tay q.p.tay]]
-            :~  :-  /friend/show/[man]/(scot %p p.p.tay)/[q.p.tay]
-                [%g %nuke [p.p.tay /talk] our.hid]
-            ==
-      ==
-    ::
-    ++  pa-acquire                                      ::  subscribe to
-      |=  tal=(list partner)
-      %+  pa-scrub  0
-      %-  zing
-      %+  turn  tal
-      |=  tay=partner
-      ^-  (list (pair path note))
-      =+  num=(fall (~(get by sequence) tay) 0)
-      ?-  -.tay
-        %|  ~&  tweet-acquire/p.p.tay
-            :~  :-  /friend/show/[man]/twitter/[p.p.tay]
-                [%g %show [our.hid /twit] our.hid /user/[p.p.tay]]
-            ==
-      ::
-        %&  ::  ~&  [%pa-acquire [our.hid man] [p.p.tay q.p.tay]]
-            :~  :-  /friend/show/[man]/(scot %p p.p.tay)/[q.p.tay]
-                [%g %show [p.p.tay /talk] our.hid /afx/[q.p.tay]/(scot %ud num)]
-            ==
-      ==
-    ::
-    ++  pa-reform                                       ::  reconfigure, ugly
-      |=  cof=config
-      =+  ^=  dif  ^-  (pair (list partner) (list partner))
-          =+  old=`(list partner)`(~(tap in sources.shape) ~)
-          =+  new=`(list partner)`(~(tap in sources.cof) ~)
-          :-  (skip new |=(a=partner (~(has in sources.shape) a)))
-          (skip old |=(a=partner (~(has in sources.cof) a)))
-      =.  +>.$  (pa-acquire p.dif)
-      =.  +>.$  (pa-abjure q.dif)
-      =.  shape  cof
-      pa-monitor
-    ::
-    ++  pa-cancel                                       ::  unsubscribe from
-      ::  ~&  [%pa-cancel ost]
-      %_  .
-        guests  (~(del by guests) ost)
-        viewers  (~(del in viewers) ost)
-        owners  (~(del in owners) ost)
-      ==
-    ::
-    ++  pa-notify                                       ::  local presence
-      |=  [her=ship saz=status]
-      ^+  +>
-      =+  ^=  nol
-          ?:  =(%gone p.saz) 
-            (~(del by locals) her)
-          (~(put by locals) her lat.hid saz)
-      ?:  =(nol locals)  +>.$
-      (pa-display(locals nol) viewers)
-    ::
-    ++  pa-remind                                       ::  remote presence
-      |=  [tay=partner loc=atlas rem=(map partner atlas)]
-      =+  ^=  buk
-          =+  mer=(turn (~(tap by rem) ~) |=([* a=atlas] a))
-          |-  ^-  atlas
-          ?~  mer  loc
-          =.  loc  $(mer t.mer)
-          =+  dur=`(list (pair ship status))`(~(tap by i.mer) ~)
-          |-  ^-  atlas
-          ?~  dur  loc
-          =.  loc  $(dur t.dur)
-          =+  fuy=(~(get by loc) p.i.dur)
-          ?~  fuy  (~(put by loc) p.i.dur q.i.dur)
-          ?:  =(`presence`p.q.i.dur `presence`p.u.fuy)
-            loc
-          ?-  p.u.fuy
-            %gone  (~(del by loc) p.i.dur q.i.dur)
-            %talk  loc
-            %hear  (~(put by loc) p.i.dur q.i.dur)
-          ==
-      =+  gub=(~(get by remotes) tay)
-      ::  ~&  [%pa-remind tay gub buk]
-      ?.  |(?=(~ gub) !=(buk u.gub))
-        +>.$
-      =.  remotes  (~(put by remotes) tay buk)
-      (pa-display viewers)
-    ::
-    ++  pa-start                                        ::  start stream
-      |=  riv=river
-      ^+  +>
-      =-  ::  ~&  [%pa-start riv lab]
-          =.  +>.$  (pa-sauce ost [[%rush %talk-report %grams q.lab r.lab] ~])
-          ?:  p.lab
-            (pa-sauce ost [[%mean ~] ~])
-          +>.$(guests (~(put by guests) ost riv))
-      ^=  lab
-      =+  [end=count gaz=grams dun=| zeg=*(list telegram)]
-      |-  ^-  (trel ,? ,@ud (list telegram))
-      ?~  gaz  [dun end zeg]
-      ?:  ?-  -.q.riv                                   ::  after the end
-            %ud  (lte p.q.riv end)
-            %da  (lte p.q.riv p.r.q.i.gaz)
-          ==
-        $(end (dec end), gaz t.gaz)
-      ?:  ?-  -.p.riv                                   ::  before the start
-            %ud  (lth end p.p.riv)
-            %da  (lth p.r.q.i.gaz p.p.riv)
-          ==
-        [dun end zeg]
-      $(end (dec end), gaz t.gaz, zeg [i.gaz zeg])
-    ::
-    ++  pa-listen                                       ::  subscribe
-      |=  [her=ship pax=path]
-      ^+  +>
-      ?.  (pa-admire her)
-        (pa-sauce ost [[%mean ~ %talk-listen-unauthorized ~] ~])
-      =+  ^=  ruv  ^-  (unit river)
-          ?:  ?=(~ pax)
-            `[[%ud count] [%da (dec (bex 128))]]
-          ?:  ?=([@ ~] pax)
-            =+  say=(slay i.pax)
-            ?.  ?=([~ %$ ?(%ud %da) @] say)  ~
-            `[(point +>.say) [%da (dec (bex 128))]]
-          ?.  ?=([@ @ ~] pax)  ~
-          =+  [say=(slay i.pax) den=(slay i.t.pax)]
-          ?.  ?=([~ %$ ?(%ud %da) @] say)  ~
-          ?.  ?=([~ %$ ?(%ud %da) @] den)  ~
-          `[(point +>.say) (point +>.den)]
-      ::  ~&  [%pa-listen her pax ruv]
-      ?~  ruv
-        (pa-sauce ost [[%mean ~ %talk-malformed ~] ~])
-      (pa-start u.ruv)
-    ::
-    ++  pa-refresh                                      ::  update to guests
-      |=  [num=@ud gam=telegram]
-      ^+  +>
-      =+  ^=  moy
-          |-  ^-  (pair (list bone) (list move))
-          ?~  guests  [~ ~]
-          ::  ~&  [%pa-refresh num n.guests]
-          =+  lef=$(guests l.guests)
-          =+  rit=$(guests r.guests)
-          =+  old=[p=(welp p.lef p.rit) q=(welp q.lef q.rit)]
-          ?:  ?-  -.q.q.n.guests                        ::  after the end
-                %ud  (lte p.q.q.n.guests num)
-                %da  (lte p.q.q.n.guests p.r.q.gam)
-              ==
-            [[p.n.guests p.old] [[p.n.guests %give %mean ~] q.old]]
-          ?:  ?-  -.p.q.n.guests                        ::  before the start
-                %ud  (gth p.p.q.n.guests num)
-                %da  (gth p.p.q.n.guests p.r.q.gam)
-              ==
-            old
-          :-  p.old
-          [[p.n.guests %give %rush %talk-report %grams num gam ~] q.old]
-      =.  moves  (welp q.moy moves)
-      |-  ^+  +>.^$
-      ?~  p.moy  +>.^$
-      $(p.moy t.p.moy, guests (~(del by guests) i.p.moy))
-    ::
-    ++  pa-lesson                                       ::  learn multiple
-      |=  gaz=(list telegram)
-      ^+  +>
-      ?~  gaz  +>
-      $(gaz t.gaz, +> (pa-learn i.gaz))
-    ::
-    ++  pa-learn                                        ::  learn message
-      |=  gam=telegram
-      ^+  +>
-      ?.  (pa-admire p.gam)
-        ~&  %pa-admire-rejected
-        +>.$
-      =.  q.q.gam  
-        =+  ole=(~(get by q.q.gam) [%& our.hid man])
-        ?~  ole  q.q.gam
-        (~(put by q.q.gam) [%& our.hid man] -.u.ole %received)
-      =+  old=(~(get by known) p.q.gam)
-      ?~  old
-        (pa-append gam)
-      (pa-revise u.old gam)
-    ::
-    ++  pa-append                                       ::  append new
-      |=  gam=telegram
-      ^+  +>
-      %+  %=  pa-refresh
-            grams  [gam grams]
-            count  +(count)
-            known  (~(put by known) p.q.gam count)
-          ==
-        count
-      gam
-    ::
-    ++  pa-revise                                       ::  revise existing
-      |=  [num=@ud gam=telegram]
-      =+  way=(sub count num)
-      =.  grams  (welp (scag (dec way) grams) [gam (slag way grams)])
-      (pa-refresh num gam)
-    --
-  --
-::
-++  sn                                                  ::  station render core
-  |_  [man=span one=station] 
-  ++  sn-best                                           ::  best to show
-    |=  two=station
-    ^-  ?
-    ?:  =(our.hid p.one)
-      ?:  =(our.hid p.two)
-        ?<  =(q.one q.two)
-        ?:  =((main p.one) q.one)  %&
-        ?:  =((main p.two) q.two)  %|
-        (lth q.one q.two)
-      %&
-    ?:  =(our.hid p.two)
-      %|
-    ?:  =(p.one p.two)
-      (lth q.one q.two)
-    (lth p.one q.one)
-  ::
-  ++  sn-curt                                           ::  render name in 14
-    |=  mup=?
-    ^-  tape
-    =+  ^=  syl
-        |=  [len=@ud sez=(list cord)]
-        ?>  !=(0 len)
-        |-  ^-  tape
-        ?~  sez  ~
-        =+  nez=(trip i.sez)
-        =+  nel=(lent nez)
-        ?:  (gte nel len)
-          (welp (scag (dec len) nez) ">")
-        (welp nez $(sez t.sez))
-    ::
-    ?:  =(p.one our.hid)
-      ?:  =(q.one man)
-        (sigh 14 ?:(mup "*=" "=") %$)
-      (sigh 14 ?:(mup "*%" "%") q.one)
-    ?:  =(p.one (sein our.hid))
-      (sigh 14 ?:(mup "*/" "/") q.one)
-    =+  rac=(clan p.one) 
-    =+  raw=(scow %p p.one)
-    =.  raw  ?.(mup raw ['*' (slag 2 raw)])
-    ?-    rac
-        %czar  (weld "          " raw)
-        %king  (weld "       " raw)
-        %duke  raw
-        %earl  :(welp (scag 7 raw) "^" (scag 6 (slag 22 raw)))
-        %pawn  :(welp (scag 7 raw) "_" (scag 6 (slag 51 raw)))
-    ==
-  ::
-  ++  sn-phat                                           ::  render accurately
-    ^-  tape
-    ?:  =(p.one our.hid)
-      ?:  =(q.one man)
-        "="
-      ['%' (trip q.one)]
-    ?:  =(p.one (sein our.hid))
-      ['/' (trip q.one)]
-    =+  wun=(scow %p p.one)
-    ?:  =(q.one (main p.one))
-      wun
-    :(welp wun "/" (trip q.one))
-  --
-::
-++  ta                                                  ::  partner core
-  |_  [man=span one=partner]
-  ++  ta-beat                                           ::  more relevant
-    |=  two=partner  ^-  ?
-    ?-    -.one
-        %&  
-      ?-  -.two
-        %|  %&
-        %&  (~(sn-best sn man p.one) p.two)
-      ==
-    ::
-        %|
-      ?-  -.two
-        %&  %|
-        %|  ?:  =(-.p.two -.p.one)
-              (lth (mug +.p.one) (mug +.p.two))
-            (lth -.p.two -.p.one)
-      ==
-    ==
-  ++  ta-best                                           ::  most relevant 
-    |=(two=partner ?:((ta-beat two) one two))
-  ::
-  ++  ta-full  (ta-show ~)                              ::  render full width
-  ++  ta-show                                           ::  render partner
-    |=  moy=(unit ,?)
-    ^-  tape
-    ?-    -.one
-        %&  
-      ?~  moy 
-        ~(sn-phat sn man p.one)
-      (~(sn-curt sn man p.one) u.moy)
-    ::
-        %|
-      =+  ^=  pre  ^-  tape
-          ?-  -.p.one
-            %twitter  "@t:"
-          ==
-      ?~  moy
-        (weld pre (trip p.p.one))
-      =.  pre  ?.(=(& u.moy) pre ['*' pre])
-      (sigh 14 pre p.p.one)
-    ==
-  --
-::
-++  te                                                  ::  audience renderer
-  |_  [man=span lix=(set partner)]
-  ++  te-best  ^-  (unit partner)
-    ?~  lix  ~
-    :-  ~
-    |-  ^-  partner
-    =+  lef=`(unit partner)`te-best(lix l.lix)
-    =+  rit=`(unit partner)`te-best(lix r.lix)
-    =.  n.lix  ?~(lef n.lix (~(ta-best ta man n.lix) u.lef))
-    =.  n.lix  ?~(rit n.lix (~(ta-best ta man n.lix) u.rit))
-    n.lix
-  ::
-  ++  te-deaf  ^+  .                                    ::  except for self
-    .(lix (~(del in lix) `partner`[%& our.hid man]))
-  ::
-  ++  te-maud  ^-  ?                                    ::  multiple audience
-    =.  .  te-deaf
-    ?~  lix  %|
-    |(!=(~ l.lix) !=(~ r.lix))
-  ::
-  ++  te-prom  ^-  tape                                 ::  render targets
-    =.  .  te-deaf
-    =+  ^=  all
-        %+  sort  `(list partner)`(~(tap in lix))
-        |=  [a=partner b=partner]
-        (~(ta-beat ta man a) b)
-    =+  fir=&
-    |-  ^-  tape
-    ?~  all  ~
-    ;:  welp
-      ?:(fir "" " ")
-      (~(ta-show ta man i.all) ~)
-      $(all t.all, fir |)
-    ==
-  ::
-  ++  te-whom                                           ::  render sender
-    (~(ta-show ta man (need te-best)) ~ te-maud)
-  --
-::
-++  tr                                                  ::  telegram renderer
-  |_  $:  man=span
-          who=ship
-          sen=serial
-          aud=audience
-          wen=@da
-          bou=(set flavor)
-          sep=speech
-      ==
-  ++  tr-line  ^-  tape                                 ::  one-line print
-    =+  oug==(who our.hid)
-    =+  txt=(tr-text oug)
-    ?:  =(~ txt)  ""
-    =+  eck=?:((~(has by aud) [%& our.hid man]) '*' '-')
-    =+  heb=?:(oug '>' '<')
-    =+  ^=  baw
-        ?:  oug 
-          ~(te-whom te man tr-pals)
-        (~(sn-curt sn man [who (main who)]) |)
-    [heb eck (weld baw txt)]
-  ::
-  ++  tr-pals
-    ^-  (set partner)
-    %-  ~(gas in *(set partner))
-    (turn (~(tap by aud)) |=([a=partner *] a))
-  ::
-  ++  tr-text
-    |=  oug=?
-    ^-  tape
-    ?+    -.sep  ""
-        %url  
-      =+  txt=(earn p.sep)
-      %+  weld  "/ "
-      ?:  (gte 62 (lent txt))
-        txt
-      (weld (scag 61 (earn p.sep)) "…")
-    ::
-        %lin
-      =+  txt=(trip q.sep)
-      ?:  p.sep
-        (weld ": " txt)
-      ?:  oug
-        (weld "@ " txt)
-      (weld " " txt)
-    ::
-        %app
-      [' ' (trip p.sep)]
-    ==
-  -- 
-::
-++  peer
-  |=  [ost=bone her=ship pax=path]
-  ^-  [(list move) _+>]
-  ?:  ?=([%sole *] pax)
-    ?>  =(our.hid her)
-    ?<  (~(has by shells) ost)
-    ra-abet:(~(ra-console ra ost ~) her t.pax)
-  ::  ~&  [%talk-peer-data ost her pax]
-  ra-abet:(~(ra-subscribe ra ost ~) her pax)
-::
-++  poke-talk-command
-  |=  [ost=bone her=ship cod=command]
-  ^-  [(list move) _+>]
-  ra-abet:(~(ra-apply ra ost ~) her cod)
-::
-++  poke-sole-action
-  |=  [ost=bone her=ship act=sole-action]
-  ra-abet:(~(ra-sole ra ost [ost %give %nice ~]~) act)
-::
-++  pour
-  |=  [ost=bone pax=path sih=*]
-  ^-  [(list move) _+>]
-  ::  ~&  sih=sih
-  =+  sih=((hard sign) sih)
-  ::  ~&  [%talk-pour ost pax sih]
-  ?+    pax  ~&  [%talk-strange-path pax]  !!
-  ::
-      [%twitter *]
-    =-  ra-abet:(~(ra-twitter ra ost ~) met sih)
-    ^=  met
-    ?+    t.pax  ~|  [%talk-twitter-strange-path pax]  !!
-      ::    [%mine @ @ ~]
-      ::  [i.t.pax i.t.t.t.pax]
-        [%stat @ @ ~]
-      [(slav %ud i.t.t.pax) i.t.t.t.pax]
-    ==
-  ::
-      [%friend *]
-    ?>  ?=([@ @ @ @ ~] t.pax)
-    ?.  =(%show i.t.pax)
-      ::  ~&  [%pour-friend-nuke-nuke pax]
-      [~ +>.$]
-    =+  man=i.t.t.pax
-    =+  ?:  ?=(%twitter i.t.t.t.pax)
-          tay=[%| i.t.t.t.pax i.t.t.t.t.pax]
-        tay=[%& (slav %p i.t.t.t.pax) i.t.t.t.t.pax]
-    ra-abet:(~(ra-friend ra ost ~) man tay sih)
-  ::
-      [%repeat *]
-    ?>  ?=([@ @ @ ~] t.pax)
-    =+  [num her man]=[(slav %ud i.t.pax) (slav %p i.t.t.pax) i.t.t.t.pax]
-    ra-abet:(~(ra-repeat ra ost ~) num [%& her man] sih)
-  ==
-::
-++  pull
-  |=  ost=bone
-  ^-  [(list move) _+>]
-  ::  ~&  [%talk-pull `*`ost]
-  =^  moz  +>.$  ra-abet:ra-ever:~(ra-cancel ra ost ~)
-  [moz +>.$(shells (~(del by shells) ost))]
-::
-++  poke-bit
-  |=  [ost=bone you=ship ~]
-  ^-  [(list move) _+>]
-  :_  +>.$
-  =+  paf=/(scot %p our.hid)/home/(scot %da lat.hid)/talk/backlog/mime
-  :_  ~
-  :*  ost  %pass  /jamfile  %c  %info  our.hid
-      (foal paf %mime !>([/mime/jam (taco (jam +<+.+>.$))]))
-  ==
-::
-++  prep
-  |=  old=(unit (unit house-any))
-  ^-  [(list move) _+>]
-  ~&  %talk-prep
-  ?>  ?=(^ old)
-  =|  moz=(list move)
-  |-
-  ?~  u.old
-    =+  paf=/(scot %p our.hid)/home/(scot %da lat.hid)/talk/backlog/mime
-    ?.  ?=([%0 %0 %0] [.^(%cy paf)])
-      ~&  %talk-prep-restore
-      $(u.old (some ((hard house-any) (cue ((hard ,@) .^(%cx paf))))))
-    ra-abet:~(ra-init ra 0 moz)
-  :-  moz
-  |-
-  ?-  -.u.u.old
-    %1  %_(+>.^^$ +<+ u.u.old)
-    %0  $(u.u.old [%1 (house-0-to-house-1 +.u.u.old)])
-  ==
-::
-++  house-0-to-house-1
-  |=  vat=house-0
-  ^-  house-1
-  =-  :*  stories=-
-          general=~
-          outbox=[0 ~]
-          folks=~
-          shells=~
-      ==
-  ^-  (map span story)
-  =-  %-  ~(run by -)
-      |=  grams=(list telegram)
-      ^-  story
-      :*  count=(lent grams)
-          grams=grams
-          locals=~
-          remotes=~
-          mirrors=~
-          sequence=~
-          shape=[.(cordon [%black ~])]:*config
-          ^=  known  %-  mo  ^-  (list ,[serial @])  =<  +
-          (roll grams |=([telegram a=@ b=(list ,[serial @])] [+(a) [a p.q] b]))
-          guests=~
-          viewers=~
-          owners=~
-      ==
-  ^-  (map span (list telegram))
-  %-  mo  %+  turn  (~(tap by vat))
-  |=  [a=path b=(list zong) c=(map ship ,?)]
-  =+  ^=  par
-      ?:  =(/ a)  'hub'
-      =+  (turn a |=(d=span leaf/(trip d)))
-      (crip ~(ram re %rose ["_" ~ ~] -))
-  :-  par
-  =+  aud=`audience`[[[%& our.hid par] *envelope %received] `~]
-  =+  ^=  spe
-      |=  r=_r:*zong  ^-  speech
-      ?-  -.r
-        %say  [%lin %& p.r]
-        %do   [%lin %| p.r]
-        %exp  [%fat [%tank q.r ~] [%exp p.r]]
-      ==
-  %+  turn  b
-  |=  d=zong  ^-  telegram
-  [q.d (sham eny.hid d) aud p.d ~ (spe r.d)]
---
diff --git a/base/fap/tease/core.hook b/base/fap/tease/core.hook
deleted file mode 100644
index 144ef4724..000000000
--- a/base/fap/tease/core.hook
+++ /dev/null
@@ -1,28 +0,0 @@
-::                                                      ::  ::
-::::  /hook/core/tease/app                              ::  ::
-  ::                                                    ::  ::
-/?  314                                                 ::  zuse version
-/-  *console                                            ::  console structures
-/+  console                                             ::  console library
-!:                                                      ::  ::
-::::                                                    ::  ::
-  ::                                                    ::  ::
-|_  [hid=hide ~]
-++  peer  ,_`.
-++  poke--args
-  |=  [ost=bone you=ship ~]
-  ~&  %tease
-  :_  +>.$
-  :~  :*  0    %pass  ~
-          %g   %show  
-          [our.hid /seat]  our.hid
-          /
-      ==
-      :*  0    %pass  ~
-          %g   %mess  
-          [our.hid /seat]  our.hid
-          %dill-belt
-          !>(`dill-belt`[%yow %helm])
-      ==
-  ==
---
diff --git a/base/fap/terminal/core.hook b/base/fap/terminal/core.hook
deleted file mode 100644
index f3ad9c99f..000000000
--- a/base/fap/terminal/core.hook
+++ /dev/null
@@ -1,306 +0,0 @@
-::    Terminal
-::
-::::  /hook/core/terminal/app
-  ::
-/?    314                                               ::  need urbit 314
-/-    term-line, term-in, term-ctrl, kyev
-::/=    stat  /:/%%/:/hymn/
-::
-::::  structures
-  ::
-|%                                                      ::
-++  axle  $:  %1                                        ::
-              hiz=(map path term-line)                  ::
-          ==                                            ::
-++  gilt                                                ::
-  $%  [%term-line p=term-line]                          ::
-      [%hymn p=manx]                                    ::
-  ==                                                    ::
-++  gift                                                ::
-  $%  [%rush gilt]                                      ::
-      [%init p=@p]                                      ::
-      [%logo @]                                         ::
-      [%mean p=ares]                                    ::
-      [%nice ~]                                         ::
-      [%sage p=path q=*]                                ::
-      [%verb ~]                                         ::
-      [%veer p=@ta q=path r=@t]                         ::
-      [%vega p=path]                                    ::
-  ==                                                    ::
-++  glas  ?(%term %lines)                               ::
-++  hapt  ,[p=ship q=path]                              ::
-++  mess                                                ::
-  $%  [%txt p=(hypo cord)]                              ::
-      [%kyev p=(hypo kyev)]                             ::
-      [%type p=(hypo ,?)]                               ::
-  ==                                                    ::
-++  move  ,[p=bone q=(mold note gift)]                  ::
-++  note                                                ::
-  $%  $:  %g                                            ::
-  $%  [%cide p=span]                                    ::
-      [%show p=hapt q=ship r=path]                      ::
-      [%sire p=term q=span]                             ::
-      [%mess p=hapt q=ship r=mess]                      ::
-      [%took p=hapt q=ship]                             ::
-  ==  ==  ==                                            ::
-++  sign                                                ::
-  $%  $:  %g                                            ::
-  $%  [%gone p=hapt]                                    ::
-      [%init p=@p]                                      ::
-      [%logo @]                                         ::
-      [%mean p=ares]                                    ::
-      [%nice ~]                                         ::
-      [%rush p=%term-line q=term-line]                  ::
-      [%sage p=path q=*]                                ::
-      [%verb ~]                                         ::
-      [%veer p=@ta q=path r=@t]                         ::
-      [%vega p=path]                                    ::
-  ==  ==  ==
---
-::
-::::  from future import wick, pack, pick  XX remove on breach or kelvin bump
-  ::
-|%
-++  wick                                                ::  span format
-  |=  a=@
-  ^-  (unit ,@ta)
-  =+  b=(rip 3 a)
-  =-  ?^(b ~ (some (rap 3 (flop c))))
-  =|  c=tape
-  |-  ^-  [b=tape c=tape]
-  ?~  b  [~ c]
-  ?.  =('~' i.b)
-    $(b t.b, c [i.b c])
-  ?~  t.b  [b ~]
-  ?-  i.t.b
-    %'~'  $(b t.t.b, c ['~' c])
-    %'-'  $(b t.t.b, c ['_' c])
-    @     [b ~]
-  ==
-::
-++  pack                                                ::  light path encoding
-  |=  [a=term b=path]  ^-  span
-  %+  rap  3  :-  (wack a)
-  (turn b |=(c=span (cat 3 '_' (wack c))))
-::
-++  pick                                                ::  light path decoding
-  |=  a=span  ^-  (unit ,[p=term q=path])
-  (rush a (most cab (sear wick urt:ab)))
---
-!:
-::::  helpers
-  ::
-|%
-++  aut  %shell
-++  inject
-  |=  [a=[i=mane t=(list mane)] b=marl]
-  |=  man=manx
-  ?.  =(i.a n.g.man)
-    man
-  ?~  t.a
-    man(c (weld c.man b))
-  man(c (turn c.man ^$(a t.a)))
-::
-++  start-shell
-  |=  [our=ship imp=path ost=bone you=ship pax=path]
-  %-  flop  
-  ^-  (list move)
-  =+  auc=(pack aut pax)
-  :-  [ost %pass [%fork pax] %g %sire [aut auc]]
-  [ost %pass [%resp pax] %g %show [our [auc imp]] you /out]~
---
-!:
-::::  per shell
-  ::
-|%
-++  se
-  |=  [hid=hide ost=bone you=ship hiz=(map path term-line) pax=path]
-  =+  tel=(fall (~(get by hiz) pax) *term-line)
-  =+  auc=(pack aut pax)
-  =^  mow  tel
-    ?:  (~(has by cub.hid) auc)
-      [~ tel]
-    :-  (start-shell our.hid imp.hid ost you pax)
-    tel(r :_(r.tel leaf/"+ {(trip aut)}"))
-  |%
-  ++  abet
-    ^-  [(list move) (map path term-line)]
-    [(flop mow) (~(put by hiz) pax tel)]
-  ::
-  ++  page
-    ;html
-      ;head
-        ;title: Not yet
-      ==
-      ;body;
-    ==
-::    %.  stat
-::    %+  inject
-::      ~[%html %head]
-::    ;=  ;script: urb.appl = "{(trip app.hid)}"
-::        ;script: urb.term = \{pax: "{(spud pax)}"}
-::    ==
-  ::
-  ++  peer
-    |=  gal=glas
-    %_    +>.$
-        mow
-      :_  mow
-      ?-  gal
-          %term   [ost %give %rust %hymn page]          ::  hymn front end
-          %lines  [ost %give %rust %term-line tel]      ::  term-line output
-      ==
-    ==
-  ::
-  ++  poke
-    |=  jof=$%([%line p=cord] [%res p=span] [%cmd p=char] [%type p=?])
-    ^+  +>
-    ?-    -.jof
-        %res                                            ::  restart shell
-      =.  +>.$
-        ?.  (~(has by cub.hid) auc)  +>.$
-        %_  +>.$
-          mow    :_(mow [ost %pass [%fork pax] %g %cide auc])
-          r.tel  :_(r.tel leaf/"- {(trip aut)}")
-        ==
-      %_    +>.$
-          r.tel  :_(r.tel leaf/"+ {(trip auc)}")
-          mow
-        ;:  welp
-            (start-shell our.hid imp.hid ost you pax)
-            [ost %give %nice ~]~
-            (spam tel)
-            mow
-        ==
-      ==
-    ::
-        %line                                           ::  command entered
-      =+  new=stem/[lat.hid leaf/(trip p.p.tel) leaf/(trip p.jof)]
-      =.  r.tel
-        :_  r.tel
-        stem/[lat.hid leaf/(trip p.p.tel) leaf/(trip p.jof)]
-      =.  +>.$  (send %txt -:!>(*cord) p.jof)
-      +>.$(mow (welp (spam p.tel q.tel new ~) mow))
-    ::
-        %cmd                                            ::  key command
-      ?+  p.jof
-          (send %kyev -:!>(*kyev) [[%ctrl ~ ~] p.jof])
-        %r  $(jof [%res 'shell'])
-      ==
-    ::
-        %type
-      (send %type -:!>(*?) p.jof)
-    ==
-  ::
-  ++  poke-ctrl
-    .(mow :_(mow [ost %give %rush %term-line [p q ~]:tel]))
-  ::
-  ++  pour
-    |=  [dis=?(%fork %resp %txt %kyev %type) sih=sign]
-    ^+  +>
-    ?-    dis
-        %fork  ?>(?=(%gone +<.sih) +>.$)                ::  XX  maybe mean?
-        %resp
-      ?+    +<.sih  !!
-          %nice  +>.$
-          %rush
-        ::  ~?  !=(p.tel p.q.sih)  prompt/[p.q.sih ?=(~ q.q.sih)]
-        =.  p.q.sih  ?^(q.q.sih p.tel p.q.sih)          ::  XX prompt hack
-        %_  +>.$
-          mow  :-  [ost %pass [%resp pax] %g %took [our.hid [auc imp.hid]] you]
-               (welp (spam q.sih) mow)
-          tel  [p.q.sih (weld q.q.sih q.tel) (weld r.q.sih r.tel)]
-        ==
-      ==
-      ::
-        ?(%txt %kyev %type)
-      ?+    +<.sih  !!
-          %nice  +>.$(mow :_(mow [ost %give +.sih]))
-          %mean
-        =+  ^=  new
-            =-  (turn - |=(a=tank rose/[~ "! " ~]^[a]~))
-            %-  flop  ^-  tang
-            ?~  p.sih  ~
-            [leaf/(trip p.u.p.sih) q.u.p.sih]
-        %_    +>.$
-            r.tel  (welp new r.tel)
-            mow
-          %-  welp  :_  mow
-          [[ost %give +.sih] (spam [p.tel q.tel new])]
-        ==
-      ==
-    ==
-  ::
-  ++  send
-    |=  mez=mess
-    %_    +>.$
-        mow
-      %-  welp  :_  mow
-      ^-  (list move)
-      %+  murn  (~(tap by cub.hid))
-      |=  [p=span q=term]
-      ?.  =(p auc)   ~
-      %-  some  ^-  move
-      :^  ost  %pass  [-.mez pax]
-      [%g %mess [our.hid p imp.hid] you mez]
-    ==
-  ::
-  ++  spam
-    |=  tol=term-line
-    ^-  (list move)
-    %+  murn
-      (~(tap by sup.hid))
-    |=  [ost=bone @ paf=path]
-    ?:  =([%lines pax] paf)
-      (some ost %give %rush %term-line tol)
-    ~
-  --
---
-!:
-::::  formal interface
-  ::
-|_  [hid=hide axle]
-++  peer
-  |=  [ost=bone you=ship pax=path]
-  ^-  [(list move) _+>]
-  ?~  pax
-    $(pax /term)
-  ?.  ?=(glas i.pax)
-    [[ost %give %mean ~ %bad-path ~]~ +>.$]
-  =+  abet:(peer:(se hid ost you hiz t.pax) i.pax)
-  [-< +>.$(hiz ->)]
-::
-++  poke-term-in
-  |=  [ost=bone you=ship term-in]
-  ^-  [(list move) _+>]
-  =+  abet:(poke:(se hid ost you hiz pax) jof)
-  [-< +>.$(hiz ->)]
-::
-++  poke-term-ctrl
-  |=  [ost=bone you=ship col=term-ctrl]
-  ^-  [(list move) _+>]
-  =+  abet:poke-ctrl:(se hid ost you hiz /)
-  [-< +>.$(hiz ->)]
-::
-++  pour
-  |=  [ost=bone pax=path sih=*]
-  ^-  [(list move) _+>]
-  =+  sih=~|([%term-pour (,[term term ~] sih)] ((hard sign) sih))
-  ?:  ?=(?(%sage %init %logo %verb %veer %vega) &2.sih) ::  vomit
-    [[ost %give +.sih]~ +>.$]
-  ?~  pax  !!
-  ?.  ?=(?(%fork %resp %txt %kyev %type) i.pax)  !!
-  =+  abet:(pour:(se hid ost our.hid hiz t.pax) i.pax sih)
-  [-< +>.$(hiz ->)]
-::
-++  prep
-  |=  old=(unit (unit axle))
-  ^-  [(list move) _+>]
-  :-  ~
-  %_    +>.$
-      hiz 
-    ?.  ?=([~ ~ *] old)  hiz
-    %-  ~(run by hiz.u.u.old)
-    |=(term-line [p q ~])
-  ==
---
diff --git a/base/fap/terminal/hymn.hook b/base/fap/terminal/hymn.hook
deleted file mode 100644
index 1f699a0a2..000000000
--- a/base/fap/terminal/hymn.hook
+++ /dev/null
@@ -1,33 +0,0 @@
-::    Terminal page
-::
-::::
-  ::
-/?    314
-/=    styl  /:/%/style:/psal/
-/=    jass  /:/%/script:/psal/
-::
-::::  ~talsur-todres
-  ::
-^-  manx
-;html
-  ;head
-    ;title: Hi
-    ;script: window.urb = window.urb || \{};
-    ;script@"/~/at/base/lib/urb.js";
-    ;script@"//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js";
-    ;script@"//cdnjs.cloudflare.com/ajax/libs/mousetrap/1.4.6/mousetrap.js";
-    ;script@"//use.typekit.net/fkv0sjk.js";
-    ;script:'try{Typekit.load();}catch(e){}'
-::    ;script: urb.appl = "terminal"; urb.term = \{pax: "/"}
-    ;+  styl
-  ==
-  ;body
-    ;pre#cont;
-    ;span#prem:">"
-    ;div#prom-cont
-      ;textarea.mousetrap#prom(wrap "off"); 
-      ;div#prom-size;
-    ==
-    ;+  jass
-  ==
-==
diff --git a/base/fap/terminal/hymn/script.js b/base/fap/terminal/hymn/script.js
deleted file mode 100644
index 3aa0b4700..000000000
--- a/base/fap/terminal/hymn/script.js
+++ /dev/null
@@ -1,104 +0,0 @@
-urb.appl = urb.appl ||
-  window.location.pathname.match(/.*?app\/([a-z0-9-]+)/)[1]
-urb.term = urb.term || 
-  {pax: location.pathname.replace(new RegExp(".*?app/"+urb.appl),'') || '/'}
-
-function jpok(a,b){
-  var dat = {pax:urb.term.pax, act:{}}
-  dat.act[a] = b
-  urb.send({data:dat,mark:"term-in"}, function(e,dat){
-    if(a === 'line' && dat.data.err){
-      hist.unshift(prom.val())
-      prom.val(b)
-      hind = 0
-    }
-  })
-}
-
-var prom, prom_size, hist, hind, size, focus, pos, pax
-
-$(function() {
-  prom = $("#prom")
-  prom_size = $("#prom-size")
-
-  hist = []
-  hind = 0
-
-  var keys = ['l', 'x', 'r']
-  var mod = /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'ctrl' : 'alt'
-  for (i in keys) (function(k){
-    Mousetrap.bind(mod + '+' + k, function(){
-      jpok('cmd', k)
-    })
-  })(keys[i])
-
-  prom.keydown(function(e){
-    switch(e.which){  
-      default: return true
-        break;
-      case 13:  // %retn
-        if(e.shiftKey) return true
-        v = prom.val().replace(/\xa0/g, ' ')
-        $(cont).append($('').html(prem.innerHTML),
-                       $('
').text(v)) - - jpok('line', v) - hist.unshift(v) - prom.val('') - return false - break; - case 38: // %up - if(hind == hist.length) return true - if(pos().top === false) return true - prom.val([hist[hind], hist[hind] = prom.val()][0]) // swap - size() - hind++ - return false - break; - case 40: // %down - if(hind == 0) return true - if(pos().bot === false) return true - size() - hind-- - prom.val([hist[hind], hist[hind] = prom.val()][0]) // swap - return false - } - }) - - focus = function() { $(prom).focus(); } - $('body').on('click', focus) - focus() - - size = function() { - prom_size.html(prom.val()+"
") - } - size() - prom.on('input propertychange', size) - - pos = function() { - v = prom.val() - _top = v.slice(0,prom[0].selectionStart).indexOf("\n") === -1 - _bot = v.slice(prom[0].selectionStart).indexOf("\n") === -1 - return {top:_top,bot:_bot} - } - - pax = '/lines' - if(urb.term.pax != "/") pax += urb.term.pax - urb.subscribe({path: pax}, function(e, dat){ - if(dat.data.ok) return; - hist = dat.data.history.concat(hist) - hind = 0 - // cont.innerHTML = '' - for(var i in dat.data.lines){ - var lom = dat.data.lines[i] - if(typeof lom == 'string') - $(cont).append($('
').text(lom)) - else { - $(cont).append($('').text(lom.prompt), - $('
').text(lom.task)) - } - } - window.scrollTo(0,document.body.scrollHeight) - prem.textContent = dat.data.prompt - }) -}); diff --git a/base/fap/terminal/hymn/style.css b/base/fap/terminal/hymn/style.css deleted file mode 100644 index 32a0a9567..000000000 --- a/base/fap/terminal/hymn/style.css +++ /dev/null @@ -1,54 +0,0 @@ -html { - font-size: 14px; -} -body { - margin: 2rem; - line-height: 1.4rem; -} -body, -span, -pre, -textarea, -input { - font-family: 'source-code-pro', monospace; - font-size: 1rem; - background-color: #000; - color: #fff; -} -button { - border: none; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 600; - font-size: .8rem; - text-transform: uppercase; - letter-spacing: 1px; - color: #000; - background-color: #fff; - padding: 1rem; -} -#prom-cont, -.prom { - display: block; - position:relative; - left: 1rem; -} -textarea, -#prom-size { - min-height: 24px; - box-sizing: border-box; - overflow: hidden; - width: 100%; -} -textarea { - height: 100%; - border: 0; - outline: none; - position: absolute; - resize: none; -} -#prom-size { - visibility: hidden; - white-space: pre-wrap; - word-wrap: break-word; - overflow-wrap: break-word; -} diff --git a/base/fap/test/app.js b/base/fap/test/app.js deleted file mode 100644 index 5053f04e4..000000000 --- a/base/fap/test/app.js +++ /dev/null @@ -1,73 +0,0 @@ -$(function() { - $tests = $("#tests") - - runtest = function(name) { - test = $(name) - test.attr('disabled', true) - test.addClass('disabled') - - window.urb.send({ - appl:"test", - data:{test:name} - }, function(err,res) { - test.attr('disabled', false) - test.removeClass('disabled') - - _test = { - name: name, - result: res.data - } - - console.log('set it') - console.log(_test) - - $tests.prepend(renderTest(_test)) - }) - } - - renderTest = function(test) { - css = "test" - if(test.pending == true) - css += " pending" - $_test = $("
") - $_test.append("
"+test.name+"
") - $_test.append("
"+JSON.stringify(test.result)+"
") - return $_test - } - - renderTests = function(testlist) { - console.log("renderTests: "+testlist) - $tests.html("") - for(i in testlist) { - $tests.append(renderTest(testlist[i])) - } - } - - renderError = function(error) { - $tests.html("
Sorry! There was an error fetching from Test: "+error+"
") - } - - window.urb.subscribe({ - appl:"test", - path:"/tests" - }, function(err,res) { - console.log('subscr') - console.log(arguments) - if (res.data.ok) - return - if(err) - renderTests(err) - else - { - if(res.data) { - if(res.data) { - renderTests(res.data) - } - else - { - renderTests("unknown error") - } - } - } - }) -}) diff --git a/base/fap/test/core.hook b/base/fap/test/core.hook deleted file mode 100644 index ce86491ea..000000000 --- a/base/fap/test/core.hook +++ /dev/null @@ -1,334 +0,0 @@ -:: Test suite -:: -:: runnable from unix with command: -:: curl http://localhost:8080/gog/test/all-tests -:: -:::: /hook/core/test/app - :: -/? 314 :: need urbit 314 -:: /= front /:/%%/front:/hymn/ :: load front page -:: -:::: structures - :: -|% :: structures - ++ axle ,[%0 tests=(map term test)] :: application state - ++ gilt :: subscription frame - $% [%json p=json] :: json data - [%html p=@t] :: html text - [%hymn p=manx] :: html tree - [%mime p=mite q=octs] :: mime data - == :: - ++ gift :: output action - $% [%rust gilt] :: total update - [%mean p=ares] :: message failure - [%nice ~] :: succeed - == :: - ++ hapt ,[p=ship q=path] :: see %gall - ++ move ,[p=bone q=(mold note gift)] :: output operation - ++ result :: test result - $% [%mean p=ares] :: failure - [%nice ~] :: success - == :: - ++ note :: system request - $% $: %g :: to %gall - $% [%mess p=hapt q=ship r=cage] :: - [%cide p=span] :: - [%show p=hapt q=ship r=path] :: - [%sire p=term q=span] :: - == == == :: - ++ test :: test template - $_ ^? |% :: - ++ poke |+([bone ship] [*(list move) +>]) :: start test - ++ pour |+([bone path *] [*(list move) +>]) :: system response - -- :: --- :: -!: -:::: program - :: -|_ $: hid=hide :: system state - axle :: custom state - == -++ et :: tests - |% - ++ tests-json - %- jobe - %+ turn (~(tap by tests)) - |= [nam=@t tes=test] - :- nam - %- jobe - ^- (list ,[@t json]) - ~[[%name %s nam] [%result %s %untested]] - ++ succeed - ^- test - |% - ++ poke - |+ [ost=bone you=ship] - ^- [(list move) _+>] - [[ost %give %nice ~]~ +>.$] - ++ pour - |+ [ost=bone pax=path sih=*] - ^- [(list move) _+>] - !! - -- - ++ cede - ^- test - => |% - ++ sign - $% $: %g - $% [%nice ~] - [%gone p=hapt] - == == == - -- - =| cnt=? - |% - ++ poke - |+ [ost=bone you=ship] - ^- [(list move) _+>] - ~& [%cede-poke cub.hid sup.hid our.hid] - :_ +>.$(cnt !cnt) - ?: cnt - :~ - [ost %pass /cede/sire %g %sire %test-cede %babe] - :* ost %pass /cede/poke %g - %mess [our.hid babe/imp.hid] you - %json !>(~) - == - == - [ost %give %nice ~]~ - ++ pour - |+ [ost=bone pax=path sih=*] - ^- [(list move) _+>] - ~& [%cede-pour pax] - ?+ -.pax `+> - %sire - ~& %child-dead - :_ +>.$ :_ ~ - [ost %give %nice ~] - == - -- - ++ cide - ^- test - => |% - ++ sign - $% $: %g - $% [%nice ~] - [%rust %hymn p=manx] - == == == - -- - |% - ++ poke - |+ [ost=bone you=ship] - ^- [(list move) _+>] - ~& [%cide-poke cub.hid sup.hid our.hid] - :_ +>.$ - :~ - [ost %pass /cide/hi %g %cide %baby] - [ost %give %nice ~] - == - ++ pour - |+ [ost=bone pax=path sih=*] - ^- [(list move) _+>] - !! - -- - ++ sire - ^- test - => |% - ++ sign - $% $: %g - $% [%nice ~] - [%rust %hymn p=manx] - [%gone p=hapt] - == == == - -- - |% - ++ poke - |+ [ost=bone you=ship] - ^- [(list move) _+>] - :_ +>.$ - :~ - [ost %pass /sire/hi %g %sire %test-cede %baby] - [ost %give %nice ~] -:: [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] -:: [ost %pass /sire/ho %g %show our.hid^baby/imp.hid you /] - == - ++ pour - |+ [ost=bone pax=path sih=*] - ^- [(list move) _+>] - =+ sih=((hard sign) sih) - :_ +>.$ - [ost %give %nice ~]~ - -- - ++ poke-local - ^- test - => |% - ++ sign ,[%g result] - -- - |% - ++ poke - |+ [ost=bone you=ship] - ^- [(list move) _+>] - :_ +>.$ :_ ~ - :* ost %pass /poke-local %g - %mess [our.hid %test ~] you %json - !> (joba %test %s %bad-test-name) - == - ++ pour - |+ [ost=bone pax=path sih=*] - ^- [(list move) _+>] - :_ +>.$ - =+ sih=((soft sign) sih) - :_ ~ :+ ost %give - ?~ sih [%mean ~ %poke-local-pour-bad-sign ~] - ?- +<.u.sih - %nice [%mean ~ %poke-local-pour-unexpected-nice ~] - %mean - ?: ?=([~ %bad-test ~] p.u.sih) - [%nice ~] - [%mean ~ %poke-local-pour-unexpected-mean ~] - == - -- - ++ ze - ^- test - |% - ++ poke - |+ [ost=bone you=ship] - ^- [(list move) _+>] - :_ +>.$ :_ ~ - =+ ^= zez - %+ ~(edit ^ze lat.hid *dome *rang) - lat.hid - [%& [0v0 0v0] [/hello %ins 'hello, world']~] - =+ `[l=@da d=dome r=rang]`+<.zez - ?: .= lat.r - :_ [~ ~] - [p=1.292.805.149 q=[%direct p=1.292.805.149 q='hello, world' r=%c]] - [ost %give %nice ~] - [ost %give %mean ~ %bad-rang ~[leaf/ leaf/]] - ++ pour - |+ [ost=bone pax=path sih=*] - ^- [(list move) _+>] - !! - -- - ++ all-tests - ^- test - => |% - ++ sign ,[%g result] - ++ sult - $? result - [%pending ~] - == - -- - =| results=(map ,@t sult) - |% - ++ poke - |+ [ost=bone you=ship] - ^- [(list move) _+>] - =. results - %- mo - %+ turn (~(tap by tests)) - |= [nam=@t tes=test] - [nam %pending ~] - :_ +>.$ - %+ turn (~(tap by tests)) - |= [nam=@t tes=test] - :* ost %pass /all-tests/[nam] %g - %mess [our.hid %test ~] you %json - !> (joba %test %s nam) - == - ++ pour - |+ [ost=bone pax=path sih=*] - ^- [(list move) _+>] - =+ sih=((hard sign) sih) - ?. ?=([@ ~] pax) ~& [%all-tests-strange-path pax] [~ +>.$] - =. results (~(put by results) -.pax +.sih) - :_ +>.$ - ?: (~(any by results) |=([res=sult] ?=(%pending -.res))) - ~ - :_ ~ - ?: (~(all by results) |=([res=sult] ?=(%nice -.res))) - [ost %give %nice ~] - :^ ost %give %mean - :+ ~ %failed-tests - %- zing - %+ turn - (skim (~(tap by results)) |=([nam=@t res=sult] ?=(%mean -.res))) - |= [nam=@t res=sult] - ?> ?=(%mean -.res) - ^- (list tank) - :_ ?~ p.res ~ q.u.p.res - :- %leaf - %+ weld "test %{(trip nam)} failed with " - ?~ p.res "no error message" - %+ weld "error code %{(trip p.u.p.res)} and " - ?~ q.u.p.res "no error info" - "the following error info:" - -- - -- -++ spec-pour - |= [ost=bone pax=path sih=*] - ^- [(list move) _+>] - =+ sih=((hard ,[%g result]) sih) - :_ +>.$ :_ ~ - [ost %give %rust %mime /text/plain (taco (cat 3 (crip ) 10))] -++ prep - |= old=(unit (unit axle)) - ^- [(list move) _+>] - :- ~ - %= +>.$ - tests - ?~ old - ~& %prep-sig tests - ?^ u.old - ~& %prep-no-sig tests.u.u.old - =. tests - %- mo - ^- (list ,[@t test]) - => et - :~ [%succeed succeed] - [%sire sire] - [%cide cide] - [%cede cede] - [%ze ze] - [%poke-local poke-local] - == - (~(put by tests) %all-tests all-tests:et) - == -++ peer :: accept subscriber - |= [ost=bone you=ship pax=path] - ^- [(list move) _+>] - ~& [%test-peer hid] - ?~ pax !! ::[[ost %give %rust %hymn front]~ +>.$] - ?: ?=(%tests -.pax) - [[ost %give %rust %json tests-json:et]~ +>.$] - :_ +>.$ :_ ~ - :* ost %pass /automagic %g - %mess [our.hid %test ~] you %json - !> (joba %test %s -.pax) - == -++ poke-json :: browser message - |= [ost=bone you=ship jon=json] - ^- [(list move) _+>] - ~& [%test-poke hid you] - =+ tes=((of [%test so] ~):jo jon) - ?~ tes [[ost %give %mean ~ %strange-json ~]~ +>.$] - =+ tst=(~(get by tests) +.u.tes) - ?~ tst - [[ost %give %mean ~ %bad-test leaf/<+.u.tes> ~]~ +>.$] - ~& [%running-test +.u.tes] - =+ res=(poke:u.tst ost you) - :- -.res - +>.$(tests (~(put by tests) +.u.tes +.res)) -++ pour :: response - |= [ost=bone pax=path sih=*] - ^- [(list move) _+>] - ~& [%test-pour ost pax -.sih +<.sih] - ?~ pax ~& %test-strange-path [~ +>.$] - ?: ?=(%automagic -.pax) - (spec-pour ost pax sih) - =+ tst=(~(get by tests) -.pax) - ?~ tst - ~& [%test-bad-path pax] [~ +>.$] - =+ res=(pour:u.tst ost +.pax sih) - :- -.res - +>.$(tests (~(put by tests) -.pax +.res)) --- diff --git a/base/fap/test/front/hymn.hook b/base/fap/test/front/hymn.hook deleted file mode 100644 index 5e58460b8..000000000 --- a/base/fap/test/front/hymn.hook +++ /dev/null @@ -1,31 +0,0 @@ -:: Front page of the twitter app. -:: -:::: /hook/hymn/front/twit/app - :: -/? 314 :: need urbit 314 -/= urbit /:/===lib/urb:/hymn/ :: urbit library (js) -/= style /:/%%%/style:/hymn/ :: stylesheet (css) -/= application /:/%%%/app:/hymn/ :: application (js) -!: -:::: content - :: -^- manx -=- ~! - - -;html - ;head - ;title: Tests - ;+ style - ;script - =type "text/javascript" - =src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js" - ; - == - == - ;body - ;div#tests - ;p: Fetching tests... - == - ;+ urbit - ;+ application - == -== diff --git a/base/fap/test/style.css b/base/fap/test/style.css deleted file mode 100644 index 224edf8fc..000000000 --- a/base/fap/test/style.css +++ /dev/null @@ -1,82 +0,0 @@ -body, -textarea, -input { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 400; -} - -body { - margin-top: 4rem; - font-size: 18px; -} - -.test, -.name, -.result { - width: 32rem; -} - -textarea { - border: 0; - height: 8rem; - line-height: 1.5rem; - margin-bottom: .3rem; - resize: none; - padding: 1rem 1px; - background-color: #f7f7f7; -} - -.name { - border: 0; - color: #333; - letter-spacing: 0.01rem; -} - -.name { - background-color: transparent; - border: 2px solid #5DE668; - color: #5DE668; - padding: .3rem 1rem; - font-weight: 500; - cursor: pointer; -} - -.name { - background-color: #5DE668; - color: #fff; -} - -.disabled { - opacity: .6; -} - -.text { - word-wrap:break-word; - margin-bottom: .3rem; - line-height: 1.6rem; -} - -#twet { - margin-bottom: 3rem; - border-bottom: 2px solid #464646; - padding-bottom: 2rem; -} - -#twet, -.tweet { - border-bottom: 1px solid #eee; -} - -.tweet { - margin-bottom: 2rem; - padding-bottom: 1rem; -} - -.pending { - opacity: .3; -} - -.error { - color: #FF5F5F; - letter-spacing: .06rem; -} diff --git a/base/fap/ticket/core.hook b/base/fap/ticket/core.hook deleted file mode 100644 index db2b76e55..000000000 --- a/base/fap/ticket/core.hook +++ /dev/null @@ -1,24 +0,0 @@ -/+ sh-utils -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke-ticket-args - %+ args-into-gate . - |= [her=@p num=?(~ [p=@ud ~])] - =+ n=?~(num 1 p.num) - =+ ^= sep ^- @ - =+ mir=(clan her) - ?+ mir ~|(%ticket-clan !!) - %king (bex 8) - %duke (bex 16) - %earl (bex 32) - == - :- %tang - |- ^- tang - ?: ?=(0 n) ~ - =+ tic=/(scot %p our.hid)/tick/(scot %da lat.hid)/(scot %p her) - :- leaf/"{}: {<(,@p .^(%a tic))>}" - $(her (add sep her), n (dec n)) --- diff --git a/base/fap/time/core.hook b/base/fap/time/core.hook deleted file mode 100644 index 3c7bfc642..000000000 --- a/base/fap/time/core.hook +++ /dev/null @@ -1,11 +0,0 @@ -:: Time an operation, usage :time foo, |time :foo -:: -:::: /hook/core/time/app - :: -/+ sh-utils -|_ [hide ~] -++ peer ,_`. -++ poke--args (add-resp [%pass /(scot %da lat) %t %wait lat] ,_`.) -++ pour |=([@ a=path *] %.(+< (args-into-gate +> ,_(resu a)))) -++ resu |=(a=path tang/[>`@dr`(sub lat (slav %da -.a))<]~) --- diff --git a/base/fap/tree/core.hook b/base/fap/tree/core.hook deleted file mode 100644 index dbd0964da..000000000 --- a/base/fap/tree/core.hook +++ /dev/null @@ -1,26 +0,0 @@ -:: Tree view recursive directory contents -:: -:::: /hook/core/tree/app - :: -/+ sh-utils -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke--args - %+ args-into-gate . - |= [pax=path fla=$|(~ [%full ~])] - =+ len=(lent pax) - =+ rend=?^(fla dank:ut |=(a=path (dank:ut (slag len a)))) - :- %tang - |- ^- tang - =+ ark=;;(arch .^(cy/pax)) - =- ?~ q.ark - - [(rend pax) -] - %- zing - %+ turn - (sort (~(tap by r.ark)) aor) - |= [a=@t ~] - ^$(pax (welp pax /[a])) --- diff --git a/base/fap/tweet/core.hook b/base/fap/tweet/core.hook deleted file mode 100644 index 70ec4de0b..000000000 --- a/base/fap/tweet/core.hook +++ /dev/null @@ -1,13 +0,0 @@ -/+ sh-utils -!: -|_ [hide ~] -++ peer ,_`. -++ poke--args - %+ add-subs [[our /twit] our /post/(scot %uv eny)] - %^ gate-mess . - |=([a=span b=cord ~] [/twit %twit-do !>([a %post eny b])]) - ,_`. -++ posh-twit-stat - (args-into-gate . |=([@ @ a=@da @] tang/~[leaf/"Tweet recieved {}"])) -++ pour |*([ost=@ * sih=[@ ^]] :_(+>.$ [ost %give +.sih]~)) --- diff --git a/base/fap/twit/core.hook b/base/fap/twit/core.hook deleted file mode 100644 index 72a7e4603..000000000 --- a/base/fap/twit/core.hook +++ /dev/null @@ -1,217 +0,0 @@ -:: Twitter daemon -:: -:::: /hook/core/twit/app - :: -/- *twitter -/+ twitter -:: -:::: ~fyr - :: -|% -++ twit-path :: valid peer path - $% :: [%home ~] :: home timeline - [%user p=@t ~] :: user's tweets - [%post p=@ta ~] :: status of status - == -:: -++ axle :: app state - $: %0 - kes=(map span keys:twit-do) :: auth - out=(map ,@uvI (each ,[span cord] stat)) :: sent tweets - ran=(map path ,[p=@ud q=@da]) :: polls active - fed=(jar path stat) :: feed cache - == -:: -++ gift :: app response - $% [%nice ~] :: acknowledgement - [%mean p=ares] :: error/termination - [%rush p=gilt] :: subscription data - == -:: -++ gilt - $% [%twit-feed p=(list stat)] :: posts in feed - [%twit-stat p=stat] :: tweet accepted - == -:: -++ move ,[bone (mold note gift)] -++ note :: arvo request - $% [%e %them ~ u=hiss] :: HTTP request - [%t %wait p=@da] :: timeout - == -:: -++ sign :: arvo response - $% [%e %thou p=httr] :: HTTP result - [%t %wake ~] :: timeout ping - == -:: -++ stat twit-stat :: recieved tweet --- -!: -:::: - :: -|_ [hide axle] -++ any-auth ?~(kes (auth) (auth p.n.kes)) :: use any keys -++ auth :: build API door - |= a=span - ~| [%no-auth a] - ~(. twit (~(got by kes) a) lat `@`eny) -:: -++ cull :: remove seen tweets - |= [pax=path rep=(list stat)] ^+ rep - =+ pev=(sa (turn (~(get ja fed) pax) |=(stat id))) - (skip rep |=(stat (~(has in pev) id))) -:: -++ dely :: next polling timeout - |= pax=path - ^- [(unit time) _ran] - =+ cur=(~(get by ran) pax) - =+ tym=(add lat (mul ~s8 (bex ?~(cur 0 p.u.cur)))) - :: ~& dely/`@dr`(sub tym lat) - ?: &(?=(^ cur) (gte tym q.u.cur) (gth q.u.cur lat)) - [~ ran] - [`tym (~(put by ran) pax ?~(cur 0 (min 5 +(p.u.cur))) tym)] -:: -++ wait :: ensure poll by path - |= [ost=bone pax=path mof=(list move)] - =^ tym ran (dely pax) - :_ +>.$ - ?~ tym - :: ~& no-wait/ran - mof - :: ~& will-wait/u.tym - :- [ost %pass pax %t %wait u.tym] - mof -:: -++ poke-twit-do :: recieve request - |= [ost=bone @ act=twit-do] - ^+ [*(list move) +>] - ?- -.q.act - %auth - :: ~& twit-auth/p.act - =. kes (~(put by kes) p.act p.q.act) - :_(+>.$ [ost %give %nice ~]~) :: XX verify key - %post - =: out (~(put by out) p.q.act %& p.act q.q.act) - ran (~(del by ran) /peer/home) - == - %^ wait ost /peer/home - :- [ost %give %nice ~] - =+ mez=(stat-upda:(auth p.act) [%status q.q.act]~ ~) - [ost %pass /post/(scot %uv p.q.act) %e %them ~ mez]~ - == -:: -++ pour :: recieve response - |= [ost=bone pax=path sig=sign] - ^+ [*(list move) +>] - ?- &2.sig - %wake - ~& wake/[pax sig] - :_ +>.$ - ?. (~(has by ran) pax) :: ignore if retracted - ~ - ?+ pax ~|([%wake-missed pax] !!) - [%peer *] - ?~ (~(get ju pus) t.pax) - ~ - ~& peer-again/[t.pax ran] - (pear | ost our t.pax) - == - %thou - ?+ p.p.sig ~|([%unknown-code p.p.sig] !!) - 429 :: Rate-limit - =. ran (~(put by ran) pax 6 lat) - =+ lim=%.(%x-rate-limit-reset ;~(biff ~(get by (mo q.p.sig)) poja ni:jo)) - =+ tym=?~(lim (add ~m7.s30 lat) (add ~1970.1.1 (mul ~s1 u.lim))) - ~& retrying-in/`@dr`(sub tym lat) - :_(+>.$ [ost %pass pax %t %wait tym]~) - 200 :: OK - =+ jon=(need (poja q:(need r.p.sig))) - :: ~& twit-resp/%.(jon ?+(-.jon !! %o stat:twir, %a (ar:jo stat:twir))) - ?+ pax ~|([%http-missed pax] !!) - [%post @ ~] :: post acknowledged - =+ ^= rep - ~| [%bad-post jon] - (need %.(jon stat:twir)) - =. out (~(put by out) (slav %uv i.t.pax) %| rep) - :_ +>.$ - (weld (spam pax %rush %twit-stat rep) (spam pax %mean ~)) - [%peer *] :: feed data - =+ ^= rep - ~| [%bad-feed jon] - (need %.(jon (ar:jo stat:twir))) - :: ~& got-feed/[(scag 5 (turn rep |=(stat id))) fed] - =+ ren=(cull t.pax rep) :: new messages - ?~ ren - (wait ost pax ~) :: pump polling - ~& spam-feed/ren - =: ran (~(del by ran) pax) :: clear poll delay - fed (~(put by fed) t.pax rep) :: saw last message - == - (wait ost pax (spam t.pax %rush twit-feed/(flop ren))) - == - ?(400 401 403 404) :: Err - =+ ^- git=gift - =+ err=%.(q:(need r.p.sig) ;~(biff poja mean:twir)) - :^ %mean ~ %bad-http - [leaf/"HTTP Code {}" (turn (need err) mean:twip)] - ?+ pax [[ost %give git]~ +>.$] - [%post @ ~] - [(spam pax git) +>.$] - == == - == -:: -++ peer :: accept subscription - |= [ost=bone ship path] - ^+ [*(list move) +>] - :_(+> [[ost %give %nice ~] (pear & +<)]) -:: -++ pear :: poll, possibly returning current data - |= [ver=? ost=bone @ pax=path] - ^- (list move) - ?. ?=(twit-path pax) - ~|([%missed-path pax] !!) - => .(pax `twit-path`pax) - ?: ?=(%post -.pax) - ?. ver ~ - =+ sta=(~(get by out) (slav %uv p.pax)) - ?. ?=([~ %| ^] sta) :: post not received - ~ - :- [ost %give %rush %twit-stat p.u.sta] - [ost %give %mean ~]~ :: subscription end - =+ ole=(~(get ja fed) pax) - :_ ?. ver ~ - ?~ ole ~ - [ost %give %rush %twit-feed (flop ole)]~ - =- [ost %pass [%peer pax] %e %them ~ `hiss`-] - =+ opt=?~(ole ~ ['since_id' (lutt:twit id.i.ole)]~) - =+ aut=any-auth - ?- -.pax - %user (stat-user:aut [(to-sd p.pax)]~ opt) -:: %home (stat-home:auth ~ opt) - == -:: -++ to-sd :: parse user name/numb - |= a=span ^- sd:twit - ~| [%not-user a] - %+ rash a - ;~(pose (stag %user-id dem) (stag %screen-name user:twir)) -:: -++ pull :: release subscription - |= ost=bone - ?. (~(has by sup) ost) `+>.$ :: XX should not occur - =+ [his pax]=(~(got by sup) ost) - ?: (lth 1 ~(wyt in (~(get ju pus) pax))) - `+>.$ - =: ran (~(del by ran) [%peer pax]) - fed (~(del by fed) pax) - == - `+>.$ -:: -++ spam :: send by path - |= [a=path b=gift] ^- (list move) - %+ murn (~(tap by sup)) - |= [ost=bone @ pax=path] - ^- (unit move) - ?. =(pax a) ~ - [~ [ost %give b]] --- diff --git a/base/fap/twit/hoontap-keys.hoon b/base/fap/twit/hoontap-keys.hoon deleted file mode 100644 index 009589f22..000000000 --- a/base/fap/twit/hoontap-keys.hoon +++ /dev/null @@ -1,4 +0,0 @@ -:- :- 'AP3G1t8ki6rPzeeAqdWCTw03F' - 'VV784LPwZSaAxtF16RWWTnST4F85BHN8VqQKNyv7MprCkA0xZD' -:- '2821727326-RZGXSeTn7hCFQfJqR0ViivM3YYpu2O1M71gelBl' -'jW9VygFPOTsEK0WmrJDHYSoEnofOPdCE1oQRzueemVTl8' \ No newline at end of file diff --git a/base/fap/twitter-auth/core.hook b/base/fap/twitter-auth/core.hook deleted file mode 100644 index e1ed5b426..000000000 --- a/base/fap/twitter-auth/core.hook +++ /dev/null @@ -1,34 +0,0 @@ -:: Input twitter keys -/+ sh-utils -!: -|_ [hide vat=wain] -++ prompts - ^- wain - :~ 'User: ' - 'App token: ' - 'App secret: ' - 'User token: ' - 'User secret: ' - '' - == -++ peek ,_prompt/[(snag (lent vat) prompts) %text ''] -++ posh-txt - |= [@ * p=cord] - =. vat [p vat] - ?. =(5 (lent vat)) `+>.$ - %.(+< (add-exit ,_`+>.$)) -:: -++ part - =. vat (flop vat) :: put into order of entry - ?. ?=([@ @ @ @ @ ~] vat) - ~|([%keys-missing vat] !!) - =+ =< aut=[acc %auth [ctok csec] atok asec] - `[acc=span ctok=cord csec=cord atok=cord asec=cord ~]`vat - |= ost=bone - :_ ~ - :^ ost %pass /out - [%g %mess serv our %twit-do !>(aut)] -:: -++ poke--args (listen-in . (add-nice ,_`.)) -++ serv [our /twit] --- diff --git a/base/fap/twitter-auth/hoontap-keys.txt b/base/fap/twitter-auth/hoontap-keys.txt deleted file mode 100644 index 7b938bffb..000000000 --- a/base/fap/twitter-auth/hoontap-keys.txt +++ /dev/null @@ -1,5 +0,0 @@ -hoontap -AP3G1t8ki6rPzeeAqdWCTw03F -VV784LPwZSaAxtF16RWWTnST4F85BHN8VqQKNyv7MprCkA0xZD -2821727326-RZGXSeTn7hCFQfJqR0ViivM3YYpu2O1M71gelBl -jW9VygFPOTsEK0WmrJDHYSoEnofOPdCE1oQRzueemVTl8 diff --git a/base/fap/twitter-feed/core.hook b/base/fap/twitter-feed/core.hook deleted file mode 100644 index 85d72c16f..000000000 --- a/base/fap/twitter-feed/core.hook +++ /dev/null @@ -1,22 +0,0 @@ -:: Display twitter feed -:: -:::: /hook/core/twitter-feed/app - :: -/+ sh-utils -!: -:: -:::: ~fyr - :: -|_ [hide ~] -++ stat ,[id=@u who=@ta now=@da txt=@t] -++ rens - |=(stat rose/[": " `~]^~[leaf/"{} @{(trip who)}" leaf/(trip txt)]) -++ peer ,_`. -++ poke--args - |= [ost=bone his=ship who=span ~] - %.(+< (add-subs [[our /twit] our /user/[who]] ,_`+>.$)) -:: -++ posh-twit-feed - (args-into-gate . |=(a=(list stat) tang/(turn a rens))) -:: ++ pour |*([ost=@ * sih=[@ ^]] :_(+>.$ [ost %give +.sih]~)) --- diff --git a/base/fap/type/core.hook b/base/fap/type/core.hook deleted file mode 100644 index ec57aebec..000000000 --- a/base/fap/type/core.hook +++ /dev/null @@ -1,19 +0,0 @@ -:: Type, render tpyes of arguments -:: -:::: /hook/core/type/app - :: -/+ sh-utils -!: -:::: - :: -|_ [hide ~] -++ peer ,_`. -++ pock--args - %+ args-into-gate . - |= a=vase - :- %tang - |- ^- tang - =+ nex=(slew 3 a) - ?~ nex ~ - [(skol p:(slot 2 a)) $(a u.nex)] --- diff --git a/base/fap/unsync/core.hook b/base/fap/unsync/core.hook deleted file mode 100644 index fe05cc46b..000000000 --- a/base/fap/unsync/core.hook +++ /dev/null @@ -1,16 +0,0 @@ -:: Desk unsync -:: -:::: /hook/core/unsync/app - :: -/+ sh-utils -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke--args - %+ gate-bang - |= [syd=@tas her=@p sud=@tas ~] - [%c %plug our.hid syd her sud] - (print . "unsynced") --- diff --git a/base/fap/verb/core.hook b/base/fap/verb/core.hook deleted file mode 100644 index f1ac71eb8..000000000 --- a/base/fap/verb/core.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: Verb: toggle verbose mode -:: -:::: /hook/core/verb/app - :: -/+ sh-utils -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke--args (add-resp [%give %verb ~] (args-done ,_`.)) --- diff --git a/base/fap/wipe/core.hook b/base/fap/wipe/core.hook deleted file mode 100644 index 91e4f7e76..000000000 --- a/base/fap/wipe/core.hook +++ /dev/null @@ -1,13 +0,0 @@ -:: Wipe path, retcon app existence -:: -:::: - :: -/+ sh-utils -!: -:::: - :: -|_ [hide ~] -++ poke--args - %+ gate-bang |=([a=path ~] [%g %wipe our a]) - (args-done ,_`.) --- diff --git a/base/fap/ye/core.hook b/base/fap/ye/core.hook deleted file mode 100644 index 0c9ca8612..000000000 --- a/base/fap/ye/core.hook +++ /dev/null @@ -1,42 +0,0 @@ -:: Ye broadcast -:: -:::: /hook/gate/ye/bin - :: -/+ sh-utils -:: -:::: - :: -|% -++ sign :: - $% $: %a :: - $% [%went p=ship q=cape] :: - == == == :: -++ flog :: sent to %dill - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - == :: --- -!: -:::: - :: -|_ [hid=hide ~] -++ peer ,_`. -++ poke--args - %+ gate-bang - |= [tex=tape ~] - =+ mez=(crip "{}: {tex}") - [%a %want [our.hid (sein our.hid)] /q/ye mez] - (add-nice ,_`.) -:: -++ poke-txt - %+ gate-bang |=(cor=@t [%d %flog `flog`[%text "> {(trip cor)}"]]) - (add-nice ,_`.) -:: -++ pour - |= [ost=bone pax=path sih=sign] - ?> ?=([%bang ~] pax) - %. +< - =+ ack=?+(q.sih "failed" %good "recieved") - (add-exit (print +>.$ "ye {ack}")) -:: --- diff --git a/base/lib/base.css b/base/lib/base.css index 69c5bb780..a9e53fe12 100644 --- a/base/lib/base.css +++ b/base/lib/base.css @@ -104,23 +104,29 @@ code, } #c { - width: 24rem; + width: 32rem; + margin-left: -16rem; position: absolute; left: 50%; - margin-left: -12rem; +} + +h1 { + font-size: 1.6rem; + font-weight: 500; +} + +h1:after { + content: "\2014"; + margin-left: 1rem; } #c pre { font-size: .6rem; -} - -#c.err { - width: 32rem; - margin-left: -16rem; + margin-top: 2rem; } #pass { - width: 24rem; + width: 32rem; } button { @@ -131,17 +137,32 @@ button { font-weight: 500; } -#ship, -input { - font-family: "scp"; +.sig { + font-weight: 400; + font-size: 2rem; display: inline; - border: none; - background-color: #f5f5f5; - padding: .3rem; - outline: none; + vertical-align: middle; } -#ship:focus, -input:focus { - background-color: #eee; +span#ship { + font-family: 'bau'; + font-weight: 400; + font-size: 1.2rem; + text-transform: uppercase; + letter-spacing: .1rem; + display: inline-block; + min-width: 1rem; +} + +input { + font-family: 'scp'; + display: inline; +} + +span#ship, +input { + border: none; + padding: .3rem; + outline: none; + border-bottom: 3px solid #555; } diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook new file mode 100644 index 000000000..2057ed9d4 --- /dev/null +++ b/base/lib/drum/core.hook @@ -0,0 +1,816 @@ +:: :: :: +:::: /hook/core/drum/lib :: :: + :: :: :: +/? 310 :: version +!: :: :: +:::: :: :: + :: :: :: +|% :: :: +++ drum-part ,[%drum %0 drum-pith] :: +++ drum-pith :: + $: eel=(set gill) :: connect to + ray=(set well) :: + fur=(map dude (unit server)) :: servers + bin=(map bone source) :: terminals + == :: +++ drum-start well :: start (local) server +:: :: :: +:::: :: :: + :: :: :: +++ server :: running server + $: syd=desk :: app identity + cas=case :: boot case + == :: +++ source :: input device + $: edg=_80 :: terminal columns + off=@ud :: window offset + kil=(unit (list ,@c)) :: kill buffer + maz=master :: master window + inx=@ud :: ring index + fug=(map gill (unit target)) :: connections + mir=(pair ,@ud (list ,@c)) :: mirrored terminal + == :: +++ master :: master buffer + $: liv=? :: master is live + tar=target :: master target + == :: +++ history :: past input + $: pos=@ud :: input position + num=@ud :: number of entries + lay=(map ,@ud (list ,@c)) :: editing overlay + old=(list (list ,@c)) :: entries proper + == :: +++ search :: reverse-i-search + $: pos=@ud :: search position + str=(list ,@c) :: search string + == :: +++ target :: application target + $: ris=(unit search) :: reverse-i-search + hit=history :: all past input + pom=sole-prompt :: static prompt + inp=sole-command :: input state + == :: +++ ukase :: master command + $% [%add p=(list gill)] :: attach to + [%del p=(list gill)] :: detach from + [%new p=(list well)] :: create + == :: +:: :: :: +:::: :: :: + :: :: :: +++ deft-apes :: default servers + |= our=ship + %- ~(gas in *(set well)) + =+ myr=(clan our) + ?: =(%pawn myr) + [[%base %dojo] ~] + ?: =(%earl myr) ~ + [[%home %dojo] [%home %talk] ~] +:: +++ deft-fish :: default connects + |= our=ship + %- ~(gas in *(set gill)) + ^- (list gill) + =+ myr=(clan our) + ?: =(%pawn myr) + [[our %dojo] ~] + ?: =(%earl myr) + =+ dad=(sein our) + [[dad %dojo] [dad %talk] ~] + [[our %dojo] [our %talk] ~] +:: +++ deft-mast :: default master + |= our=ship + ^- master + :* %& + *(unit search) + *history + [%& %sole "{(scow %p our)}# "] + *sole-command + == +:: +++ deft-pipe :: default source + |= our=ship :: + ^- source :: + :* 80 :: edg + 0 :: off + ~ :: kil + (deft-mast our) :: maz + 0 :: inx + ~ :: fug + [0 ~] :: mir + == +:: +++ deft-tart *target :: default target +++ drum-port :: initial part + |= our=ship + ^- drum-part + :* %drum + %0 + (deft-fish our) :: eel + (deft-apes our) :: ray + ~ :: fur + ~ :: bin + == :: +:: +++ drum-path :: encode path + |= gyl=gill + [%drum (scot %p p.gyl) q.gyl ~] +:: +++ drum-phat :: decode path + |= way=wire ^- gill + ?>(?=([@ @ ~] way) [(slav %p i.way) i.t.way]) +:: +++ drum-work :: work in drum + |= [[hide from] drum-part] + =+ (fall (~(get by bin) ost) (deft-pipe our)) + => |% :: arvo structures + ++ pear :: request + $% [%sole-action p=sole-action] :: + == :: + ++ lime :: update + $% [%dill-blit dill-blit] :: + == :: + ++ card :: general card + $% [%conf wire dock %load ship term] :: + [%diff lime] :: + [%peer wire dock path] :: + [%poke wire dock pear] :: + [%pull wire dock ~] :: + [%pass wire note] :: + == :: + ++ move (pair bone card) :: user-level move + ++ sp :: command parser + |% ++ sp-ukase + %+ knee *ukase |. ~+ + ;~ pose + (stag %add ;~(pfix lus sp-gills)) + (stag %del ;~(pfix hep sp-gills)) + (stag %new ;~(pfix tar sp-wells)) + == + :: + ++ sp-gills + ;~ pose + (most ;~(plug com ace) sp-gill) + %+ cook + |= a=ship + [[a %dojo] [a %talk] ~] + ;~(pfix sig fed:ag) + == + :: + ++ sp-gill + ;~ pose + (stag our sym) + ;~ plug + ;~(pfix sig fed:ag) + ;~(pfix fas sym) + == + == + ++ sp-well + ;~ pose + (stag %home sym) + ;~(plug sym ;~(pfix fas sym)) + == + ++ sp-wells (most ;~(plug com ace) sp-well) + -- + -- + |_ [moz=(list move) biz=(list dill-blit)] + ++ diff-sole-effect :: + |= [way=wire fec=sole-effect] + =< se-abet =< se-view + =+ gyl=(drum-phat way) + ?: (se-aint gyl) +>.$ + (se-diff gyl fec) + :: + ++ peer :: + |= pax=path =< se-abet + ^+ +> + ?. ?| =(our src) :: ourself + &(=(%duke (clan our)) =(our (sein src))) :: or our own yacht + == :: + ~| [%drum-unauthorized our/our src/src] :: very simplistic + !! + se-view:(se-text "[{}, driving {}]") + :: + ++ poke-dill-belt :: + |= bet=dill-belt + =< se-abet =< se-view + (se-belt bet) + :: + ++ poke-start :: + |= wel=well + =< se-abet =< se-view + (se-born wel) + :: + ++ reap :: + |= [way=wire saw=(unit tang)] + =< se-abet =< se-view + =+ gyl=(drum-phat way) + ?~ saw + (se-join gyl) + (se-dump:(se-drop & gyl) u.saw) + :: + ++ take-coup :: + |= [way=wire saw=(unit tang)] + =< se-abet =< se-view + ?~ saw +> + =+ gyl=(drum-phat way) + ?: (se-aint gyl) +>.$ + ~& [%drum-coup-fail src ost gyl u.saw] + (se-dump:(se-drop & gyl) u.saw) + :: + ++ take-onto :: + |= [way=wire saw=(each suss tang)] + =< se-abet =< se-view + ?> ?=([@ @ ~] way) + ?> (~(has by fur) i.t.way) + =+ wel=`well`[i.way i.t.way] + ?- -.saw + %| (se-dump p.saw) + %& ?> =(q.wel p.p.saw) + :: =. +>.$ (se-text "[{}]") + +>.$(fur (~(put by fur) q.wel `[p.wel %da r.p.saw])) + == + :: + ++ quit + |= way=wire + =< se-abet =< se-view + =+ gyl=(drum-phat way) + ~& [%drum-quit src ost gyl] + (se-drop %| gyl) + :: :: :: + :::: :: :: + :: :: :: + ++ se-abet :: resolve + ^- (quip move *drum-part) + =. . se-adze:se-adit + :_ %_(+>+>+<+ bin (~(put by bin) ost `source`+>+<)) + ^- (list move) + %+ welp (flop moz) + ^- (list move) + ?~ biz ~ + [ost %diff %dill-blit ?~(t.biz i.biz [%mor (flop biz)])]~ + :: + ++ se-adit :: update servers + =+ yar=(~(tap by ray)) + |- ^+ +> + ?~ yar +> + =+ hig=(~(get by fur) q.i.yar) + ?: &(?=(^ hig) |(?=(~ u.hig) =(p.i.yar syd.u.u.hig))) $(yar t.yar) + %= $ + yar t.yar + +> + %- se-emit(fur (~(put by fur) q.i.yar ~)) + [ost %conf [%drum p.i.yar q.i.yar ~] [our q.i.yar] %load our p.i.yar] + == + :: + ++ se-adze :: update connections + =+ lee=(~(tap by eel)) + |- ^+ +> + ?~ lee +> + ?: (~(has by fug) i.lee) $(lee t.lee) + $(lee t.lee, +> (se-peer i.lee)) + :: + ++ se-aint :: ignore result + |= gyl=gill + ^- ? + ?. (~(has by bin) ost) & + =+ gyr=(~(get by fug) gyl) + |(?=(~ gyr) ?=([~ ~] gyr)) + :: + ++ se-alas :: recalculate index + |= gyl=gill + ^+ +> + =+ [xin=0 wag=se-amor] + ?: =(~ wag) +>.$(inx 0) + |- ^+ +>.^$ + ?~ wag +>.^$(inx 0) + ?: =(i.wag gyl) +>.^$(inx xin) + $(wag t.wag, xin +(xin)) + :: + ++ se-amor :: live targets + ^- (list gill) + (skim (~(tap in eel)) |=(gill ?=([~ ~ *] (~(get by fug) +<)))) + :: + ++ se-anon :: rotate index + =+ wag=se-amor + ?~ wag + + :: ~& [%se-anon inx/inx wag/wag nex/(mod +(inx) (lent se-amor))] + +(inx (mod +(inx) (lent se-amor))) + :: + ++ se-agon :: current gill + ^- (unit gill) + =+ wag=se-amor + ?~ wag ~ + `(snag inx se-amor) + :: + ++ se-belt :: handle input + |= bet=dill-belt + ^+ +> + ?: ?=(%rez -.bet) + +>(edg (dec p.bet)) + ?: ?=(%yow -.bet) + ~& [%no-yow -.bet] + +> + =+ gul=se-agon + =+ tur=`(unit (unit target))`?~(gul ~ (~(get by fug) u.gul)) + ?: &(!liv.maz |(=(~ gul) =(~ tur) =([~ ~] tur))) (se-blit %bel ~) + =+ ^= taz + ?: liv.maz + ~(. ta [& %& `gill`(fall gul [our %none])] `target`tar.maz) + ~(. ta [& %| (need gul)] `target`(need (need tur))) + =< ta-abet + ?- -.bet + %aro (ta-aro:taz p.bet) + %bac ta-bac:taz + %cru (ta-cru:taz p.bet q.bet) + %ctl (ta-ctl:taz p.bet) + %del ta-del:taz + %met (ta-met:taz p.bet) + %ret ta-ret:taz + %txt (ta-txt:taz p.bet) + == + :: + ++ se-born :: new server + |= wel=well + ^+ +> + ?: (~(has in ray) wel) + (se-text "[already running {}/{}]") + +>(ray (~(put in ray) wel), eel (~(put in eel) [our q.wel])) + :: + ++ se-dump :: print tanks + |= tac=(list tank) + ^+ +> + =+ wol=`wall`(zing (turn tac |=(a=tank (~(win re a) [0 edg])))) + |- ^+ +>.^$ + ?~ wol +>.^$ + $(wol t.wol, +>.^$ (se-blit %out (tuba i.wol))) + :: + ++ se-drop :: disconnect + |= [pej=? gyl=gill] + ^+ +> + =+ lag=se-agon + ?. (~(has by fug) gyl) +>.$ + =. fug (~(del by fug) gyl) + =. eel ?.(pej eel (~(del in eel) gyl)) + =. +>.$ ?. &(?=(^ lag) !=(gyl u.lag)) + +>.$(inx 0) + (se-alas u.lag) + =. +>.$ (se-text "[detached from {}]") + se-prom(liv.maz ?~(fug & liv.maz)) + :: + ++ se-joke :: prepare connection + |= gyl=gill + ^+ +> + =+ lag=se-agon + ?~ lag +>.$ + ?: =(~ fug) +>.$ + (se-alas(fug (~(put by fug) gyl ~)) u.lag) + :: + ++ se-join :: confirm connection + |= gyl=gill + ^+ +> + =. +> (se-text "[connected to {}]") + ?> =(~ (~(got by fug) gyl)) + (se-alas:se-prom(liv.maz |, fug (~(put by fug) gyl `*target)) gyl) + :: + ++ se-nuke :: teardown + |= gyl=gill + ^+ +> + (se-drop:(se-pull(liv.maz |) gyl) & gyl) + :: + ++ se-like :: act in master + |= kus=ukase + ?- -.kus + %add + |- ^+ +>.^$ + ?~ p.kus +>.^$ + $(p.kus t.p.kus, +>.^$ (se-link i.p.kus)) + :: + %del + |- ^+ +>.^$ + ?~ p.kus +>.^$ + $(p.kus t.p.kus, +>.^$ (se-nuke i.p.kus)) + :: + %new + |- ^+ +>.^$ + ?~ p.kus +>.^$ + $(p.kus t.p.kus, +>.^$ (se-born i.p.kus)) + == + :: + ++ se-plot :: status line + ^- tape + =+ lag=se-agon + =+ ^= pry + |= gill ^- tape + =+((trip q.+<) ?:(=(our p.+>-) - :(welp (scow %p p.+>-) "/" -))) + =+ ^= yey + |= gill ^- tape + =+((pry +<) ?:(=(lag `+>-) ['*' -] -)) + =+ ^= yal ^- (list tape) + %+ weld + ^- (list tape) + %+ turn (~(tap by fug)) + |= [a=gill b=(unit target)] + =+ c=(yey a) + ?~(b ['?' c] c) + ^- (list tape) + %+ turn (skip (~(tap by fur)) |=([term *] (~(has by fug) [our +<-]))) + |=([term *] ['-' (pry our +<-)]) + |- ^- tape + ?~ yal ~ + ?~ t.yal i.yal + :(welp i.yal ", " $(yal t.yal)) + :: + ++ se-prom :: update drum prompt + ^+ . + =+ mux=se-plot + %_ + + cad.pom.tar.maz + (welp (scow %p our) ?~(mux "# " :(welp ":" mux "# "))) + == + :: + ++ se-link :: connect to app + |= gyl=gill + +>(eel (~(put in eel) gyl)) + :: + ++ se-blit :: give output + |= bil=dill-blit + +>(biz [bil biz]) + :: + ++ se-show :: show buffer, raw + |= lin=(pair ,@ud (list ,@c)) + ^+ +> + ?: =(mir lin) +> + =. +> ?:(=(q.mir q.lin) +> (se-blit %pro q.lin)) + =. +> ?:(=(p.mir p.lin) +> (se-blit %hop p.lin)) + +>(mir lin) + :: + ++ se-just :: adjusted buffer + |= lin=(pair ,@ud (list ,@c)) + ^+ +> + =. off ?:((lth p.lin edg) 0 (sub p.lin edg)) + (se-show (sub p.lin off) (scag edg (slag off q.lin))) + :: + ++ se-view :: flush buffer + ?: liv.maz + (se-just ~(ta-vew ta [& & ~zod %$] tar.maz)) + =+ gul=se-agon + ?~ gul se-view(liv.maz &) + =+ gyr=(~(get by fug) u.gul) + ?~ gyr se-view(liv.maz &) + ?~ u.gyr se-view(liv.maz &) + %- se-just + ~(ta-vew ta [& | u.gul] u.u.gyr) + :: + ++ se-emit :: emit move + |= mov=move + %_(+> moz [mov moz]) + :: + ++ se-text :: return text + |= txt=tape + (se-blit %out (tuba txt)) + :: + ++ se-poke :: send a poke + |= [gyl=gill par=pear] + (se-emit ost %poke (drum-path gyl) gyl par) + :: + ++ se-peer :: send a peer + |= gyl=gill + (se-emit(fug (~(put by fug) gyl ~)) ost %peer (drum-path gyl) gyl /sole) + :: + ++ se-pull :: cancel subscription + |= gyl=gill + (se-emit ost %pull (drum-path gyl) gyl ~) + :: + ++ se-tame :: switch connection + |= gyl=gill + ^+ ta + ~(. ta [& %| gyl] (need (~(got by fug) gyl))) + :: + ++ se-diff :: receive results + |= [gyl=gill fec=sole-effect] + ^+ +> + ta-abet:(ta-fec:(se-tame gyl) fec) + :: + ++ ta :: per target + |_ $: $: liv=? :: don't delete + mav=? :: showing master + gyl=gill :: target app + == :: + target :: target state + == :: + ++ ta-abet :: resolve + ^+ ..ta + =. liv.maz mav + ?: mav + ?. liv + (se-blit `dill-blit`[%qit ~]) + se-prom:+>(tar.maz +<+) + ?. liv + =. ..ta (se-nuke gyl) + ..ta(liv.maz =(~ fug)) + ..ta(fug (~(put by fug) gyl ``target`+<+)) + :: + ++ ta-ant :: toggle master + ^+ . + ?: mav + ?: =(~ fug) ta-bel + %_ . + mav | + +<+ (need (~(got by fug) gyl)) + tar.maz +<+ + == + %_ . + mav & + +<+ tar.maz + fug (~(put by fug) gyl `+<+) + == + :: + ++ ta-act :: send action + |= act=sole-action + ^+ +> + ?: mav + +>.$ + +>.$(+> (se-poke gyl %sole-action act)) + :: + ++ ta-aro :: hear arrow + |= key=?(%d %l %r %u) + ^+ +> + ?- key + %d =. ris ~ + ?. =(num.hit pos.hit) + (ta-mov +(pos.hit)) + ?: =(0 (lent buf.say.inp)) + ta-bel + (ta-hom:ta-nex %set ~) + %l ?^ ris ta-bel + ?: =(0 pos.inp) ta-bel + +>(pos.inp (dec pos.inp)) + %r ?^ ris ta-bel + ?: =((lent buf.say.inp) pos.inp) + ta-bel + +>(pos.inp +(pos.inp)) + %u =. ris ~ + ?:(=(0 pos.hit) ta-bel (ta-mov (dec pos.hit))) + == + :: + ++ ta-bel .(+> (se-blit %bel ~)) :: beep + ++ ta-cat :: mass insert + |= [pos=@ud txt=(list ,@c)] + ^- sole-edit + :- %mor + |- ^- (list sole-edit) + ?~ txt ~ + [[%ins pos i.txt] $(pos +(pos), txt t.txt)] + :: + ++ ta-cut :: mass delete + |= [pos=@ud num=@ud] + ^- sole-edit + :- %mor + |-(?:(=(0 num) ~ [[%del pos] $(num (dec num))])) + :: + ++ ta-det :: send edit + |= ted=sole-edit + ^+ +> + (ta-act %det [[his.ven.say.inp own.ven.say.inp] (sham buf.say.inp) ted]) + :: + ++ ta-bac :: hear backspace + ^+ . + ?^ ris + ?: =(~ str.u.ris) + ta-bel + .(str.u.ris (scag (dec (lent str.u.ris)) str.u.ris)) + ?: =(0 pos.inp) + .(+> (se-blit %bel ~)) + =+ pre=(dec pos.inp) + (ta-hom(pos.inp pre) %del pre) + :: + ++ ta-ctl :: hear control + |= key=@ud + ^+ +> + ?+ key ta-bel + %a +>(pos.inp 0) + %b (ta-aro %l) + %c ta-bel(ris ~) + %d ?: &(=(0 pos.inp) =(0 (lent buf.say.inp))) + +>(liv |) + ta-del + %e +>(pos.inp (lent buf.say.inp)) + %f (ta-aro %r) + %g ta-bel(ris ~) + %k =+ len=(lent buf.say.inp) + ?: =(pos.inp len) + ta-bel + %- ta-hom(kil `(slag pos.inp buf.say.inp)) + (ta-cut pos.inp (sub len pos.inp)) + %l +>(+> (se-blit %clr ~)) + %n (ta-aro %d) + %p (ta-aro %u) + %r ?~ ris + +>(ris `[pos.hit ~]) + ?: =(0 pos.u.ris) + ta-bel + (ta-ser ~) + %t =+ len=(lent buf.say.inp) + ?: |(=(0 pos.inp) (lth len 2)) + ta-bel + =+ sop=?:(=(len pos.inp) (dec pos.inp) pos.inp) + =. pos.inp +(sop) + %- ta-hom + :~ %mor + [%del sop] + [%ins (dec sop) (snag sop buf.say.inp)] + == + %u ?: =(0 pos.inp) + ta-bel + %- ta-hom(pos.inp 0, kil `(scag pos.inp buf.say.inp)) + (ta-cut 0 pos.inp) + %v ta-ant + %x +>(+> se-anon) + %y ?~ kil ta-bel + %- ta-hom(pos.inp (add pos.inp (lent u.kil))) + (ta-cat pos.inp u.kil) + == + :: + ++ ta-cru :: hear crud + |= [lab=@tas tac=(list tank)] + =. +>+> (se-text (trip lab)) + (ta-tan tac) + :: + ++ ta-del :: hear delete + ^+ . + ?: =((lent buf.say.inp) pos.inp) + .(+> (se-blit %bel ~)) + (ta-hom %del pos.inp) + :: + ++ ta-erl :: hear local error + |= pos=@ud + ta-bel(pos.inp (min pos (lent buf.say.inp))) + :: + ++ ta-err :: hear remote error + |= pos=@ud + (ta-erl (~(transpose cs say.inp) pos)) + :: + ++ ta-fec :: apply effect + |= fec=sole-effect + ^+ +> + ?- -.fec + %bel ta-bel + %blk +> + %clr +>(+> (se-blit fec)) + %det (ta-got +.fec) + %err (ta-err +.fec) + %mor |- ^+ +>.^$ + ?~ p.fec +>.^$ + $(p.fec t.p.fec, +>.^$ ^$(fec i.p.fec)) + %nex ta-nex + %pro (ta-pro +.fec) + %tan (ta-tan p.fec) + %sag +>(+> (se-blit fec)) + %sav +>(+> (se-blit fec)) + %txt $(fec [%tan [%leaf p.fec]~]) + == + :: + ++ ta-dog :: change cursor + |= ted=sole-edit + %_ +> + pos.inp + =+ len=(lent buf.say.inp) + %+ min len + |- ^- @ud + ?- -.ted + %del ?:((gth pos.inp p.ted) (dec pos.inp) pos.inp) + %ins ?:((lte pos.inp p.ted) +(pos.inp) pos.inp) + %mor |- ^- @ud + ?~ p.ted pos.inp + $(p.ted t.p.ted, pos.inp ^$(ted i.p.ted)) + %nop pos.inp + %set len + == + == + :: + ++ ta-got :: apply change + |= cal=sole-change + =^ ted say.inp (~(receive cs say.inp) cal) + (ta-dog ted) + :: + ++ ta-hom :: local edit + |= ted=sole-edit + ^+ +> + =. +> (ta-det ted) + =. +> (ta-dog(say.inp (~(commit cs say.inp) ted)) ted) + +> + :: + ++ ta-met :: meta key + |= key=@ud + ~& [%ta-met key] + +> + :: + ++ ta-mov :: move in history + |= sop=@ud + ^+ +> + ?: =(sop pos.hit) +> + %+ %= ta-hom + pos.hit sop + lay.hit %+ ~(put by lay.hit) + pos.hit + buf.say.inp + == + %set + %- (bond |.((snag (sub num.hit +(sop)) old.hit))) + (~(get by lay.hit) sop) + :: + ++ ta-nex :: advance history + %_ . + num.hit +(num.hit) + pos.hit +(num.hit) + ris ~ + lay.hit ~ + old.hit [buf.say.inp old.hit] + == + :: + ++ ta-pro :: set prompt + |= pom=sole-prompt + +>(pom pom(cad :(welp (scow %p p.gyl) ":" (trip q.gyl) cad.pom))) + :: + ++ ta-ret :: hear return + ?. mav + (ta-act %ret ~) + =+ txt=(tufa buf.say.inp) + =+ fey=(rose txt sp-ukase:sp) + ?- -.fey + %| (ta-erl (lent (tuba (scag p.fey txt)))) + %& ?~ p.fey + (ta-erl (lent buf.say.inp)) + =. +>+> (se-like u.p.fey) + =. pom pom.tar.maz + (ta-hom:ta-nex %set ~) + == + :: + ++ ta-ser :: reverse search + |= ext=(list ,@c) + ^+ +> + ?: |(?=(~ ris) =(0 pos.u.ris)) ta-bel + =+ tot=(weld str.u.ris ext) + =+ dol=(slag (sub num.hit pos.u.ris) old.hit) + =+ sop=pos.u.ris + =+ ^= ser + =+ ^= beg + |= [a=(list ,@c) b=(list ,@c)] ^- ? + ?~(a & ?~(b | &(=(i.a i.b) $(a t.a, b t.b)))) + |= [a=(list ,@c) b=(list ,@c)] ^- ? + ?~(a & ?~(b | |((beg a b) $(b t.b)))) + =+ ^= sup + |- ^- (unit ,@ud) + ?~ dol ~ + ?: (ser tot i.dol) + `sop + $(sop (dec sop), dol t.dol) + ?~ sup ta-bel + (ta-mov(str.u.ris tot, pos.u.ris (dec u.sup)) (dec u.sup)) + :: + ++ ta-tan :: print tanks + |= tac=(list tank) + =+ wol=`wall`(zing (turn tac |=(a=tank (~(win re a) [0 edg])))) + |- ^+ +>.^$ + ?~ wol +>.^$ + $(wol t.wol, +>+>.^$ (se-text i.wol)) + :: + ++ ta-txt :: hear text + |= txt=(list ,@c) + ^+ +> + ?^ ris + (ta-ser txt) + %- ta-hom(pos.inp (add (lent txt) pos.inp)) + :- %mor + |- ^- (list sole-edit) + ?~ txt ~ + [[%ins pos.inp i.txt] $(pos.inp +(pos.inp), txt t.txt)] + :: + ++ ta-vew :: computed prompt + |- ^- (pair ,@ud (list ,@c)) + ?^ ris + %= $ + ris ~ + cad.pom + :(welp "(reverse-i-search)'" (tufa str.u.ris) "': ") + == + =- [(add pos.inp (lent p.vew)) (weld (tuba p.vew) q.vew)] + ^= vew ^- (pair tape (list ,@c)) + ?: vis.pom [cad.pom buf.say.inp] + :- ;: welp + cad.pom + ?~ buf.say.inp ~ + ;: welp + "<" + (scow %p (end 4 1 (sham buf.say.inp))) + "> " + == + == + =+ len=(lent buf.say.inp) + |- ^- (list ,@c) + ?:(=(0 len) ~ [`@c`'*' $(len (dec len))]) + -- + -- +-- diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook index bab89d6d2..c0af457ff 100644 --- a/base/lib/helm/core.hook +++ b/base/lib/helm/core.hook @@ -6,10 +6,9 @@ :::: :: :: :: :: :: |% :: :: -++ helm-part :: helm state - $: %helm :: doubletag - %0 :: state version - bur=(unit (pair ship mace)) :: requesting ticket +++ helm-part ,[%helm %0 helm-pith] :: helm state +++ helm-pith :: helm content + $: bur=(unit (pair ship mace)) :: requesting ticket hoc=(map bone helm-session) :: consoles == :: ++ helm-session :: @@ -78,6 +77,10 @@ |= him=ship =< abet (emit %flog /helm %crud %hax-init leaf/(scow %p him) ~) :: + ++ poke-mass + =< abet + (emit %flog /heft %crud %hax-heft ~) + :: ++ poke-start :: start a server |= hood-start =< abet (emit %conf /helm [our dap] %load our syd) @@ -85,6 +88,7 @@ ++ poke-reload :: reload vanes |= all=(list term) =< abet %- emil + %- flop %+ turn all =+ ark=(arch .^(%cy /(scot %p our)/base/(scot %da lat)/arvo)) =+ van=(~(tap by r.ark)) @@ -131,7 +135,6 @@ ?> ?=(^ wil) =< abet %- emil(bur ~) - ~& [%poke-will wil] :~ [%cash /helm p.u.bur q.u.bur u.wil] [%plug /helm our %home (sein our) %kids] == @@ -149,6 +152,10 @@ %& [%flog ~ %text "<{}>"] == :: + ++ take-note :: result of %init + |= [way=wire chr=@tD tan=tank] =< abet + (emit %flog ~ %text chr ' ' ~(ram re tan)) + :: ++ take-went :: result of %want |= [way=path her=ship kay=cape] =< abet (emit %flog ~ %text "went: {<[way kay]>}") diff --git a/base/lib/kiln/core.hook b/base/lib/kiln/core.hook index 3212f7bf7..69e2070a2 100644 --- a/base/lib/kiln/core.hook +++ b/base/lib/kiln/core.hook @@ -2,17 +2,14 @@ :::: /hook/core/kiln/lib :: :: :: :: :: /? 310 :: version -/- *talk :: structures -/+ talk :: libraries :: :: :: :::: :: :: :: :: :: |% :: :: -++ kiln-part :: kiln state - $: %kiln :: doubletag - %0 :: state version - rem=(map desk kiln-desk) :: - == :: +++ kiln-part ,[%kiln %0 kiln-pith] :: kiln state +++ kiln-pith :: + $: rem=(map desk kiln-desk) :: + == ++ kiln-desk :: per-desk state $: auto=? :: escalate on failure gem=germ :: strategy @@ -60,16 +57,6 @@ $% [%talk-command command:talk] :: [%hood-merge hood-merge] :: == :: - ++ suss ,[term @tas @da] :: config report - ++ milk (trel ship desk silk) :: - ++ silk :: - $& [p=silk q=silk] :: cons - $% [%diff p=silk q=silk] :: diff - [%done p=(set beam) q=gage] :: literal - [%file p=beam] :: from clay - [%mash p=mark q=milk r=milk] :: merge - [%tabl p=(list (pair silk silk))] :: list - == :: ++ tage :: %tabl gage ,[[%tabl p=(list (pair marc marc))] q=vase] :: ++ move (pair bone card) :: user-level move @@ -127,7 +114,7 @@ ++ win . :: successful poke ++ lose ^+ . - ~| %kiln-work-failed + ~| %kiln-work-fail !! :: ++ gage-to-tage :: diff --git a/base/lib/react/core.hook b/base/lib/react/core.hook new file mode 100644 index 000000000..143461eef --- /dev/null +++ b/base/lib/react/core.hook @@ -0,0 +1,49 @@ +!: +|% +++ react-elems :: XX /~ + ~+ %- sa ^- (list term) + :~ %a %abbr %address %area %article %aside %audio %b %base + %bdi %bdo %big %blockquote %body %br %button %canvas %caption + %cite %code %col %colgroup %data %datalist %dd %del %details + %dfn %dialog %div %dl %dt %em %embed %fieldset %figcaption + %figure %footer %form %h1 %h2 %h3 %h4 %h5 %h6 %head %header + %hr %html %i %iframe %img %input %ins %kbd %keygen %label + %legend %li %link %main %map %mark %menu %menuitem %meta + %meter %nav %noscript %object %ol %optgroup %option %output %p + %param %picture %pre %progress %q %rp %rt %ruby %s %samp + %script %section %select %small %source %span %strong %style + %sub %summary %sup %table %tbody %td %textarea %tfoot %th + %thead %time %title %tr %track %u %ul %var %video %wbr + %circle %defs %ellipse %g %line %linear-gradient %mask %path + %pattern %polygon %polyline %radial-gradient %rect %stop %svg + %text %tspan + == +++ react-vale + ~(has in react-elems) +++ react-to-tape + |= src=manx ^- tape + :: ?: =(%script n.g.src) + ;: weld + "React.createElement(" + =* tan n.g.src + ?^ tan !! :: namespaces unsupported + ?: (react-vale tan) + "'{(trip tan)}'" + (trip tan) + :: + ", " + =- (pojo (jobe (turn a.g.src -))) + |= [a=mane b=tape] + =. a ?+(a a %class 'className') + ?^(a !! [a (jape b)]) + ", " + :: + =< ~(ram re %rose [", " "[" "]"] (turn c.src .)) + |= a=manx + ?: ?=(_:/(**) a) + leaf/(pojo (jape v.i.a.g.a)) + leaf/^$(src a) + :: + ")" + == +-- diff --git a/base/lib/sole/core.hook b/base/lib/sole/core.hook index 00b1af625..a406dda21 100644 --- a/base/lib/sole/core.hook +++ b/base/lib/sole/core.hook @@ -64,7 +64,7 @@ ?- -.dex %del ?:((lte p.sin p.dex) dex(p +(p.dex)) dex) %ins ?: =(p.sin p.dex) - ?:((gth q.sin q.dex) dex dex(p +(p.dex))) + ?:((lth q.sin q.dex) dex dex(p +(p.dex))) ?:((lte p.sin p.dex) dex(p +(p.dex)) dex) == == @@ -101,7 +101,9 @@ ++ receive :: naturalize event |= sole-change ^- [sole-edit sole-share] - ?> &(=(his.ler his.ven) (lte own.ler own.ven)) + ?. &(=(his.ler his.ven) (lte own.ler own.ven)) + ~& [%receive-sync his/[his.ler his.ven] own/[own.ler own.ven]] + !! ?> &(=(his.ler his.ven) (lte own.ler own.ven)) ?> |(!=(own.ler own.ven) =(0 haw) =(haw (sham buf))) =. leg (scag (sub own.ven own.ler) leg) diff --git a/base/lib/syntax/codemirror.css b/base/lib/syntax/codemirror.css new file mode 100644 index 000000000..7d0dd7ff0 --- /dev/null +++ b/base/lib/syntax/codemirror.css @@ -0,0 +1,10 @@ +.CodeMirror { + height: 100% +} +.cm-s-default .cm-atom {color: #70f} +.cm-s-default .cm-operator {color: #097} + +#err { + background: #fdd; + display: none; +} \ No newline at end of file diff --git a/base/lib/syntax/hoon.js b/base/lib/syntax/hoon.js new file mode 100644 index 000000000..726f06d3a --- /dev/null +++ b/base/lib/syntax/hoon.js @@ -0,0 +1,157 @@ +CodeMirror.defineMode("hoon", function() { + glyph = /[+\-|$%:.#^~;=?!_,&\/<>%*]/ + term = /^[$&|]|^[a-z]([a-z0-9\-]*[a-z0-9])?/ + num = /-?-?^[0-9]([0-9.]*|[xwbv]?[0-9a-zA-Z.-~]*)/ + res = {} + res.startState = function(){return {soblock: false, doqblock:false, sail:false, space:true}} + var propOrVar = function(c){ + if(c == '.') + return 'property' + return 'variable' + } + res.token = function(stream, state){ + if(state.soqblock && stream.sol()){ + if(stream.match(/\s*'''/)){ + state.soqblock = false + } + else { + stream.skipToEnd() + } + return "string" + } + if(state.doqblock){ + if(stream.match(/\s*"""/)){ + state.doqblock = false + } + else { + stream.skipToEnd() + } + return "string" + } + + if(stream.sol()) + state.space = true + + if(state.sail){ + if(stream.peek().match(/[^#./() ]/)||stream.eol()){ + state.sail = false + if(stream.match(/:? /)){ + stream.skipToEnd() + return 'string' + } + if(stream.match(term)) + state.sail = true + return; + if(stream.match(':')) + state.sail = true + return 'operator' + } + } + if(stream.match("'")){ + if(stream.match("''")){ + state.soqblock = true + return 'string' + } + while(stream.match(/^[^'\\]/) || stream.match(/\\./)); + stream.eat("'") + return 'string' + } + if(stream.match('"')){ + if(stream.match('""')){ + state.doqblock = true + stream.skipToEnd() + return 'string' + } + while(stream.match(/^[^"\\]/) || stream.match(/\\./)); + stream.eat('"') + return 'string' + } + if(stream.match(' ;')){ + if(stream.eat(' ')){ + stream.skipToEnd() + return 'string' + } + if(!stream.match(glyph)){ + state.sail = true + } + return 'builtin' + } + + if(stream.match('::')){ + stream.skipToEnd() + return 'comment' + } + + if(stream.match('++ ') || stream.match('+- ')){ + stream.match(term) + return 'header' + } + if(state.space && stream.match('--')){ + if(stream.eat(glyph) || stream.eat(/[a-z0-9]/)) + stream.backUp(3) + else return 'header' + } + + if(stream.eat('%')) + if(stream.match(term) || stream.match(num)) + return 'tag' + else stream.backUp(1) + if(state.space && stream.match('==')){ + return 'tag' + } + if(stream.match(/^@[a-z]*[A-Z]?/)) + return 'atom' + if(stream.match(num)) + return 'number' + + if(stream.eat(/[+\-]/)){ + while(stream.eat(/[<>]/) && stream.eat(/[+\-]/)); + return propOrVar(stream.peek()) + } + + if(stream.eat('`')){ + state.space = false + return 'operator' + } + if(stream.sol() && stream.eatWhile(glyph)){ + state.space = false + return 'builtin' + } + if(stream.eat(glyph)){ + state.space = false + stream.backUp(2) + if(stream.eat(/[ ([{]/) || (stream.peek().match(/[^+\-<>]/) + && stream.eat(glyph))){ // expression start + stream.eatWhile(glyph) + return 'builtin' + } + stream.next() + if(state.space && stream.eat('=')){ + if(/[()]/.exec(stream.peek())) + return 'builtin' + return 'operator' + } + if(stream.eat(/[=:.^]/)) + return 'operator' + stream.next() + return 'builtin' + } + + if(stream.match(term)){ + if(state.space && stream.match('/')) + return 'tag' + state.space = false + return propOrVar(stream.peek()) + } + if(stream.eat(/[ \[(]/)){ + state.space = true + return + } + stream.next() + } + res.lineComment = '::' + res.fold = "indent" + return res +}); + +CodeMirror.defineMIME("text/x-hoon", "hoon"); diff --git a/base/lib/urb.js b/base/lib/urb.js index bd528dc6f..556459aa0 100644 --- a/base/lib/urb.js +++ b/base/lib/urb.js @@ -52,6 +52,17 @@ window.urb.req = function(method,url,params,json,cb) { xhr.send(JSON.stringify(_data)) } +// window.urb.getJSON = function(url,cb){ window.urb.reqJSON("GET",url, null, cb)} +// window.urb.reqJSON = function(method, url, data, cb){ +// var xhr = new XMLHttpRequest() +// xhr.open(method, url) +// xhr.onload = function(){ +// urb.fetchTag.call(xhr) +// if(cb) cb(JSON.parse(xhr.responseText)) +// } +// xhr.send(data === null ? null : JSON.stringify(data)) +// } + window.urb.reqq = [] window.urb.qreq = function(method,url,params,json,cb) { walk = function() { @@ -244,12 +255,11 @@ window.urb.unsubscribe = function(params,cb) { if(!params.path) throw new Error("You must specify a path for urb.unsubscribe.") if(!params.appl) throw new Error("You must specify an appl for urb.unsubscribe.") - if(!cb) throw new Error("You must supply a callback to urb.unsubscribe.") url = "/~/is/"+this.gsig(params)+".json" method = "delete" this.req("delete",url,params,true,function(err,res) { - cb(err,res) + if(cb) cb(err,res) }) } diff --git a/base/mar/cat-args/door.hook b/base/mar/cat-args/door.hook deleted file mode 100644 index ade9afed9..000000000 --- a/base/mar/cat-args/door.hook +++ /dev/null @@ -1,11 +0,0 @@ -:: -:::: /hoon/core/cat-args/mar - :: -/? 314 -|_ pax=(list path) -:: -++ grab :: convert from - |% - ++ noun (list path) :: clam from %noun - -- --- diff --git a/base/mar/cp-args/door.hook b/base/mar/cp-args/door.hook deleted file mode 100644 index 315b7cadc..000000000 --- a/base/mar/cp-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/cp-args/mar - :: -/? 314 -/- cp-args -|_ arg=cp-args -:: -++ grab :: convert from - |% - ++ noun cp-args :: clam from %noun - -- --- diff --git a/base/mar/demo-args/door.hook b/base/mar/demo-args/door.hook deleted file mode 100644 index 2b02949ea..000000000 --- a/base/mar/demo-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/zing/mar - :: -/? 314 -/- demo-args -|_ arg=demo-args -:: -++ grab :: convert from - |% - ++ noun demo-args :: clam from %noun - -- --- diff --git a/base/mar/grep-args/door.hook b/base/mar/grep-args/door.hook deleted file mode 100644 index e9cbdd9c0..000000000 --- a/base/mar/grep-args/door.hook +++ /dev/null @@ -1,11 +0,0 @@ -:: -:::: /hoon/core/grep-args/mar - :: -/? 314 -|_ arg=[cord ~] -:: -++ grab :: convert from - |% - ++ noun ,[cord ~] :: clam from %noun - -- --- diff --git a/base/mar/hi-args/door.hook b/base/mar/hi-args/door.hook deleted file mode 100644 index 2d14c98b3..000000000 --- a/base/mar/hi-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- hi-args -|_ arg=hi-args -:: -++ grab :: convert from - |% - ++ noun hi-args :: clam from %noun - -- --- diff --git a/base/mar/hook/door.hook b/base/mar/hook/door.hook index 7e2659b08..27289b054 100644 --- a/base/mar/hook/door.hook +++ b/base/mar/hook/door.hook @@ -8,8 +8,34 @@ ++ grow :: convert to |% ++ mime [/text/hoon (taco own)] :: convert to %mime - ++ psal ;div:(pre:"{(trip own)}") :: convert to %html - ++ hymn ;html:(head:title:"Source" "+{psal}") + ++ psal :: convert to %html + ;div:(pre:"{(trip own)}") + :: =+ gen-id="src-{<`@ui`(mug own)>}" + :: ;div + :: ;textarea(id "{gen-id}"):"{(trip own)}" + :: ;script:""" + :: CodeMirror.fromTextArea( + :: window[{}], + :: \{lineNumbers:true, readOnly:true} + :: ) + :: """ + :: == + ++ hymn + :: ;html:(head:title:"Source" "+{psal}") + ;html + ;head + ;title:"Source" + ;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js"; + ;script@"/{(trip &2:%)}/lib/syntax/hoon.js"; + ;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/". + "codemirror/4.3.0/codemirror.min.css"); + ;link/"/{(trip &2:%)}/lib/syntax/codemirror.css"(rel "stylesheet"); + == + ;body + ;textarea#src:"{(trip own)}" + ;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})' + == + == ++ txt (lore (cat 3 own '\0a')) -- ++ grab diff --git a/base/mar/into-args/door.hook b/base/mar/into-args/door.hook deleted file mode 100644 index 1956f6dcf..000000000 --- a/base/mar/into-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/into-args/mar - :: -/? 314 -/- into-args -|_ arg=into-args -:: -++ grab :: convert from - |% - ++ noun into-args :: clam from %noun - -- --- diff --git a/base/mar/ls-args/door.hook b/base/mar/ls-args/door.hook deleted file mode 100644 index 7e190407b..000000000 --- a/base/mar/ls-args/door.hook +++ /dev/null @@ -1,11 +0,0 @@ -:: -:::: /hoon/core/ls-args/mar - :: -/? 314 -|_ pax=[path ~] -:: -++ grab :: convert from - |% - ++ noun ,[path ~] :: clam from %noun - -- --- diff --git a/base/mar/mv-args/door.hook b/base/mar/mv-args/door.hook deleted file mode 100644 index 9e6e7e49f..000000000 --- a/base/mar/mv-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- mv-args -|_ arg=mv-args -:: -++ grab :: convert from - |% - ++ noun mv-args :: clam from %noun - -- --- diff --git a/base/mar/react-snip/door.hook b/base/mar/react-snip/door.hook index 561e3c881..026911377 100644 --- a/base/mar/react-snip/door.hook +++ b/base/mar/react-snip/door.hook @@ -2,56 +2,15 @@ :::: /hoon/core/react-snip/mar :: /? 314 -/= react-elems - /; sa /~ - :~ %a %abbr %address %area %article %aside %audio %b %base - %bdi %bdo %big %blockquote %body %br %button %canvas %caption - %cite %code %col %colgroup %data %datalist %dd %del %details - %dfn %dialog %div %dl %dt %em %embed %fieldset %figcaption - %figure %footer %form %h1 %h2 %h3 %h4 %h5 %h6 %head %header - %hr %html %i %iframe %img %input %ins %kbd %keygen %label - %legend %li %link %main %map %mark %menu %menuitem %meta - %meter %nav %noscript %object %ol %optgroup %option %output %p - %param %picture %pre %progress %q %rp %rt %ruby %s %samp - %script %section %select %small %source %span %strong %style - %sub %summary %sup %table %tbody %td %textarea %tfoot %th - %thead %time %title %tr %track %u %ul %var %video %wbr - %circle %defs %ellipse %g %line %linear-gradient %mask %path - %pattern %polygon %polyline %radial-gradient %rect %stop %svg - %text %tspan - == +/+ react !: :::: :: |_ own=manx :: -++ vale ~(has in react-elems) ++ grow :: convert to |% - ++ tape - ;: weld - "React.createElement(" - =* tan n.g.own - ?^ tan !! :: namespaces unsupported - ?: (vale tan) - "'{(trip tan)}'" - (trip tan) - :: - ", " - =- (pojo (jobe (turn a.g.own -))) - |= [a=mane b=^tape] - =. a ?+(a a %class 'className') - ?^(a !! [a (jape b)]) - ", " - :: - =- ~(ram re %rose [", " "[" "]"] (turn c.own -)) - |= a=manx - ?: ?=(_:/(**) a) - leaf/(pojo (jape v.i.a.g.a)) - leaf/tape(own a) - :: - ")" - == + ++ tape (react-to-tape own) ++ react-snip-js (crip tape) ++ react-snip-json ::?> ?=([[%div ~] [[%h1 ~] *] [[%div ~] *] ~]] own) :: xx mystery fish-loop diff --git a/base/mar/react/door.hook b/base/mar/react/door.hook index 1882da030..fdcf34385 100644 --- a/base/mar/react/door.hook +++ b/base/mar/react/door.hook @@ -2,56 +2,15 @@ :::: /hoon/core/react/mar :: /? 314 -/= react-elems - /; sa /~ - :~ %a %abbr %address %area %article %aside %audio %b %base - %bdi %bdo %big %blockquote %body %br %button %canvas %caption - %cite %code %col %colgroup %data %datalist %dd %del %details - %dfn %dialog %div %dl %dt %em %embed %fieldset %figcaption - %figure %footer %form %h1 %h2 %h3 %h4 %h5 %h6 %head %header - %hr %html %i %iframe %img %input %ins %kbd %keygen %label - %legend %li %link %main %map %mark %menu %menuitem %meta - %meter %nav %noscript %object %ol %optgroup %option %output %p - %param %picture %pre %progress %q %rp %rt %ruby %s %samp - %script %section %select %small %source %span %strong %style - %sub %summary %sup %table %tbody %td %textarea %tfoot %th - %thead %time %title %tr %track %u %ul %var %video %wbr - %circle %defs %ellipse %g %line %linear-gradient %mask %path - %pattern %polygon %polyline %radial-gradient %rect %stop %svg - %text %tspan - == +/+ react !: :::: :: |_ own=manx :: -++ vale ~(has in react-elems) ++ grow :: convert to |% - ++ tape - ;: weld - "React.createElement(" - =* tan n.g.own - ?^ tan !! :: namespaces unsupported - ?: (vale tan) - "'{(trip tan)}'" - (trip tan) - :: - ", " - =- (pojo (jobe (turn a.g.own -))) - |= [a=mane b=^tape] - =. a ?+(a a %class 'className') - ?^(a !! [a (jape b)]) - ", " - :: - =- ~(ram re %rose [", " "[" "]"] (turn c.own -)) - |= a=manx - ?: ?=(_:/(**) a) - leaf/(pojo (jape v.i.a.g.a)) - leaf/tape(own a) - :: - ")" - == + ++ tape (react-to-tape own) ++ react-js (crip tape) :: ++ js react-js :: convert to %js ++ mime [/text/javascript (taco react-js)] :: convert to %mime diff --git a/base/mar/reload-args/door.hook b/base/mar/reload-args/door.hook deleted file mode 100644 index 65cf68ecb..000000000 --- a/base/mar/reload-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- reload-args -|_ arg=reload-args -:: -++ grab :: convert from - |% - ++ noun reload-args :: clam from %noun - -- --- diff --git a/base/mar/rm-args/door.hook b/base/mar/rm-args/door.hook deleted file mode 100644 index 2a228fbd5..000000000 --- a/base/mar/rm-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- rm-args -|_ arg=rm-args -:: -++ grab :: convert from - |% - ++ noun rm-args :: convert from %noun - -- --- diff --git a/base/mar/solid-args/door.hook b/base/mar/solid-args/door.hook deleted file mode 100644 index 39278efef..000000000 --- a/base/mar/solid-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/solid-args/pro - :: -/? 314 -/- solid-args -|_ arg=solid-args -:: -++ grab :: convert from - |% - ++ noun solid-args :: clam from %noun - -- --- diff --git a/base/mar/sync-args/door.hook b/base/mar/sync-args/door.hook deleted file mode 100644 index a6266cabc..000000000 --- a/base/mar/sync-args/door.hook +++ /dev/null @@ -1,15 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- sync-args -|_ arg=sync-args -:: -++ grab :: convert from - |% - ++ noun :: convert from %noun - |= src=* - ^+ +>+ - +>+(arg (sync-args src)) - -- --- diff --git a/base/mar/term-in/door.hook b/base/mar/term-in/door.hook deleted file mode 100644 index 9f69f737d..000000000 --- a/base/mar/term-in/door.hook +++ /dev/null @@ -1,21 +0,0 @@ -:: -:::: /hook/door/term-in/mar - :: -/? 314 -/- term-in -!: -|_ term-in -:: -++ grab :: convert from - |% - ++ json - |= jon=^json - %- need - %. jon => jo - %^ ot - pax/(su ;~(pose (cold ~ (full fas)) (plus ;~(pfix fas urs:ab)))) - act/(of line/so res/so cmd/so ~) - ~ - ++ noun term-in :: clam from %noun - -- --- diff --git a/base/mar/term-line/door.hook b/base/mar/term-line/door.hook deleted file mode 100644 index c8fae9035..000000000 --- a/base/mar/term-line/door.hook +++ /dev/null @@ -1,27 +0,0 @@ -:: -:::: /hook/door/term-line/mar - :: -/? 314 -/- term-line -|_ tel=term-line -:: -++ grab :: convert from - |% - ++ noun term-line :: clam from %noun - -- -:: -++ grow - |% - ++ json - %- jobe - :~ [%prompt %s p.p.tel] - [%history %a (turn q.tel |=(a=cord [%s a]))] - :+ %lines %a - %- zing ^- (list (list ^json)) - %+ turn (flop r.tel) |= a=?(tank [%stem p=@da q=tank r=tank]) - ?. ?=(%stem -.a) - (turn (wash 0^80 a) jape) - [(jobe prompt/(jape ~(ram re q.a)) task/(jape ~(ram re r.a)) ~)]~ - == - -- --- diff --git a/base/mar/ticket-args/door.hook b/base/mar/ticket-args/door.hook deleted file mode 100644 index c21567edc..000000000 --- a/base/mar/ticket-args/door.hook +++ /dev/null @@ -1,15 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- ticket-args -|_ arg=ticket-args -:: -++ grab :: convert from - |% - ++ noun :: convert from %noun - |= src=* - ^+ +>+ - +>+(arg (ticket-args src)) - -- --- diff --git a/base/mar/unsync-args/door.hook b/base/mar/unsync-args/door.hook deleted file mode 100644 index 15f8f73ce..000000000 --- a/base/mar/unsync-args/door.hook +++ /dev/null @@ -1,15 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- unsync-args -|_ arg=unsync-args -:: -++ grab :: convert from - |% - ++ noun :: convert from %noun - |= src=* - ^+ +>+ - +>+(arg (unsync-args src)) - -- --- diff --git a/base/mar/verb-args/door.hook b/base/mar/verb-args/door.hook deleted file mode 100644 index 9f5cf3972..000000000 --- a/base/mar/verb-args/door.hook +++ /dev/null @@ -1,15 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- verb-args -|_ arg=verb-args -:: -++ grab :: convert from - |% - ++ noun :: convert from %noun - |= src=* - ^+ +>+ - +>+(arg (verb-args src)) - -- --- diff --git a/base/mar/write-args/door.hook b/base/mar/write-args/door.hook deleted file mode 100644 index 2a228fbd5..000000000 --- a/base/mar/write-args/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- rm-args -|_ arg=rm-args -:: -++ grab :: convert from - |% - ++ noun rm-args :: convert from %noun - -- --- diff --git a/base/mar/zing/door.hook b/base/mar/zing/door.hook deleted file mode 100644 index ea0b82dab..000000000 --- a/base/mar/zing/door.hook +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/core/zing/mar - :: -/? 314 -/- zing -|_ zig=zing -:: -++ grab - |% - ++ noun zing :: clam from %noun - -- --- diff --git a/base/mar/zong/door.hook b/base/mar/zong/door.hook deleted file mode 100644 index 29dfbc561..000000000 --- a/base/mar/zong/door.hook +++ /dev/null @@ -1,34 +0,0 @@ -:: -:::: /hoon/core/zong/mar - :: -/? 314 -/- zong -!: -|_ zog=zong -:: -++ grab :: convert from - |% - ++ noun zong :: clam from %noun - -- -++ grow - |% - ++ json - =. p.zog - (lsh 6 1 (rsh 6 1 p.zog)) :: round off subsecond - %- jobe - :~ - [%time (jape )] - [%auth (jape )] - :- %mess - %+ joba -.r.zog - ?- -.r.zog - %do - [%s p.r.zog] - %say - [%s p.r.zog] - %exp - [%a [%s p.r.zog] (turn (wash 0^80 q.r.zog) jape)] - == - == - -- --- diff --git a/base/mar/zongs/door.hook b/base/mar/zongs/door.hook deleted file mode 100644 index d36dec00b..000000000 --- a/base/mar/zongs/door.hook +++ /dev/null @@ -1,72 +0,0 @@ -:: -:::: /hoon/core/zongs/mar - :: -/? 314 -/- zong -!: -|_ zos=(list zong) -:: -++ grab :: convert from - |% - ++ noun (list zong) :: clam from %noun - -- -:: -++ grow :: convert to - |% - ++ hymn :: convert to %hymn - ^- manx - ;html - ;head - ;title: Zongs! - == - ;body ;table - ;* %+ turn (flop zos) - |= zog=zong - =. p.zog (lsh 6 1 (rsh 6 1 p.zog)) :: round off subsecond - ;tr ;td: {} - ;td: {} - ;+ ?- -.r.zog - %do - ;td: {(trip p.r.zog)} - %say - ;td: & {(trip p.r.zog)} - %exp - ;td - ;code:"{(trip p.r.zog)}" - ; \a0 {~(ram re q.r.zog)} - == == - == == - == == - ++ json - %- jobe - :~ - :- %mensajes - :- %a - %+ turn - (flop zos) - |= - zog=zong - =. p.zog - (lsh 6 1 (rsh 6 1 p.zog)) :: round off subsecond - %- jobe - :~ - [%time (jape )] - [%auth (jape )] - :- %mess - %+ joba -.r.zog - ?- -.r.zog - %do - [%s p.r.zog] - %say - [%s p.r.zog] - %exp - [%a [%s p.r.zog] (turn (wash 0^80 q.r.zog) jape)] - == - == - == - ++ html - (crip (poxo hymn)) - ++ mime - [/text/json (tact (pojo json))] - -- --- diff --git a/base/mar/zung/door.hook b/base/mar/zung/door.hook deleted file mode 100644 index 18944bf11..000000000 --- a/base/mar/zung/door.hook +++ /dev/null @@ -1,34 +0,0 @@ -:: -:::: /hoon/core/zung/mar - :: -/? 314 -/- zung -!: -|_ zig=zung -:: -++ grab :: convert from - |% - ++ noun zung :: clam from %noun - ++ json - |= jon=^json - ^- zung - %- need %. jon - => jo - %- of :~ - :- %mess - %- at :~ - (su ;~(pfix fas (more fas sym))) - %- of :~ - [%do so] - [%say so] - == - == - :- %init - %- at :~ - (su fed:ag) - (su ;~(pfix fas (more fas sym))) - == - == - -- --- - diff --git a/base/pub/doc.md b/base/pub/doc.md index 1c19051eb..094d16ff5 100644 --- a/base/pub/doc.md +++ b/base/pub/doc.md @@ -12,5 +12,5 @@ is a general-purpose computing stack designed to live in the cloud. ------------------------------------------------------------------------ If you're new to the system, take a look at some of the -[guides](doc/guide) to get oriented. Come join us on `:chat` to ask -questions and get help. +[guides](doc/guide) to get oriented. Come join us on `:talk` in the +`/urbit-meta` channel to ask questions and get help. diff --git a/base/pub/doc/arvo/ames/commentary.md b/base/pub/doc/arvo/ames/commentary.md index 2b466e41a..8e6397c09 100644 --- a/base/pub/doc/arvo/ames/commentary.md +++ b/base/pub/doc/arvo/ames/commentary.md @@ -982,8 +982,8 @@ that, we handle the `/q/ge` and `/q/gh` cases for gall requests and responses, respectively. In both cases, we require the next term in the path to be the name of -the intended recipient `%gall` app. Thus, a message to `/q/ge/chat` for -example, will send a message to the chat app. +the intended recipient `%gall` app. Thus, a message to `/q/ge/talk` for +example, will send a message to the talk app. We then send a message to the app itself. The message is either a `%rote` or a `%roth` for a request and a response, respectively. The diff --git a/base/pub/doc/guide/b-cli.md b/base/pub/doc/guide/b-cli.md index 0d4370a68..8e55405c2 100644 --- a/base/pub/doc/guide/b-cli.md +++ b/base/pub/doc/guide/b-cli.md @@ -1,14 +1,19 @@ +XX The CLI is under heavy development with, with pieces being folded +into the "window manager" `sole` and the new cli `dojo`. Don't expect +any of the following to work as described. + This guide is intended to get you oriented in the Arvo command prompt and give you a tour of some basic utilities. The command prompt comes in two flavors, in a web browser and in a terminal. For the most part they're the same, except that in a browser you can evaluate tall-form -Hoon expressions but you can't run readline apps, such as `:chat`. +Hoon expressions but you can't run readline apps, such as `:talk`. Every Arvo command prompt is also a Hoon REPL. The command line is a great place to test out your hoon knowledge. In this guide we're just going to talk about some basic system utilities and get comfortable moving around in `%clay`. If you'd just like to see a list of -command-line utilities, you can find the Arvo man pages [here](). +command-line utilities, you can find the Arvo man pages +[here](../arvo/util.md). This rudimentary tour should work well in both places. @@ -96,37 +101,54 @@ Here you can see that our files are synced back to unix as they are changed in urbit, and vice-versa. As you change files in unix you'll see those changes appear in `%clay`. - my-pier/talsur-todres/$ ls main/app/ - bang grep poke solid unsync - began hi radio sync verb - begin into reload talk ye - cat label reset terminal - chat ls rm test - cp mv shell ticket - my-pier/talsur-todres/$ cat main/app/ls/core.hook + my-pier/talsur-todres/$ ls base/app/ + bang grep peek solid tweet + began helm poke sync twit + begin hi pope talk twitter-auth + cat into reboot tease twitter-feed + code label reload terminal type + cp ls reset test unsync + curl matrix rm ticket verb + dojo mv shell time wipe + gnab nop sole tree ye + my-pier/talsur-todres/$ cat base/app/ls/core.hook + :: ConCATenate file listings + :: + :::: /hook/core/cat/app + :: + /+ sh-utils + // /%%%/ls/subdir !: + :::: + :: |_ [hid=hide ~] - ++ poke-ls-args - |= [ost=bone you=ship arg=path ~] - =+ lon=((hard arch) .^(%cy arg)) - :_ +>.$ - :* [ost %pass / %g %cide %$] - [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang - :_ ~ - :+ %rose [" " ~ ~] - (turn (~(tap by r.lon) ~) |=([a=@ta b=*] leaf/(trip a))) + ++ peer ,_`. + ++ poke--args + %+ args-into-gate . + |= [arg=(list path)] + =- tang/(zing -) + %+ turn arg + |= pax=path + ^- tang + =+ ark=;;(arch .^(%cy pax)) + ?^ q.ark + :- leaf/(spud pax) + %+ turn (lore ;;(@t .^(%cx pax))) + |=(a=cord leaf/(trip a)) + ?- r.ark :: handle ambiguity + ~ + [rose/[" " `~]^~[leaf/"~" (smyt pax)]]~ + [[@t ~] ~ ~] + $(pax (welp pax /[p.n.r.ark])) + * + =- [palm/[": " ``~]^-]~ + :~ rose/[" " `~]^~[leaf/"*" (smyt pax)] + `tank`(subdir pax r.ark) + == == - ++ peer - |= - * - `+> -- -Here you can see that `/main/app` is the main location where our apps +Here you can see that `/base/app` is the main location where our apps are stored, and the contents of the `:ls` app. urbit applications are of course written in hoon, our naitive programming language. Don't worry about the contents of the file for now. Since changes in unix are synced diff --git a/base/pub/octo/fab/hymn.hook b/base/pub/octo/fab/hymn.hook index bf7ba4d94..526b5f796 100644 --- a/base/pub/octo/fab/hymn.hook +++ b/base/pub/octo/fab/hymn.hook @@ -7,13 +7,26 @@ ;head ;meta(charset "utf-8"); ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"); - ;script(type "text/javascript", src "/~~/~/at/base/lib/urb.js"); + ;script(type "text/javascript", src "/~/at/base/lib/urb.js"); + ;link(type "text/css", rel "stylesheet", href "/home/lib/base.css"); ;link(type "text/css", rel "stylesheet", href "/home/pub/octo/src/main.css"); - ;title: urbit cit cat eot + ;title: :octo == ;body + ;div#what + ;div#ship + ;div.sig: ~ + ;div.ship; + ;div.as; + == + ;div#vs: vs + ;div#user + ;div.sig: ~ + ;div.ship; + ;div.as; + == + == ;div#bord; - ;div#whom; ;script(type "text/javascript", src "/home/pub/octo/src/main.js"); == == diff --git a/base/pub/octo/src/main.css b/base/pub/octo/src/main.css index 839f686b7..5ea0da7bc 100644 --- a/base/pub/octo/src/main.css +++ b/base/pub/octo/src/main.css @@ -1,5 +1,5 @@ -#bord, -#whom { +#what, +#bord { width: 600px; text-align: center; position: absolute; @@ -7,14 +7,62 @@ margin-left: -300px; } -#bord { - width: 600px; - height: 600px; - position: absolute; +#what { + height: 36px; top: 18px; } -#whom, +#bord { + height: 600px; + position: absolute; + top: 111px; + opacity: .6; +} + +.turn #bord { + opacity: 1; +} + +#what { + font-family: "bau"; +} + +#what div { + display: inline-block; +} + +#what .ship { + font-weight: 400; + letter-spacing: 1px; + text-transform: uppercase; +} + +.turn #what #ship, +#what #user { + border: 2px solid #fff; +} + +#what #ship, +.turn #what #user { + border: 2px solid red; +} + +#what #ship, +#what #user { + padding: .6rem; +} + +#what .as { + width: 1.6rem; +} + +#vs { + margin: 0 1rem; + padding: .3rem; + color: #fff; + background-color: #000; +} + .spac { font-size: 100px; line-height: 200px; @@ -32,23 +80,23 @@ .spac[data-index="0-0"], .spac[data-index="1-0"], .spac[data-index="2-0"] { - border-top: 0; + border-left: 0; } .spac[data-index="0-0"], .spac[data-index="0-1"], .spac[data-index="0-2"] { - border-left: 0; + border-top: 0; } .spac[data-index="2-0"], .spac[data-index="2-1"], .spac[data-index="2-2"] { - border-right: 0; + border-bottom: 0; } .spac[data-index="0-2"], .spac[data-index="1-2"], .spac[data-index="2-2"] { - border-bottom: 0; -} \ No newline at end of file + border-right: 0; +} diff --git a/base/pub/octo/src/main.js b/base/pub/octo/src/main.js index b96a5a139..b3cc5d121 100644 --- a/base/pub/octo/src/main.js +++ b/base/pub/octo/src/main.js @@ -2,17 +2,19 @@ $(function() { $bord = $('#bord') $whom = $('#whom') + lett = ["x","o"] symb = [" ","✕","◯"] draw = function(state) { - space = function(_state,x,y) { - return "
"+symb[_state]+"
" } s = "" x = 0 y = 0 for(i=0;i<9;i++) { - s += space((state.box[i] ? 1 : 0)+(state.boo[i] ? 2 : 0),x,y) + j = [0,3,6,1,4,7,2,5,8][i] // XX math + s += space((state.box[j] ? 1 : 0)+(state.boo[j] ? 2 : 0),y,x) x++ if((i+1)%3 == 0) { y++ @@ -20,25 +22,41 @@ $(function() { } } $bord.html(s) - $whom.html((state.who == 'x' ? symb[1] : symb[2])) + turn(state.who) } + which = null + turn = function(who) { + $('body').toggleClass('turn',(who == which)) + } + + assign = function(who) { + which = who + turn(who) + $('#ship .as').text(symb[Number(!lett.indexOf(who))+1]) + $('#user .as').text(symb[lett.indexOf(who)+1]) + } urb.appl = 'octo' - urb.bind('/octo/o', function(err,res) { + urb.bind('/octo/web', function(err,res) { + if(which == null) { assign(res.data.who) } draw(res.data) }) - draw({ - box:[false,false,false,false,false,false,false,false,false], - boo:[false,false,false,false,false,false,false,false,false] - }) + // draw({ + // box:[false,false,false,false,false,false,false,false,false], + // boo:[false,false,false,false,false,false,false,false,false] + // }) $bord.on('click', function(e) { + if(!$('body').hasClass('turn')) { return false } $t = $(e.target).closest('.spac') data = $.map( $t.attr('data-index').split('-'), function(i) { return Number(i); }) urb.send({mark:'octo-move',data:data}) }) -}) \ No newline at end of file + + $('#ship .ship').text(window.urb.ship) + $('#user .ship').text(window.urb.user) +}) diff --git a/base/pub/radio/fab/hymn.hook b/base/pub/radio/fab/hymn.hook deleted file mode 100644 index 86369c103..000000000 --- a/base/pub/radio/fab/hymn.hook +++ /dev/null @@ -1,26 +0,0 @@ -:: -:: -:::: /hook/hymn/fab/chat/pub/ - :: -^- manx -;html - ;head - ;meta(charset "utf-8"); - ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"); - ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"); - ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/react/0.12.1/react.min.js"); - ;meta(name "viewport", content "width=432, initial-scale=1"); - ;script(type "text/javascript", src "//use.typekit.net/fkv0sjk.js"); - ;script:''' - try{Typekit.load();}catch(e){} - ''' - ;link(type "text/css", rel "stylesheet", href "/base/pub/radio/src/main.css"); - ;script(type "text/javascript", src "/gop/hart.js"); - ;title: Radio - == - ;body - ;div#c; - ;script(type "text/javascript", src "/base/lib/urb.js"); - ;script(type "text/javascript", src "/base/pub/radio/src/main.js"); - == -== diff --git a/base/pub/radio/src/main.css b/base/pub/radio/src/main.css deleted file mode 100644 index 9989de2a6..000000000 --- a/base/pub/radio/src/main.css +++ /dev/null @@ -1,327 +0,0 @@ -@font-face { - font-family: "bau"; - src: url("https://s3-us-west-2.amazonaws.com/urbit/bauregular.otf"); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: "bau"; - src: url("https://s3-us-west-2.amazonaws.com/urbit/bauregularitalic.otf"); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: "bau"; - src: url("https://s3-us-west-2.amazonaws.com/urbit/baumedium.otf"); - font-weight: 500; - font-style: normal; -} -@font-face { - font-family: "bau"; - src: url("https://s3-us-west-2.amazonaws.com/urbit/baumediumitalic.otf"); - font-weight: 500; - font-style: italic; -} -@font-face { - font-family: "bau"; - src: url("https://s3-us-west-2.amazonaws.com/urbit/baubold.otf"); - font-weight: 600; - font-style: normal; -} -@font-face { - font-family: "bau"; - src: url("https://s3-us-west-2.amazonaws.com/urbit/baubolditalic.otf"); - font-weight: 600; - font-style: italic; -} -.iden, -.time, -#length, -input.join, -.stations { - font-family: "source-code-pro"; -} -input { - -webkit-appearance: none; - border-radius: 0; -} -html, -body { - height: 100%; - font-family: "bau"; -} -#length, -.time { - font-size: 0.6rem; - letter-spacing: 0; - font-weight: 200; -} -input.join, -.stations, -.iden, -#station { - font-size: 0.7rem; -} -html, -body { - font-size: 18px; -} -body { - background-color: #fefefe; - padding: 0; - margin: 0; -} -.hidden { - display: none; -} -#c { - width: 66rem; - top: 0; - padding: 1rem 1rem 0 1rem; - background-color: #fff; - height: 100%; -} -#stations-container { - position: fixed; - top: 1rem; - left: 1rem; - width: 12rem; -} -#station-container { - position: fixed; - top: 1rem; - left: 54rem; - width: 12rem; -} -#stations-container, -#messages-container { - vertical-align: top; -} -#station { - width: 18rem; -} -#station .iden { - display: block; -} -.stations { - width: 4rem; -} -.station { - display: inline-block; - width: 9rem; - margin-bottom: 0.3rem; - cursor: pointer; -} -.station .name { - border-bottom: 2px solid transparent; -} -.station.selected .name { - font-weight: 600; - border-bottom: 2px solid #000; -} -.station > div { - display: inline; -} -.station .remove { - display: none; - float: right; - font-size: 0.8rem; - line-height: 1rem; -} -.station:hover .remove { - display: inline; -} -.join-ctrl { - margin-top: 1.2rem; -} -.join-ctrl input { - border: none; -} -.join-ctrl input::-webkit-input-placeholder { - font-weight: 200; -} -.join-ctrl input { - font-weight: 400; -} -.message { - margin-bottom: 0.2rem; -} -#messages .message:last-child { - margin-bottom: 2rem; -} -#messages .message .time { - opacity: 0; -} -#messages .message:last-child .time, -#messages .message:hover .time { - opacity: 1; -} -.time { - margin-right: 0.6rem; -} -.member { - width: 12rem; - margin: 0.3rem 0.6rem 0.3rem 0; -} -#messages { - height: auto; -} -.attr { - width: 9rem; - text-align: right; - margin-right: 2rem; -} -.mess, -.attr, -.iden, -.attr > div, -#station .member div, -#writing { - display: inline-block; -} -.iden > div { - display: inline; -} -.mess, -#writing, -#length { - vertical-align: top; -} -.mess { - font-size: 0.8rem; - letter-spacing: 0.03rem; - word-wrap: break-word; - max-width: 31rem; -} -.ship, -.name { - font-weight: 500; -} -.ship.talk:before { - content: "..."; - margin-left: -1.3rem; - margin-right: 0.3rem; - width: 1rem; - margin-top: -0.4rem; - vertical-align: middle; - display: inline-block; - line-height: 0.2rem; - letter-spacing: -0.1rem; -} -#writing-container { - bottom: 4rem; - margin-bottom: 1rem; -} -#messages-container, -#writing-container { - margin-left: 12rem; -} -.writing #length { - display: inline; - margin-left: 1rem; - margin-top: 1.2rem; -} -#writing { - font-size: 0.8rem; -} -#writing, -input.join { - min-height: 1.2rem; - padding: 0.3rem 0.6rem; - margin-left: -0.6rem; - outline: none; - background-color: #f9f9f9; -} -#writing:focus, -input.join:focus { - background-color: #eee; -} -.pending { - color: #ccc; -} -#scrolling { - display: none; -} -.scrolling #scrolling { - position: fixed; - bottom: 3rem; - left: 2rem; - height: 1rem; - padding: 1rem; - height: 2rem; - background-color: #f9f9f9; - font-weight: 500; - font-size: 0.8rem; - text-transform: uppercase; -} -@media (max-width: 40rem) { - #c { - left: 0; - margin-left: 0; - width: 24rem; - } - #messages-container, - #writing-container { - margin-left: 1rem; - } - #stations-container, - #station-container { - position: relative; - float: left; - } - #stations-container { - width: 8rem; - } - #station-container { - left: auto; - } - .station { - width: 5rem; - } - .attr { - display: block; - text-align: left; - width: 2rem; - margin-right: 1rem; - } - .message { - height: 1.6rem; - } - .join-ctrl input, - .stations, - .iden, - #station { - font-size: 0.5rem; - } - .join-ctrl input { - width: 6rem; - } - .station .remove { - display: inline; - font-size: 0.6rem; - line-height: 0.6rem; - } - .ship.talk:before { - margin-left: -0.3rem; - margin-right: 0; - } - .attr { - width: 4rem; - } - .iden > div { - display: block; - } - .attr > .time { - display: none; - } - .mess { - max-width: 12rem; - margin-bottom: 1rem; - } - #writing { - max-width: 12rem; - } - #station { - width: 8rem; - } -} diff --git a/base/pub/radio/src/main.js b/base/pub/radio/src/main.js deleted file mode 100644 index d1c297fab..000000000 --- a/base/pub/radio/src/main.js +++ /dev/null @@ -1,5901 +0,0 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { - end = this.state.last - this.pageSize; - if (end < 0) { - end = 0; - } - this.lastLength = this.length; - return MessageActions.getMore(this.state.last, end); - } - }, - componentDidMount: function() { - var checkMore; - MessageStore.addChangeListener(this._onChangeStore); - StationStore.addChangeListener(this._onChangeStore); - checkMore = this.checkMore; - $(window).on('scroll', checkMore); - return window.util.setScroll(); - }, - componentDidUpdate: function() { - var $window, h, st; - $window = $(window); - if (this.lastLength) { - h = $('.message').height() * (this.length - this.lastLength); - st = $window.scrollTop(); - $window.scrollTop(st + h); - return this.lastLength = null; - } else { - return $window.scrollTop($('#writing-container').position().top - $(window).height() + $('#writing-container').outerHeight(true)); - } - }, - componentWillUnmount: function() { - MessageStore.removeChangeListener(this._onChangeStore); - return StationStore.removeChangeListener(this._onChangeStore); - }, - _onChangeStore: function() { - return this.setState(this.stateFromStore()); - }, - render: function() { - var messages, station, _messages; - station = this.state.station; - _messages = _.filter(this.state.messages, function(_message) { - return _.keys(_message.thought.audience).indexOf(station) !== -1; - }); - _messages = _.sortBy(_messages, function(_message) { - _message.pending = _message.thought.audience[station]; - return _message.thought.statement.time; - }); - this.length = _messages.length; - setTimeout((function(_this) { - return function() { - if (length < _this.pageSize) { - return _this.checkMore(); - } - }; - })(this), 1); - messages = _messages.map(function(_message) { - return Message(_message, ""); - }); - return div({ - id: "messages" - }, messages); - } -}); - - - -},{"../actions/MessageActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/MessageActions.coffee","../stores/MessageStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/MessageStore.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MemberComponent.coffee","moment-timezone":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/index.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationComponent.coffee":[function(require,module,exports){ -var Member, StationActions, StationStore, div, input, recl, textarea, _ref; - -recl = React.createClass; - -_ref = [React.DOM.div, React.DOM.input, React.DOM.textarea], div = _ref[0], input = _ref[1], textarea = _ref[2]; - -StationStore = require('../stores/StationStore.coffee'); - -StationActions = require('../actions/StationActions.coffee'); - -Member = require('./MemberComponent.coffee'); - -module.exports = recl({ - stateFromStore: function() { - return { - members: StationStore.getMembers(), - station: StationStore.getStation(), - typing: StationStore.getTyping() - }; - }, - getInitialState: function() { - return this.stateFromStore(); - }, - componentDidMount: function() { - StationStore.addChangeListener(this._onChangeStore); - return setInterval(this.ping, 600000); - }, - componentWillUnmount: function() { - return StationStore.removeChangeListener(this._onChangeStore); - }, - _onChangeStore: function() { - this.setState(this.stateFromStore()); - return this.ping(); - }, - ping: function() { - var k, v, _ping, _ref1; - this.typing = this.state.typing; - _ping = {}; - _ref1 = this.state.members; - for (k in _ref1) { - v = _ref1[k]; - _ping[k] = this.state.typing[k] === true ? "talk" : "hear"; - } - return StationActions.ping(_ping); - }, - render: function() { - var members; - if (this.state.station && this.state.members[this.state.station]) { - members = _.map(this.state.members[this.state.station], function(state, member) { - return Member({ - ship: member, - presence: state.presence - }); - }); - } else { - members = ""; - } - return div({ - id: "station" - }, members); - } -}); - - - -},{"../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MemberComponent.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationsComponent.coffee":[function(require,module,exports){ -var StationActions, StationStore, div, input, recl, _ref; - -recl = React.createClass; - -_ref = [React.DOM.div, React.DOM.input], div = _ref[0], input = _ref[1]; - -StationStore = require('../stores/StationStore.coffee'); - -StationActions = require('../actions/StationActions.coffee'); - -module.exports = recl({ - stateFromStore: function() { - return { - stations: StationStore.getStations(), - station: StationStore.getStation() - }; - }, - getInitialState: function() { - return this.stateFromStore(); - }, - componentDidMount: function() { - this.$el = $(this.getDOMNode()); - this.$add = $('#stations .add'); - this.$input = this.$el.find('input'); - return StationStore.addChangeListener(this._onChangeStore); - }, - componentWillUnmount: function() { - return StationStore.removeChangeListener(this._onChangeStore); - }, - _onChangeStore: function() { - return this.setState(this.stateFromStore()); - }, - _click: function(e) { - return StationActions.switchStation($(e.target).text()); - }, - _keyUp: function(e) { - var v; - if (e.keyCode === 13) { - v = this.$input.val(); - if (this.state.stations.indexOf(v) === -1) { - StationActions.joinStation(v, this.state.stations); - return this.$input.val(''); - } - } - }, - _remove: function(e) { - var _station, _stations; - _station = $(e.target).parent().find('.name').text(); - _stations = _.without(this.state.stations, _station); - StationActions.leaveStation(_station, _stations); - e.stopPropagation(); - return e.preventDefault(); - }, - render: function() { - var station, stations, _click, _remove; - station = this.state.station; - _click = this._click; - _remove = this._remove; - stations = this.state.stations.map(function(_station) { - var k; - k = "station"; - if (_station === station) { - k += " selected"; - } - return div({ - className: k, - onClick: _click - }, [ - div({ - className: "name" - }, _station), div({ - className: "remove", - onClick: _remove, - dataStation: _station - }, "×") - ]); - }); - return div({ - id: "stations" - }, [ - div({ - className: "stations" - }, stations), div({ - className: "join-ctrl" - }, [ - input({ - className: "join", - onKeyUp: this._keyUp, - placeholder: "~ship-name/room" - }, "") - ]) - ]); - } -}); - - - -},{"../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/WritingComponent.coffee":[function(require,module,exports){ -var Member, MessageActions, StationActions, StationStore, div, input, recl, textarea, _ref; - -recl = React.createClass; - -_ref = [React.DOM.div, React.DOM.input, React.DOM.textarea], div = _ref[0], input = _ref[1], textarea = _ref[2]; - -MessageActions = require('../actions/MessageActions.coffee'); - -StationActions = require('../actions/StationActions.coffee'); - -StationStore = require('../stores/StationStore.coffee'); - -Member = require('./MemberComponent.coffee'); - -module.exports = recl({ - set: function() { - if (window.localStorage && this.$writing) { - return window.localStorage.setItem('writing', this.$writing.text()); - } - }, - get: function() { - if (window.localStorage) { - return window.localStorage.getItem('writing'); - } - }, - stateFromStore: function() { - return { - members: StationStore.getMembers(), - typing: StationStore.getTyping(), - station: StationStore.getStation() - }; - }, - typing: function(state) { - if (this.state.typing[this.state.station] !== state) { - return StationActions.setTyping(this.state.station, state); - } - }, - _blur: function() { - return this.typing(false); - }, - _keyDown: function(e) { - if (e.keyCode === 13) { - MessageActions.sendMessage(this.state.station, this.$writing.text()); - this.$length.text("0/69"); - this.$writing.text(''); - this.set(); - e.preventDefault(); - this.typing(false); - return false; - } else { - this.typing(true); - } - this._input(); - return this.set(); - }, - _input: function(e) { - var geturl, length, text, url, urls, _i, _len; - text = this.$writing.text(); - length = text.length; - geturl = new RegExp("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))", "g"); - urls = text.match(geturl); - if (urls !== null && urls.length > 0) { - for (_i = 0, _len = urls.length; _i < _len; _i++) { - url = urls[_i]; - length -= url.length; - length += 10; - } - } - this.$length.text("" + length + "/69"); - if (length >= 69) { - this.$writing.text(this.$writing.text().substr(0, 69)); - this.cursorAtEnd(); - if (e) { - e.preventDefault(); - } - return false; - } - }, - getTime: function() { - var d, seconds; - d = new Date(); - seconds = d.getSeconds(); - if (seconds < 10) { - seconds = "0" + seconds; - } - return "~" + d.getHours() + "." + d.getMinutes() + "." + seconds; - }, - cursorAtEnd: function() { - var range, selection; - range = document.createRange(); - range.selectNodeContents(this.$writing[0]); - range.collapse(false); - selection = window.getSelection(); - selection.removeAllRanges(); - return selection.addRange(range); - }, - componentDidMount: function() { - StationStore.addChangeListener(this._onChangeStore); - this.$length = $('#length'); - this.$writing = $('#writing'); - if (this.get()) { - this.$writing.text(this.get()); - this._input(); - } - return setInterval((function(_this) { - return function() { - var $n; - $n = $(_this.getDOMNode()); - return $n.find('.time').text(_this.getTime()); - }; - })(this), 1000); - }, - componentWillUnmount: function() { - return StationStore.removeChangeListener(this._onChangeStore); - }, - _onChangeStore: function() { - return this.setState(this.stateFromStore()); - }, - render: function() { - var iden, k, name, ship, user, _ref1; - user = "~" + window.urb.user; - iden = StationStore.getMember(user); - ship = iden ? iden.ship : user; - name = iden ? iden.name : ""; - k = "writing"; - if (!((_ref1 = this.state) != null ? _ref1.station : void 0)) { - k += " hidden"; - } - return div({ - className: k - }, [ - div({ - className: "attr" - }, [ - div({ - className: "time" - }, this.getTime()), Member(iden, "") - ]), div({ - id: "writing", - contentEditable: true, - onBlur: this._blur, - onInput: this._input, - onPaste: this._input, - onKeyDown: this._keyDown, - onFocus: this.cursorAtEnd - }, ""), div({ - id: "length" - }, "0/69") - ]); - } -}); - - - -},{"../actions/MessageActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/MessageActions.coffee","../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MemberComponent.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/dispatcher/Dispatcher.coffee":[function(require,module,exports){ -var Dispatcher, copyProperties; - -Dispatcher = require('flux').Dispatcher; - -copyProperties = require('react/lib/copyProperties'); - -module.exports = copyProperties(new Dispatcher(), { - handleServerAction: function(action) { - return this.dispatch({ - source: 'server', - action: action - }); - }, - handleViewAction: function(action) { - return this.dispatch({ - source: 'view', - action: action - }); - } -}); - - - -},{"flux":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/flux/index.js","react/lib/copyProperties":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/copyProperties.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/main.coffee":[function(require,module,exports){ -$(function() { - var $c, MessagesComponent, StationComponent, StationStore, StationsComponent, WritingComponent, rend; - rend = React.renderComponent; - StationStore = require('./stores/StationStore.coffee'); - window.chat = {}; - window.chat.MessagePersistence = require('./persistence/MessagePersistence.coffee'); - window.chat.StationPersistence = require('./persistence/StationPersistence.coffee'); - window.util = { - create: function(name) { - return window.chat.StationPersistence.createStation(name, function(err, res) {}); - }, - subscribe: function(name) { - return window.chat.StationPersistence.addSource("main", window.urb.ship, ["~zod/" + name]); - }, - uuid32: function() { - var i, str, _i, _str; - str = "0v"; - str += Math.ceil(Math.random() * 8) + "."; - for (i = _i = 0; _i <= 5; i = ++_i) { - _str = Math.ceil(Math.random() * 10000000).toString(32); - _str = ("00000" + _str).substr(-5, 5); - str += _str + "."; - } - return str.slice(0, -1); - }, - populate: function(station, number) { - var c, send; - c = 0; - send = function() { - var _audi, _message; - if (c < number) { - c++; - } else { - console.log('done'); - return true; - } - _audi = {}; - _audi[station] = "pending"; - _message = { - serial: window.util.uuid32(), - audience: _audi, - statement: { - speech: { - say: "Message " + c - }, - time: Date.now(), - now: Date.now() - } - }; - return window.chat.MessagePersistence.sendMessage(_message, send); - }; - return send(); - }, - getScroll: function() { - return this.writingPosition = $('#writing-container').position().top - $(window).height() + $('#writing-container').outerHeight(true); - }, - setScroll: function() { - window.util.getScroll(); - return $(window).scrollTop(window.util.writingPosition); - }, - checkScroll: function() { - if (!window.util.writingPosition) { - window.util.getScroll(); - } - if ($(window).scrollTop() < window.util.writingPosition) { - return $('body').addClass('scrolling'); - } else { - return $('body').removeClass('scrolling'); - } - } - }; - $(window).on('scroll', window.util.checkScroll); - window.chat.MessagePersistence.listen(window.urb.util.toDate(new Date())); - window.chat.StationPersistence.config(); - window.chat.StationPersistence.rooms(); - window.chat.StationPersistence.members(); - StationComponent = require('./components/StationComponent.coffee'); - StationsComponent = require('./components/StationsComponent.coffee'); - MessagesComponent = require('./components/MessagesComponent.coffee'); - WritingComponent = require('./components/WritingComponent.coffee'); - $c = $('#c'); - $c.append("
"); - $c.append("
"); - $c.append("
"); - $c.append("
"); - $c.append("
BOTTOM
"); - rend(StationComponent({}, ""), $('#station-container')[0]); - rend(StationsComponent({}, ""), $('#stations-container')[0]); - rend(MessagesComponent({}, ""), $('#messages-container')[0]); - return rend(WritingComponent({}, ""), $('#writing-container')[0]); -}); - - - -},{"./components/MessagesComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MessagesComponent.coffee","./components/StationComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationComponent.coffee","./components/StationsComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationsComponent.coffee","./components/WritingComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/WritingComponent.coffee","./persistence/MessagePersistence.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/persistence/MessagePersistence.coffee","./persistence/StationPersistence.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/persistence/StationPersistence.coffee","./stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/flux/index.js":[function(require,module,exports){ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -module.exports.Dispatcher = require('./lib/Dispatcher') - -},{"./lib/Dispatcher":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/flux/lib/Dispatcher.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/flux/lib/Dispatcher.js":[function(require,module,exports){ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule Dispatcher - * @typechecks - */ - -"use strict"; - -var invariant = require('./invariant'); - -var _lastID = 1; -var _prefix = 'ID_'; - -/** - * Dispatcher is used to broadcast payloads to registered callbacks. This is - * different from generic pub-sub systems in two ways: - * - * 1) Callbacks are not subscribed to particular events. Every payload is - * dispatched to every registered callback. - * 2) Callbacks can be deferred in whole or part until other callbacks have - * been executed. - * - * For example, consider this hypothetical flight destination form, which - * selects a default city when a country is selected: - * - * var flightDispatcher = new Dispatcher(); - * - * // Keeps track of which country is selected - * var CountryStore = {country: null}; - * - * // Keeps track of which city is selected - * var CityStore = {city: null}; - * - * // Keeps track of the base flight price of the selected city - * var FlightPriceStore = {price: null} - * - * When a user changes the selected city, we dispatch the payload: - * - * flightDispatcher.dispatch({ - * actionType: 'city-update', - * selectedCity: 'paris' - * }); - * - * This payload is digested by `CityStore`: - * - * flightDispatcher.register(function(payload) { - * if (payload.actionType === 'city-update') { - * CityStore.city = payload.selectedCity; - * } - * }); - * - * When the user selects a country, we dispatch the payload: - * - * flightDispatcher.dispatch({ - * actionType: 'country-update', - * selectedCountry: 'australia' - * }); - * - * This payload is digested by both stores: - * - * CountryStore.dispatchToken = flightDispatcher.register(function(payload) { - * if (payload.actionType === 'country-update') { - * CountryStore.country = payload.selectedCountry; - * } - * }); - * - * When the callback to update `CountryStore` is registered, we save a reference - * to the returned token. Using this token with `waitFor()`, we can guarantee - * that `CountryStore` is updated before the callback that updates `CityStore` - * needs to query its data. - * - * CityStore.dispatchToken = flightDispatcher.register(function(payload) { - * if (payload.actionType === 'country-update') { - * // `CountryStore.country` may not be updated. - * flightDispatcher.waitFor([CountryStore.dispatchToken]); - * // `CountryStore.country` is now guaranteed to be updated. - * - * // Select the default city for the new country - * CityStore.city = getDefaultCityForCountry(CountryStore.country); - * } - * }); - * - * The usage of `waitFor()` can be chained, for example: - * - * FlightPriceStore.dispatchToken = - * flightDispatcher.register(function(payload) { - * switch (payload.actionType) { - * case 'country-update': - * flightDispatcher.waitFor([CityStore.dispatchToken]); - * FlightPriceStore.price = - * getFlightPriceStore(CountryStore.country, CityStore.city); - * break; - * - * case 'city-update': - * FlightPriceStore.price = - * FlightPriceStore(CountryStore.country, CityStore.city); - * break; - * } - * }); - * - * The `country-update` payload will be guaranteed to invoke the stores' - * registered callbacks in order: `CountryStore`, `CityStore`, then - * `FlightPriceStore`. - */ - - function Dispatcher() { - this.$Dispatcher_callbacks = {}; - this.$Dispatcher_isPending = {}; - this.$Dispatcher_isHandled = {}; - this.$Dispatcher_isDispatching = false; - this.$Dispatcher_pendingPayload = null; - } - - /** - * Registers a callback to be invoked with every dispatched payload. Returns - * a token that can be used with `waitFor()`. - * - * @param {function} callback - * @return {string} - */ - Dispatcher.prototype.register=function(callback) { - var id = _prefix + _lastID++; - this.$Dispatcher_callbacks[id] = callback; - return id; - }; - - /** - * Removes a callback based on its token. - * - * @param {string} id - */ - Dispatcher.prototype.unregister=function(id) { - invariant( - this.$Dispatcher_callbacks[id], - 'Dispatcher.unregister(...): `%s` does not map to a registered callback.', - id - ); - delete this.$Dispatcher_callbacks[id]; - }; - - /** - * Waits for the callbacks specified to be invoked before continuing execution - * of the current callback. This method should only be used by a callback in - * response to a dispatched payload. - * - * @param {array} ids - */ - Dispatcher.prototype.waitFor=function(ids) { - invariant( - this.$Dispatcher_isDispatching, - 'Dispatcher.waitFor(...): Must be invoked while dispatching.' - ); - for (var ii = 0; ii < ids.length; ii++) { - var id = ids[ii]; - if (this.$Dispatcher_isPending[id]) { - invariant( - this.$Dispatcher_isHandled[id], - 'Dispatcher.waitFor(...): Circular dependency detected while ' + - 'waiting for `%s`.', - id - ); - continue; - } - invariant( - this.$Dispatcher_callbacks[id], - 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.', - id - ); - this.$Dispatcher_invokeCallback(id); - } - }; - - /** - * Dispatches a payload to all registered callbacks. - * - * @param {object} payload - */ - Dispatcher.prototype.dispatch=function(payload) { - invariant( - !this.$Dispatcher_isDispatching, - 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.' - ); - this.$Dispatcher_startDispatching(payload); - try { - for (var id in this.$Dispatcher_callbacks) { - if (this.$Dispatcher_isPending[id]) { - continue; - } - this.$Dispatcher_invokeCallback(id); - } - } finally { - this.$Dispatcher_stopDispatching(); - } - }; - - /** - * Is this Dispatcher currently dispatching. - * - * @return {boolean} - */ - Dispatcher.prototype.isDispatching=function() { - return this.$Dispatcher_isDispatching; - }; - - /** - * Call the callback stored with the given id. Also do some internal - * bookkeeping. - * - * @param {string} id - * @internal - */ - Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) { - this.$Dispatcher_isPending[id] = true; - this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload); - this.$Dispatcher_isHandled[id] = true; - }; - - /** - * Set up bookkeeping needed when dispatching. - * - * @param {object} payload - * @internal - */ - Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) { - for (var id in this.$Dispatcher_callbacks) { - this.$Dispatcher_isPending[id] = false; - this.$Dispatcher_isHandled[id] = false; - } - this.$Dispatcher_pendingPayload = payload; - this.$Dispatcher_isDispatching = true; - }; - - /** - * Clear bookkeeping used for dispatching. - * - * @internal - */ - Dispatcher.prototype.$Dispatcher_stopDispatching=function() { - this.$Dispatcher_pendingPayload = null; - this.$Dispatcher_isDispatching = false; - }; - - -module.exports = Dispatcher; - -},{"./invariant":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/flux/lib/invariant.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/flux/lib/invariant.js":[function(require,module,exports){ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule invariant - */ - -"use strict"; - -/** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - -var invariant = function(condition, format, a, b, c, d, e, f) { - if (false) { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - - if (!condition) { - var error; - if (format === undefined) { - error = new Error( - 'Minified exception occurred; use the non-minified dev environment ' + - 'for the full error message and additional helpful warnings.' - ); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error( - 'Invariant Violation: ' + - format.replace(/%s/g, function() { return args[argIndex++]; }) - ); - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } -}; - -module.exports = invariant; - -},{}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/data/packed/latest.json":[function(require,module,exports){ -module.exports={ - "version": "2014j", - "zones": [ - "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q", - "Africa/Accra|LMT GMT GHST|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE", - "Africa/Addis_Ababa|LMT EAT BEAT BEAUT|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ", - "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0", - "Africa/Bangui|LMT WAT|-d.A -10|01|-22y0d.A", - "Africa/Bissau|LMT WAT GMT|12.k 10 0|012|-2ldWV.E 2xonV.E", - "Africa/Blantyre|LMT CAT|-2a.k -20|01|-2GJea.k", - "Africa/Cairo|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 1o10 jz0 gN0 pb0 1qN0 dX0 e10 xz0 1o10 bb0 e10 An0 1o10 5z0 e10 FX0 1o10 2L0 e10 IL0 1C10 Lz0 1wp0 TX0 1qN0 WL0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0", - "Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|012121212121212121312121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uo0 e00 DA0 11A0 rA0 e00 Jc0 WM0 m00 gM0 M00 WM0 jc0 e00 RA0 11A0 dA0 e00 Uo0 11A0 800 gM0 Xc0 11A0 5c0 e00 17A0 WM0 2o0 e00 1ao0 19A0 1g00 16M0 1iM0 1400 1lA0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qo0 1200 1kM0 14M0 1i00", - "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1y7p0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Africa/El_Aaiun|LMT WAT WET WEST|Q.M 10 0 -10|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uo0 e00 DA0 11A0 rA0 e00 Jc0 WM0 m00 gM0 M00 WM0 jc0 e00 RA0 11A0 dA0 e00 Uo0 11A0 800 gM0 Xc0 11A0 5c0 e00 17A0 WM0 2o0 e00 1ao0 19A0 1g00 16M0 1iM0 1400 1lA0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qo0 1200 1kM0 14M0 1i00", - "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0", - "Africa/Juba|LMT CAT CAST EAT|-2a.8 -20 -30 -30|01212121212121212121212121212121213|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0", - "Africa/Monrovia|MMT LRT GMT|H.8 I.u 0|012|-23Lzg.Q 29s01.m", - "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0", - "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00", - "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00", - "Africa/Windhoek|SWAT SAST SAST CAT WAT WAST|-1u -20 -30 -20 -10 -20|012134545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2GJdu 1Ajdu 1cL0 1SqL0 9NA0 11D0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0", - "America/Adak|NST NWT NPT BST BDT AHST HAST HADT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Anchorage|CAT CAWT CAPT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Anguilla|LMT AST|46.4 40|01|-2kNvR.U", - "America/Antigua|LMT EST AST|47.c 50 40|012|-2kNvQ.M 1yxAQ.M", - "America/Araguaina|LMT BRT BRST|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0", - "America/Argentina/Buenos_Aires|CMT ART ARST ART ARST|4g.M 40 30 30 20|0121212121212121212121212121212121212121213434343434343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", - "America/Argentina/Catamarca|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", - "America/Argentina/Cordoba|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", - "America/Argentina/Jujuy|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 g0p0 10M0 j3c0 uL0", - "America/Argentina/La_Rioja|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", - "America/Argentina/Mendoza|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|0121212121212121212121212121212121212121213434345656543235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 g0p0 10M0 agM0 Op0 7TX0 uL0", - "America/Argentina/Rio_Gallegos|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", - "America/Argentina/Salta|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0", - "America/Argentina/San_Juan|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ak00 m10 8lb0 uL0", - "America/Argentina/San_Luis|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456536353465653|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 kin0 10M0 ak00 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0", - "America/Argentina/Tucuman|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|012121212121212121212121212121212121212121343434345434323534343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 4N0 8BX0 uL0 1qN0 WL0", - "America/Argentina/Ushuaia|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ajA0 8p0 8zb0 uL0", - "America/Aruba|LMT ANT AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d", - "America/Asuncion|AMT PYT PYT PYST|3O.E 40 30 30|012131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0", - "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0", - "America/Bahia|LMT BRT BRST|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0", - "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0", - "America/Belem|LMT BRT BRST|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0", - "America/Belize|LMT CST CHDT CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0", - "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0", - "America/Boa_Vista|LMT AMT AMST|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0", - "America/Bogota|BMT COT COST|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0", - "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Cambridge_Bay|zzz MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Campo_Grande|LMT AMT AMST|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0", - "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Caracas|CMT VET VET|4r.E 4u 40|0121|-2kV7w.k 28KM2.k 1IwOu", - "America/Cayenne|LMT GFT GFT|3t.k 40 30|012|-2mrwu.E 2gWou.E", - "America/Cayman|KMT EST|57.b 50|01|-2l1uQ.N", - "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0", - "America/Creston|MST PST|70 80|010|-29DR0 43B0", - "America/Cuiaba|LMT AMT AMST|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0", - "America/Danmarkshavn|LMT WGT WGST GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0", - "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0", - "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 Jy10 SL0 dnB0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Eirunepe|LMT ACT ACST AMT|4D.s 50 40 40|0121212121212121212121212121212131|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0", - "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0", - "America/Ensenada|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOP0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Fortaleza|LMT BRT BRST|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0", - "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Godthab|LMT WGT WGST|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Grand_Turk|KMT EST EDT AST|57.b 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212123|-2l1uQ.N 2HHBQ.N 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0", - "America/Guayaquil|QMT ECT|5e 50|01|-1yVSK", - "America/Guyana|LMT GBGT GYT GYT GYT|3Q.E 3J 3J 30 40|01234|-2dvU7.k 24JzQ.k mlc0 Bxbf", - "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0", - "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0", - "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Inuvik|zzz PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Iqaluit|zzz EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Jamaica|KMT EST EDT|57.b 50 40|0121212121212121212121|-2l1uQ.N 2uM1Q.N 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0", - "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/La_Paz|CMT BOST BOT|4w.A 3w.A 40|012|-1x37r.o 13b0", - "America/Lima|LMT PET PEST|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0", - "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp0 1Vb0 3dB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Maceio|LMT BRT BRST|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0", - "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0", - "America/Manaus|LMT AMT AMST|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0", - "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0", - "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Metlakatla|PST PWT PPT PDT|80 70 70 70|0120303030303030303030303030303030|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0", - "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Miquelon|LMT AST PMST PMDT|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Montevideo|MMT UYT UYHST UYST UYT UYHST|3I.I 3u 30 20 30 2u|012121212121212121212121213434343434345454543453434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-20UIf.g 8jzJ.g 1cLu 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1qMu WLu 1qMu 11zu 1o0u 11zu NAu 11bu 2iMu zWu Dq10 19X0 pd0 jz0 cm10 19X0 1fB0 1on0 11d0 1oL0 1nB0 1fzu 1aou 1fzu 1aou 1fzu 3nAu Jb0 3MN0 1SLu 4jzu 2PB0 Lb0 3Dd0 1pb0 ixd0 An0 1MN0 An0 1wp0 On0 1wp0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10", - "America/Montreal|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-28tR0 bV0 2m30 1in0 121u 1nb0 1g10 11z0 1o0u 11zu 1o0u 11zu 3VAu Rzu 1qMu WLu 1qMu WLu 1qKu WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kO0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Noronha|LMT FNT FNST|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0", - "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Panama|CMT EST|5j.A 50|01|-2uduE.o", - "America/Pangnirtung|zzz AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Paramaribo|LMT PMT PMT NEGT SRT SRT|3E.E 3E.Q 3E.A 3u 3u 30|012345|-2nDUj.k Wqo0.c qanX.I 1dmLN.o lzc0", - "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0", - "America/Port-au-Prince|PPMT EST EDT|4N 50 40|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Porto_Acre|LMT ACT ACST AMT|4v.c 50 40 40|01212121212121212121212121212131|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0", - "America/Porto_Velho|LMT AMT AMST|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0", - "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0", - "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Rankin_Inlet|zzz CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Recife|LMT BRT BRST|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0", - "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0", - "America/Resolute|zzz CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Santa_Isabel|LMT MST PST PDT PWT PPT|7D.s 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOP0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", - "America/Santarem|LMT AMT AMST BRT|3C.M 40 30 30|0121212121212121212121212121213|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0", - "America/Santiago|SMT CLT CLT CLST CLST|4G.K 50 40 40 30|010203131313131313124242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-2q5Th.e fNch.e 5gLG.K 21bh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9UK0 1Je0 Qen0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1ld0 14n0 1qN0 11z0 1cN0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0", - "America/Santo_Domingo|SDMT EST EDT EHDT AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00", - "America/Sao_Paulo|LMT BRT BRST|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0", - "America/Scoresbysund|LMT CGT CGST EGST EGT|1r.Q 20 10 0 10|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0", - "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0", - "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 1Be0 xDz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "America/Yellowknife|zzz MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "Antarctica/Casey|zzz AWST CAST|0 -80 -b0|012121|-2q00 1DjS0 T90 40P0 KL0", - "Antarctica/Davis|zzz DAVT DAVT|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0", - "Antarctica/DumontDUrville|zzz PMT DDUT|0 -a0 -a0|0102|-U0o0 cfq0 bFm0", - "Antarctica/Macquarie|AEST AEDT zzz MIST|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0", - "Antarctica/Mawson|zzz MAWT MAWT|0 -60 -50|012|-CEo0 2fyk0", - "Antarctica/McMurdo|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00", - "Antarctica/Palmer|zzz ARST ART ART ARST CLT CLST|0 30 40 30 20 40 30|012121212123435656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1ld0 14n0 1qN0 11z0 1cN0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0", - "Antarctica/Rothera|zzz ROTT|0 30|01|gOo0", - "Antarctica/Syowa|zzz SYOT|0 -30|01|-vs00", - "Antarctica/Troll|zzz UTC CEST|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Antarctica/Vostok|zzz VOST|0 -60|01|-tjA0", - "Arctic/Longyearbyen|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Asia/Aden|LMT AST|-2X.S -30|01|-MG2X.S", - "Asia/Almaty|LMT ALMT ALMT ALMST|-57.M -50 -60 -70|0123232323232323232323232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3Cl0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0", - "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0", - "Asia/Anadyr|LMT ANAT ANAT ANAST ANAST ANAST ANAT|-bN.U -c0 -d0 -e0 -d0 -c0 -b0|01232414141414141414141561414141414141414141414141414141414141561|-1PcbN.U eUnN.U 23CL0 1db0 1cN0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0", - "Asia/Aqtau|LMT FORT FORT SHET SHET SHEST AQTT AQTST AQTST AQTT|-3l.4 -40 -50 -50 -60 -60 -50 -60 -50 -40|012345353535353535353536767676898989898989898989896|-1Pc3l.4 eUnl.4 1jcL0 JDc0 1cL0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2UK0 Fz0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cN0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 RW0", - "Asia/Aqtobe|LMT AKTT AKTT AKTST AKTT AQTT AQTST|-3M.E -40 -50 -60 -60 -50 -60|01234323232323232323232565656565656565656565656565|-1Pc3M.E eUnM.E 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2UK0 Fz0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0", - "Asia/Ashgabat|LMT ASHT ASHT ASHST ASHST TMT TMT|-3R.w -40 -50 -60 -50 -40 -50|012323232323232323232324156|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 ba0 xC0", - "Asia/Baghdad|BMT AST ADT|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0", - "Asia/Bahrain|LMT GST AST|-3m.k -40 -30|012|-21Jfm.k 27BXm.k", - "Asia/Baku|LMT BAKT BAKT BAKST BAKST AZST AZT AZT AZST|-3j.o -30 -40 -50 -40 -40 -30 -40 -50|0123232323232323232323245657878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 10K0 c30 1cJ0 1cL0 8wu0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Asia/Bangkok|BMT ICT|-6G.4 -70|01|-218SG.4", - "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0", - "Asia/Bishkek|LMT FRUT FRUT FRUST FRUST KGT KGST KGT|-4W.o -50 -60 -70 -60 -50 -60 -60|01232323232323232323232456565656565656565656565656567|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 11c0 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 T8u", - "Asia/Brunei|LMT BNT BNT|-7D.E -7u -80|012|-1KITD.E gDc9.E", - "Asia/Calcutta|HMT BURT IST IST|-5R.k -6u -5u -6u|01232|-18LFR.k 1unn.k HB0 7zX0", - "Asia/Chita|LMT YAKT YAKT YAKST YAKST YAKT IRKT|-7x.Q -80 -90 -a0 -90 -a0 -80|012323232323232323232324123232323232323232323232323232323232323256|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Choibalsan|LMT ULAT ULAT CHOST CHOT CHOT|-7C -70 -80 -a0 -90 -80|012343434343434343434343434343434343434343434345|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0", - "Asia/Chongqing|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0", - "Asia/Colombo|MMT IST IHST IST LKT LKT|-5j.w -5u -60 -6u -6u -60|01231451|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu", - "Asia/Dacca|HMT BURT IST DACT BDT BDST|-5R.k -6u -5u -60 -60 -70|01213454|-18LFR.k 1unn.k HB0 m6n0 LqMu 1x6n0 1i00", - "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0", - "Asia/Dili|LMT TLT JST TLT WITA|-8m.k -80 -90 -90 -80|012343|-2le8m.k 1dnXm.k 8HA0 1ew00 Xld0", - "Asia/Dubai|LMT GST|-3F.c -40|01|-21JfF.c", - "Asia/Dushanbe|LMT DUST DUST DUSST DUSST TJT|-4z.c -50 -60 -70 -60 -50|0123232323232323232323245|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 14N0", - "Asia/Gaza|EET EET EEST IST IDT|-20 -30 -30 -20 -30|010101010102020202020202020202023434343434343434343434343430202020202020202020202020202020202020202020202020202020202020202020202020202020202020|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0", - "Asia/Hebron|EET EET EEST IST IDT|-20 -30 -30 -20 -30|01010101010202020202020202020202343434343434343434343434343020202020202020202020202020202020202020202020202020202020202020202020202020202020202020|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0", - "Asia/Ho_Chi_Minh|LMT PLMT ICT IDT JST|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0", - "Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0", - "Asia/Hovd|LMT HOVT HOVT HOVST|-66.A -60 -70 -80|01232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0", - "Asia/Irkutsk|IMT IRKT IRKT IRKST IRKST IRKT|-6V.5 -70 -80 -90 -80 -90|012323232323232323232324123232323232323232323232323232323232323252|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Istanbul|IMT EET EEST TRST TRT|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1df0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Asia/Jakarta|BMT JAVT WIB JST WIB WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu", - "Asia/Jayapura|LMT WIT ACST|-9m.M -90 -9u|0121|-1uu9m.M sMMm.M L4nu", - "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0", - "Asia/Kabul|AFT AFT|-40 -4u|01|-10Qs0", - "Asia/Kamchatka|LMT PETT PETT PETST PETST|-ay.A -b0 -c0 -d0 -c0|01232323232323232323232412323232323232323232323232323232323232412|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0", - "Asia/Karachi|LMT IST IST KART PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy01 1cL0 dK0X 11b0 1610 1jX0", - "Asia/Kashgar|LMT XJT|-5O.k -60|01|-1GgtO.k", - "Asia/Kathmandu|LMT IST NPT|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g", - "Asia/Khandyga|LMT YAKT YAKT YAKST YAKST VLAT VLAST VLAT YAKT|-92.d -80 -90 -a0 -90 -a0 -b0 -b0 -a0|01232323232323232323232412323232323232323232323232565656565656565782|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0", - "Asia/Krasnoyarsk|LMT KRAT KRAT KRAST KRAST KRAT|-6b.q -60 -70 -80 -70 -80|012323232323232323232324123232323232323232323232323232323232323252|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Kuala_Lumpur|SMT MALT MALST MALT MALT JST MYT|-6T.p -70 -7k -7k -7u -90 -80|01234546|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu 1so1u", - "Asia/Kuching|LMT BORT BORT BORTST JST MYT|-7l.k -7u -80 -8k -90 -80|01232323232323232425|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0 1so10", - "Asia/Kuwait|LMT AST|-3b.U -30|01|-MG3b.U", - "Asia/Macao|LMT MOT MOST CST|-7y.k -80 -90 -80|0121212121212121212121212121212121212121213|-2le7y.k 1XO34.k 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0 KEp0", - "Asia/Magadan|LMT MAGT MAGT MAGST MAGST MAGT|-a3.c -a0 -b0 -c0 -b0 -c0|012323232323232323232324123232323232323232323232323232323232323251|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Makassar|LMT MMT WITA JST|-7V.A -7V.A -80 -90|01232|-21JjV.A vfc0 myLV.A 8ML0", - "Asia/Manila|PHT PHST JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0", - "Asia/Muscat|LMT GST|-3S.o -40|01|-21JfS.o", - "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Asia/Novokuznetsk|LMT KRAT KRAT KRAST KRAST NOVST NOVT NOVT|-5M.M -60 -70 -80 -70 -70 -60 -70|012323232323232323232324123232323232323232323232323232323232325672|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0 8Hz0", - "Asia/Novosibirsk|LMT NOVT NOVT NOVST NOVST|-5v.E -60 -70 -80 -70|0123232323232323232323241232341414141414141414141414141414141414121|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Omsk|LMT OMST OMST OMSST OMSST OMST|-4R.u -50 -60 -70 -60 -70|012323232323232323232324123232323232323232323232323232323232323252|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Oral|LMT URAT URAT URAST URAT URAST ORAT ORAST ORAT|-3p.o -40 -50 -60 -60 -50 -40 -50 -50|012343232323232323251516767676767676767676767676768|-1Pc3p.o eUnp.o 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 2UK0 Fz0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 RW0", - "Asia/Pontianak|LMT PMT WIB JST WIB WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu", - "Asia/Pyongyang|LMT KST JCST JST KST|-8n -8u -90 -90 -90|01234|-2um8n 97XR 12FXu jdA0", - "Asia/Qatar|LMT GST AST|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8", - "Asia/Qyzylorda|LMT KIZT KIZT KIZST KIZT QYZT QYZT QYZST|-4l.Q -40 -50 -60 -60 -50 -60 -70|012343232323232323232325676767676767676767676767676|-1Pc4l.Q eUol.Q 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2UK0 dC0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0", - "Asia/Rangoon|RMT BURT JST MMT|-6o.E -6u -90 -6u|0123|-21Jio.E SmnS.E 7j9u", - "Asia/Riyadh|LMT AST|-36.Q -30|01|-TvD6.Q", - "Asia/Sakhalin|LMT JCST JST SAKT SAKST SAKST SAKT|-9u.M -90 -90 -b0 -c0 -b0 -a0|0123434343434343434343435634343434343565656565656565656565656565636|-2AGVu.M 1iaMu.M je00 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o10 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Samarkand|LMT SAMT SAMT SAMST TAST UZST UZT|-4r.R -40 -50 -60 -60 -60 -50|01234323232323232323232356|-1Pc4r.R eUor.R 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 11x0 bf0", - "Asia/Seoul|LMT KST JCST JST KST KDT KDT|-8r.Q -8u -90 -90 -90 -9u -a0|01234151515151515146464|-2um8r.Q 97XV.Q 12FXu jjA0 kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0", - "Asia/Singapore|SMT MALT MALST MALT MALT JST SGT SGT|-6T.p -70 -7k -7k -7u -90 -7u -80|012345467|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu Mspu DTA0", - "Asia/Srednekolymsk|LMT MAGT MAGT MAGST MAGST MAGT SRET|-ae.Q -a0 -b0 -c0 -b0 -c0 -b0|012323232323232323232324123232323232323232323232323232323232323256|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Taipei|JWST JST CST CDT|-80 -90 -80 -90|01232323232323232323232323232323232323232|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0", - "Asia/Tashkent|LMT TAST TAST TASST TASST UZST UZT|-4B.b -50 -60 -70 -60 -60 -50|01232323232323232323232456|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 11y0 bf0", - "Asia/Tbilisi|TBMT TBIT TBIT TBIST TBIST GEST GET GET GEST|-2X.b -30 -40 -50 -40 -40 -30 -40 -50|0123232323232323232323245656565787878787878787878567|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 3y0 19f0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cM0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0", - "Asia/Tehran|LMT TMT IRST IRST IRDT IRDT|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0", - "Asia/Thimbu|LMT IST BTT|-5W.A -5u -60|012|-Su5W.A 1BGMs.A", - "Asia/Tokyo|JCST JST JDT|-90 -90 -a0|0121212121|-1iw90 pKq0 QL0 1lB0 13X0 1zB0 NX0 1zB0 NX0", - "Asia/Ulaanbaatar|LMT ULAT ULAT ULAST|-77.w -70 -80 -90|01232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0", - "Asia/Ust-Nera|LMT YAKT YAKT MAGST MAGT MAGST MAGT MAGT VLAT VLAT|-9w.S -80 -90 -c0 -b0 -b0 -a0 -c0 -b0 -a0|0123434343434343434343456434343434343434343434343434343434343434789|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0", - "Asia/Vladivostok|LMT VLAT VLAT VLAST VLAST VLAT|-8L.v -90 -a0 -b0 -a0 -b0|012323232323232323232324123232323232323232323232323232323232323252|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Yakutsk|LMT YAKT YAKT YAKST YAKST YAKT|-8C.W -80 -90 -a0 -90 -a0|012323232323232323232324123232323232323232323232323232323232323252|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Yekaterinburg|LMT PMT SVET SVET SVEST SVEST YEKT YEKST YEKT|-42.x -3J.5 -40 -50 -60 -50 -50 -60 -60|0123434343434343434343435267676767676767676767676767676767676767686|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Asia/Yerevan|LMT YERT YERT YERST YERST AMST AMT AMT AMST|-2W -30 -40 -50 -40 -40 -30 -40 -50|0123232323232323232323245656565657878787878787878787878787878787|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1am0 2r0 1cJ0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fb0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0", - "Atlantic/Azores|HMT AZOT AZOST AZOMT AZOT AZOST WET|1S.w 20 10 0 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545456545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldW5.s aPX5.s Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "Atlantic/Canary|LMT CANT WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Atlantic/Cape_Verde|LMT CVT CVST CVT|1y.4 20 10 10|01213|-2xomp.U 1qOMp.U 7zX0 1djf0", - "Atlantic/Faeroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Atlantic/Madeira|FMT MADT MADST MADMT WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldWQ.o aPWQ.o Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Atlantic/Reykjavik|RMT IST ISST GMT|1r.M 10 0 0|01212121212121212121212121212121212121212121212121212121212121213|-2uWmw.c mfaw.c 1Bd0 ML0 1LB0 NLX0 1pe0 zd0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0", - "Atlantic/South_Georgia|GST|20|0|", - "Atlantic/Stanley|SMT FKT FKST FKT FKST|3P.o 40 30 30 20|0121212121212134343212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 U10 1qM0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10", - "Australia/ACT|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", - "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", - "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0", - "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", - "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", - "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0", - "Australia/Eucla|ACWST ACWDT|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0", - "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", - "Australia/LHI|AEST LHST LHDT LHDT|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu", - "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0", - "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", - "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0", - "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "Chile/EasterIsland|EMT EASST EAST EAST EASST|7h.s 60 70 60 50|012121212121212121212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-1uSgG.w nHUG.w op0 9UK0 RXB0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1ld0 14n0 1qN0 11z0 1cN0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0", - "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "EST|EST|50|0|", - "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "Eire|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g5X0 14p0 1wn0 17d0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Etc/GMT+0|GMT|0|0|", - "Etc/GMT+1|GMT+1|10|0|", - "Etc/GMT+10|GMT+10|a0|0|", - "Etc/GMT+11|GMT+11|b0|0|", - "Etc/GMT+12|GMT+12|c0|0|", - "Etc/GMT+2|GMT+2|20|0|", - "Etc/GMT+3|GMT+3|30|0|", - "Etc/GMT+4|GMT+4|40|0|", - "Etc/GMT+5|GMT+5|50|0|", - "Etc/GMT+6|GMT+6|60|0|", - "Etc/GMT+7|GMT+7|70|0|", - "Etc/GMT+8|GMT+8|80|0|", - "Etc/GMT+9|GMT+9|90|0|", - "Etc/GMT-1|GMT-1|-10|0|", - "Etc/GMT-10|GMT-10|-a0|0|", - "Etc/GMT-11|GMT-11|-b0|0|", - "Etc/GMT-12|GMT-12|-c0|0|", - "Etc/GMT-13|GMT-13|-d0|0|", - "Etc/GMT-14|GMT-14|-e0|0|", - "Etc/GMT-2|GMT-2|-20|0|", - "Etc/GMT-3|GMT-3|-30|0|", - "Etc/GMT-4|GMT-4|-40|0|", - "Etc/GMT-5|GMT-5|-50|0|", - "Etc/GMT-6|GMT-6|-60|0|", - "Etc/GMT-7|GMT-7|-70|0|", - "Etc/GMT-8|GMT-8|-80|0|", - "Etc/GMT-9|GMT-9|-90|0|", - "Etc/UCT|UCT|0|0|", - "Etc/UTC|UTC|0|0|", - "Europe/Amsterdam|AMT NST NEST NET CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Belfast|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Bratislava|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 16M0 1lc0 1tA0 17A0 11c0 1io0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Busingen|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|0123232323232323232345454676767676767676767623232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1ty0 2bD0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET FET|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454545454676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1cJ0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ldXn.f aPWn.f Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|01010101010101010101010121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-28dd0 11A0 1go0 19A0 1co0 1dA0 b1A0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 iyo0 Rc0 18o0 1hc0 1io0 1a00 14o0 5aL0 MM0 1vc0 17A0 1i00 1bc0 1eo0 17d0 1in0 17A0 6hA0 10N0 XIL0 1a10 1in0 17d0 19X0 1cN0 1fz0 1a10 1fX0 1cp0 1cO0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2as10 M00 1cM0 1cM0 14o0 1o00 WM0 1qM0 17c0 1cM0 M3A0 5M20 WM0 1fA0 1cM0 1cM0 1cM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 Lz0 1C10 Lz0 1EN0 Lz0 1C10 Lz0 1zd0 Oo0 1C00 On0 1cp0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Minsk|MMT EET MSK CEST CET MSD EEST FET|-1O -20 -30 -20 -10 -40 -30 -30|012343432525252525252525252616161616161616161616161616161616161616172|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cK0 1cM0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hy0", - "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Moscow|MMT MMT MST MDST MSD MSK MSM EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c20 imv.j 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2as10 M00 1cM0 1cM0 14o0 1o00 WM0 1qM0 17c0 1cM0 M3A0 5M20 WM0 1fA0 1cM0 16K0 1iO0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 Lz0 1C10 Lz0 1EN0 Lz0 1C10 Lz0 1zd0 Oo0 1C00 On0 1C10 Lz0 1zd0 On0 1C10 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Samara|LMT SAMT SAMT KUYT KUYST MSD MSK EEST KUYT SAMST SAMST|-3k.k -30 -40 -40 -50 -40 -30 -30 -30 -50 -40|012343434343434343435656782929292929292929292929292929292929292a12|-22WNk.k qHak.k bcn0 1Qqo0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cN0 8o0 14j0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0", - "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0", - "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646464647373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Volgograd|LMT TSAT STAT STAT VOLT VOLST VOLST VOLT MSK MSK|-2V.E -30 -30 -40 -40 -50 -40 -30 -40 -30|012345454545454545454676748989898989898989898989898989898989898989|-21IqV.E cLXV.E cEM0 1gqn0 Lco0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cJ0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", - "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "Europe/Zaporozhye|CUT EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "HST|HST|a0|0|", - "Indian/Chagos|LMT IOT IOT|-4N.E -50 -60|012|-2xosN.E 3AGLN.E", - "Indian/Christmas|CXT|-70|0|", - "Indian/Cocos|CCT|-6u|0|", - "Indian/Kerguelen|zzz TFT|0 -50|01|-MG00", - "Indian/Mahe|LMT SCT|-3F.M -40|01|-2yO3F.M", - "Indian/Maldives|MMT MVT|-4S -50|01|-olgS", - "Indian/Mauritius|LMT MUT MUST|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0", - "Indian/Reunion|LMT RET|-3F.Q -40|01|-2mDDF.Q", - "Kwajalein|MHT KWAT MHT|-b0 c0 -c0|012|-AX0 W9X0", - "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", - "MST|MST|70|0|", - "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "NZ-CHAT|CHAST CHAST CHADT|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00", - "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", - "Pacific/Apia|LMT WSST SST SDT WSDT WSST|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00", - "Pacific/Bougainville|PGT JST BST|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0", - "Pacific/Chuuk|CHUT|-a0|0|", - "Pacific/Efate|LMT VUT VUST|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0", - "Pacific/Enderbury|PHOT PHOT PHOT|c0 b0 -d0|012|nIc0 B8n0", - "Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0", - "Pacific/Fiji|LMT FJT FJST|-bT.I -c0 -d0|012121212121212121212121212121212121212121212121212121212121212|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 xA0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 xA0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 xA0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0", - "Pacific/Funafuti|TVT|-c0|0|", - "Pacific/Galapagos|LMT ECT GALT|5W.o 50 60|012|-1yVS1.A 2dTz1.A", - "Pacific/Gambier|LMT GAMT|8X.M 90|01|-2jof0.c", - "Pacific/Guadalcanal|LMT SBT|-aD.M -b0|01|-2joyD.M", - "Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0", - "Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0", - "Pacific/Kiritimati|LINT LINT LINT|aE a0 -e0|012|nIaE B8nk", - "Pacific/Kosrae|KOST KOST|-b0 -c0|010|-AX0 1bdz0", - "Pacific/Majuro|MHT MHT|-b0 -c0|01|-AX0", - "Pacific/Marquesas|LMT MART|9i 9u|01|-2joeG", - "Pacific/Midway|NST NDT BST SST|b0 a0 b0 b0|01023|-x3N0 An0 pJd0 EyM0", - "Pacific/Nauru|LMT NRT JST NRT|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu", - "Pacific/Niue|NUT NUT NUT|bk bu b0|012|-KfME 17y0a", - "Pacific/Norfolk|NMT NFT|-bc -bu|01|-Kgbc", - "Pacific/Noumea|LMT NCT NCST|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0", - "Pacific/Pago_Pago|LMT NST BST SST|bm.M b0 b0 b0|0123|-2nDMB.c 2gVzB.c EyM0", - "Pacific/Palau|PWT|-90|0|", - "Pacific/Pitcairn|PNT PST|8u 80|01|18Vku", - "Pacific/Pohnpei|PONT|-b0|0|", - "Pacific/Port_Moresby|PGT|-a0|0|", - "Pacific/Rarotonga|CKT CKHST CKT|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu", - "Pacific/Saipan|MPT MPT ChST|-90 -a0 -a0|012|-AV0 1g2n0", - "Pacific/Tahiti|LMT TAHT|9W.g a0|01|-2joe1.I", - "Pacific/Tarawa|GILT|-c0|0|", - "Pacific/Tongatapu|TOT TOT TOST|-ck -d0 -e0|01212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0", - "Pacific/Wake|WAKT|-c0|0|", - "Pacific/Wallis|WFT|-c0|0|", - "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00" - ], - "links": [ - "Africa/Abidjan|Africa/Bamako", - "Africa/Abidjan|Africa/Banjul", - "Africa/Abidjan|Africa/Conakry", - "Africa/Abidjan|Africa/Dakar", - "Africa/Abidjan|Africa/Freetown", - "Africa/Abidjan|Africa/Lome", - "Africa/Abidjan|Africa/Nouakchott", - "Africa/Abidjan|Africa/Ouagadougou", - "Africa/Abidjan|Africa/Sao_Tome", - "Africa/Abidjan|Africa/Timbuktu", - "Africa/Abidjan|Atlantic/St_Helena", - "Africa/Addis_Ababa|Africa/Asmara", - "Africa/Addis_Ababa|Africa/Asmera", - "Africa/Addis_Ababa|Africa/Dar_es_Salaam", - "Africa/Addis_Ababa|Africa/Djibouti", - "Africa/Addis_Ababa|Africa/Kampala", - "Africa/Addis_Ababa|Africa/Mogadishu", - "Africa/Addis_Ababa|Africa/Nairobi", - "Africa/Addis_Ababa|Indian/Antananarivo", - "Africa/Addis_Ababa|Indian/Comoro", - "Africa/Addis_Ababa|Indian/Mayotte", - "Africa/Bangui|Africa/Brazzaville", - "Africa/Bangui|Africa/Douala", - "Africa/Bangui|Africa/Kinshasa", - "Africa/Bangui|Africa/Lagos", - "Africa/Bangui|Africa/Libreville", - "Africa/Bangui|Africa/Luanda", - "Africa/Bangui|Africa/Malabo", - "Africa/Bangui|Africa/Niamey", - "Africa/Bangui|Africa/Porto-Novo", - "Africa/Blantyre|Africa/Bujumbura", - "Africa/Blantyre|Africa/Gaborone", - "Africa/Blantyre|Africa/Harare", - "Africa/Blantyre|Africa/Kigali", - "Africa/Blantyre|Africa/Lubumbashi", - "Africa/Blantyre|Africa/Lusaka", - "Africa/Blantyre|Africa/Maputo", - "Africa/Cairo|Egypt", - "Africa/Johannesburg|Africa/Maseru", - "Africa/Johannesburg|Africa/Mbabane", - "Africa/Juba|Africa/Khartoum", - "Africa/Tripoli|Libya", - "America/Adak|America/Atka", - "America/Adak|US/Aleutian", - "America/Anchorage|US/Alaska", - "America/Anguilla|America/Dominica", - "America/Anguilla|America/Grenada", - "America/Anguilla|America/Guadeloupe", - "America/Anguilla|America/Marigot", - "America/Anguilla|America/Montserrat", - "America/Anguilla|America/Port_of_Spain", - "America/Anguilla|America/St_Barthelemy", - "America/Anguilla|America/St_Kitts", - "America/Anguilla|America/St_Lucia", - "America/Anguilla|America/St_Thomas", - "America/Anguilla|America/St_Vincent", - "America/Anguilla|America/Tortola", - "America/Anguilla|America/Virgin", - "America/Argentina/Buenos_Aires|America/Buenos_Aires", - "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", - "America/Argentina/Catamarca|America/Catamarca", - "America/Argentina/Cordoba|America/Cordoba", - "America/Argentina/Cordoba|America/Rosario", - "America/Argentina/Jujuy|America/Jujuy", - "America/Argentina/Mendoza|America/Mendoza", - "America/Aruba|America/Curacao", - "America/Aruba|America/Kralendijk", - "America/Aruba|America/Lower_Princes", - "America/Atikokan|America/Coral_Harbour", - "America/Chicago|US/Central", - "America/Denver|America/Shiprock", - "America/Denver|Navajo", - "America/Denver|US/Mountain", - "America/Detroit|US/Michigan", - "America/Edmonton|Canada/Mountain", - "America/Ensenada|America/Tijuana", - "America/Ensenada|Mexico/BajaNorte", - "America/Fort_Wayne|America/Indiana/Indianapolis", - "America/Fort_Wayne|America/Indianapolis", - "America/Fort_Wayne|US/East-Indiana", - "America/Halifax|Canada/Atlantic", - "America/Havana|Cuba", - "America/Indiana/Knox|America/Knox_IN", - "America/Indiana/Knox|US/Indiana-Starke", - "America/Jamaica|Jamaica", - "America/Kentucky/Louisville|America/Louisville", - "America/Los_Angeles|US/Pacific", - "America/Los_Angeles|US/Pacific-New", - "America/Manaus|Brazil/West", - "America/Mazatlan|Mexico/BajaSur", - "America/Mexico_City|Mexico/General", - "America/New_York|US/Eastern", - "America/Noronha|Brazil/DeNoronha", - "America/Phoenix|US/Arizona", - "America/Porto_Acre|America/Rio_Branco", - "America/Porto_Acre|Brazil/Acre", - "America/Regina|Canada/East-Saskatchewan", - "America/Regina|Canada/Saskatchewan", - "America/Santiago|Chile/Continental", - "America/Sao_Paulo|Brazil/East", - "America/St_Johns|Canada/Newfoundland", - "America/Toronto|Canada/Eastern", - "America/Vancouver|Canada/Pacific", - "America/Whitehorse|Canada/Yukon", - "America/Winnipeg|Canada/Central", - "Antarctica/McMurdo|Antarctica/South_Pole", - "Antarctica/McMurdo|NZ", - "Antarctica/McMurdo|Pacific/Auckland", - "Arctic/Longyearbyen|Atlantic/Jan_Mayen", - "Arctic/Longyearbyen|Europe/Oslo", - "Asia/Ashgabat|Asia/Ashkhabad", - "Asia/Bangkok|Asia/Phnom_Penh", - "Asia/Bangkok|Asia/Vientiane", - "Asia/Calcutta|Asia/Kolkata", - "Asia/Chongqing|Asia/Chungking", - "Asia/Chongqing|Asia/Harbin", - "Asia/Chongqing|Asia/Shanghai", - "Asia/Chongqing|PRC", - "Asia/Dacca|Asia/Dhaka", - "Asia/Ho_Chi_Minh|Asia/Saigon", - "Asia/Hong_Kong|Hongkong", - "Asia/Istanbul|Europe/Istanbul", - "Asia/Istanbul|Turkey", - "Asia/Jerusalem|Asia/Tel_Aviv", - "Asia/Jerusalem|Israel", - "Asia/Kashgar|Asia/Urumqi", - "Asia/Kathmandu|Asia/Katmandu", - "Asia/Macao|Asia/Macau", - "Asia/Makassar|Asia/Ujung_Pandang", - "Asia/Nicosia|Europe/Nicosia", - "Asia/Seoul|ROK", - "Asia/Singapore|Singapore", - "Asia/Taipei|ROC", - "Asia/Tehran|Iran", - "Asia/Thimbu|Asia/Thimphu", - "Asia/Tokyo|Japan", - "Asia/Ulaanbaatar|Asia/Ulan_Bator", - "Atlantic/Faeroe|Atlantic/Faroe", - "Atlantic/Reykjavik|Iceland", - "Australia/ACT|Australia/Canberra", - "Australia/ACT|Australia/NSW", - "Australia/ACT|Australia/Sydney", - "Australia/Adelaide|Australia/South", - "Australia/Brisbane|Australia/Queensland", - "Australia/Broken_Hill|Australia/Yancowinna", - "Australia/Darwin|Australia/North", - "Australia/Hobart|Australia/Tasmania", - "Australia/LHI|Australia/Lord_Howe", - "Australia/Melbourne|Australia/Victoria", - "Australia/Perth|Australia/West", - "Chile/EasterIsland|Pacific/Easter", - "Eire|Europe/Dublin", - "Etc/GMT+0|Etc/GMT", - "Etc/GMT+0|Etc/GMT-0", - "Etc/GMT+0|Etc/GMT0", - "Etc/GMT+0|Etc/Greenwich", - "Etc/GMT+0|GMT", - "Etc/GMT+0|GMT+0", - "Etc/GMT+0|GMT-0", - "Etc/GMT+0|GMT0", - "Etc/GMT+0|Greenwich", - "Etc/UCT|UCT", - "Etc/UTC|Etc/Universal", - "Etc/UTC|Etc/Zulu", - "Etc/UTC|UTC", - "Etc/UTC|Universal", - "Etc/UTC|Zulu", - "Europe/Belfast|Europe/Guernsey", - "Europe/Belfast|Europe/Isle_of_Man", - "Europe/Belfast|Europe/Jersey", - "Europe/Belfast|Europe/London", - "Europe/Belfast|GB", - "Europe/Belfast|GB-Eire", - "Europe/Belgrade|Europe/Ljubljana", - "Europe/Belgrade|Europe/Podgorica", - "Europe/Belgrade|Europe/Sarajevo", - "Europe/Belgrade|Europe/Skopje", - "Europe/Belgrade|Europe/Zagreb", - "Europe/Bratislava|Europe/Prague", - "Europe/Busingen|Europe/Vaduz", - "Europe/Busingen|Europe/Zurich", - "Europe/Chisinau|Europe/Tiraspol", - "Europe/Helsinki|Europe/Mariehamn", - "Europe/Lisbon|Portugal", - "Europe/Moscow|W-SU", - "Europe/Rome|Europe/San_Marino", - "Europe/Rome|Europe/Vatican", - "Europe/Warsaw|Poland", - "Kwajalein|Pacific/Kwajalein", - "NZ-CHAT|Pacific/Chatham", - "Pacific/Chuuk|Pacific/Truk", - "Pacific/Chuuk|Pacific/Yap", - "Pacific/Honolulu|Pacific/Johnston", - "Pacific/Honolulu|US/Hawaii", - "Pacific/Pago_Pago|Pacific/Samoa", - "Pacific/Pago_Pago|US/Samoa", - "Pacific/Pohnpei|Pacific/Ponape" - ] -} -},{}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/index.js":[function(require,module,exports){ -var moment = module.exports = require("./moment-timezone"); -moment.tz.load(require('./data/packed/latest.json')); - -},{"./data/packed/latest.json":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/data/packed/latest.json","./moment-timezone":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/moment-timezone.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/moment-timezone.js":[function(require,module,exports){ -//! moment-timezone.js -//! version : 0.2.5 -//! author : Tim Wood -//! license : MIT -//! github.com/moment/moment-timezone - -(function (root, factory) { - "use strict"; - - /*global define*/ - if (typeof define === 'function' && define.amd) { - define(['moment'], factory); // AMD - } else if (typeof exports === 'object') { - module.exports = factory(require('moment')); // Node - } else { - factory(root.moment); // Browser - } -}(this, function (moment) { - "use strict"; - - // Do not load moment-timezone a second time. - if (moment.tz !== undefined) { return moment; } - - var VERSION = "0.2.5", - zones = {}, - links = {}, - - momentVersion = moment.version.split('.'), - major = +momentVersion[0], - minor = +momentVersion[1]; - - // Moment.js version check - if (major < 2 || (major === 2 && minor < 6)) { - logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); - } - - /************************************ - Unpacking - ************************************/ - - function charCodeToInt(charCode) { - if (charCode > 96) { - return charCode - 87; - } else if (charCode > 64) { - return charCode - 29; - } - return charCode - 48; - } - - function unpackBase60(string) { - var i = 0, - parts = string.split('.'), - whole = parts[0], - fractional = parts[1] || '', - multiplier = 1, - num, - out = 0, - sign = 1; - - // handle negative numbers - if (string.charCodeAt(0) === 45) { - i = 1; - sign = -1; - } - - // handle digits before the decimal - for (i; i < whole.length; i++) { - num = charCodeToInt(whole.charCodeAt(i)); - out = 60 * out + num; - } - - // handle digits after the decimal - for (i = 0; i < fractional.length; i++) { - multiplier = multiplier / 60; - num = charCodeToInt(fractional.charCodeAt(i)); - out += num * multiplier; - } - - return out * sign; - } - - function arrayToInt (array) { - for (var i = 0; i < array.length; i++) { - array[i] = unpackBase60(array[i]); - } - } - - function intToUntil (array, length) { - for (var i = 0; i < length; i++) { - array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds - } - - array[length - 1] = Infinity; - } - - function mapIndices (source, indices) { - var out = [], i; - - for (i = 0; i < indices.length; i++) { - out[i] = source[indices[i]]; - } - - return out; - } - - function unpack (string) { - var data = string.split('|'), - offsets = data[2].split(' '), - indices = data[3].split(''), - untils = data[4].split(' '); - - arrayToInt(offsets); - arrayToInt(indices); - arrayToInt(untils); - - intToUntil(untils, indices.length); - - return { - name : data[0], - abbrs : mapIndices(data[1].split(' '), indices), - offsets : mapIndices(offsets, indices), - untils : untils - }; - } - - /************************************ - Zone object - ************************************/ - - function Zone (packedString) { - if (packedString) { - this._set(unpack(packedString)); - } - } - - Zone.prototype = { - _set : function (unpacked) { - this.name = unpacked.name; - this.abbrs = unpacked.abbrs; - this.untils = unpacked.untils; - this.offsets = unpacked.offsets; - }, - - _index : function (timestamp) { - var target = +timestamp, - untils = this.untils, - i; - - for (i = 0; i < untils.length; i++) { - if (target < untils[i]) { - return i; - } - } - }, - - parse : function (timestamp) { - var target = +timestamp, - offsets = this.offsets, - untils = this.untils, - max = untils.length - 1, - offset, offsetNext, offsetPrev, i; - - for (i = 0; i < max; i++) { - offset = offsets[i]; - offsetNext = offsets[i + 1]; - offsetPrev = offsets[i ? i - 1 : i]; - - if (offset < offsetNext && tz.moveAmbiguousForward) { - offset = offsetNext; - } else if (offset > offsetPrev && tz.moveInvalidForward) { - offset = offsetPrev; - } - - if (target < untils[i] - (offset * 60000)) { - return offsets[i]; - } - } - - return offsets[max]; - }, - - abbr : function (mom) { - return this.abbrs[this._index(mom)]; - }, - - offset : function (mom) { - return this.offsets[this._index(mom)]; - } - }; - - /************************************ - Global Methods - ************************************/ - - function normalizeName (name) { - return (name || '').toLowerCase().replace(/\//g, '_'); - } - - function addZone (packed) { - var i, zone, zoneName; - - if (typeof packed === "string") { - packed = [packed]; - } - - for (i = 0; i < packed.length; i++) { - zone = new Zone(packed[i]); - zoneName = normalizeName(zone.name); - zones[zoneName] = zone; - upgradeLinksToZones(zoneName); - } - } - - function getZone (name) { - return zones[normalizeName(name)] || null; - } - - function getNames () { - var i, out = []; - - for (i in zones) { - if (zones.hasOwnProperty(i) && zones[i]) { - out.push(zones[i].name); - } - } - - return out.sort(); - } - - function addLink (aliases) { - var i, alias; - - if (typeof aliases === "string") { - aliases = [aliases]; - } - - for (i = 0; i < aliases.length; i++) { - alias = aliases[i].split('|'); - pushLink(alias[0], alias[1]); - pushLink(alias[1], alias[0]); - } - } - - function upgradeLinksToZones (zoneName) { - if (!links[zoneName]) { - return; - } - - var i, - zone = zones[zoneName], - linkNames = links[zoneName]; - - for (i = 0; i < linkNames.length; i++) { - copyZoneWithName(zone, linkNames[i]); - } - - links[zoneName] = null; - } - - function copyZoneWithName (zone, name) { - var linkZone = zones[normalizeName(name)] = new Zone(); - linkZone._set(zone); - linkZone.name = name; - } - - function pushLink (zoneName, linkName) { - zoneName = normalizeName(zoneName); - - if (zones[zoneName]) { - copyZoneWithName(zones[zoneName], linkName); - } else { - links[zoneName] = links[zoneName] || []; - links[zoneName].push(linkName); - } - } - - function loadData (data) { - addZone(data.zones); - addLink(data.links); - tz.dataVersion = data.version; - } - - function zoneExists (name) { - if (!zoneExists.didShowError) { - zoneExists.didShowError = true; - logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); - } - return !!getZone(name); - } - - function needsOffset (m) { - return !!(m._a && (m._tzm === undefined)); - } - - function logError (message) { - if (typeof console !== 'undefined' && typeof console.error === 'function') { - console.error(message); - } - } - - /************************************ - moment.tz namespace - ************************************/ - - function tz () { - var args = Array.prototype.slice.call(arguments, 0, -1), - name = arguments[arguments.length - 1], - zone = getZone(name), - out = moment.utc.apply(null, args); - - if (zone && needsOffset(out)) { - out.add(zone.parse(out), 'minutes'); - } - - out.tz(name); - - return out; - } - - tz.version = VERSION; - tz.dataVersion = ''; - tz._zones = zones; - tz._links = links; - tz.add = addZone; - tz.link = addLink; - tz.load = loadData; - tz.zone = getZone; - tz.zoneExists = zoneExists; // deprecated in 0.1.0 - tz.names = getNames; - tz.Zone = Zone; - tz.unpack = unpack; - tz.unpackBase60 = unpackBase60; - tz.needsOffset = needsOffset; - tz.moveInvalidForward = true; - tz.moveAmbiguousForward = false; - - /************************************ - Interface with Moment.js - ************************************/ - - var fn = moment.fn; - - moment.tz = tz; - - moment.updateOffset = function (mom, keepTime) { - var offset; - if (mom._z) { - offset = mom._z.offset(mom); - if (Math.abs(offset) < 16) { - offset = offset / 60; - } - mom.zone(offset, keepTime); - } - }; - - fn.tz = function (name) { - if (name) { - this._z = getZone(name); - if (this._z) { - moment.updateOffset(this); - } else { - logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); - } - return this; - } - if (this._z) { return this._z.name; } - }; - - function abbrWrap (old) { - return function () { - if (this._z) { return this._z.abbr(this); } - return old.call(this); - }; - } - - function resetZoneWrap (old) { - return function () { - this._z = null; - return old.apply(this, arguments); - }; - } - - fn.zoneName = abbrWrap(fn.zoneName); - fn.zoneAbbr = abbrWrap(fn.zoneAbbr); - fn.utc = resetZoneWrap(fn.utc); - - // Cloning a moment should include the _z property. - var momentProperties = moment.momentProperties; - if (Object.prototype.toString.call(momentProperties) === '[object Array]') { - // moment 2.8.1+ - momentProperties.push('_z'); - momentProperties.push('_a'); - } else if (momentProperties) { - // moment 2.7.0 - momentProperties._z = null; - } - - // INJECT DATA - - return moment; -})); - -},{"moment":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/node_modules/moment/moment.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/node_modules/moment/moment.js":[function(require,module,exports){ -(function (global){ -//! moment.js -//! version : 2.8.4 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com - -(function (undefined) { - /************************************ - Constants - ************************************/ - - var moment, - VERSION = '2.8.4', - // the global-scope this is NOT the global object in Node.js - globalScope = typeof global !== 'undefined' ? global : this, - oldGlobalMoment, - round = Math.round, - hasOwnProperty = Object.prototype.hasOwnProperty, - i, - - YEAR = 0, - MONTH = 1, - DATE = 2, - HOUR = 3, - MINUTE = 4, - SECOND = 5, - MILLISECOND = 6, - - // internal storage for locale config files - locales = {}, - - // extra moment internal properties (plugins register props here) - momentProperties = [], - - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module && module.exports), - - // ASP.NET json date format regex - aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, - aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, - - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, - - // format tokens - formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g, - localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, - - // parsing token regexes - parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 - parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 - parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 - parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 - parseTokenDigits = /\d+/, // nonzero number of digits - parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. - parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z - parseTokenT = /T/i, // T (ISO separator) - parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123 - parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 - - //strict parsing regexes - parseTokenOneDigit = /\d/, // 0 - 9 - parseTokenTwoDigits = /\d\d/, // 00 - 99 - parseTokenThreeDigits = /\d{3}/, // 000 - 999 - parseTokenFourDigits = /\d{4}/, // 0000 - 9999 - parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 - parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf - - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, - - isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', - - isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], - ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], - ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], - ['GGGG-[W]WW', /\d{4}-W\d{2}/], - ['YYYY-DDD', /\d{4}-\d{3}/] - ], - - // iso time formats and regexes - isoTimes = [ - ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], - ['HH:mm', /(T| )\d\d:\d\d/], - ['HH', /(T| )\d\d/] - ], - - // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] - parseTimezoneChunker = /([\+\-]|\d\d)/gi, - - // getter and setter names - proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), - unitMillisecondFactors = { - 'Milliseconds' : 1, - 'Seconds' : 1e3, - 'Minutes' : 6e4, - 'Hours' : 36e5, - 'Days' : 864e5, - 'Months' : 2592e6, - 'Years' : 31536e6 - }, - - unitAliases = { - ms : 'millisecond', - s : 'second', - m : 'minute', - h : 'hour', - d : 'day', - D : 'date', - w : 'week', - W : 'isoWeek', - M : 'month', - Q : 'quarter', - y : 'year', - DDD : 'dayOfYear', - e : 'weekday', - E : 'isoWeekday', - gg: 'weekYear', - GG: 'isoWeekYear' - }, - - camelFunctions = { - dayofyear : 'dayOfYear', - isoweekday : 'isoWeekday', - isoweek : 'isoWeek', - weekyear : 'weekYear', - isoweekyear : 'isoWeekYear' - }, - - // format function strings - formatFunctions = {}, - - // default relative time thresholds - relativeTimeThresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }, - - // tokens to ordinalize and pad - ordinalizeTokens = 'DDD w W M D d'.split(' '), - paddedTokens = 'M D H h m s w W'.split(' '), - - formatTokenFunctions = { - M : function () { - return this.month() + 1; - }, - MMM : function (format) { - return this.localeData().monthsShort(this, format); - }, - MMMM : function (format) { - return this.localeData().months(this, format); - }, - D : function () { - return this.date(); - }, - DDD : function () { - return this.dayOfYear(); - }, - d : function () { - return this.day(); - }, - dd : function (format) { - return this.localeData().weekdaysMin(this, format); - }, - ddd : function (format) { - return this.localeData().weekdaysShort(this, format); - }, - dddd : function (format) { - return this.localeData().weekdays(this, format); - }, - w : function () { - return this.week(); - }, - W : function () { - return this.isoWeek(); - }, - YY : function () { - return leftZeroFill(this.year() % 100, 2); - }, - YYYY : function () { - return leftZeroFill(this.year(), 4); - }, - YYYYY : function () { - return leftZeroFill(this.year(), 5); - }, - YYYYYY : function () { - var y = this.year(), sign = y >= 0 ? '+' : '-'; - return sign + leftZeroFill(Math.abs(y), 6); - }, - gg : function () { - return leftZeroFill(this.weekYear() % 100, 2); - }, - gggg : function () { - return leftZeroFill(this.weekYear(), 4); - }, - ggggg : function () { - return leftZeroFill(this.weekYear(), 5); - }, - GG : function () { - return leftZeroFill(this.isoWeekYear() % 100, 2); - }, - GGGG : function () { - return leftZeroFill(this.isoWeekYear(), 4); - }, - GGGGG : function () { - return leftZeroFill(this.isoWeekYear(), 5); - }, - e : function () { - return this.weekday(); - }, - E : function () { - return this.isoWeekday(); - }, - a : function () { - return this.localeData().meridiem(this.hours(), this.minutes(), true); - }, - A : function () { - return this.localeData().meridiem(this.hours(), this.minutes(), false); - }, - H : function () { - return this.hours(); - }, - h : function () { - return this.hours() % 12 || 12; - }, - m : function () { - return this.minutes(); - }, - s : function () { - return this.seconds(); - }, - S : function () { - return toInt(this.milliseconds() / 100); - }, - SS : function () { - return leftZeroFill(toInt(this.milliseconds() / 10), 2); - }, - SSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - SSSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - Z : function () { - var a = -this.zone(), - b = '+'; - if (a < 0) { - a = -a; - b = '-'; - } - return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); - }, - ZZ : function () { - var a = -this.zone(), - b = '+'; - if (a < 0) { - a = -a; - b = '-'; - } - return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); - }, - z : function () { - return this.zoneAbbr(); - }, - zz : function () { - return this.zoneName(); - }, - x : function () { - return this.valueOf(); - }, - X : function () { - return this.unix(); - }, - Q : function () { - return this.quarter(); - } - }, - - deprecations = {}, - - lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; - - // Pick the first defined of two or three arguments. dfl comes from - // default. - function dfl(a, b, c) { - switch (arguments.length) { - case 2: return a != null ? a : b; - case 3: return a != null ? a : b != null ? b : c; - default: throw new Error('Implement me'); - } - } - - function hasOwnProp(a, b) { - return hasOwnProperty.call(a, b); - } - - function defaultParsingFlags() { - // We need to deep clone this object, and es5 standard is not very - // helpful. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso: false - }; - } - - function printMsg(msg) { - if (moment.suppressDeprecationWarnings === false && - typeof console !== 'undefined' && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - return extend(function () { - if (firstTime) { - printMsg(msg); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - printMsg(msg); - deprecations[name] = true; - } - } - - function padToken(func, count) { - return function (a) { - return leftZeroFill(func.call(this, a), count); - }; - } - function ordinalizeToken(func, period) { - return function (a) { - return this.localeData().ordinal(func.call(this, a), period); - }; - } - - while (ordinalizeTokens.length) { - i = ordinalizeTokens.pop(); - formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); - } - while (paddedTokens.length) { - i = paddedTokens.pop(); - formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); - } - formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); - - - /************************************ - Constructors - ************************************/ - - function Locale() { - } - - // Moment prototype object - function Moment(config, skipOverflow) { - if (skipOverflow !== false) { - checkOverflow(config); - } - copyConfig(this, config); - this._d = new Date(+config._d); - } - - // Duration Constructor - function Duration(duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; - - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; - - this._data = {}; - - this._locale = moment.localeData(); - - this._bubble(); - } - - /************************************ - Helpers - ************************************/ - - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function copyConfig(to, from) { - var i, prop, val; - - if (typeof from._isAMomentObject !== 'undefined') { - to._isAMomentObject = from._isAMomentObject; - } - if (typeof from._i !== 'undefined') { - to._i = from._i; - } - if (typeof from._f !== 'undefined') { - to._f = from._f; - } - if (typeof from._l !== 'undefined') { - to._l = from._l; - } - if (typeof from._strict !== 'undefined') { - to._strict = from._strict; - } - if (typeof from._tzm !== 'undefined') { - to._tzm = from._tzm; - } - if (typeof from._isUTC !== 'undefined') { - to._isUTC = from._isUTC; - } - if (typeof from._offset !== 'undefined') { - to._offset = from._offset; - } - if (typeof from._pf !== 'undefined') { - to._pf = from._pf; - } - if (typeof from._locale !== 'undefined') { - to._locale = from._locale; - } - - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (typeof val !== 'undefined') { - to[prop] = val; - } - } - } - - return to; - } - - function absRound(number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } - - // left zero fill a number - // see http://jsperf.com/left-zero-filling for performance comparison - function leftZeroFill(number, targetLength, forceSign) { - var output = '' + Math.abs(number), - sign = number >= 0; - - while (output.length < targetLength) { - output = '0' + output; - } - return (sign ? (forceSign ? '+' : '') : '-') + output; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } - - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - - return res; - } - - function momentsDifference(base, other) { - var res; - other = makeAs(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; - } - - // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } - - val = typeof val === 'string' ? +val : val; - dur = moment.duration(val, period); - addOrSubtractDurationFromMoment(this, dur, direction); - return this; - }; - } - - function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - updateOffset = updateOffset == null ? true : updateOffset; - - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); - } - if (months) { - rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - moment.updateOffset(mom, days || months); - } - } - - // check if is an array - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } - - function isDate(input) { - return Object.prototype.toString.call(input) === '[object Date]' || - input instanceof Date; - } - - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } - - function normalizeUnits(units) { - if (units) { - var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); - units = unitAliases[units] || camelFunctions[lowered] || lowered; - } - return units; - } - - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - - return normalizedInput; - } - - function makeList(field) { - var count, setter; - - if (field.indexOf('week') === 0) { - count = 7; - setter = 'day'; - } - else if (field.indexOf('month') === 0) { - count = 12; - setter = 'month'; - } - else { - return; - } - - moment[field] = function (format, index) { - var i, getter, - method = moment._locale[field], - results = []; - - if (typeof format === 'number') { - index = format; - format = undefined; - } - - getter = function (i) { - var m = moment().utc().set(setter, i); - return method.call(moment._locale, m, format || ''); - }; - - if (index != null) { - return getter(index); - } - else { - for (i = 0; i < count; i++) { - results.push(getter(i)); - } - return results; - } - }; - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - if (coercedNumber >= 0) { - value = Math.floor(coercedNumber); - } else { - value = Math.ceil(coercedNumber); - } - } - - return value; - } - - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - - function weeksInYear(year, dow, doy) { - return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; - } - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - function checkOverflow(m) { - var overflow; - if (m._a && m._pf.overflow === -2) { - overflow = - m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : - m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : - m._a[HOUR] < 0 || m._a[HOUR] > 24 || - (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 || - m._a[SECOND] !== 0 || - m._a[MILLISECOND] !== 0)) ? HOUR : - m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : - m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : - m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : - -1; - - if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } - - m._pf.overflow = overflow; - } - } - - function isValid(m) { - if (m._isValid == null) { - m._isValid = !isNaN(m._d.getTime()) && - m._pf.overflow < 0 && - !m._pf.empty && - !m._pf.invalidMonth && - !m._pf.nullInput && - !m._pf.invalidFormat && - !m._pf.userInvalidated; - - if (m._strict) { - m._isValid = m._isValid && - m._pf.charsLeftOver === 0 && - m._pf.unusedTokens.length === 0 && - m._pf.bigHour === undefined; - } - } - return m._isValid; - } - - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } - - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; - } - - function loadLocale(name) { - var oldLocale = null; - if (!locales[name] && hasModule) { - try { - oldLocale = moment.locale(); - require('./locale/' + name); - // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales - moment.locale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - - // Return a moment from input, that is local/utc/zone equivalent to model. - function makeAs(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (moment.isMoment(input) || isDate(input) ? - +input : +moment(input)) - (+res); - // Use low-level api, because this fn is low-level api. - res._d.setTime(+res._d + diff); - moment.updateOffset(res, false); - return res; - } else { - return moment(input).local(); - } - } - - /************************************ - Locale - ************************************/ - - - extend(Locale.prototype, { - - set : function (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (typeof prop === 'function') { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source); - }, - - _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - months : function (m) { - return this._months[m.month()]; - }, - - _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - monthsShort : function (m) { - return this._monthsShort[m.month()]; - }, - - monthsParse : function (monthName, format, strict) { - var i, mom, regex; - - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } - - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = moment.utc([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - }, - - _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdays : function (m) { - return this._weekdays[m.day()]; - }, - - _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysShort : function (m) { - return this._weekdaysShort[m.day()]; - }, - - _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - weekdaysMin : function (m) { - return this._weekdaysMin[m.day()]; - }, - - weekdaysParse : function (weekdayName) { - var i, mom, regex; - - if (!this._weekdaysParse) { - this._weekdaysParse = []; - } - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - if (!this._weekdaysParse[i]) { - mom = moment([2000, 1]).day(i); - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - }, - - _longDateFormat : { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY LT', - LLLL : 'dddd, MMMM D, YYYY LT' - }, - longDateFormat : function (key) { - var output = this._longDateFormat[key]; - if (!output && this._longDateFormat[key.toUpperCase()]) { - output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - this._longDateFormat[key] = output; - } - return output; - }, - - isPM : function (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - }, - - _meridiemParse : /[ap]\.?m?\.?/i, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - }, - - _calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - calendar : function (key, mom, now) { - var output = this._calendar[key]; - return typeof output === 'function' ? output.apply(mom, [now]) : output; - }, - - _relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - - relativeTime : function (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (typeof output === 'function') ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - }, - - pastFuture : function (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); - }, - - ordinal : function (number) { - return this._ordinal.replace('%d', number); - }, - _ordinal : '%d', - _ordinalParse : /\d{1,2}/, - - preparse : function (string) { - return string; - }, - - postformat : function (string) { - return string; - }, - - week : function (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - }, - - _week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }, - - _invalidDate: 'Invalid date', - invalidDate: function () { - return this._invalidDate; - } - }); - - /************************************ - Formatting - ************************************/ - - - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } - - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = ''; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } - - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - - format = expandFormat(format, m.localeData()); - - if (!formatFunctions[format]) { - formatFunctions[format] = makeFormatFunction(format); - } - - return formatFunctions[format](m); - } - - function expandFormat(format, locale) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } - - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } - - return format; - } - - - /************************************ - Parsing - ************************************/ - - - // get the regex to find the next token - function getParseRegexForToken(token, config) { - var a, strict = config._strict; - switch (token) { - case 'Q': - return parseTokenOneDigit; - case 'DDDD': - return parseTokenThreeDigits; - case 'YYYY': - case 'GGGG': - case 'gggg': - return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; - case 'Y': - case 'G': - case 'g': - return parseTokenSignedNumber; - case 'YYYYYY': - case 'YYYYY': - case 'GGGGG': - case 'ggggg': - return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; - case 'S': - if (strict) { - return parseTokenOneDigit; - } - /* falls through */ - case 'SS': - if (strict) { - return parseTokenTwoDigits; - } - /* falls through */ - case 'SSS': - if (strict) { - return parseTokenThreeDigits; - } - /* falls through */ - case 'DDD': - return parseTokenOneToThreeDigits; - case 'MMM': - case 'MMMM': - case 'dd': - case 'ddd': - case 'dddd': - return parseTokenWord; - case 'a': - case 'A': - return config._locale._meridiemParse; - case 'x': - return parseTokenOffsetMs; - case 'X': - return parseTokenTimestampMs; - case 'Z': - case 'ZZ': - return parseTokenTimezone; - case 'T': - return parseTokenT; - case 'SSSS': - return parseTokenDigits; - case 'MM': - case 'DD': - case 'YY': - case 'GG': - case 'gg': - case 'HH': - case 'hh': - case 'mm': - case 'ss': - case 'ww': - case 'WW': - return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; - case 'M': - case 'D': - case 'd': - case 'H': - case 'h': - case 'm': - case 's': - case 'w': - case 'W': - case 'e': - case 'E': - return parseTokenOneOrTwoDigits; - case 'Do': - return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient; - default : - a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); - return a; - } - } - - function timezoneMinutesFromString(string) { - string = string || ''; - var possibleTzMatches = (string.match(parseTokenTimezone) || []), - tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], - parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], - minutes = +(parts[1] * 60) + toInt(parts[2]); - - return parts[0] === '+' ? -minutes : minutes; - } - - // function to convert string input to date - function addTimeToArrayFromToken(token, input, config) { - var a, datePartArray = config._a; - - switch (token) { - // QUARTER - case 'Q': - if (input != null) { - datePartArray[MONTH] = (toInt(input) - 1) * 3; - } - break; - // MONTH - case 'M' : // fall through to MM - case 'MM' : - if (input != null) { - datePartArray[MONTH] = toInt(input) - 1; - } - break; - case 'MMM' : // fall through to MMMM - case 'MMMM' : - a = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (a != null) { - datePartArray[MONTH] = a; - } else { - config._pf.invalidMonth = input; - } - break; - // DAY OF MONTH - case 'D' : // fall through to DD - case 'DD' : - if (input != null) { - datePartArray[DATE] = toInt(input); - } - break; - case 'Do' : - if (input != null) { - datePartArray[DATE] = toInt(parseInt( - input.match(/\d{1,2}/)[0], 10)); - } - break; - // DAY OF YEAR - case 'DDD' : // fall through to DDDD - case 'DDDD' : - if (input != null) { - config._dayOfYear = toInt(input); - } - - break; - // YEAR - case 'YY' : - datePartArray[YEAR] = moment.parseTwoDigitYear(input); - break; - case 'YYYY' : - case 'YYYYY' : - case 'YYYYYY' : - datePartArray[YEAR] = toInt(input); - break; - // AM / PM - case 'a' : // fall through to A - case 'A' : - config._isPm = config._locale.isPM(input); - break; - // HOUR - case 'h' : // fall through to hh - case 'hh' : - config._pf.bigHour = true; - /* falls through */ - case 'H' : // fall through to HH - case 'HH' : - datePartArray[HOUR] = toInt(input); - break; - // MINUTE - case 'm' : // fall through to mm - case 'mm' : - datePartArray[MINUTE] = toInt(input); - break; - // SECOND - case 's' : // fall through to ss - case 'ss' : - datePartArray[SECOND] = toInt(input); - break; - // MILLISECOND - case 'S' : - case 'SS' : - case 'SSS' : - case 'SSSS' : - datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); - break; - // UNIX OFFSET (MILLISECONDS) - case 'x': - config._d = new Date(toInt(input)); - break; - // UNIX TIMESTAMP WITH MS - case 'X': - config._d = new Date(parseFloat(input) * 1000); - break; - // TIMEZONE - case 'Z' : // fall through to ZZ - case 'ZZ' : - config._useUTC = true; - config._tzm = timezoneMinutesFromString(input); - break; - // WEEKDAY - human - case 'dd': - case 'ddd': - case 'dddd': - a = config._locale.weekdaysParse(input); - // if we didn't get a weekday name, mark the date as invalid - if (a != null) { - config._w = config._w || {}; - config._w['d'] = a; - } else { - config._pf.invalidWeekday = input; - } - break; - // WEEK, WEEK DAY - numeric - case 'w': - case 'ww': - case 'W': - case 'WW': - case 'd': - case 'e': - case 'E': - token = token.substr(0, 1); - /* falls through */ - case 'gggg': - case 'GGGG': - case 'GGGGG': - token = token.substr(0, 2); - if (input) { - config._w = config._w || {}; - config._w[token] = toInt(input); - } - break; - case 'gg': - case 'GG': - config._w = config._w || {}; - config._w[token] = moment.parseTwoDigitYear(input); - } - } - - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); - week = dfl(w.W, 1); - weekday = dfl(w.E, 1); - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); - week = dfl(w.w, 1); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < dow) { - ++week; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - } else { - // default to begining of week - weekday = dow; - } - } - temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); - - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function dateFromConfig(config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - config._pf._overflowDayOfYear = true; - } - - date = makeUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); - // Apply timezone offset from input. The actual zone can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } - } - - function dateFromObject(config) { - var normalizedInput; - - if (config._d) { - return; - } - - normalizedInput = normalizeObjectUnits(config._i); - config._a = [ - normalizedInput.year, - normalizedInput.month, - normalizedInput.day || normalizedInput.date, - normalizedInput.hour, - normalizedInput.minute, - normalizedInput.second, - normalizedInput.millisecond - ]; - - dateFromConfig(config); - } - - function currentDateArray(config) { - var now = new Date(); - if (config._useUTC) { - return [ - now.getUTCFullYear(), - now.getUTCMonth(), - now.getUTCDate() - ]; - } else { - return [now.getFullYear(), now.getMonth(), now.getDate()]; - } - } - - // date from string and format string - function makeDateFromStringAndFormat(config) { - if (config._f === moment.ISO_8601) { - parseISO(config); - return; - } - - config._a = []; - config._pf.empty = true; - - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; - - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - config._pf.unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - config._pf.empty = false; - } - else { - config._pf.unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - config._pf.unusedTokens.push(token); - } - } - - // add remaining unparsed input length to the string - config._pf.charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - config._pf.unusedInput.push(string); - } - - // clear _12h flag if hour is <= 12 - if (config._pf.bigHour === true && config._a[HOUR] <= 12) { - config._pf.bigHour = undefined; - } - // handle am pm - if (config._isPm && config._a[HOUR] < 12) { - config._a[HOUR] += 12; - } - // if is 12 am, change hours to 0 - if (config._isPm === false && config._a[HOUR] === 12) { - config._a[HOUR] = 0; - } - dateFromConfig(config); - checkOverflow(config); - } - - function unescapeFormat(s) { - return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - }); - } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function regexpEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } - - // date from string and array of format strings - function makeDateFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - config._pf.invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._pf = defaultParsingFlags(); - tempConfig._f = config._f[i]; - makeDateFromStringAndFormat(tempConfig); - - if (!isValid(tempConfig)) { - continue; - } - - // if there is any input that was not parsed add a penalty for that format - currentScore += tempConfig._pf.charsLeftOver; - - //or tokens - currentScore += tempConfig._pf.unusedTokens.length * 10; - - tempConfig._pf.score = currentScore; - - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - // date from iso format - function parseISO(config) { - var i, l, - string = config._i, - match = isoRegex.exec(string); - - if (match) { - config._pf.iso = true; - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(string)) { - // match[5] should be 'T' or undefined - config._f = isoDates[i][0] + (match[6] || ' '); - break; - } - } - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(string)) { - config._f += isoTimes[i][0]; - break; - } - } - if (string.match(parseTokenTimezone)) { - config._f += 'Z'; - } - makeDateFromStringAndFormat(config); - } else { - config._isValid = false; - } - } - - // date from iso format or fallback - function makeDateFromString(config) { - parseISO(config); - if (config._isValid === false) { - delete config._isValid; - moment.createFromInputFallback(config); - } - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function makeDateFromInput(config) { - var input = config._i, matched; - if (input === undefined) { - config._d = new Date(); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { - config._d = new Date(+matched[1]); - } else if (typeof input === 'string') { - makeDateFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - dateFromConfig(config); - } else if (typeof(input) === 'object') { - dateFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - moment.createFromInputFallback(config); - } - } - - function makeDate(y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); - - //the date constructor doesn't accept years < 1970 - if (y < 1970) { - date.setFullYear(y); - } - return date; - } - - function makeUTCDate(y) { - var date = new Date(Date.UTC.apply(null, arguments)); - if (y < 1970) { - date.setUTCFullYear(y); - } - return date; - } - - function parseWeekday(input, locale) { - if (typeof input === 'string') { - if (!isNaN(input)) { - input = parseInt(input, 10); - } - else { - input = locale.weekdaysParse(input); - if (typeof input !== 'number') { - return null; - } - } - } - return input; - } - - /************************************ - Relative Time - ************************************/ - - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } - - function relativeTime(posNegDuration, withoutSuffix, locale) { - var duration = moment.duration(posNegDuration).abs(), - seconds = round(duration.as('s')), - minutes = round(duration.as('m')), - hours = round(duration.as('h')), - days = round(duration.as('d')), - months = round(duration.as('M')), - years = round(duration.as('y')), - - args = seconds < relativeTimeThresholds.s && ['s', seconds] || - minutes === 1 && ['m'] || - minutes < relativeTimeThresholds.m && ['mm', minutes] || - hours === 1 && ['h'] || - hours < relativeTimeThresholds.h && ['hh', hours] || - days === 1 && ['d'] || - days < relativeTimeThresholds.d && ['dd', days] || - months === 1 && ['M'] || - months < relativeTimeThresholds.M && ['MM', months] || - years === 1 && ['y'] || ['yy', years]; - - args[2] = withoutSuffix; - args[3] = +posNegDuration > 0; - args[4] = locale; - return substituteTimeAgo.apply({}, args); - } - - - /************************************ - Week of Year - ************************************/ - - - // firstDayOfWeek 0 = sun, 6 = sat - // the day of the week that starts the week - // (usually sunday or monday) - // firstDayOfWeekOfYear 0 = sun, 6 = sat - // the first week is the week that contains the first - // of this day of the week - // (eg. ISO weeks use thursday (4)) - function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { - var end = firstDayOfWeekOfYear - firstDayOfWeek, - daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), - adjustedMoment; - - - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } - - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } - - adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; - } - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; - - d = d === 0 ? 7 : d; - weekday = weekday != null ? weekday : firstDayOfWeek; - daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); - dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; - - return { - year: dayOfYear > 0 ? year : year - 1, - dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear - }; - } - - /************************************ - Top Level Functions - ************************************/ - - function makeMoment(config) { - var input = config._i, - format = config._f, - res; - - config._locale = config._locale || moment.localeData(config._l); - - if (input === null || (format === undefined && input === '')) { - return moment.invalid({nullInput: true}); - } - - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } - - if (moment.isMoment(input)) { - return new Moment(input, true); - } else if (format) { - if (isArray(format)) { - makeDateFromStringAndArray(config); - } else { - makeDateFromStringAndFormat(config); - } - } else { - makeDateFromInput(config); - } - - res = new Moment(config); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; - } - - moment = function (input, format, locale, strict) { - var c; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._i = input; - c._f = format; - c._l = locale; - c._strict = strict; - c._isUTC = false; - c._pf = defaultParsingFlags(); - - return makeMoment(c); - }; - - moment.suppressDeprecationWarnings = false; - - moment.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); - - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return moment(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - - moment.min = function () { - var args = [].slice.call(arguments, 0); - - return pickBy('isBefore', args); - }; - - moment.max = function () { - var args = [].slice.call(arguments, 0); - - return pickBy('isAfter', args); - }; - - // creating with utc - moment.utc = function (input, format, locale, strict) { - var c; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._useUTC = true; - c._isUTC = true; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - c._pf = defaultParsingFlags(); - - return makeMoment(c).utc(); - }; - - // creating with unix timestamp (in seconds) - moment.unix = function (input) { - return moment(input * 1000); - }; - - // duration - moment.duration = function (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - parseIso, - diffRes; - - if (moment.isDuration(input)) { - duration = { - ms: input._milliseconds, - d: input._days, - M: input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y: 0, - d: toInt(match[DATE]) * sign, - h: toInt(match[HOUR]) * sign, - m: toInt(match[MINUTE]) * sign, - s: toInt(match[SECOND]) * sign, - ms: toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoDurationRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - parseIso = function (inp) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - }; - duration = { - y: parseIso(match[2]), - M: parseIso(match[3]), - d: parseIso(match[4]), - h: parseIso(match[5]), - m: parseIso(match[6]), - s: parseIso(match[7]), - w: parseIso(match[8]) - }; - } else if (typeof duration === 'object' && - ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(moment(duration.from), moment(duration.to)); - - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } - - ret = new Duration(duration); - - if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - - return ret; - }; - - // version number - moment.version = VERSION; - - // default format - moment.defaultFormat = isoFormat; - - // constant that refers to the ISO standard - moment.ISO_8601 = function () {}; - - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - moment.momentProperties = momentProperties; - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - moment.updateOffset = function () {}; - - // This function allows you to set a threshold for relative time strings - moment.relativeTimeThreshold = function (threshold, limit) { - if (relativeTimeThresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return relativeTimeThresholds[threshold]; - } - relativeTimeThresholds[threshold] = limit; - return true; - }; - - moment.lang = deprecate( - 'moment.lang is deprecated. Use moment.locale instead.', - function (key, value) { - return moment.locale(key, value); - } - ); - - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - moment.locale = function (key, values) { - var data; - if (key) { - if (typeof(values) !== 'undefined') { - data = moment.defineLocale(key, values); - } - else { - data = moment.localeData(key); - } - - if (data) { - moment.duration._locale = moment._locale = data; - } - } - - return moment._locale._abbr; - }; - - moment.defineLocale = function (name, values) { - if (values !== null) { - values.abbr = name; - if (!locales[name]) { - locales[name] = new Locale(); - } - locales[name].set(values); - - // backwards compat for now: also set the locale - moment.locale(name); - - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - }; - - moment.langData = deprecate( - 'moment.langData is deprecated. Use moment.localeData instead.', - function (key) { - return moment.localeData(key); - } - ); - - // returns locale data - moment.localeData = function (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } - - if (!key) { - return moment._locale; - } - - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } - - return chooseLocale(key); - }; - - // compare moment object - moment.isMoment = function (obj) { - return obj instanceof Moment || - (obj != null && hasOwnProp(obj, '_isAMomentObject')); - }; - - // for typechecking Duration objects - moment.isDuration = function (obj) { - return obj instanceof Duration; - }; - - for (i = lists.length - 1; i >= 0; --i) { - makeList(lists[i]); - } - - moment.normalizeUnits = function (units) { - return normalizeUnits(units); - }; - - moment.invalid = function (flags) { - var m = moment.utc(NaN); - if (flags != null) { - extend(m._pf, flags); - } - else { - m._pf.userInvalidated = true; - } - - return m; - }; - - moment.parseZone = function () { - return moment.apply(null, arguments).parseZone(); - }; - - moment.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - /************************************ - Moment Prototype - ************************************/ - - - extend(moment.fn = Moment.prototype, { - - clone : function () { - return moment(this); - }, - - valueOf : function () { - return +this._d + ((this._offset || 0) * 60000); - }, - - unix : function () { - return Math.floor(+this / 1000); - }, - - toString : function () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - }, - - toDate : function () { - return this._offset ? new Date(+this) : this._d; - }, - - toISOString : function () { - var m = moment(this).utc(); - if (0 < m.year() && m.year() <= 9999) { - if ('function' === typeof Date.prototype.toISOString) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - }, - - toArray : function () { - var m = this; - return [ - m.year(), - m.month(), - m.date(), - m.hours(), - m.minutes(), - m.seconds(), - m.milliseconds() - ]; - }, - - isValid : function () { - return isValid(this); - }, - - isDSTShifted : function () { - if (this._a) { - return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; - } - - return false; - }, - - parsingFlags : function () { - return extend({}, this._pf); - }, - - invalidAt: function () { - return this._pf.overflow; - }, - - utc : function (keepLocalTime) { - return this.zone(0, keepLocalTime); - }, - - local : function (keepLocalTime) { - if (this._isUTC) { - this.zone(0, keepLocalTime); - this._isUTC = false; - - if (keepLocalTime) { - this.add(this._dateTzOffset(), 'm'); - } - } - return this; - }, - - format : function (inputString) { - var output = formatMoment(this, inputString || moment.defaultFormat); - return this.localeData().postformat(output); - }, - - add : createAdder(1, 'add'), - - subtract : createAdder(-1, 'subtract'), - - diff : function (input, units, asFloat) { - var that = makeAs(input, this), - zoneDiff = (this.zone() - that.zone()) * 6e4, - diff, output, daysAdjust; - - units = normalizeUnits(units); - - if (units === 'year' || units === 'month') { - // average number of days in the months in the given dates - diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 - // difference in months - output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); - // adjust by taking difference in days, average number of days - // and dst in the given months. - daysAdjust = (this - moment(this).startOf('month')) - - (that - moment(that).startOf('month')); - // same as above but with zones, to negate all dst - daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) - - (that.zone() - moment(that).startOf('month').zone())) * 6e4; - output += daysAdjust / diff; - if (units === 'year') { - output = output / 12; - } - } else { - diff = (this - that); - output = units === 'second' ? diff / 1e3 : // 1000 - units === 'minute' ? diff / 6e4 : // 1000 * 60 - units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - diff; - } - return asFloat ? output : absRound(output); - }, - - from : function (time, withoutSuffix) { - return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - }, - - fromNow : function (withoutSuffix) { - return this.from(moment(), withoutSuffix); - }, - - calendar : function (time) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're zone'd or not. - var now = time || moment(), - sod = makeAs(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - return this.format(this.localeData().calendar(format, this, moment(now))); - }, - - isLeapYear : function () { - return isLeapYear(this.year()); - }, - - isDST : function () { - return (this.zone() < this.clone().month(0).zone() || - this.zone() < this.clone().month(5).zone()); - }, - - day : function (input) { - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - }, - - month : makeAccessor('Month', true), - - startOf : function (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - /* falls through */ - } - - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } else if (units === 'isoWeek') { - this.isoWeekday(1); - } - - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - }, - - endOf: function (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - }, - - isAfter: function (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this > +input; - } else { - inputMs = moment.isMoment(input) ? +input : +moment(input); - return inputMs < +this.clone().startOf(units); - } - }, - - isBefore: function (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this < +input; - } else { - inputMs = moment.isMoment(input) ? +input : +moment(input); - return +this.clone().endOf(units) < inputMs; - } - }, - - isSame: function (input, units) { - var inputMs; - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this === +input; - } else { - inputMs = +moment(input); - return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); - } - }, - - min: deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function (other) { - other = moment.apply(null, arguments); - return other < this ? this : other; - } - ), - - max: deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function (other) { - other = moment.apply(null, arguments); - return other > this ? this : other; - } - ), - - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - zone : function (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (input != null) { - if (typeof input === 'string') { - input = timezoneMinutesFromString(input); - } - if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = this._dateTzOffset(); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.subtract(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - addOrSubtractDurationFromMoment(this, - moment.duration(offset - input, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - moment.updateOffset(this, true); - this._changeInProgress = null; - } - } - } else { - return this._isUTC ? offset : this._dateTzOffset(); - } - return this; - }, - - zoneAbbr : function () { - return this._isUTC ? 'UTC' : ''; - }, - - zoneName : function () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - }, - - parseZone : function () { - if (this._tzm) { - this.zone(this._tzm); - } else if (typeof this._i === 'string') { - this.zone(this._i); - } - return this; - }, - - hasAlignedHourOffset : function (input) { - if (!input) { - input = 0; - } - else { - input = moment(input).zone(); - } - - return (this.zone() - input) % 60 === 0; - }, - - daysInMonth : function () { - return daysInMonth(this.year(), this.month()); - }, - - dayOfYear : function (input) { - var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - }, - - quarter : function (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - }, - - weekYear : function (input) { - var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; - return input == null ? year : this.add((input - year), 'y'); - }, - - isoWeekYear : function (input) { - var year = weekOfYear(this, 1, 4).year; - return input == null ? year : this.add((input - year), 'y'); - }, - - week : function (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - }, - - isoWeek : function (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - }, - - weekday : function (input) { - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - }, - - isoWeekday : function (input) { - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - }, - - isoWeeksInYear : function () { - return weeksInYear(this.year(), 1, 4); - }, - - weeksInYear : function () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - }, - - get : function (units) { - units = normalizeUnits(units); - return this[units](); - }, - - set : function (units, value) { - units = normalizeUnits(units); - if (typeof this[units] === 'function') { - this[units](value); - } - return this; - }, - - // If passed a locale key, it will set the locale for this - // instance. Otherwise, it will return the locale configuration - // variables for this instance. - locale : function (key) { - var newLocaleData; - - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = moment.localeData(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - }, - - lang : deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ), - - localeData : function () { - return this._locale; - }, - - _dateTzOffset : function () { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return Math.round(this._d.getTimezoneOffset() / 15) * 15; - } - }); - - function rawMonthSetter(mom, value) { - var dayOfMonth; - - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } - - dayOfMonth = Math.min(mom.date(), - daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } - - function rawGetter(mom, unit) { - return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); - } - - function rawSetter(mom, unit, value) { - if (unit === 'Month') { - return rawMonthSetter(mom, value); - } else { - return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - - function makeAccessor(unit, keepTime) { - return function (value) { - if (value != null) { - rawSetter(this, unit, value); - moment.updateOffset(this, keepTime); - return this; - } else { - return rawGetter(this, unit); - } - }; - } - - moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); - moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); - moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); - // moment.fn.month is defined separately - moment.fn.date = makeAccessor('Date', true); - moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); - moment.fn.year = makeAccessor('FullYear', true); - moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); - - // add plural methods - moment.fn.days = moment.fn.day; - moment.fn.months = moment.fn.month; - moment.fn.weeks = moment.fn.week; - moment.fn.isoWeeks = moment.fn.isoWeek; - moment.fn.quarters = moment.fn.quarter; - - // add aliased format methods - moment.fn.toJSON = moment.fn.toISOString; - - /************************************ - Duration Prototype - ************************************/ - - - function daysToYears (days) { - // 400 years have 146097 days (taking into account leap year rules) - return days * 400 / 146097; - } - - function yearsToDays (years) { - // years * 365 + absRound(years / 4) - - // absRound(years / 100) + absRound(years / 400); - return years * 146097 / 400; - } - - extend(moment.duration.fn = Duration.prototype, { - - _bubble : function () { - var milliseconds = this._milliseconds, - days = this._days, - months = this._months, - data = this._data, - seconds, minutes, hours, years = 0; - - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - - seconds = absRound(milliseconds / 1000); - data.seconds = seconds % 60; - - minutes = absRound(seconds / 60); - data.minutes = minutes % 60; - - hours = absRound(minutes / 60); - data.hours = hours % 24; - - days += absRound(hours / 24); - - // Accurately convert days to years, assume start from year 0. - years = absRound(daysToYears(days)); - days -= absRound(yearsToDays(years)); - - // 30 days to a month - // TODO (iskren): Use anchor date (like 1st Jan) to compute this. - months += absRound(days / 30); - days %= 30; - - // 12 months -> 1 year - years += absRound(months / 12); - months %= 12; - - data.days = days; - data.months = months; - data.years = years; - }, - - abs : function () { - this._milliseconds = Math.abs(this._milliseconds); - this._days = Math.abs(this._days); - this._months = Math.abs(this._months); - - this._data.milliseconds = Math.abs(this._data.milliseconds); - this._data.seconds = Math.abs(this._data.seconds); - this._data.minutes = Math.abs(this._data.minutes); - this._data.hours = Math.abs(this._data.hours); - this._data.months = Math.abs(this._data.months); - this._data.years = Math.abs(this._data.years); - - return this; - }, - - weeks : function () { - return absRound(this.days() / 7); - }, - - valueOf : function () { - return this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6; - }, - - humanize : function (withSuffix) { - var output = relativeTime(this, !withSuffix, this.localeData()); - - if (withSuffix) { - output = this.localeData().pastFuture(+this, output); - } - - return this.localeData().postformat(output); - }, - - add : function (input, val) { - // supports only 2.0-style add(1, 's') or add(moment) - var dur = moment.duration(input, val); - - this._milliseconds += dur._milliseconds; - this._days += dur._days; - this._months += dur._months; - - this._bubble(); - - return this; - }, - - subtract : function (input, val) { - var dur = moment.duration(input, val); - - this._milliseconds -= dur._milliseconds; - this._days -= dur._days; - this._months -= dur._months; - - this._bubble(); - - return this; - }, - - get : function (units) { - units = normalizeUnits(units); - return this[units.toLowerCase() + 's'](); - }, - - as : function (units) { - var days, months; - units = normalizeUnits(units); - - if (units === 'month' || units === 'year') { - days = this._days + this._milliseconds / 864e5; - months = this._months + daysToYears(days) * 12; - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(yearsToDays(this._months / 12)); - switch (units) { - case 'week': return days / 7 + this._milliseconds / 6048e5; - case 'day': return days + this._milliseconds / 864e5; - case 'hour': return days * 24 + this._milliseconds / 36e5; - case 'minute': return days * 24 * 60 + this._milliseconds / 6e4; - case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - }, - - lang : moment.fn.lang, - locale : moment.fn.locale, - - toIsoString : deprecate( - 'toIsoString() is deprecated. Please use toISOString() instead ' + - '(notice the capitals)', - function () { - return this.toISOString(); - } - ), - - toISOString : function () { - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var years = Math.abs(this.years()), - months = Math.abs(this.months()), - days = Math.abs(this.days()), - hours = Math.abs(this.hours()), - minutes = Math.abs(this.minutes()), - seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); - - if (!this.asSeconds()) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - return (this.asSeconds() < 0 ? '-' : '') + - 'P' + - (years ? years + 'Y' : '') + - (months ? months + 'M' : '') + - (days ? days + 'D' : '') + - ((hours || minutes || seconds) ? 'T' : '') + - (hours ? hours + 'H' : '') + - (minutes ? minutes + 'M' : '') + - (seconds ? seconds + 'S' : ''); - }, - - localeData : function () { - return this._locale; - } - }); - - moment.duration.fn.toString = moment.duration.fn.toISOString; - - function makeDurationGetter(name) { - moment.duration.fn[name] = function () { - return this._data[name]; - }; - } - - for (i in unitMillisecondFactors) { - if (hasOwnProp(unitMillisecondFactors, i)) { - makeDurationGetter(i.toLowerCase()); - } - } - - moment.duration.fn.asMilliseconds = function () { - return this.as('ms'); - }; - moment.duration.fn.asSeconds = function () { - return this.as('s'); - }; - moment.duration.fn.asMinutes = function () { - return this.as('m'); - }; - moment.duration.fn.asHours = function () { - return this.as('h'); - }; - moment.duration.fn.asDays = function () { - return this.as('d'); - }; - moment.duration.fn.asWeeks = function () { - return this.as('weeks'); - }; - moment.duration.fn.asMonths = function () { - return this.as('M'); - }; - moment.duration.fn.asYears = function () { - return this.as('y'); - }; - - /************************************ - Default Locale - ************************************/ - - - // Set default locale, other locale will inherit from English. - moment.locale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - /* EMBED_LOCALES */ - - /************************************ - Exposing Moment - ************************************/ - - function makeGlobal(shouldDeprecate) { - /*global ender:false */ - if (typeof ender !== 'undefined') { - return; - } - oldGlobalMoment = globalScope.moment; - if (shouldDeprecate) { - globalScope.moment = deprecate( - 'Accessing Moment through the global scope is ' + - 'deprecated, and will be removed in an upcoming ' + - 'release.', - moment); - } else { - globalScope.moment = moment; - } - } - - // CommonJS module is defined - if (hasModule) { - module.exports = moment; - } else if (typeof define === 'function' && define.amd) { - define('moment', function (require, exports, module) { - if (module.config && module.config() && module.config().noGlobal === true) { - // release the global variable - globalScope.moment = oldGlobalMoment; - } - - return moment; - }); - makeGlobal(true); - } else { - makeGlobal(); - } -}).call(this); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/Object.assign.js":[function(require,module,exports){ -/** - * Copyright 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule Object.assign - */ - -// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign - -function assign(target, sources) { - if (target == null) { - throw new TypeError('Object.assign target cannot be null or undefined'); - } - - var to = Object(target); - var hasOwnProperty = Object.prototype.hasOwnProperty; - - for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) { - var nextSource = arguments[nextIndex]; - if (nextSource == null) { - continue; - } - - var from = Object(nextSource); - - // We don't currently support accessors nor proxies. Therefore this - // copy cannot throw. If we ever supported this then we must handle - // exceptions and side-effects. We don't support symbols so they won't - // be transferred. - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - } - - return to; -}; - -module.exports = assign; - -},{}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/copyProperties.js":[function(require,module,exports){ -(function (process){ -/** - * Copyright 2013-2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule copyProperties - */ - -/** - * Copy properties from one or more objects (up to 5) into the first object. - * This is a shallow copy. It mutates the first object and also returns it. - * - * NOTE: `arguments` has a very significant performance penalty, which is why - * we don't support unlimited arguments. - */ -function copyProperties(obj, a, b, c, d, e, f) { - obj = obj || {}; - - if ("production" !== process.env.NODE_ENV) { - if (f) { - throw new Error('Too many arguments passed to copyProperties'); - } - } - - var args = [a, b, c, d, e]; - var ii = 0, v; - while (args[ii]) { - v = args[ii++]; - for (var k in v) { - obj[k] = v[k]; - } - - // IE ignores toString in object iteration.. See: - // webreflection.blogspot.com/2007/07/quick-fix-internet-explorer-and.html - if (v.hasOwnProperty && v.hasOwnProperty('toString') && - (typeof v.toString != 'undefined') && (obj.toString !== v.toString)) { - obj.toString = v.toString; - } - } - - return obj; -} - -module.exports = copyProperties; - -// deprecation notice -console.warn( - 'react/lib/copyProperties has been deprecated and will be removed in the ' + - 'next version of React. All uses can be replaced with ' + - 'Object.assign(obj, a, b, ...) or _.extend(obj, a, b, ...).' -); - -}).call(this,require('_process')) -},{"_process":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/process/browser.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/merge.js":[function(require,module,exports){ -/** - * Copyright 2013-2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule merge - */ - -"use strict"; - -var assign = require("./Object.assign"); - -/** - * Shallow merges two structures into a return value, without mutating either. - * - * @param {?object} one Optional object with properties to merge from. - * @param {?object} two Optional object with properties to merge from. - * @return {object} The shallow extension of one by two. - */ -var merge = function(one, two) { - return assign({}, one, two); -}; - -module.exports = merge; - -// deprecation notice -console.warn( - 'react/lib/merge has been deprecated and will be removed in the ' + - 'next version of React. All uses can be replaced with ' + - 'Object.assign({}, a, b) or _.extend({}, a, b).' -); - -},{"./Object.assign":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/Object.assign.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/persistence/MessagePersistence.coffee":[function(require,module,exports){ -var MessageActions; - -MessageActions = require('../actions/MessageActions.coffee'); - -module.exports = { - listen: function(since) { - return window.urb.subscribe({ - appl: "radio", - path: "/fm/main/" + since - }, function(err, res) { - var _ref, _ref1; - console.log('m subscription updates'); - console.log(res.data); - if ((_ref = res.data) != null ? (_ref1 = _ref.grams) != null ? _ref1.tele : void 0 : void 0) { - return MessageActions.loadMessages(res.data.grams); - } - }); - }, - get: function(start, end) { - return window.urb.subscribe({ - appl: "radio", - path: "/fm/main/" + end + "/" + start - }, function(err, res) { - var _ref, _ref1; - console.log('get'); - console.log(res); - if ((_ref = res.data) != null ? (_ref1 = _ref.grams) != null ? _ref1.tele : void 0 : void 0) { - MessageActions.loadMessages(res.data.grams); - return window.urb.unsubscribe({ - appl: "radio", - path: "/fm/main/" + start + "/" + end - }, function(err, res) { - console.log('done'); - return console.log(res); - }); - } - }); - }, - sendMessage: function(message, cb) { - return window.urb.send({ - appl: "radio", - mark: "radio-command", - data: { - publish: [message] - } - }, function(err, res) { - console.log('sent'); - console.log(arguments); - if (cb) { - return cb(err, res); - } - }); - } -}; - - - -},{"../actions/MessageActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/MessageActions.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/persistence/StationPersistence.coffee":[function(require,module,exports){ -var StationActions; - -StationActions = require('../actions/StationActions.coffee'); - -module.exports = { - createStation: function(name, cb) { - return window.urb.send({ - appl: "radio", - mark: "radio-command", - data: { - design: { - party: name, - config: { - sources: [], - cordon: { - white: false, - list: [] - } - } - } - } - }, cb); - }, - addSource: function(party, ship, sources) { - var send; - send = { - appl: "radio", - mark: "radio-command", - data: { - design: { - party: party, - config: { - sources: sources, - cordon: { - white: false, - list: [] - } - } - } - } - }; - return window.urb.send(send, function(err, res) { - console.log('add source updates'); - return console.log(arguments); - }); - }, - ping: function(_ping) { - return window.urb.send({ - appl: "radio", - mark: "radio-command", - data: { - ping: _ping - } - }); - }, - members: function() { - return window.urb.subscribe({ - appl: "radio", - path: "/am/main" - }, function(err, res) { - var _ref, _ref1; - console.log('membership updates'); - console.log(res.data); - if ((_ref = res.data) != null ? (_ref1 = _ref.group) != null ? _ref1.global : void 0 : void 0) { - return StationActions.loadMembers(res.data.group.global); - } - }); - }, - config: function() { - return window.urb.subscribe({ - appl: "radio", - path: "/xm/main" - }, function(err, res) { - console.log('config updates'); - console.log(res.data); - if (res.data.config) { - return StationActions.loadConfig("main", res.data.config); - } - }); - }, - rooms: function() { - return window.urb.subscribe({ - appl: "radio", - path: "/" - }, function(err, res) { - console.log('house updates'); - return console.log(res.data); - }); - }, - listen: function(station) { - return window.urb.subscribe({ - appl: "radio", - path: "/am/" + station - }, function(err, res) { - console.log('station subscription updates'); - return console.log(res.data); - }); - } -}; - - - -},{"../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/MessageStore.coffee":[function(require,module,exports){ -var EventEmitter, MessageDispatcher, MessageStore, merge, moment, _fetching, _last, _messages, _station; - -moment = require('moment-timezone'); - -merge = require('react/lib/merge'); - -EventEmitter = require('events').EventEmitter; - -MessageDispatcher = require('../dispatcher/Dispatcher.coffee'); - -_messages = {}; - -_fetching = false; - -_last = null; - -_station = null; - -MessageStore = merge(EventEmitter.prototype, { - removeChangeListener: function(cb) { - return this.removeListener("change", cb); - }, - emitChange: function() { - return this.emit('change'); - }, - addChangeListener: function(cb) { - return this.on('change', cb); - }, - leadingZero: function(str) { - if (Number(str) < 10) { - return "0" + str; - } else { - return str; - } - }, - convertDate: function(time) { - var d; - time = time.substr(1).split("."); - time[1] = this.leadingZero(time[1]); - time[2] = this.leadingZero(time[2]); - d = new moment("" + time[0] + "-" + time[1] + "-" + time[2] + "T" + time[4] + ":" + time[5] + ":" + time[6] + "Z"); - d.tz("Europe/London"); - return d; - }, - setStation: function(station) { - return _station = station; - }, - sendMessage: function(message) { - return _messages[message.thought.serial] = message; - }, - loadMessages: function(messages, last) { - var k, serial, v; - for (k in messages) { - v = messages[k]; - serial = v.thought.serial; - v.key = serial; - _messages[serial] = v; - } - if (last < _last || _last === null) { - _last = last; - } - return _fetching = false; - }, - getAll: function() { - return _.values(_messages); - }, - getFetching: function() { - return _fetching; - }, - setFetching: function(state) { - return _fetching = state; - }, - getLast: function() { - return _last; - } -}); - -MessageStore.dispatchToken = MessageDispatcher.register(function(payload) { - var action; - action = payload.action; - switch (action.type) { - case 'station-switch': - return MessageStore.setStation(action.station); - case 'messages-fetch': - MessageStore.setFetching(true); - return MessageStore.emitChange(); - case 'messages-load': - MessageStore.loadMessages(action.messages, action.last); - return MessageStore.emitChange(); - case 'message-load': - MessageStore.loadMessage(action.time, action.message, action.author); - return MessageStore.emitChange(); - case 'message-send': - MessageStore.sendMessage(action.message); - return MessageStore.emitChange(); - } -}); - -module.exports = MessageStore; - - - -},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js","moment-timezone":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/index.js","react/lib/merge":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/merge.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee":[function(require,module,exports){ -var EventEmitter, StationDispatcher, StationStore, merge, _config, _members, _station, _stations, _typing; - -merge = require('react/lib/merge'); - -EventEmitter = require('events').EventEmitter; - -StationDispatcher = require('../dispatcher/Dispatcher.coffee'); - -_members = {}; - -_stations = []; - -_station = null; - -_config = {}; - -_typing = {}; - -StationStore = merge(EventEmitter.prototype, { - removeChangeListener: function(cb) { - return this.removeListener("change", cb); - }, - emitChange: function() { - return this.emit('change'); - }, - addChangeListener: function(cb) { - return this.on('change', cb); - }, - loadConfig: function(station, config) { - return _config[station] = config; - }, - getConfig: function(station) { - return _config[station]; - }, - getMember: function(ship) { - return { - ship: ship - }; - }, - changeMember: function(dir, name, ship) { - if (dir === "out") { - _members = _.filter(_members, function(_member) { - return _member.ship !== ship; - }); - } - if (dir === "in") { - return _members.push({ - name: name, - ship: ship - }); - } - }, - loadMembers: function(members) { - return _members = members; - }, - getMembers: function() { - return _members; - }, - createStation: function(station) { - if (_stations.indexOf(station) === -1) { - return _stations.push(station); - } - }, - loadStations: function(stations) { - return _stations = stations; - }, - getStations: function(station) { - if (_config.main) { - return _config.main.sources; - } else { - return []; - } - }, - setStation: function(station) { - return _station = station; - }, - unsetStation: function(station) { - if (_station === station) { - return _station = null; - } - }, - getStation: function() { - return _station; - }, - joinStation: function(station) { - var _ref; - if (((_ref = _config.main) != null ? _ref.sources.indexOf(station) : void 0) === -1) { - return _config.main.sources.push(station); - } - }, - getTyping: function() { - return _typing; - }, - setTyping: function(station, state) { - var k, v; - for (k in _typing) { - v = _typing[k]; - _typing[k] = k === station; - } - return _typing[station] = state; - } -}); - -StationStore.dispatchToken = StationDispatcher.register(function(payload) { - var action; - action = payload.action; - switch (action.type) { - case 'station-switch': - StationStore.setStation(action.station); - return StationStore.emitChange(); - case "config-load": - StationStore.loadConfig(action.station, action.config); - return StationStore.emitChange(); - case "stations-load": - StationStore.loadStations(action.stations); - return StationStore.emitChange(); - case "stations-leave": - StationStore.loadStations(action.stations); - StationStore.unsetStation(action.station); - return StationStore.emitChange(); - case "station-create": - StationStore.createStation(action.station); - return StationStore.emitChange(); - case "members-load": - StationStore.loadMembers(action.members); - return StationStore.emitChange(); - case "typing-set": - StationStore.setTyping(action.station, action.state); - return StationStore.emitChange(); - } -}); - -module.exports = StationStore; - - - -},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js","react/lib/merge":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/merge.js"}],"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js":[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } else { - throw TypeError('Uncaught, unspecified "error" event.'); - } - return false; - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - handler.apply(this, args); - } - } else if (isObject(handler)) { - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - var m; - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; - -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.listenerCount = function(emitter, type) { - var ret; - if (!emitter._events || !emitter._events[type]) - ret = 0; - else if (isFunction(emitter._events[type])) - ret = 1; - else - ret = emitter._events[type].length; - return ret; -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - -},{}],"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/process/browser.js":[function(require,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; - -process.nextTick = (function () { - var canSetImmediate = typeof window !== 'undefined' - && window.setImmediate; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; - - if (canSetImmediate) { - return function (f) { return window.setImmediate(f) }; - } - - if (canPost) { - var queue = []; - window.addEventListener('message', function (ev) { - var source = ev.source; - if ((source === window || source === null) && ev.data === 'process-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } - } - }, true); - - return function nextTick(fn) { - queue.push(fn); - window.postMessage('process-tick', '*'); - }; - } - - return function nextTick(fn) { - setTimeout(fn, 0); - }; -})(); - -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -} - -// TODO(shtylman) -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; - -},{}]},{},["/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/main.coffee"]); diff --git a/base/pub/sole/fab/hymn.hook b/base/pub/sole/fab/hymn.hook index 90e69afc4..51764f680 100644 --- a/base/pub/sole/fab/hymn.hook +++ b/base/pub/sole/fab/hymn.hook @@ -18,7 +18,7 @@ "mousetrap/1.4.6/mousetrap.js" "react/0.11.0/react.js" == - ;script(src "/~/at/base/lib/urb.js"); + ;script(src "{(spud /~~/~/at/[&2:%]/lib/'urb.js')}"); ;script: urb.appl = 'dojo' ;style:''' #term { diff --git a/base/pub/sole/src/main.coffee b/base/pub/sole/src/main.coffee index 3533418c7..3a153e3fb 100644 --- a/base/pub/sole/src/main.coffee +++ b/base/pub/sole/src/main.coffee @@ -3,13 +3,17 @@ str = JSON.stringify Prompt = recl render: -> - [pro,cur,buf] = [@props.prompt, @props.cursor, @props.input + " "] - pre {}, pro, + [pro,cur,buf] = [@props.prompt[@props.appl] ? "X", @props.cursor, @props.input + " "] + pre {}, @props.appl+pro, span {style: background: 'lightgray'}, buf.slice(0,cur), "\u0332", buf.slice(cur) Matr = recl render: -> lines = @props.rows.map (lin)-> pre {}, lin, " " - lines.push Prompt {prompt:@props.prompt, input:@props.input, cursor:@props.cursor} + lines.push Prompt + appl: @props.appl, + prompt: @props.prompt, + input: @props.input, + cursor: @props.cursor div {}, lines $ -> @@ -42,28 +46,47 @@ $ -> matr = rend (Matr rows:[] - prompt:"" + appl:"" + prompt:{"": "# "} input:"" cursor:0 history:[] offset:0 ), term window.matr = matr update = (a) -> matr.setProps a - buffer = new Share "" + buffer = "": new Share "" window.buffer = buffer - sync = (ted)-> - update input: buffer.buf, cursor: buffer.transpose ted, matr.props.cursor - - peer = (ruh) -> - if ruh.map then return ruh.map peer + choose = (appl)-> + urb.appl = appl + buffer[appl] ?= new Share "" + updPrompt '', null + update {appl, cursor: 0, input: buffer[appl].buf} + print = (txt)-> update rows: [matr.props.rows..., txt] + sync = (ted,app)-> + app ?= matr.props.appl + if app isnt matr.props.appl then return + b = buffer[app] + update input: b.buf, cursor: b.transpose ted, matr.props.cursor + updPrompt = (app,pro) -> + prompt = $.extend {}, matr.props.prompt + if pro? then prompt[app] = pro else delete prompt[app] + update {prompt} + sysStatus = ()-> updPrompt '', ( + [app,pro] = [matr.props.appl, (k for k,v of matr.props.prompt when k isnt '')] + if app is '' then (pro.join ', ')+'# ' else null + ) + + peer = (ruh,app) -> + app ?= urb.appl + if ruh.map then return ruh.map (rul)-> peer rul, app mapr = matr.props switch Object.keys(ruh)[0] - when 'txt' then update rows: [mapr.rows..., ruh.txt] - when 'tan' then ruh.tan.split("\n").reverse().map (txt)-> peer {txt} + when 'txt' then print ruh.txt + when 'tan' then ruh.tan.split("\n").reverse().map print + when 'pro' then updPrompt app, ruh.pro.cad when 'hop' then update cursor: ruh.hop; bell() # XX buffer.transpose? - when 'pro' then update prompt: ruh.pro.cad when 'blk' then console.log "Stub #{str ruh}" - when 'det' then buffer.receive ruh.det; sync ruh.det.ted + when 'det' then buffer[app].receive ruh.det; sync ruh.det.ted, app when 'act' then switch ruh.act when 'clr' then update rows:[] when 'bel' then bell() @@ -77,11 +100,28 @@ $ -> # else throw "Unknown "+(JSON.stringify ruh) else v = Object.keys(ruh); console.log v, ruh[v[0]] - urb.bind "/sole", {wire:"/"}, (err,d)-> - if err then console.log err - else if d.data then peer d.data - - + join = (app)-> + if matr.props.prompt[app]? + return print '# already-joined: '+app + choose app + urb.bind "/sole", {wire:"/"}, (err,d)-> + if err then console.log err + else if d.data then peer d.data, app + cycle = ()-> + apps = Object.keys matr.props.prompt + if apps.length < 2 then return + choose apps[1 + apps.indexOf urb.appl] ? apps[0] + part = (appl)-> + mapr = matr.props + unless mapr.prompt[appl]? + return print '# not-joined: '+appl + urb.unsubscribe {appl, path: "/sole", wire: "/"} + if appl is mapr.appl then cycle() + updPrompt appl, null + sysStatus() + join urb.appl + window.join = join; window.part = part + pressed = [] deltim = null #later = (data)-> @@ -96,11 +136,19 @@ $ -> # ), 500 sendAction = (data)-> - urb.send {mark: 'sole-action', data}, (e,res)-> + if matr.props.appl then urb.send {mark: 'sole-action', data}, (e,res)-> if res.status isnt 200 then $('#err')[0].innerText = res.data.mess - + else if data is 'ret' + app = /^[a-z-]+$/.exec(buffer[""].buf.slice(1)) + unless app? and app[0]? + return bell() + else switch buffer[""].buf[0] + when '+' then doEdit set: ""; join app[0] + when '-' then doEdit set: ""; part app[0] + else bell() + doEdit = (ted)-> - det = buffer.transmit ted + det = buffer[matr.props.appl].transmit ted sync ted sendAction {det} @@ -141,13 +189,18 @@ $ -> when 'a','left' then update cursor: 0 when 'e','right' then update cursor: mapr.input.length when 'l' then update rows: [] - when 'entr' then peer act: 'bel' + when 'entr' then bell() when 'w' then eatKyev ['alt'], act:'baxp' when 'p' then eatKyev [], act: 'up' when 'n' then eatKyev [], act: 'down' when 'b' then eatKyev [], act: 'left' when 'f' then eatKyev [], act: 'right' when 'g' then bell() + when 'x' then cycle() + when 'v' + appl = if mapr.appl isnt '' then '' else urb.appl + update {appl, cursor:0, input:buffer[appl].buf} + sysStatus() when 't' if mapr.cursor is 0 or mapr.input.length < 2 return bell() diff --git a/base/pub/src/doc/chat/help.txt b/base/pub/src/doc/chat/help.txt deleted file mode 100644 index 594e51d62..000000000 --- a/base/pub/src/doc/chat/help.txt +++ /dev/null @@ -1,29 +0,0 @@ -prompts: -& broadcast message to station -~ship private message to ship - -type the prompt, then the message. ex: to send to ~hoclur-bicrel, type -"~hoclur-bicrel hello mars". prompt changes are persistent. - -actions: -@ send message in third person (irc /me) -# evaluate expression (ex: "#(add 2 2)") - -other: -= show ships in current station -\\ 5 show recent backlog (last n messages) -\\ ~m5 show recent backlog (using @dr syntax) -\\ ~2014.7.4 show recent backlog (using @da syntax) - -command-line parameters: -[%tower ~hoclur-bicrel] select haus server (default: ticketing ship) -[%s /mars] select a station (default: /) -%monitor display entrance and exit notices -%quiet do not display entrance and exit notices -%leet only display ship names -%noob display ship and textual names -%time display timestamps for messages - -only one of %monitor and %quiet may be specfied. default behavior is %quiet. -only one of %leet and %noob may be specified. default behavior is %leet. - diff --git a/base/pub/src/radio/hymn.hook b/base/pub/src/radio/hymn.hook deleted file mode 100644 index 8d0bae426..000000000 --- a/base/pub/src/radio/hymn.hook +++ /dev/null @@ -1,11 +0,0 @@ -;html - ;head - ;title: Radio Tests - ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"); - ;script(type "text/javascript", src "/gep/hart.js"); - == - ;body - ;script(type "text/javascript", src "/base/lib/urb.js"); - ;script(type "text/javascript", src "/base/pub/src/radio/main.js"); - == -== \ No newline at end of file diff --git a/base/pub/src/radio/main.js b/base/pub/src/radio/main.js deleted file mode 100644 index 88d82766d..000000000 --- a/base/pub/src/radio/main.js +++ /dev/null @@ -1,14 +0,0 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o div { vertical-align: middle; } +#members { + margin-bottom: 1rem; +} #members > div { display: block; } @@ -317,16 +322,22 @@ body { background-color: transparent; border: none; font-size: 0.8rem; - line-height: 2rem; + line-height: 1.2rem; + letter-spacing: 0.05rem; margin-top: 0.6rem; font-weight: 300; text-align: left; outline: none; cursor: pointer; + text-transform: uppercase; + border-bottom: 2px solid transparent; +} +.sour-ctrl input:focus { + border-bottom: 2px solid #fff; } .sour-ctrl input::-webkit-input-placeholder { - font-weight: 500; - font-size: 1.6rem; + font-weight: 400; + font-size: 1.2rem; margin-left: 0.6rem; color: #fff; } @@ -364,10 +375,6 @@ body { #messages .message.same .iden { display: none; } -#messages .message:hover .mess, -#messages .message:hover .attr { - color: #555; -} #messages .message:hover .type { color: #f04941; } @@ -422,12 +429,13 @@ a { content: "~"; } .type.private:before { - content: "╿"; - font-size: 0.8rem; + content: "•"; + font-size: 1rem; + line-height: 0.7rem; } .type.public:before { content: "▒"; - line-height: 0.8rem; + line-height: 1.1rem; } .mess, .iden, @@ -453,6 +461,7 @@ a { } .attr .iden { margin-left: 0.3rem; + line-hieght: 1.4rem; } .audi, .station .path { @@ -471,8 +480,9 @@ a { display: block; } .iden > div { - max-width: 10rem; + max-width: 11rem; display: inline-block; + font-size: 0.9rem; } .iden > div, .audi > div { @@ -509,12 +519,9 @@ a { min-height: 1.6rem; min-width: 1.3rem; outline: none; - background-color: #eee; padding: 0.3rem 0.1rem; margin-top: -0.3rem; -} -#writing:focus { - background-color: #fff; + border-bottom: 3px solid #555; } .writing { padding-top: 0.3rem; @@ -539,15 +546,17 @@ a { } #audi { display: inline-block; - background-color: #eee; margin-right: -0.2rem; + margin-bottom: 0.3rem; outline: none; overflow: hidden; - max-width: 9rem; + max-width: 12rem; + min-width: 1rem; padding: 0.3rem 0.1rem 0.1rem 0; + border-bottom: 2px solid #555; } .valid-false { - color: #ff2f2f; + color: #ff2f2f !important; } #scrolling { display: none; diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index dfe505843..bdff0719f 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -24,6 +24,8 @@ input .time font-weight 200 + letter-spacing .1rem + color #555 #length .audi @@ -35,7 +37,6 @@ input #length letter-spacing .1rem - font-weight 500 #writing-container:focus #length display inline @@ -97,7 +98,7 @@ body #messages-container vertical-align top - margin-top 4rem + margin-top 5rem // // components @@ -173,6 +174,7 @@ body border-left 16rem solid transparent #station-container #head .ship + font-size .9rem font-weight 400 #station-container:hover #where @@ -218,6 +220,9 @@ body #who > div vertical-align middle +#members + margin-bottom 1rem + #members > div display block @@ -258,16 +263,22 @@ body background-color transparent border none font-size .8rem - line-height 2rem + line-height 1.2rem + letter-spacing .05rem margin-top .6rem font-weight 300 text-align left outline none cursor pointer - + text-transform uppercase + border-bottom 2px solid transparent + +.sour-ctrl input:focus + border-bottom 2px solid #fff + .sour-ctrl input::-webkit-input-placeholder - font-weight 500 - font-size 1.6rem + font-weight 400 + font-size 1.2rem margin-left .6rem color white @@ -313,10 +324,6 @@ body #messages .message.same .iden display none - -#messages .message:hover .mess -#messages .message:hover .attr - color #555 #messages .message:hover .type color rgb(240,73,65) @@ -372,12 +379,13 @@ a content "~" .type.private:before - content "╿" - font-size .8rem + content "•" + font-size 1rem + line-height 1.1rem .type.public:before content "▒" - line-height .8rem + line-height 1.1rem .mess .iden @@ -391,6 +399,7 @@ a vertical-align top .attr > div + line-height 1.4rem max-width 16rem .attr @@ -403,6 +412,7 @@ a .attr .iden margin-left .3rem + line-hieght 1.4rem .audi .station .path @@ -421,8 +431,9 @@ a display block .iden > div - max-width 10rem + max-width 11rem display inline-block + font-size .9rem .iden > div .audi > div @@ -463,13 +474,9 @@ a min-height 1.6rem min-width 1.3rem outline none - background-color #eee padding .3rem .1rem margin-top -.3rem - - -#writing:focus - background-color #fff + border-bottom 3px solid #555 .writing padding-top .3rem @@ -494,15 +501,17 @@ a #audi display inline-block - background-color #eee margin-right -.2rem + margin-bottom .3rem outline none overflow hidden - max-width 9rem + max-width 12rem + min-width 1rem padding .3rem .1rem .1rem 0 + border-bottom 2px solid #555 .valid-false - color #ff2f2f + color #ff2f2f !important // // scrolling diff --git a/base/pub/talk/src/js/components/StationComponent.coffee b/base/pub/talk/src/js/components/StationComponent.coffee index ed9d7200a..e2487dc62 100644 --- a/base/pub/talk/src/js/components/StationComponent.coffee +++ b/base/pub/talk/src/js/components/StationComponent.coffee @@ -44,15 +44,30 @@ module.exports = recl return $("#station-container").toggleClass 'open' + validateSource: (s) -> + if @state.configs[@state.station].sources.indexOf(s) isnt -1 + return false + if s.length < 5 + return false + if s[0] isnt "~" + return false + if s.indexOf("/") is -1 + return false + return true + _keyUp: (e) -> + $('.sour-ctrl .join').removeClass 'valid-false' if e.keyCode is 13 - v = @$input.val() - if @state.configs[@state.station].sources.indexOf(v) is -1 + v = @$input.val().toLowerCase() + if v[0] isnt "~" then v = "~#{v}" + if @validateSource v _sources = _.clone @state.configs[@state.station].sources _sources.push v StationActions.setSources @state.station,_sources @$input.val('') @$input.blur() + else + $('.sour-ctrl .join').addClass 'valid-false' _remove: (e) -> e.stopPropagation() @@ -69,7 +84,7 @@ module.exports = recl if @state.station and @state.members members = _.map @state.members, (stations,member) -> audi = _.map stations,(presence,station) -> (div {className:"audi"}, station.slice(1)) - (div {}, [audi,(React.createElement Member, {ship:member})]) + (div {}, [(React.createElement Member, {ship:member}),audi]) else members = "" @@ -95,7 +110,7 @@ module.exports = recl ]) (div {id:"where"},[ (div {className:"slat"},"talk") - (div {className:"path"},window.util.mainStation(window.urb.user)) + (div {className:"path"},"") #window.util.mainStation(window.urb.user)) (div {className:"caret"},"") ]) ] diff --git a/base/pub/talk/src/js/components/WritingComponent.coffee b/base/pub/talk/src/js/components/WritingComponent.coffee index d83659a92..a38077e6f 100644 --- a/base/pub/talk/src/js/components/WritingComponent.coffee +++ b/base/pub/talk/src/js/components/WritingComponent.coffee @@ -43,9 +43,10 @@ module.exports = recl addCC: (audi) -> listening = @state.config[window.util.mainStation(window.urb.user)].sources cc = false - for s in listening - if audi.indexOf(s) is -1 + for s in audi + if listening.indexOf(s) is -1 cc = true + if listening.length is 0 then cc = true if cc is true audi.push window.util.mainStationPath(window.urb.user) audi @@ -123,8 +124,10 @@ module.exports = recl _validateAudi: -> v = $('#audi').text() v = v.trim() - if v.length is 0 + if v.length is 0 return true + if v.length < 5 # zod/a is shortest + return false v = v.split " " for a in v a = a.trim() @@ -136,10 +139,10 @@ module.exports = recl StationActions.setValidAudience valid if valid is true v = $('#audi').text() + if v.length is 0 then v = window.util.mainStationPath window.urb.user v = v.split " " for k,_v of v if _v[0] isnt "~" then v[k] = "~#{_v}" - v = window.util.expandAudi v StationActions.setAudience v v else diff --git a/base/pub/talk/src/js/main.js b/base/pub/talk/src/js/main.js index 9c44f6add..122f09a71 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -1,4 +1,4 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : @@ -3090,11 +3127,11 @@ moment.tz.load(require('./data/packed/latest.json')); a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1; - if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { overflow = DATE; } - m._pf.overflow = overflow; + getParsingFlags(m).overflow = overflow; } return m; @@ -3107,10 +3144,12 @@ moment.tz.load(require('./data/packed/latest.json')); } function deprecate(msg, fn) { - var firstTime = true; + var firstTime = true, + msgWithStack = msg + '\n' + (new Error()).stack; + return extend(function () { if (firstTime) { - warn(msg); + warn(msgWithStack); firstTime = false; } return fn.apply(this, arguments); @@ -3155,7 +3194,7 @@ moment.tz.load(require('./data/packed/latest.json')); match = from_string__isoRegex.exec(string); if (match) { - config._pf.iso = true; + getParsingFlags(config).iso = true; for (i = 0, l = isoDates.length; i < l; i++) { if (isoDates[i][1].exec(string)) { // match[5] should be 'T' or undefined @@ -3435,7 +3474,7 @@ moment.tz.load(require('./data/packed/latest.json')); yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); if (config._dayOfYear > daysInYear(yearToUse)) { - config._pf._overflowDayOfYear = true; + getParsingFlags(config)._overflowDayOfYear = true; } date = createUTCDate(yearToUse, 0, config._dayOfYear); @@ -3531,7 +3570,7 @@ moment.tz.load(require('./data/packed/latest.json')); } config._a = []; - config._pf.empty = true; + getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC` var string = '' + config._i, @@ -3547,7 +3586,7 @@ moment.tz.load(require('./data/packed/latest.json')); if (parsedInput) { skipped = string.substr(0, string.indexOf(parsedInput)); if (skipped.length > 0) { - config._pf.unusedInput.push(skipped); + getParsingFlags(config).unusedInput.push(skipped); } string = string.slice(string.indexOf(parsedInput) + parsedInput.length); totalParsedInputLength += parsedInput.length; @@ -3555,27 +3594,29 @@ moment.tz.load(require('./data/packed/latest.json')); // don't parse if it's not a known token if (formatTokenFunctions[token]) { if (parsedInput) { - config._pf.empty = false; + getParsingFlags(config).empty = false; } else { - config._pf.unusedTokens.push(token); + getParsingFlags(config).unusedTokens.push(token); } addTimeToArrayFromToken(token, parsedInput, config); } else if (config._strict && !parsedInput) { - config._pf.unusedTokens.push(token); + getParsingFlags(config).unusedTokens.push(token); } } // add remaining unparsed input length to the string - config._pf.charsLeftOver = stringLength - totalParsedInputLength; + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; if (string.length > 0) { - config._pf.unusedInput.push(string); + getParsingFlags(config).unusedInput.push(string); } // clear _12h flag if hour is <= 12 - if (config._pf.bigHour === true && config._a[HOUR] <= 12) { - config._pf.bigHour = undefined; + if (getParsingFlags(config).bigHour === true && + config._a[HOUR] <= 12 && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; } // handle meridiem config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); @@ -3619,7 +3660,7 @@ moment.tz.load(require('./data/packed/latest.json')); currentScore; if (config._f.length === 0) { - config._pf.invalidFormat = true; + getParsingFlags(config).invalidFormat = true; config._d = new Date(NaN); return; } @@ -3630,7 +3671,6 @@ moment.tz.load(require('./data/packed/latest.json')); if (config._useUTC != null) { tempConfig._useUTC = config._useUTC; } - tempConfig._pf = defaultParsingFlags(); tempConfig._f = config._f[i]; configFromStringAndFormat(tempConfig); @@ -3639,12 +3679,12 @@ moment.tz.load(require('./data/packed/latest.json')); } // if there is any input that was not parsed add a penalty for that format - currentScore += tempConfig._pf.charsLeftOver; + currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens - currentScore += tempConfig._pf.unusedTokens.length * 10; + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; - tempConfig._pf.score = currentScore; + getParsingFlags(tempConfig).score = currentScore; if (scoreToBeat == null || currentScore < scoreToBeat) { scoreToBeat = currentScore; @@ -3687,6 +3727,8 @@ moment.tz.load(require('./data/packed/latest.json')); configFromStringAndArray(config); } else if (format) { configFromStringAndFormat(config); + } else if (isDate(input)) { + config._d = input; } else { configFromInput(config); } @@ -3739,7 +3781,6 @@ moment.tz.load(require('./data/packed/latest.json')); c._i = input; c._f = format; c._strict = strict; - c._pf = defaultParsingFlags(); return createFromConfig(c); } @@ -4313,6 +4354,9 @@ moment.tz.load(require('./data/packed/latest.json')); } function from (time, withoutSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); } @@ -4320,6 +4364,17 @@ moment.tz.load(require('./data/packed/latest.json')); return this.from(local__createLocal(), withoutSuffix); } + function to (time, withoutSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + } + + function toNow (withoutSuffix) { + return this.to(local__createLocal(), withoutSuffix); + } + function locale (key) { var newLocaleData; @@ -4422,11 +4477,11 @@ moment.tz.load(require('./data/packed/latest.json')); } function parsingFlags () { - return extend({}, this._pf); + return extend({}, getParsingFlags(this)); } function invalidAt () { - return this._pf.overflow; + return getParsingFlags(this).overflow; } addFormatToken(0, ['gg', 2], 0, function () { @@ -4577,7 +4632,7 @@ moment.tz.load(require('./data/packed/latest.json')); if (weekday != null) { week.d = weekday; } else { - config._pf.invalidWeekday = input; + getParsingFlags(config).invalidWeekday = input; } }); @@ -4702,7 +4757,7 @@ moment.tz.load(require('./data/packed/latest.json')); }); addParseToken(['h', 'hh'], function (input, array, config) { array[HOUR] = toInt(input); - config._pf.bigHour = true; + getParsingFlags(config).bigHour = true; }); // LOCALES @@ -4819,6 +4874,8 @@ moment.tz.load(require('./data/packed/latest.json')); momentPrototype__proto.format = format; momentPrototype__proto.from = from; momentPrototype__proto.fromNow = fromNow; + momentPrototype__proto.to = to; + momentPrototype__proto.toNow = toNow; momentPrototype__proto.get = getSet; momentPrototype__proto.invalidAt = invalidAt; momentPrototype__proto.isAfter = isAfter; @@ -5007,7 +5064,7 @@ moment.tz.load(require('./data/packed/latest.json')); } // Lenient ordinal parsing accepts just a number in addition to // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source); + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); } var prototype__proto = Locale.prototype; @@ -5224,13 +5281,13 @@ moment.tz.load(require('./data/packed/latest.json')); // handle milliseconds separately because of floating point math errors (issue #1867) days = this._days + Math.round(yearsToDays(this._months / 12)); switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 24 * 60 + milliseconds / 6e4; - case 'second' : return days * 24 * 60 * 60 + milliseconds / 1000; + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + milliseconds; + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; default: throw new Error('Unknown unit ' + units); } } @@ -5431,7 +5488,7 @@ moment.tz.load(require('./data/packed/latest.json')); // Side effect imports - utils_hooks__hooks.version = '2.10.2'; + utils_hooks__hooks.version = '2.10.3'; setHookCallback(local__createLocal); @@ -5462,7 +5519,7 @@ moment.tz.load(require('./data/packed/latest.json')); return _moment; })); -},{}],"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/persistence/MessagePersistence.coffee":[function(require,module,exports){ +},{}],"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/persistence/MessagePersistence.coffee":[function(require,module,exports){ var MessageActions; MessageActions = require('../actions/MessageActions.coffee'); @@ -5541,7 +5598,7 @@ module.exports = { -},{"../actions/MessageActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/actions/MessageActions.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/persistence/StationPersistence.coffee":[function(require,module,exports){ +},{"../actions/MessageActions.coffee":"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/actions/MessageActions.coffee"}],"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/persistence/StationPersistence.coffee":[function(require,module,exports){ var StationActions; StationActions = require('../actions/StationActions.coffee'); @@ -5666,7 +5723,7 @@ module.exports = { -},{"../actions/StationActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/actions/StationActions.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/stores/MessageStore.coffee":[function(require,module,exports){ +},{"../actions/StationActions.coffee":"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/actions/StationActions.coffee"}],"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/stores/MessageStore.coffee":[function(require,module,exports){ var EventEmitter, MessageDispatcher, MessageStore, _fetching, _last, _listening, _messages, _station, _typing, moment; moment = require('moment-timezone'); @@ -5812,7 +5869,7 @@ module.exports = MessageStore; -},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js","moment-timezone":"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/node_modules/moment-timezone/index.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/stores/StationStore.coffee":[function(require,module,exports){ +},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js","moment-timezone":"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/node_modules/moment-timezone/index.js"}],"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/stores/StationStore.coffee":[function(require,module,exports){ var EventEmitter, StationDispatcher, StationStore, _audience, _config, _listening, _members, _station, _stations, _typing, _validAudience; EventEmitter = require('events').EventEmitter; @@ -6012,7 +6069,7 @@ module.exports = StationStore; -},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/util.coffee":[function(require,module,exports){ +},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js"}],"/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/util.coffee":[function(require,module,exports){ if (!window.util) { window.util = {}; } @@ -6429,4 +6486,4 @@ function isUndefined(arg) { return arg === void 0; } -},{}]},{},["/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/main.coffee"]); +},{}]},{},["/Users/galen/Documents/src/urbit/urb/zod/base/pub/talk/src/js/main.coffee"]); diff --git a/base/pub/talk/src/js/package.json b/base/pub/talk/src/js/package.json index dbb272bee..5d422f91a 100644 --- a/base/pub/talk/src/js/package.json +++ b/base/pub/talk/src/js/package.json @@ -1,11 +1,11 @@ { - "name": "urbit-radio", + "name": "urbit-talk", "version": "0.0.0", "repository": { "type":"git", "url":"https://github.com/urbit/urbit" }, - "description": "urbit radio frontend", + "description": "urbit talk frontend", "main": "main.js", "dependencies": { "coffeeify": "~0.7.0", diff --git a/base/tree/hymn.hook b/base/tree/hymn.hook index ba461d47e..b9f14be59 100644 --- a/base/tree/hymn.hook +++ b/base/tree/hymn.hook @@ -15,7 +15,7 @@ =+ ~(. util gas) ;html ;head - ;title: urbit Tree + ;title: Tree ;meta(name "viewport", content "width=device-width, initial-scale=1"); ;link(type "text/css", rel "stylesheet", href "/home/pub/tree/src/css/main.css"); ::;link(type "text/css", rel "stylesheet", href "http://localhost:8000/docs/pub/tree/src/css/main.css");