From b3e4633e1fd7326c6024f07355b6ddcb374a0c13 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Wed, 6 May 2015 18:01:36 -0700 Subject: [PATCH 01/94] new look --- base/pub/talk/fab/hymn.hook | 4 +- base/pub/talk/src/css/main.css | 258 ++++++++++++------ base/pub/talk/src/css/main.styl | 251 ++++++++++++----- base/pub/talk/src/css/mobile.styl | 4 +- .../src/js/components/MemberComponent.coffee | 2 +- .../js/components/MessagesComponent.coffee | 21 +- .../src/js/components/StationComponent.coffee | 13 +- .../src/js/components/WritingComponent.coffee | 4 +- base/pub/talk/src/js/main.js | 70 +++-- base/pub/talk/src/js/util.coffee | 2 +- 10 files changed, 436 insertions(+), 193 deletions(-) diff --git a/base/pub/talk/fab/hymn.hook b/base/pub/talk/fab/hymn.hook index d8c1cdebd..281aeddc2 100644 --- a/base/pub/talk/fab/hymn.hook +++ b/base/pub/talk/fab/hymn.hook @@ -25,11 +25,11 @@ ;script(type "text/javascript", src "/~~/~/at/base/lib/urb.js"); ;meta(name "viewport", content "width=device-width, height=device-height, ". "initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"); - ;link(type "text/css", rel "stylesheet", href "/base/pub/talk/src/css/main.css"); + ;link(type "text/css", rel "stylesheet", href "http://localhost:8000/base/pub/talk/src/css/main.css"); ;title: urbit talk == ;body ;div#c; - ;script(type "text/javascript", src "/base/pub/talk/src/js/main.js"); + ;script(type "text/javascript", src "http://localhost:8000/base/pub/talk/src/js/main.js"); == == diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 0919771ee..2c0aa8adc 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -82,46 +82,46 @@ font-weight: 700; font-style: normal; } -.iden, -.audi, -.time, -#length, -#where, -#who, -.station { - font-family: "scp"; -} -.join-ctrl input { - font-family: "bau"; -} -input { - -webkit-appearance: none; - border-radius: 0; -} html, body { height: 100%; font-family: "bau"; } +.type { + font-family: "scp"; +} +input { + font-size: 1rem; + -webkit-appearance: none; + border-radius: 0; + font-family: "bau"; +} #length, .time { - font-size: 0.6rem; letter-spacing: 0; } .time { font-weight: 200; } +#length, +.audi, +.time, +.station, +#audience .iden { + font-size: 0.8rem; + line-height: 1rem; +} #length { + letter-spacing: 0.1rem; font-weight: 500; } -input.join, -.iden, -.audi, -#station { - font-size: 0.7rem; +#writing-container:focus #length { + display: inline; } -.iden { - font-weight: 600; +.ship { + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.05rem; } html, body { @@ -145,11 +145,9 @@ body { } #station-container { position: fixed; - width: 58rem; - max-height: 2.7rem; - background-color: #fff; - border-bottom: 0.3rem solid #000; - padding-bottom: 1rem; + max-height: 4rem; + background-color: #ccc; + color: #fff; overflow: hidden; z-index: 10; -webkit-transition: max-height 0.2s; @@ -160,7 +158,7 @@ body { text-align: right; } #writing-container { - bottom: 4rem; + margin-top: 2rem; margin-bottom: 1rem; } #messages-container { @@ -192,46 +190,70 @@ body { -webkit-transform-origin: 0 50%; -webkit-transition: -webkit-transform 0.2s; } +#station-container #where .caret { + margin-top: 9px; + border-top: 9px solid transparent; + border-right: 9px solid transparent; + border-bottom: 9px solid transparent; + border-left: 9px solid #fff; +} #head { width: 100%; height: 4rem; + background-color: #555; } #station-container h1 { - font-weight: 500; - font-size: 0.6rem; + display: none; + color: #555; + font-weight: 400; + font-size: 1rem; letter-spacing: 0.06rem; display: inline-block; line-height: 1.2rem; } -#audience, +#station-container h1:after { + content: "—"; + margin-left: 0.6rem; +} +#station-container .audi, +#station-container .iden > div { + background-color: transparent; +} #who { - width: 34.6rem; + width: 16rem; } -#stations, -#where { - width: 17.3rem; +#stations { + width: 15rem; + padding: 0 0 1rem 1rem; +} +#station-container #head .ship { + font-weight: 400; } #stations, #audience, -#head > div { +#head > div, +#where > div { display: inline-block; - text-align: right; vertical-align: top; } +#where > div { + margin-right: 1.6rem; + text-transform: capitalize; + font-size: 2rem; +} +#where .slat { + font-weight: 500; +} #head > div { height: 2rem; - margin-top: 1.5rem; + line-height: 2rem; + margin-top: 1rem; } #where .caret { - border-left-color: #f00; - margin-left: 1rem; + border-left-color: #fff; } -#where > span, -#who > span { - vertical-align: top; -} -#who > span { - margin-left: 1rem; +#who > div { + vertical-align: middle; } #members > div { display: block; @@ -242,6 +264,7 @@ body { } #members .audi { margin-right: 0.3rem; + margin-top: 0; } #members .iden { min-width: 10rem; @@ -249,48 +272,89 @@ body { .station div { display: inline-block; } +.station .path { + text-transform: uppercase; +} .station .remove { opacity: 0; cursor: pointer; width: 0.6rem; - margin-right: 0.6rem; - font-weight: 600; + margin-left: 0.6rem; + line-height: 1rem; + font-size: 1.2rem; + font-weight: 500; color: #f00; + vertical-align: top; } .station:hover .remove { opacity: 1; } .sour-ctrl input { - font-family: "scp"; + color: #fff; + background-color: transparent; border: none; + font-size: 2rem; + line-height: 2rem; + margin-top: 0.6rem; font-weight: 400; - text-align: right; - line-height: 1rem; + text-align: left; outline: none; cursor: pointer; } .sour-ctrl input::-webkit-input-placeholder { - font-family: "scp"; - font-size: 1rem; - font-weight: 600; + font-weight: 500; margin-left: 0.6rem; - color: #000; + color: #fff; } .sour-ctrl input:focus::-webkit-input-placeholder { - color: #fff; + color: transparent; } .message { padding-top: 0.3rem; -} -#messages .message:last-child { margin-bottom: 1rem; } -#messages .message .time { +#messages .message .time, +#messages .message .audi { + opacity: 0; + margin-left: 2rem; +} +#messages .message:hover .time, +#messages .message:hover .audi { + opacity: 1; +} +#messages .message .attr { + position: absolute; + overflow: hidden; + max-height: 1.6rem; +} +#writing-container, +#messages .message.first { + border-top: 1px solid #ededed; +} +#writing-container { + padding-top: 0.3rem; +} +#messages .message.first { + margin-top: -1px; +} +#messages .message.same .audi { + margin-top: 0; +} +#messages .message.same .type { opacity: 0; } -#messages .message:last-child .time, -#messages .message:hover .time { - opacity: 1; +#messages .message.same .iden { + display: none; +} +#messages .message:hover .mess, +#messages .message:hover .attr { + color: #555; +} +#messages .message:hover .attr { + max-height: 6rem; + padding-bottom: 1rem; + z-index: 3; + -webkit-transition: max-height 0.2s, color 0.1s linear; } #messages .message .ship, #messages .message .audi > div { @@ -316,6 +380,30 @@ a { text-decoration: underline; color: inherit; } +.sig, +.type { + margin-left: 1rem; + float: left; + width: 1rem; +} +.type { + height: 2rem; +} +.sig { + font-size: 2rem; + margin-right: 0.3rem; +} +.sig:before { + content: "~"; +} +.type.private:before { + content: "╿"; + font-size: 0.8rem; +} +.type.public:before { + content: "▒"; + line-height: 0.8rem; +} .mess, .iden, #station .member div, @@ -331,29 +419,38 @@ a { max-width: 16rem; } .attr { - text-align: right; + text-align: left; display: inline-block; margin-right: 0.3rem; min-width: 16rem; + background-color: #fff; + -webkit-transition: max-height 0.2s, color 0.1s linear; } .attr .iden { margin-left: 0.3rem; } -.audi { +.audi, +.station .path { white-space: nowrap; overflow: hidden; + text-transform: uppercase; + letter-spacing: 0.05rem; +} +.audi { + margin-top: 1rem; background-color: #fff; } .audi > div { margin-right: 0.3rem; - max-width: 8rem; + max-width: 16rem; + display: block; } .iden > div { max-width: 10rem; + display: inline-block; } .iden > div, .audi > div { - display: inline-block; background-color: #fff; overflow: hidden; white-space: nowrap; @@ -369,25 +466,26 @@ a { -webkit-transition: max-width 0.2s; } .mess { - font-size: 0.9rem; letter-spacing: 0.03rem; word-wrap: break-word; - margin-left: 0.3rem; + margin-left: 16.3rem; } .mess, #writing, .iden > div:hover, .audi > div:hover { - max-width: 30rem; + max-width: 42rem; +} +.mess, +#writing { + font-size: 1.2rem; } #writing { - font-size: 0.9rem; min-height: 1.6rem; min-width: 1.3rem; outline: none; background-color: #eee; padding: 0.3rem 0.1rem; - margin-left: 0.2rem; margin-top: -0.3rem; } #writing:focus { @@ -401,9 +499,14 @@ a { margin-left: 1rem; margin-top: 1.2rem; } +.writing .attr { + line-height: 1.6rem; + vertical-align: top; + margin-left: 2rem; + min-width: 14rem; +} .writing .iden { display: block; - text-align: right; width: 100%; } .writing .iden .ship { @@ -412,12 +515,11 @@ a { #audi { display: inline-block; background-color: #eee; - padding: 0.3rem 0.1rem; - margin-top: -0.3rem; margin-right: -0.2rem; outline: none; overflow: hidden; max-width: 9rem; + padding: 0.3rem 0.1rem 0.1rem 0; } .valid-false { color: #ff2f2f; @@ -471,8 +573,8 @@ a { } .mess, #writing { - max-width: 40%; - line-height: 1.2rem; + max-width: 60%; + line-height: 1.6rem; } .attr, #stations, diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index 3bb5b79ed..326338306 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -4,46 +4,52 @@ @import 'fonts' -.iden -.audi -.time -#length -#where -#who -.station - font-family "scp" - -.join-ctrl input - font-family "bau" - -input - -webkit-appearance none - border-radius 0 - html body height 100% font-family "bau" +.type + font-family "scp" + +input + font-size 1rem + -webkit-appearance none + border-radius 0 + font-family "bau" + #length .time - font-size .6rem letter-spacing 0 .time font-weight 200 #length +.audi +.time +.station +#audience .iden + font-size .8rem + line-height 1rem + +#length + letter-spacing .1rem font-weight 500 -input.join -.iden -.audi -#station - font-size .7rem +#writing-container:focus #length + display inline -.iden - font-weight 600 +// input.join +// .iden +// .audi +// #station +// font-size .7rem + +.ship + font-weight 500 + text-transform uppercase + letter-spacing .05rem html body @@ -71,11 +77,9 @@ body #station-container position fixed - width 58rem - max-height 2.7rem - background-color white - border-bottom .3rem solid black - padding-bottom 1rem + max-height 4rem + background-color #ccc + color white overflow hidden z-index 10 -webkit-transition max-height .2s @@ -86,7 +90,7 @@ body text-align right #writing-container - bottom 4rem + margin-top 2rem margin-bottom 1rem #messages-container @@ -126,46 +130,71 @@ body -webkit-transform-origin 0 50% -webkit-transition -webkit-transform .2s +#station-container #where .caret + margin-top 9px + border-top 9px solid transparent + border-right 9px solid transparent + border-bottom 9px solid transparent + border-left 9px solid white + #head width 100% height 4rem + background-color #555 #station-container h1 - font-weight 500 - font-size .6rem + display none + color #555 + font-weight 400 + font-size 1rem letter-spacing .06rem display inline-block line-height 1.2rem -#audience -#who - width 34.6rem +#station-container h1:after + content "—" + margin-left .6rem + +#station-container .audi +#station-container .iden > div + background-color transparent + +#who + width 16rem + #stations -#where - width 17.3rem + width 15rem + padding 0 0 1rem 1rem + +#station-container #head .ship + font-weight 400 #stations #audience #head > div +#where > div display inline-block - text-align right vertical-align top +#where > div + margin-right 1.6rem + text-transform capitalize + font-size 2rem + +#where .slat + font-weight 500 + #head > div height 2rem - margin-top 1.5rem + line-height 2rem + margin-top 1rem #where .caret - border-left-color red - margin-left 1rem + border-left-color white -#where > span -#who > span - vertical-align top - -#who > span - margin-left 1rem +#who > div + vertical-align middle #members > div display block @@ -176,6 +205,7 @@ body #members .audi margin-right .3rem + margin-top 0 #members .iden min-width 10rem @@ -183,36 +213,43 @@ body .station div display inline-block +.station .path + text-transform uppercase + .station .remove opacity 0 cursor pointer width .6rem - margin-right .6rem - font-weight 600 + margin-left .6rem + line-height 1rem + font-size 1.2rem + font-weight 500 color #ff0000 + vertical-align top .station:hover .remove opacity 1 // add source .sour-ctrl input - font-family "scp" + color white + background-color transparent border none + font-size 2rem + line-height 2rem + margin-top .6rem font-weight 400 - text-align right - line-height 1rem + text-align left outline none cursor pointer .sour-ctrl input::-webkit-input-placeholder - font-family "scp" - font-size 1rem - font-weight 600 + font-weight 500 margin-left .6rem - color #000 + color white .sour-ctrl input:focus::-webkit-input-placeholder - color white + color transparent // // messages @@ -220,17 +257,51 @@ body .message padding-top .3rem - -#messages .message:last-child margin-bottom 1rem #messages .message .time +#messages .message .audi opacity 0 + margin-left 2rem -#messages .message:last-child .time #messages .message:hover .time +#messages .message:hover .audi opacity 1 +#messages .message .attr + position absolute + overflow hidden + max-height 1.6rem + +#writing-container +#messages .message.first + border-top 1px solid #ededed + +#writing-container + padding-top .3rem + +#messages .message.first + margin-top -1px + +#messages .message.same .audi + margin-top 0 + +#messages .message.same .type + opacity 0 + +#messages .message.same .iden + display none + +#messages .message:hover .mess +#messages .message:hover .attr + color #555 + +#messages .message:hover .attr + max-height 6rem + padding-bottom 1rem + z-index 3 + -webkit-transition max-height .2s, color .1s linear + #messages .message .ship #messages .message .audi > div cursor pointer @@ -255,6 +326,30 @@ a text-decoration underline color inherit +.sig +.type + margin-left 1rem + float left + width 1rem + +.type + height 2rem + +.sig + font-size 2rem + margin-right .3rem + +.sig:before + content "~" + +.type.private:before + content "╿" + font-size .8rem + +.type.public:before + content "▒" + line-height .8rem + .mess .iden #station .member div @@ -270,29 +365,38 @@ a max-width 16rem .attr - text-align right + text-align left display inline-block margin-right .3rem min-width 16rem + background-color white + -webkit-transition max-height .2s, color .1s linear .attr .iden margin-left .3rem .audi +.station .path white-space nowrap overflow hidden + text-transform uppercase + letter-spacing .05rem + +.audi + margin-top 1rem background-color #fff .audi > div margin-right .3rem - max-width 8rem + max-width 16rem + display block .iden > div max-width 10rem + display inline-block .iden > div .audi > div - display inline-block background-color white overflow hidden white-space nowrap @@ -308,29 +412,30 @@ a -webkit-transition max-width .2s .mess - font-size .9rem letter-spacing .03rem word-wrap break-word - margin-left .3rem + margin-left 16.3rem .mess #writing .iden > div:hover .audi > div:hover - max-width 30rem + max-width 42rem + +.mess +#writing + font-size 1.2rem // // writing // #writing - font-size .9rem min-height 1.6rem min-width 1.3rem outline none background-color #eee padding .3rem .1rem - margin-left .2rem margin-top -.3rem @@ -345,9 +450,14 @@ a margin-left 1rem margin-top 1.2rem +.writing .attr + line-height 1.6rem + vertical-align top + margin-left 2rem + min-width 14rem + .writing .iden display block - text-align right width 100% .writing .iden .ship @@ -356,12 +466,11 @@ a #audi display inline-block background-color #eee - padding .3rem .1rem - margin-top -.3rem margin-right -.2rem outline none overflow hidden max-width 9rem + padding .3rem .1rem .1rem 0 .valid-false color #ff2f2f diff --git a/base/pub/talk/src/css/mobile.styl b/base/pub/talk/src/css/mobile.styl index 71568128c..bb63d3239 100644 --- a/base/pub/talk/src/css/mobile.styl +++ b/base/pub/talk/src/css/mobile.styl @@ -33,8 +33,8 @@ .mess #writing - max-width 40% - line-height 1.2rem + max-width 60% + line-height 1.6rem .attr #stations diff --git a/base/pub/talk/src/js/components/MemberComponent.coffee b/base/pub/talk/src/js/components/MemberComponent.coffee index 69b162c8f..965320ca1 100644 --- a/base/pub/talk/src/js/components/MemberComponent.coffee +++ b/base/pub/talk/src/js/components/MemberComponent.coffee @@ -3,7 +3,7 @@ recl = React.createClass module.exports = recl render: -> - if @props.ship[0] isnt "~" then @props.ship = "~"+@props.ship + if @props.ship[0] is "~" then @props.ship = @props.ship.slice(1) k = "ship" k+= " #{@props.presence}" if @props.presence div {className:"iden"}, [ diff --git a/base/pub/talk/src/js/components/MessagesComponent.coffee b/base/pub/talk/src/js/components/MessagesComponent.coffee index a52898a68..7bec03a2b 100644 --- a/base/pub/talk/src/js/components/MessagesComponent.coffee +++ b/base/pub/talk/src/js/components/MessagesComponent.coffee @@ -35,12 +35,14 @@ Message = recl if @props.thought.statement.speech?.lin?.say is false then klass += " say" if @props.thought.statement.speech?.url then klass += " url" if @props.unseen is true then klass += " new" + if @props.sameAs is true then klass += " same" else klass += " first" name = if @props.name then @props.name else "" - audi = _.keys @props.thought.audience - audi = _.without audi,window.util.mainStationPath window.urb.user - audi = window.util.clipAudi audi - audi = audi.map (_audi) -> (div {}, _audi) + aude = _.keys @props.thought.audience + audi = window.util.clipAudi(aude).map (_audi) -> (div {}, _audi) + + type = ['private','public'] + type = type[Number(aude.indexOf(window.util.mainStationPath(window.urb.user)) is -1)] if @props.thought.statement.speech?.lin?.txt then txt = @props.thought.statement.speech.lin.txt if @props.thought.statement.speech?.url @@ -49,8 +51,9 @@ Message = recl div {className:"message#{klass}"}, [ (div {className:"attr"}, [ - div {onClick:@_handleAudi,className:"audi"}, audi + div {className:"type #{type}"}, "" (div {onClick:@_handlePm}, (React.createElement Member,{ship:@props.ship})) + div {onClick:@_handleAudi,className:"audi"}, audi div {className:"time"}, @convTime @props.thought.statement.date ]) div {className:"mess"}, txt @@ -126,6 +129,8 @@ module.exports = recl else if not window.util.isScrolling() window.util.setScroll() + else + console.log 'scrolling' if @focussed is false and @last isnt @lastSeen _messages = @sortedMessages @state.messages @@ -167,12 +172,14 @@ module.exports = recl , 1 lastIndex = if @lastSeen then _messages.indexOf(@lastSeen) else null + lastSaid = null messages = _messages.map (_message,k) => - if lastIndex and lastIndex is k - _message.unseen = true + if lastIndex and lastIndex is k then _message.unseen = true + _message.sameAs = lastSaid is _message.ship _message.station = @state.station _message._handlePm = @_handlePm _message._handleAudi = @_handleAudi + lastSaid = _message.ship React.createElement Message,_message div {id: "messages"}, messages diff --git a/base/pub/talk/src/js/components/StationComponent.coffee b/base/pub/talk/src/js/components/StationComponent.coffee index 807d9fedb..411db88e4 100644 --- a/base/pub/talk/src/js/components/StationComponent.coffee +++ b/base/pub/talk/src/js/components/StationComponent.coffee @@ -82,15 +82,22 @@ module.exports = recl _sources = _.clone @state.configs[@state.station].sources sources = _.map _sources,(source) => (div {className:"station"}, [ - (div {className:"remove",onClick:_remove,"data-station":source},"×"), (div {className:"path"}, source) + (div {className:"remove",onClick:_remove,"data-station":source},"×"), ]) else sources = "" head = (div {id:"head"}, - [(div {id:"where"},["/talk",(div {className:"caret"},"")]), - (div {id:"who"},[(div {className:"circle"},""),"~#{window.urb.user}"]) + [ (div {id:"who"},[ + (div {className:"sig"},"") + (div {className:"ship"},"#{window.urb.user}") + ]) + (div {id:"where"},[ + (div {className:"slat"},"talk") + (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 95f650122..8a74c4c45 100644 --- a/base/pub/talk/src/js/components/WritingComponent.coffee +++ b/base/pub/talk/src/js/components/WritingComponent.coffee @@ -50,7 +50,7 @@ module.exports = recl audi = @state.audi audi = window.util.expandAudi audi MessageActions.sendMessage @$writing.text().trim(),audi - @$length.text "0/69" + @$length.text "0/62" @$writing.text('') @set() @typing false @@ -173,6 +173,7 @@ module.exports = recl div {className:k}, [ (div {className:"attr"}, [ + (React.createElement Member, iden) (div { id:"audi" className:"audi valid-#{@state.valid}" @@ -180,7 +181,6 @@ module.exports = recl onKeyDown: @_audiKeyDown onBlur:@_setAudi }, audi.join(" ")) - (React.createElement Member, iden) (div {className:"time"}, @getTime()) ]) (div { diff --git a/base/pub/talk/src/js/main.js b/base/pub/talk/src/js/main.js index 9b0ee3ce0..7b7744db5 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -186,8 +186,8 @@ ref = [React.DOM.div, React.DOM.input, React.DOM.textarea], div = ref[0], input module.exports = recl({ render: function() { var k; - if (this.props.ship[0] !== "~") { - this.props.ship = "~" + this.props.ship; + if (this.props.ship[0] === "~") { + this.props.ship = this.props.ship.slice(1); } k = "ship"; if (this.props.presence) { @@ -256,7 +256,7 @@ Message = recl({ return this.props._handlePm(user); }, render: function() { - var audi, delivery, klass, name, ref1, ref2, ref3, ref4, ref5, ref6, txt, url; + var aude, audi, delivery, klass, name, ref1, ref2, ref3, ref4, ref5, ref6, txt, type, url; delivery = _.uniq(_.pluck(this.props.thought.audience, "delivery")); klass = delivery.indexOf("received") !== -1 ? " received" : " pending"; if (((ref1 = this.props.thought.statement.speech) != null ? (ref2 = ref1.lin) != null ? ref2.say : void 0 : void 0) === false) { @@ -268,13 +268,18 @@ Message = recl({ if (this.props.unseen === true) { klass += " new"; } + if (this.props.sameAs === true) { + klass += " same"; + } else { + klass += " first"; + } name = this.props.name ? this.props.name : ""; - audi = _.keys(this.props.thought.audience); - audi = _.without(audi, window.util.mainStationPath(window.urb.user)); - audi = window.util.clipAudi(audi); - audi = audi.map(function(_audi) { + aude = _.keys(this.props.thought.audience); + audi = window.util.clipAudi(aude).map(function(_audi) { return div({}, _audi); }); + type = ['private', 'public']; + type = type[Number(aude.indexOf(window.util.mainStationPath(window.urb.user)) === -1)]; if ((ref4 = this.props.thought.statement.speech) != null ? (ref5 = ref4.lin) != null ? ref5.txt : void 0 : void 0) { txt = this.props.thought.statement.speech.lin.txt; } @@ -292,13 +297,15 @@ Message = recl({ className: "attr" }, [ div({ - onClick: this._handleAudi, - className: "audi" - }, audi), div({ + className: "type " + type + }, ""), div({ onClick: this._handlePm }, React.createElement(Member, { ship: this.props.ship })), div({ + onClick: this._handleAudi, + className: "audi" + }, audi), div({ className: "time" }, this.convTime(this.props.thought.statement.date)) ]), div({ @@ -385,6 +392,8 @@ module.exports = recl({ } else { if (!window.util.isScrolling()) { window.util.setScroll(); + } else { + console.log('scrolling'); } } if (this.focussed === false && this.last !== this.lastSeen) { @@ -417,7 +426,7 @@ module.exports = recl({ return StationActions.setAudience(audi); }, render: function() { - var _messages, _station, lastIndex, messages, ref1, ref2, sources, station; + var _messages, _station, lastIndex, lastSaid, messages, ref1, ref2, sources, station; station = this.state.station; _station = "~" + window.urb.ship + "/" + station; sources = _.clone((ref1 = (ref2 = this.state.configs[this.state.station]) != null ? ref2.sources : void 0) != null ? ref1 : []); @@ -433,14 +442,17 @@ module.exports = recl({ }; })(this), 1); lastIndex = this.lastSeen ? _messages.indexOf(this.lastSeen) : null; + lastSaid = null; messages = _messages.map((function(_this) { return function(_message, k) { if (lastIndex && lastIndex === k) { _message.unseen = true; } + _message.sameAs = lastSaid === _message.ship; _message.station = _this.state.station; _message._handlePm = _this._handlePm; _message._handleAudi = _this._handleAudi; + lastSaid = _message.ship; return React.createElement(Message, _message); }; })(this)); @@ -563,12 +575,12 @@ module.exports = recl({ className: "station" }, [ div({ + className: "path" + }, source), div({ className: "remove", onClick: _remove, "data-station": source - }, "×"), div({ - className: "path" - }, source) + }, "×") ]); }; })(this)); @@ -579,17 +591,23 @@ module.exports = recl({ id: "head" }, [ div({ - id: "where" - }, [ - "/talk", div({ - className: "caret" - }, "") - ]), div({ id: "who" }, [ div({ - className: "circle" - }, ""), "~" + window.urb.user + className: "sig" + }, ""), div({ + className: "ship" + }, "" + window.urb.user) + ]), div({ + id: "where" + }, [ + div({ + className: "slat" + }, "talk"), div({ + className: "path" + }, window.util.mainStation(window.urb.user)), div({ + className: "caret" + }, "") ]) ]); parts.push(head); @@ -683,7 +701,7 @@ module.exports = recl({ } audi = window.util.expandAudi(audi); MessageActions.sendMessage(this.$writing.text().trim(), audi); - this.$length.text("0/69"); + this.$length.text("0/62"); this.$writing.text(''); this.set(); return this.typing(false); @@ -827,13 +845,13 @@ module.exports = recl({ div({ className: "attr" }, [ - div({ + React.createElement(Member, iden), div({ id: "audi", className: "audi valid-" + this.state.valid, contentEditable: true, onKeyDown: this._audiKeyDown, onBlur: this._setAudi - }, audi.join(" ")), React.createElement(Member, iden), div({ + }, audi.join(" ")), div({ className: "time" }, this.getTime()) ]), div({ @@ -6058,7 +6076,7 @@ _.merge(window.util, { if (!window.util.writingPosition) { window.util.getScroll(); } - return $(window).scrollTop() < window.util.writingPosition; + return $(window).scrollTop() + $('#writing').outerHeight() < window.util.writingPosition; }, checkScroll: function() { if (window.util.isScrolling()) { diff --git a/base/pub/talk/src/js/util.coffee b/base/pub/talk/src/js/util.coffee index a299c55d2..23929aa24 100644 --- a/base/pub/talk/src/js/util.coffee +++ b/base/pub/talk/src/js/util.coffee @@ -76,7 +76,7 @@ _.merge window.util, isScrolling: -> if not window.util.writingPosition window.util.getScroll() - return ($(window).scrollTop() < window.util.writingPosition) + return ($(window).scrollTop()+$('#writing').outerHeight() < window.util.writingPosition) checkScroll: -> if window.util.isScrolling() From 70cb0566d81f42245752798c6818e908a70aa9e3 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Wed, 6 May 2015 18:24:43 -0700 Subject: [PATCH 02/94] minor --- base/pub/talk/src/css/main.css | 8 ++++++-- base/pub/talk/src/css/main.styl | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 2c0aa8adc..7530e4114 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -311,7 +311,7 @@ body { } .message { padding-top: 0.3rem; - margin-bottom: 1rem; + margin-bottom: 0.6rem; } #messages .message .time, #messages .message .audi { @@ -350,6 +350,10 @@ body { #messages .message:hover .attr { color: #555; } +#messages .message.attr { + max-height: 2rem; + -webkit-transition: max-height 2s, color 0.1s linear; +} #messages .message:hover .attr { max-height: 6rem; padding-bottom: 1rem; @@ -421,10 +425,10 @@ a { .attr { text-align: left; display: inline-block; + max-height: 1.2rem; margin-right: 0.3rem; min-width: 16rem; background-color: #fff; - -webkit-transition: max-height 0.2s, color 0.1s linear; } .attr .iden { margin-left: 0.3rem; diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index 326338306..38a33c2c0 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -257,7 +257,7 @@ body .message padding-top .3rem - margin-bottom 1rem + margin-bottom .6rem #messages .message .time #messages .message .audi @@ -296,6 +296,10 @@ body #messages .message:hover .attr color #555 +#messages .message.attr + max-height 2rem + -webkit-transition max-height 2s, color .1s linear + #messages .message:hover .attr max-height 6rem padding-bottom 1rem @@ -367,10 +371,10 @@ a .attr text-align left display inline-block + max-height 1.2rem margin-right .3rem min-width 16rem background-color white - -webkit-transition max-height .2s, color .1s linear .attr .iden margin-left .3rem From 408b2f0cef83ef6791f7c325584591b8b1f4f672 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Thu, 7 May 2015 10:49:56 -0700 Subject: [PATCH 03/94] colors --- base/pub/talk/src/css/main.css | 49 +++++++++++++++++++++++---------- base/pub/talk/src/css/main.styl | 49 +++++++++++++++++++++++++-------- 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 7530e4114..65515ec14 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -141,15 +141,17 @@ body { left: 50%; width: 58rem; margin-left: -29rem; - margin-bottom: 12rem; + margin-bottom: 6rem; } #station-container { position: fixed; + width: 58rem; max-height: 4rem; background-color: #ccc; color: #fff; overflow: hidden; z-index: 10; + border-bottom: 1px solid #ddd; -webkit-transition: max-height 0.2s; } #station #station-container { @@ -196,11 +198,14 @@ body { border-right: 9px solid transparent; border-bottom: 9px solid transparent; border-left: 9px solid #fff; + -webkit-transition: border-left-color 0.2s; } #head { width: 100%; height: 4rem; - background-color: #555; + background-color: #fff; + color: #333; + border-bottom: 1px solid #ddd; } #station-container h1 { display: none; @@ -224,11 +229,24 @@ body { } #stations { width: 15rem; - padding: 0 0 1rem 1rem; + padding-bottom: 1rem; + border-left: 16rem solid transparent; } #station-container #head .ship { font-weight: 400; } +#station-container:hover #where { + color: #fff; + -webkit-transition: color 0.2s; +} +#station-container:hover #where { + color: #f04941; + -webkit-transition: color 0.2s; +} +#station-container:hover #where .caret { + border-left-color: #f04941; + -webkit-transition: border-left-color 0.2s; +} #stations, #audience, #head > div, @@ -237,13 +255,18 @@ body { vertical-align: top; } #where > div { - margin-right: 1.6rem; + margin-right: 1rem; text-transform: capitalize; - font-size: 2rem; + letter-spacing: 0.05rem; + font-size: 1.6rem; } #where .slat { font-weight: 500; } +#where .slat:after { + margin-left: 1rem; + content: "—"; +} #head > div { height: 2rem; line-height: 2rem; @@ -293,16 +316,17 @@ body { color: #fff; background-color: transparent; border: none; - font-size: 2rem; + font-size: 0.8rem; line-height: 2rem; margin-top: 0.6rem; - font-weight: 400; + font-weight: 300; text-align: left; outline: none; cursor: pointer; } .sour-ctrl input::-webkit-input-placeholder { font-weight: 500; + font-size: 1.6rem; margin-left: 0.6rem; color: #fff; } @@ -327,16 +351,10 @@ body { overflow: hidden; max-height: 1.6rem; } -#writing-container, -#messages .message.first { - border-top: 1px solid #ededed; -} #writing-container { padding-top: 0.3rem; } -#messages .message.first { - margin-top: -1px; -} +#messages .message.first, #messages .message.same .audi { margin-top: 0; } @@ -350,6 +368,9 @@ body { #messages .message:hover .attr { color: #555; } +#messages .message:hover .type { + color: #f04941; +} #messages .message.attr { max-height: 2rem; -webkit-transition: max-height 2s, color 0.1s linear; diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index 38a33c2c0..abe443b92 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -73,15 +73,17 @@ body left 50% width 58rem margin-left -29rem - margin-bottom 12rem + margin-bottom 6rem #station-container position fixed + width 58rem max-height 4rem background-color #ccc color white overflow hidden z-index 10 + border-bottom 1px solid #ddd -webkit-transition max-height .2s #station #station-container @@ -136,11 +138,14 @@ body border-right 9px solid transparent border-bottom 9px solid transparent border-left 9px solid white + -webkit-transition border-left-color .2s #head width 100% height 4rem - background-color #555 + background-color white + color #333 + border-bottom 1px solid #ddd #station-container h1 display none @@ -159,16 +164,28 @@ body #station-container .iden > div background-color transparent - #who width 16rem #stations width 15rem - padding 0 0 1rem 1rem + padding-bottom 1rem + border-left 16rem solid transparent #station-container #head .ship font-weight 400 + +#station-container:hover #where + color white + -webkit-transition color .2s + +#station-container:hover #where + color rgb(240,73,65) + -webkit-transition color .2s + +#station-container:hover #where .caret + border-left-color rgb(240,73,65) + -webkit-transition border-left-color .2s #stations #audience @@ -178,13 +195,18 @@ body vertical-align top #where > div - margin-right 1.6rem + margin-right 1rem text-transform capitalize - font-size 2rem + letter-spacing .05rem + font-size 1.6rem #where .slat font-weight 500 +#where .slat:after + margin-left 1rem + content "—" + #head > div height 2rem line-height 2rem @@ -235,16 +257,17 @@ body color white background-color transparent border none - font-size 2rem + font-size .8rem line-height 2rem margin-top .6rem - font-weight 400 + font-weight 300 text-align left outline none cursor pointer .sour-ctrl input::-webkit-input-placeholder font-weight 500 + font-size 1.6rem margin-left .6rem color white @@ -273,15 +296,14 @@ body overflow hidden max-height 1.6rem -#writing-container -#messages .message.first - border-top 1px solid #ededed +// #writing-container +// #messages .message.first +// border-top 1px solid #ededed #writing-container padding-top .3rem #messages .message.first - margin-top -1px #messages .message.same .audi margin-top 0 @@ -296,6 +318,9 @@ body #messages .message:hover .attr color #555 +#messages .message:hover .type + color rgb(240,73,65) + #messages .message.attr max-height 2rem -webkit-transition max-height 2s, color .1s linear From b4f0dc6143bd15b02f548bfb7ecd043d0db4c201 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Thu, 7 May 2015 11:47:25 -0700 Subject: [PATCH 04/94] audience --- base/pub/talk/src/css/main.css | 2 +- base/pub/talk/src/css/main.styl | 2 +- .../talk/src/js/actions/MessageActions.coffee | 2 +- .../js/components/MessagesComponent.coffee | 17 +++--- .../src/js/components/StationComponent.coffee | 4 +- .../src/js/components/WritingComponent.coffee | 23 ++++++-- base/pub/talk/src/js/main.js | 59 ++++++++++++++----- 7 files changed, 79 insertions(+), 30 deletions(-) diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 65515ec14..5594e515b 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -209,7 +209,7 @@ body { } #station-container h1 { display: none; - color: #555; + color: #fff; font-weight: 400; font-size: 1rem; letter-spacing: 0.06rem; diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index abe443b92..dfe505843 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -149,7 +149,7 @@ body #station-container h1 display none - color #555 + color white font-weight 400 font-size 1rem letter-spacing .06rem diff --git a/base/pub/talk/src/js/actions/MessageActions.coffee b/base/pub/talk/src/js/actions/MessageActions.coffee index 78c66564a..14d6e303b 100644 --- a/base/pub/talk/src/js/actions/MessageActions.coffee +++ b/base/pub/talk/src/js/actions/MessageActions.coffee @@ -30,7 +30,7 @@ module.exports = sendMessage: (message,audience) -> serial = window.util.uuid32() - audience.push window.util.mainStationPath window.urb.user + # audience.push window.util.mainStationPath window.urb.user audience = _.uniq audience _audi = {} diff --git a/base/pub/talk/src/js/components/MessagesComponent.coffee b/base/pub/talk/src/js/components/MessagesComponent.coffee index 7bec03a2b..2d67683dc 100644 --- a/base/pub/talk/src/js/components/MessagesComponent.coffee +++ b/base/pub/talk/src/js/components/MessagesComponent.coffee @@ -20,12 +20,13 @@ Message = recl "~#{h}.#{m}.#{s}" _handleAudi: (e) -> - audi = _.map $(e.target).closest('.audi').find('div'), (div) -> return $(div).text() + audi = _.map $(e.target).closest('.audi').find('div'), (div) -> return "~"+$(div).text() @props._handleAudi audi _handlePm: (e) -> return if not @props._handlePm - user = $(e.target).closest('.iden').text().slice(1) + user = $(e.target).closest('.iden').text() + return if user.toLowerCase() is 'system' @props._handlePm user render: -> @@ -39,7 +40,7 @@ Message = recl name = if @props.name then @props.name else "" aude = _.keys @props.thought.audience - audi = window.util.clipAudi(aude).map (_audi) -> (div {}, _audi) + audi = window.util.clipAudi(aude).map (_audi) -> (div {}, _audi.slice(1)) type = ['private','public'] type = type[Number(aude.indexOf(window.util.mainStationPath(window.urb.user)) is -1)] @@ -48,6 +49,9 @@ Message = recl if @props.thought.statement.speech?.url url = @props.thought.statement.speech.url.url txt = (a {href:url,target:"_blank"}, url) + if @props.thought.statement.speech?.app + txt = @props.thought.statement.speech.app.txt + klass += " say" div {className:"message#{klass}"}, [ (div {className:"attr"}, [ @@ -148,10 +152,7 @@ module.exports = recl _onChangeStore: -> @setState @stateFromStore() _handlePm: (user) -> - audi = [ - window.util.mainStationPath(user) - window.util.mainStationPath(window.urb.user) - ] + audi = [window.util.mainStationPath(user)] if user is window.urb.user then audi.pop() StationActions.setAudience audi @@ -176,6 +177,8 @@ module.exports = recl messages = _messages.map (_message,k) => if lastIndex and lastIndex is k then _message.unseen = true + if _message.thought.statement.speech?.app + _message.ship = "system" _message.sameAs = lastSaid is _message.ship _message.station = @state.station _message._handlePm = @_handlePm diff --git a/base/pub/talk/src/js/components/StationComponent.coffee b/base/pub/talk/src/js/components/StationComponent.coffee index 411db88e4..ed9d7200a 100644 --- a/base/pub/talk/src/js/components/StationComponent.coffee +++ b/base/pub/talk/src/js/components/StationComponent.coffee @@ -68,7 +68,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) + audi = _.map stations,(presence,station) -> (div {className:"audi"}, station.slice(1)) (div {}, [audi,(React.createElement Member, {ship:member})]) else members = "" @@ -82,7 +82,7 @@ module.exports = recl _sources = _.clone @state.configs[@state.station].sources sources = _.map _sources,(source) => (div {className:"station"}, [ - (div {className:"path"}, source) + (div {className:"path"}, source.slice(1)) (div {className:"remove",onClick:_remove,"data-station":source},"×"), ]) else diff --git a/base/pub/talk/src/js/components/WritingComponent.coffee b/base/pub/talk/src/js/components/WritingComponent.coffee index 8a74c4c45..9b20a32db 100644 --- a/base/pub/talk/src/js/components/WritingComponent.coffee +++ b/base/pub/talk/src/js/components/WritingComponent.coffee @@ -18,6 +18,7 @@ module.exports = recl s = audi:StationStore.getAudience() ludi:MessageStore.getLastAudience() + config:StationStore.getConfigs() members:StationStore.getMembers() typing:StationStore.getTyping() valid:StationStore.getValidAudience() @@ -39,6 +40,16 @@ module.exports = recl MessageActions.setTyping true @typing true + addCC: (audi) -> + listening = @state.config[window.util.mainStation(window.urb.user)].sources + cc = false + for s in listening + if audi.indexOf(s) is -1 + cc = true + if cc is true + audi.push window.util.mainStationPath(window.urb.user) + audi + sendMessage: -> if @_validateAudi() is false $('#audi').focus() @@ -47,8 +58,8 @@ module.exports = recl audi = @state.ludi @_setAudi() else - audi = @state.audi - audi = window.util.expandAudi audi + audi = @state.audi + audi = @addCC audi MessageActions.sendMessage @$writing.text().trim(),audi @$length.text "0/62" @$writing.text('') @@ -91,8 +102,8 @@ module.exports = recl _setFocus: -> @$writing.focus() _validateAudiPart: (a) -> - if a[0] isnt "~" - return false + # if a[0] isnt "~" + # return false if a.indexOf("/") isnt -1 _a = a.split("/") if _a[1].length is 0 @@ -122,6 +133,8 @@ module.exports = recl v = $('#audi').text() v = v.split " " v = window.util.expandAudi v + for k,_v of v + v[k] = "~#{_v}" StationActions.setAudience v getTime: -> @@ -168,6 +181,8 @@ module.exports = recl audi = if @state.audi.length is 0 then @state.ludi else @state.audi audi = window.util.clipAudi audi + for k,v of audi + audi[k] = v.slice(1) k = "writing" diff --git a/base/pub/talk/src/js/main.js b/base/pub/talk/src/js/main.js index 7b7744db5..5f275031f 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -39,7 +39,6 @@ module.exports = { sendMessage: function(message, audience) { var _audi, _message, k, serial, v; serial = window.util.uuid32(); - audience.push(window.util.mainStationPath(window.urb.user)); audience = _.uniq(audience); _audi = {}; for (k in audience) { @@ -243,7 +242,7 @@ Message = recl({ _handleAudi: function(e) { var audi; audi = _.map($(e.target).closest('.audi').find('div'), function(div) { - return $(div).text(); + return "~" + $(div).text(); }); return this.props._handleAudi(audi); }, @@ -252,11 +251,14 @@ Message = recl({ if (!this.props._handlePm) { return; } - user = $(e.target).closest('.iden').text().slice(1); + user = $(e.target).closest('.iden').text(); + if (user.toLowerCase() === 'system') { + return; + } return this.props._handlePm(user); }, render: function() { - var aude, audi, delivery, klass, name, ref1, ref2, ref3, ref4, ref5, ref6, txt, type, url; + var aude, audi, delivery, klass, name, ref1, ref2, ref3, ref4, ref5, ref6, ref7, txt, type, url; delivery = _.uniq(_.pluck(this.props.thought.audience, "delivery")); klass = delivery.indexOf("received") !== -1 ? " received" : " pending"; if (((ref1 = this.props.thought.statement.speech) != null ? (ref2 = ref1.lin) != null ? ref2.say : void 0 : void 0) === false) { @@ -276,7 +278,7 @@ Message = recl({ name = this.props.name ? this.props.name : ""; aude = _.keys(this.props.thought.audience); audi = window.util.clipAudi(aude).map(function(_audi) { - return div({}, _audi); + return div({}, _audi.slice(1)); }); type = ['private', 'public']; type = type[Number(aude.indexOf(window.util.mainStationPath(window.urb.user)) === -1)]; @@ -290,6 +292,10 @@ Message = recl({ target: "_blank" }, url); } + if ((ref7 = this.props.thought.statement.speech) != null ? ref7.app : void 0) { + txt = this.props.thought.statement.speech.app.txt; + klass += " say"; + } return div({ className: "message" + klass }, [ @@ -416,7 +422,7 @@ module.exports = recl({ }, _handlePm: function(user) { var audi; - audi = [window.util.mainStationPath(user), window.util.mainStationPath(window.urb.user)]; + audi = [window.util.mainStationPath(user)]; if (user === window.urb.user) { audi.pop(); } @@ -445,9 +451,13 @@ module.exports = recl({ lastSaid = null; messages = _messages.map((function(_this) { return function(_message, k) { + var ref3; if (lastIndex && lastIndex === k) { _message.unseen = true; } + if ((ref3 = _message.thought.statement.speech) != null ? ref3.app : void 0) { + _message.ship = "system"; + } _message.sameAs = lastSaid === _message.ship; _message.station = _this.state.station; _message._handlePm = _this._handlePm; @@ -544,7 +554,7 @@ module.exports = recl({ audi = _.map(stations, function(presence, station) { return div({ className: "audi" - }, station); + }, station.slice(1)); }); return div({}, [ audi, React.createElement(Member, { @@ -576,7 +586,7 @@ module.exports = recl({ }, [ div({ className: "path" - }, source), div({ + }, source.slice(1)), div({ className: "remove", onClick: _remove, "data-station": source @@ -663,6 +673,7 @@ module.exports = recl({ s = { audi: StationStore.getAudience(), ludi: MessageStore.getLastAudience(), + config: StationStore.getConfigs(), members: StationStore.getMembers(), typing: StationStore.getTyping(), valid: StationStore.getValidAudience() @@ -687,6 +698,21 @@ module.exports = recl({ MessageActions.setTyping(true); return this.typing(true); }, + addCC: function(audi) { + var cc, i, len, listening, s; + listening = this.state.config[window.util.mainStation(window.urb.user)].sources; + cc = false; + for (i = 0, len = listening.length; i < len; i++) { + s = listening[i]; + if (audi.indexOf(s) === -1) { + cc = true; + } + } + if (cc === true) { + audi.push(window.util.mainStationPath(window.urb.user)); + } + return audi; + }, sendMessage: function() { var audi; if (this._validateAudi() === false) { @@ -699,7 +725,7 @@ module.exports = recl({ } else { audi = this.state.audi; } - audi = window.util.expandAudi(audi); + audi = this.addCC(audi); MessageActions.sendMessage(this.$writing.text().trim(), audi); this.$length.text("0/62"); this.$writing.text(''); @@ -744,9 +770,6 @@ module.exports = recl({ }, _validateAudiPart: function(a) { var _a, ship; - if (a[0] !== "~") { - return false; - } if (a.indexOf("/") !== -1) { _a = a.split("/"); if (_a[1].length === 0) { @@ -777,13 +800,17 @@ module.exports = recl({ return valid; }, _setAudi: function() { - var v, valid; + var _v, k, v, valid; valid = this._validateAudi(); StationActions.setValidAudience(valid); if (valid === true) { v = $('#audi').text(); v = v.split(" "); v = window.util.expandAudi(v); + for (k in v) { + _v = v[k]; + v[k] = "~" + _v; + } return StationActions.setAudience(v); } }, @@ -831,13 +858,17 @@ module.exports = recl({ return this.setState(this.stateFromStore()); }, render: function() { - var audi, iden, k, name, ship, user; + var audi, iden, k, name, ship, user, v; user = "~" + window.urb.user; iden = StationStore.getMember(user); ship = iden ? iden.ship : user; name = iden ? iden.name : ""; audi = this.state.audi.length === 0 ? this.state.ludi : this.state.audi; audi = window.util.clipAudi(audi); + for (k in audi) { + v = audi[k]; + audi[k] = v.slice(1); + } k = "writing"; return div({ className: k From d7a2dd99053f5a8efbf700443858b8919447951f Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Thu, 7 May 2015 12:16:48 -0700 Subject: [PATCH 05/94] off by one --- base/pub/talk/src/js/components/WritingComponent.coffee | 2 +- base/pub/talk/src/js/main.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/base/pub/talk/src/js/components/WritingComponent.coffee b/base/pub/talk/src/js/components/WritingComponent.coffee index 9b20a32db..2b1051bbe 100644 --- a/base/pub/talk/src/js/components/WritingComponent.coffee +++ b/base/pub/talk/src/js/components/WritingComponent.coffee @@ -134,7 +134,7 @@ module.exports = recl v = v.split " " v = window.util.expandAudi v for k,_v of v - v[k] = "~#{_v}" + if _v[0] isnt "~" then v[k] = "~#{_v}" StationActions.setAudience v getTime: -> diff --git a/base/pub/talk/src/js/main.js b/base/pub/talk/src/js/main.js index 5f275031f..2ce25e26e 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -809,7 +809,9 @@ module.exports = recl({ v = window.util.expandAudi(v); for (k in v) { _v = v[k]; - v[k] = "~" + _v; + if (_v[0] !== "~") { + v[k] = "~" + _v; + } } return StationActions.setAudience(v); } From ceb79e045f0e0320e01fbf0125aee598cfecf5da Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 8 May 2015 10:53:28 -0700 Subject: [PATCH 06/94] Prepare the doll. --- base/arvo/doll.hoon | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/base/arvo/doll.hoon b/base/arvo/doll.hoon index bfde6dbcb..53ff45f48 100644 --- a/base/arvo/doll.hoon +++ b/base/arvo/doll.hoon @@ -274,16 +274,13 @@ (done %blit [bit ~]) :: ++ init :: initialize - ~& [%dill-init our] + ~& [%doll-init our] =+ myt=(flop (need tem)) =. tem ~ -<<<<<<< HEAD:urb/zod/base/arvo/dill.hoon =. moz :_(moz [hen %pass / %c %font our %home our %base]) - =. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~]) -======= - =. moz :_(moz [hen %pass ~ %b %conf [[our ram] %load our %main]]) + :: =. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~]) + =. moz :_(moz [hen %pass ~ %b %conf [[our ram] %load our %base]]) =. moz :_(moz [hen %pass ~ %b %deal [our our] ram %peer ~]) ->>>>>>> newgall^:urb/zod/arvo/dill.hoon |- ^+ +> ?~ myt +> $(myt t.myt, +> (send i.myt)) From b0eac3721a359c251afbe69e369dcf2afe11b79b Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 8 May 2015 10:56:30 -0700 Subject: [PATCH 07/94] Latest stuff hand-merged from %behn. --- base/ape/acto/core.hook | 189 ++++++++++++++++++-------------------- base/ape/octo/core.hook | 195 ++++++++++++++++++++++++++++++++++++++++ base/ape/sole/core.hook | 7 +- base/arvo/behn.hoon | 16 ++-- 4 files changed, 291 insertions(+), 116 deletions(-) create mode 100644 base/ape/octo/core.hook diff --git a/base/ape/acto/core.hook b/base/ape/acto/core.hook index 34fe28395..34f1fbc30 100644 --- a/base/ape/acto/core.hook +++ b/base/ape/acto/core.hook @@ -1,11 +1,11 @@ -:: :: :: -:::: /hook/core/acto/ape :: :: - :: :: :: +:: ::::::::::::::: build +:::: /hook/core/acto/ape :: :: :: + :: ::::::::::::::: /- *sole :: structures /+ sole :: libraries -:: :: -:::: :: - !: :: +:: ::::::::::::::: logic +:::: :: :: :: + !: ::::::::::::::: => |% :: board logic ++ board ,@ :: one-player bitfield ++ point ,[x=@ y=@] :: coordinate @@ -19,104 +19,87 @@ -- :: -- :: => |% :: game logic - ++ game ,[tun=? box=board boo=board] :: game state + ++ game ,[%0 who=? box=board boo=board] :: game state ++ go :: game core |_ game :: - ++ pro ": {?:(tun "X" "O")} to move (x/y): " :: prompt - ++ say |= point :: point value - ?: (~(get bo box) +<) 'X' - ?: (~(get bo boo) +<) 'O' '.' - :: - ++ mov :: move at - |= point - ^- [bean game] - ?: |((~(get bo box) +<) (~(get bo boo) +<)) - [| +>+<] - :- & ?: tun - +>+<(tun |, box (~(set bo box) +<)) - +>+<(tun &, boo (~(set bo boo) +<)) - :: - ++ res ^- (unit tape) :: result - ?: ~(win bo box) `"X wins!" - ?: ~(win bo boo) `"O wins!" - ?: =(511 (con boo box)) `"X and O tied." ~ - :: - ++ ray :: render row - |= y=@ ^- tape - :~ (add y '1') - ' ' (say y 0) - ' ' (say y 1) - ' ' (say y 2) - == - ++ red ~["+ 1 2 3" (ray 0) (ray 1) (ray 2)] :: render board - -- - -- -=> |% :: arvo tools - ++ card ,[%diff %sole-effect sole-effect] :: - ++ move (pair bone card) - ++ room (pair sole-share game) - -- -|_ $: hid=hide :: system state - hoc=(map bone room) - == -++ yo - |_ [[ost=bone moz=(list move)] rom=room] - ++ abet :: resolve - ^- (quip move +>) - [(flop moz) +>(hoc (~(put by hoc) ost rom))] - :: - ++ emit :: produce move - |= fec=sole-effect - ^+ +> - +>(moz [[ost %diff %sole-effect fec] moz]) - :: - ++ emil :: emit multiple - |= fex=(list sole-effect) - ?~(fex +> $(fex t.fex, +> (emit i.fex))) - :: - ++ show :: update ui - %+ emil [%pro & %toe ~(pro go q.rom)] - (turn ~(red go q.rom) |=(a=tape [%txt a])) - :: - ++ wipe :: clear input line - =^ cal p.rom (~(transmit cs p.rom) [%set ~]) - (emit %det cal) - :: - ++ numb (cook |=(a=@ (sub a '1')) (shim '1' '3')) :: row/column - ++ come ;~(plug numb ;~(pfix fas numb)) :: command + ++ at |_ point :: point core + ++ g +>+< :: game + ++ k !|(x o) :: ok move + ++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move + ++ o (~(get bo boo) +<) :: old at o + ++ p .(boo (~(set bo boo) +<)) :: play at o + ++ t .(who !who) :: take turn + ++ v ?:(x 'X' ?:(o 'O' '.')) :: view + ++ x (~(get bo box) +<) :: old at x + ++ y .(box (~(set bo box) +<)) :: play at x + -- :: + ++ pro ": {?:(who "X" "O")}'s move (row/col): " :: prompt + ++ res ?: ~(win bo box) `"X wins!" :: result + ?: ~(win bo boo) `"O wins!" :: + ?: =(511 (con boo box)) `"tie :-(" ~ :: + ++ row |= y=@ :~ (add y '1') :: print row + ' ' ~(v at y 0) :: + ' ' ~(v at y 1) :: + ' ' ~(v at y 2) :: + == :: + ++ tab ^- (list tape) :: print game + ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: + -- :: + -- :: +:: ::::::::::::::: agent +:::: :: :: :: + :: ::::::::::::::: +=> |% :: arvo structures + ++ card ,[%diff %sole-effect sole-effect] :: action + ++ move (pair bone card) :: operation + ++ face (pair (list ,@c) (map bone sole-share)) :: interface + ++ axle ,[%0 eye=face gay=game] :: agent state + -- :: +|_ [hid=hide moz=(list move) axle] :: agent core +++ et :: client core + |_ [from say=sole-share] :: + ++ abet +>(q.eye (~(put by q.eye) ost say)) :: continue + ++ amok +>(q.eye (~(del by q.eye) ost)) :: discontinue + ++ numb (cook |=(a=@ (sub a '1')) (shim '1' '3')) :: parse row/column + ++ come ;~(plug numb ;~(pfix fas numb)) :: parse command ++ good |=(a=(list ,@c) -:(rose (tufa a) come)) :: validate - ++ work :: - |= act=sole-action - ^+ +> - ?- -.act - %det - =^ cul p.rom (~(remit cs p.rom) +.act good) - ?~(cul +>.$ (emit ~[%mor bel/~ det/u.cul])) - :: - %ret - =+ dur=(rust (tufa buf.p.rom) come) - ?~ dur (emit %bel ~) - =^ dud q.rom (~(mov go q.rom) u.dur) - ?. dud (emit %bel ~) - =+ rus=~(res go q.rom) - =< show - ?~ rus wipe - wipe:(emit(q.rom *game) %txt u.rus) - == - -- -++ peer-sole :: console-subscribe - |= [from pax=path] - ^- (quip move +>) - ?> =(src our.hid) - abet:~(show yo [ost ~] *room) -:: -++ poke-sole-action :: console command - |= [from act=sole-action] - ^- (quip move +>) - ?> =(src our.hid) - abet:(~(work yo [ost ~] (~(got by hoc) ost)) act) -:: -++ pull :: stop subscription - |= then - [~ +>(hoc (~(del by hoc) ost))] + ++ sole ~(. cs say) :: console core + ++ emit |= fec=sole-effect ^+ +> :: send effect + +>(moz [[ost %diff %sole-effect fec] moz]) :: + ++ emil |= fex=(list sole-effect) :: send effects + ?~(fex +> $(fex t.fex, +> (emit i.fex))) :: + ++ line =^ cal say (transmit:sole set/p.eye) :: update input line + (emit %det cal) :: + ++ show (emil (turn ~(tab go gay) |=(tape txt/+<))) :: update board + ++ view (emit:line:show %pro %& acto/~(pro go gay)) :: full view update + ++ more |= [ful=? mus=(unit tape)] =< abet :: all updates + =. +> ?:(ful view line) :: + ?~(mus +> (emit %txt u.mus)) :: + ++ delt |= cal=sole-change :: input line change + =^ cul say (remit:sole cal good) :: + ?~ cul (park:abet(p.eye buf.say) | ~) :: + abet:(emit ~[%mor det/u.cul bel/~]) :: + ++ make =+ dur=(rust (tufa p.eye) come) :: + ?~ dur abet:(emit bel/~) :: + =^ dud gay ~(m ~(at go gay) u.dur) :: + ?. dud abet:(emit bel/~) :: + =+ mus=~(res go gay) %. [& mus] :: + park:abet(p.eye ~, gay ?^(mus *game gay)) :: + ++ work |= act=sole-action :: console input + ?:(?=(%det -.act) (delt +.act) make) :: + -- :: +++ abet [(flop moz) .(moz ~)] :: +++ pals %+ turn (~(tap by sup.hid)) :: list clients + |= [a=bone b=ship c=path] :: + [[p=a q=b] r=(~(got by q.eye) a)] :: +++ park |= [ful=? mus=(unit tape)] :: + =+ pals |- ^+ +>.^$ :: update clients + ?~ +< +>.^$ :: + $(+< t.+<, +>.^$ (~(more et i.+<) ful mus)) :: +++ flet |=(from ~(. et +< (~(got by q.eye) ost))) :: existing peer +++ fret |=(from ~(. et +< *sole-share)) :: new peer +++ peer-sole |=([from *] abet:abet:view:(fret +<-)) :: connect +++ pull-sole |=([from *] abet:amok:(flet +<-)) :: disconnect +++ poke-sole-action :: console input + |=([from act=sole-action] abet:(work:(flet +<-) act)) :: -- diff --git a/base/ape/octo/core.hook b/base/ape/octo/core.hook new file mode 100644 index 000000000..31da2e81d --- /dev/null +++ b/base/ape/octo/core.hook @@ -0,0 +1,195 @@ +:: ::::::::::::::: +:::: /hook/core/octo/ape :: :: :: build + :: ::::::::::::::: +/- *sole :: structures +/+ sole :: libraries +:: ::::::::::::::: +:::: :: :: :: logic + !: ::::::::::::::: +=> |% :: board logic + ++ board ,@ :: one-player bitfield + ++ point ,[x=@ y=@] :: coordinate + ++ game ,[who=? box=board boo=board] :: game state + ++ icon |=(? ?:(+< 'X' 'O')) :: display at + ++ bo :: per board + |_ bud=board :: + ++ get |=(point =(1 (cut 0 [(off +<) 1] bud))) :: get point + ++ off |=(point (add x (mul 3 y))) :: bitfield address + ++ set |=(point (con bud (bex (off +<)))) :: set point + ++ win %- lien :_ |=(a=@ =(a (dis a bud))) :: test for win + (rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks + -- :: + ++ go :: per game + |_ game :: + ++ at |_ point :: per point + ++ g +>+< :: game + ++ k !|(x o) :: ok move + ++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move + ++ o (~(get bo boo) +<) :: old at o + ++ p .(boo (~(set bo boo) +<)) :: play at o + ++ t .(who !who) :: take turn + ++ v ?:(x (icon &) ?:(o (icon |) '.')) :: view + ++ x (~(get bo box) +<) :: old at x + ++ y .(box (~(set bo box) +<)) :: play at x + -- :: + ++ res ?: ~(win bo box) `"{~[(icon &)]} wins" :: result + ?: ~(win bo boo) `"{~[(icon |)]} wins" :: + ?: =(511 (con boo box)) `"tie :-(" ~ :: + ++ row |= y=@ :~ (add y '1') :: print row + ' ' ~(v at y 0) :: + ' ' ~(v at y 1) :: + ' ' ~(v at y 2) :: + == :: + ++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table + -- :: + -- :: +:: ::::::::::::::: +:::: :: :: :: agent + :: ::::::::::::::: +=> |% :: arvo structures + ++ axle ,[%1 eye=face but=tube gam=game] :: agent state + ++ axon $?(axle [%0 eye=face gam=game]) :: historical state + ++ card $% [%diff lime] :: update + [%quit ~] :: cancel + [%peer wire dock path] :: subscribe + [%pull wire dock ~] + == :: + ++ face (pair (list ,@c) (map bone sole-share)) :: interface + ++ lime $% [%sole-effect sole-effect] :: :sole update + [%octo-game game] :: :octo update + == :: + ++ move (pair bone card) :: cause and action + ++ mote (pair ship ,?) :: remote binding + ++ sink (trel bone ship path) :: promote + ++ tube (unit (pair ,? mote)) :: alive, remote + -- :: +=> |% :: promote + ++ pick + |* [a=_rule b=_rule] + ;~ pose + (stag %& a) + (stag %| b) + == + ++ punt + |* [a=_rule] + ;~(pose (stag ~ a) (easy ~)) + :: + ++ flag + |= [sic=@t non=@t] + ;~(pose (cold %& (jest sic)) (cold %| (jest non))) + -- :: +=> |% :: 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 + ++ comp ;~(plug fed:ag ;~(pfix ace (flag %x %o))) :: login command + ++ cope |=(? ?:(+< (stag %| (cold ~ sig)) comb)) :: with wait mode + -- :: +|_ [hid=hide moz=(list move) axle] :: per agent +++ et :: + |_ [from say=sole-share] :: per console client + ++ abet +>(q.eye (~(put by q.eye) ost say)) :: continue + ++ amok +>(q.eye (~(del by q.eye) ost)) :: discontinue + ++ beep (emit %bel ~) :: bad user + ++ cusp (cope wait) :: parsing rule + ++ delt |= cal=sole-change :: input line change + =^ cul say (remit:sole cal good) :: + ?~ cul (park:abet(p.eye buf.say) | ~) :: + abet:beep:(emit det/u.cul) :: + ++ emit |= fec=sole-effect ^+ +> :: send effect + ?< =(0 ost) + +>(moz [[ost %diff %sole-effect fec] moz]) :: + ++ emil |= fex=(list sole-effect) :: send effects + ?~(fex +> $(fex t.fex, +> (emit i.fex))) :: + ++ good |=((list ,@c) -:(rose (tufa +<) cusp)) :: valid input + ++ kick |= point :: move command + =^ dud gam ~(m ~(at go gam) +<) :: + ?. dud abet:beep =+ mus=~(res go gam) :: + (park:abet(gam ?^(mus *game gam)) %2 mus) :: + ++ line =^ cal say (transmit:sole set/p.eye) :: update command + (emit %det cal) :: + ++ make =+ dur=(rust (tufa p.eye) comb) :: + ?~ dur abet:beep :: + =. + line(p.eye ~) :: + ?-(+<.dur & (kick +>.dur), | (plan +>.dur)) :: + ++ mean |=((unit tape) ?~(+< +> (emit txt/+<+))) :: optional message + ++ play |= lev=?(%0 %1 %2) :: update by level + ?-(lev %0 +>, %1 line, %2 line:show:prom) :: + ++ plow |= [lev=?(%0 %1 %2) mus=(unit tape)] :: complete print + abet:(mean:(play lev) mus) :: + ++ prom %^ emit %pro %& :- %octo :: update prompt + ?: wait "(xir turn) " :: + ": {~[(icon who.gam)]} to move (row/col): " :: + ++ plan |= mut=(unit mote) :: peer command + ?~ mut ?~(but abet:beep stop:abet) :: + ?^(but abet:beep (link:abet u.mut)) :: + ++ rend (turn `wall`~(tab go gam) |=(tape txt/+<)) :: table print + ++ show (emit %mor rend) :: update board + ++ sole ~(. cs say) :: console library + ++ wait &(?=(^ but) !=(q.q.u.but who.gam)) :: waiting turn + ++ work |= act=sole-action :: console input + ?:(?=(%det -.act) (delt +.act) make) :: + -- :: +++ abet [(flop moz) .(moz ~)] :: resolve core +++ dump %_(+> moz [mov moz]) :: send move +++ dish |=(cad=card (dump 0 cad)) :: forward move +++ 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)]) :: +++ pale |=(f=$+(sink ?) (skim (~(tap by sup.hid)) f)) :: filter peers +++ pals %+ turn (pale (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 + =. +> ?:(=(%2 lev) push +>) :: + =+ pals :: + |- ^+ +>.^$ ?~ +< +>.^$ :: + $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: +++ prix |= pax=path |= sink ^- ? :: filter gate + ?~ pax & ?~ r.+< | :: + &(=(i.pax i.r.+<) $(pax t.pax, r.+< t.r.+<)) :: +++ push =+ pey=(pale (prix /octo)) |- ^+ +> :: update friends + ?~(pey +> $(pey t.pey, +> (sell p.i.pey))) :: +++ sell |=(ost=bone (dump ost %diff %octo-game gam)) :: update friend +++ stop (dish(but ~) pull/((like +>-.but) ~)) :: cancel subscribe +:: ::::::::::::::: +:::: :: :: :: hooks + :: ::::::::::::::: +++ diff-octo-game :: friend update + |= [then gam=game] =< abet :: + ?. &(?=([~ %& *] but) =(src p.q.u.but)) +> :: + ?: =(^gam gam) +> :: + (park(gam gam) %2 ~) :: +++ peer-octo :: linked by friend + |= [from pax=path] =< abet :: + =+ who==(%x -.pax) :: + ?^ but (park %2 ~) :: [~ %& !who src] + (park:(link src !who) %2 `"link by {}") :: +++ peer-sole :: console subscribe + |= [from *] =< abet :: + (plow:(fret +<-) %2 ~) :: +++ poke-sole-action :: console input + |= [from act=sole-action] =< abet :: + (work:(flet +<-) act) :: +++ prep |= [from old=(unit ,[(list move) axon])] :: initialize + =< abet ?~ old +> :: + =< (park %2 ~) :: + ?- -.+>.old :: + %1 +>(+<+ u.old) :: + %0 +>(eye.+< eye.+>.old, gam.+< gam.+>.old):: + == :: +++ pull-octo :: + |= [from ~] =< abet :: + (park(but ~) %0 `"dropped") :: +++ pull-sole :: disconnect console + |= [from *] =< abet :: + amok:(flet +<-) :: +++ quit-octo :: unlinked by friend + |=([then ~] abet:(park(but ~) %0 `"removed")) :: +++ reap-octo :: linked to friend + |= [then saw=(unit tang)] =< abet :: + ?> ?=([~ %| *] but) :: + ?^ saw (park:stop %0 `"fail to {}") :: + (park(p.u.but %&) %0 `"link to {}") :: +-- diff --git a/base/ape/sole/core.hook b/base/ape/sole/core.hook index 16245cc26..91e16a4bd 100644 --- a/base/ape/sole/core.hook +++ b/base/ape/sole/core.hook @@ -661,10 +661,11 @@ :: ++ onto |= [then saw=(each suss tang)] - :_ +> :_ ~ + :_ +> ?- -.saw - %| [ost %flog ~ %crud `@tas`-.way `tang`p.saw] - %& [ost %flog ~ %text "<{}>"] + %| [[ost %flog ~ %crud `@tas`-.way `tang`p.saw] ~] + %& :: [ost %flog ~ %text "<{}>"] + ~ == :: ++ pull diff --git a/base/arvo/behn.hoon b/base/arvo/behn.hoon index 5f3546e84..8042c4858 100644 --- a/base/arvo/behn.hoon +++ b/base/arvo/behn.hoon @@ -268,8 +268,8 @@ pup pup hav hav p.zam 1 - q.zam [[~ 0] ~ ~] - r.zam [[0 ~] ~ ~] + q.zam [[[~ ~] 0] ~ ~] + r.zam [[0 [~ ~]] ~ ~] == == :: @@ -577,20 +577,16 @@ $(ded t.ded, +>.^$ ap-kill(ost i.ded)) ?. ?=([%give %diff *] q.i.pyz) $(pyz t.pyz) - =^ vad +> ap-fill + =^ 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 ^- move - =+ fuk=(~(get by r.zam) p.cov) - ?~ fuk - ~& [%ap-aver-fuk p.cov] - !! :- (~(got by r.zam) p.cov) ?- -.q.cov ?(%slip %sick) !! - %give [%give %unto p.q.cov] + %give ?<(=(0 p.cov) [%give %unto p.q.cov]) %pass :+ %pass `path`[%use dap p.q.cov] ?- -.q.q.cov @@ -673,10 +669,10 @@ ++ ap-fill :: add to queue ^- [? _.] =+ suy=(fall (~(get by qel.ged) ost) 0) - ?: =(10 suy) + ?: =(8 suy) ~& [%ap-fill-full [our dap] q.q.pry ost] [%| +] - :: ~? !=(10 suy) [%ap-fill-add [[our dap] q.q.pry ost] +(suy)] + :: ~? !=(8 suy) [%ap-fill-add [[our dap] q.q.pry ost] +(suy)] [%& +(qel.ged (~(put by qel.ged) ost +(suy)))] :: ++ ap-find :: general arm From e5e3045daf0a753334ded3caa620ba3e862ed1a3 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 8 May 2015 11:26:21 -0700 Subject: [PATCH 08/94] add tym to dojo --- base/app/dojo/core.hook | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/base/app/dojo/core.hook b/base/app/dojo/core.hook index 344159781..b59a9a426 100644 --- a/base/app/dojo/core.hook +++ b/base/app/dojo/core.hook @@ -493,6 +493,10 @@ ^- 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 ^+ +>+> @@ -528,7 +532,7 @@ %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 [%reef ~]]] + %ex [/hand [%ride p.q.u.cud [[%done ~ %$ dy-twig-head] [%reef ~]]]] %tu :- /hand :+ %done ~ :- %noun From 802a76a2793c23f44922da9717b76f7a1451c7da Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 8 May 2015 12:43:11 -0700 Subject: [PATCH 09/94] Command-line functionality with %behn. --- base/ape/dojo/core.hook | 44 +++++---- base/ape/helm/core.hook | 6 +- base/ape/sole/core.hook | 2 +- base/ape/talk/core.hook | 12 +-- base/arvo/behn.hoon | 60 ++++++++----- base/arvo/dill.hoon | 193 ++++++++++++++-------------------------- base/arvo/doll.hoon | 2 +- base/arvo/eyre.hoon | 2 +- 8 files changed, 144 insertions(+), 177 deletions(-) diff --git a/base/ape/dojo/core.hook b/base/ape/dojo/core.hook index 685173943..235a4a406 100644 --- a/base/ape/dojo/core.hook +++ b/base/ape/dojo/core.hook @@ -70,10 +70,6 @@ == :: ++ bead ,[p=(set beam) q=cage] :: computed result ++ goal ,[p=ship q=term] :: flat application - ++ note :: general note - $% [%exec @p (unit silk)] :: - [%deal sock term club] :: - == :: ++ clap :: action, user $% [%peer p=path] :: subscribe [%poke p=term q=*] :: apply @@ -87,7 +83,7 @@ ++ card :: general card $% [%diff %sole-effect sole-effect] :: [%send wire [ship term] clap] :: - [%exec wire @p (unit silk)] :: + [%exec wire @p beak (unit silk)] :: [%deal wire sock term club] :: == :: ++ move (pair bone card) :: user-level move @@ -128,23 +124,32 @@ [%sic p=tile q=horn] :: /^ cast [%toy p=mark] :: /mark/ static == :: + ++ milk (trel ship desk silk) :: sourced silk ++ 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 + [%bunt p=mark] :: example of mark [%call p=silk q=silk] :: slam [%cast p=mark q=silk] :: translate - [%done p=(set beam) q=cage] :: literal + [%diff p=silk q=silk] :: diff + [%done p=(set beam) q=gage] :: literal [%dude p=tank q=silk] :: error wrap - [%dune p=(set beam) q=(unit cage)] :: unit literal + [%dune p=(set beam) q=(unit gage)] :: unit literal + [%file p=beam] :: from clay + [%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 + [%pact p=silk q=silk] :: patch [%plan p=beam q=spur r=hood] :: structured assembly [%reef ~] :: kernel reef [%ride p=twig q=silk] :: silk thru twig + [%tabl p=(list (pair silk silk))] :: list [%vale p=mark q=ship r=*] :: validate [our his] + [%volt p=(set beam) q=(cask ,*)] :: unsafe add type == :: ++ sign :: - $% [%made p=@uvH q=(each cage tang)] :: + $% [%made p=@uvH q=(each gage tang)] :: [%unto p=cuft] :: == :: -- :: @@ -271,16 +276,20 @@ |_ dojo-project :: ++ dy-abet +>(poy `+<) :: resolve ++ dy-amok +>(poy ~) :: terminate + ++ dy-beak :: XX rethink + ^- beak + [our.hid %base [%da lat.hid]] + :: ++ dy-ford :: send work to ford |= [way=wire kas=silk] ^+ +>+> ?> ?=(~ pux) - (he-card(poy `+>+<(pux `way)) %exec way our.hid `kas) + (he-card(poy `+>+<(pux `way)) %exec way our.hid dy-beak `kas) :: ++ dy-stop :: stop work ^+ +> ?~ pux +> - (he-card(poy ~) %exec u.pux our.hid ~) + (he-card(poy ~) %exec u.pux our.hid dy-beak ~) :: ++ dy-slam :: call by ford |= [way=wire gat=vase sam=vase] @@ -613,12 +622,13 @@ [& %$ "> "] :: ++ he-made :: result from ford - |= [way=wire dep=@uvH rey=(each cage tang)] + |= [way=wire dep=@uvH reg=(each gage tang)] ^+ +> ?> ?=(^ poy) =< he-pine - ?- -.rey - %& %. p.rey + ?- -.reg + %& ?> ?=(@ p.p.reg) + %. p.reg =+ dye=~(. dy u.poy(pux ~)) ?+ way !! [%hand ~] dy-hand:dye @@ -627,7 +637,7 @@ [%edit ~] dy-made-edit:dye == %| ~& [%he-made-fail way] - (he-diff(poy ~) %tan p.rey) + (he-diff(poy ~) %tan p.reg) == :: ++ he-unto :: result from behn @@ -713,7 +723,7 @@ :- [ost ~] ^- session :* *sole-share :: say=sole-share - %main :: syd=desk + %base :: syd=desk ~ :: luc=(unit case) ~ :: poy=(unit dojo-project) ~ :: var=(map term cage) @@ -728,8 +738,8 @@ he-abet:(~(he-type he [ost ~] (~(got by hoc) ost)) act) :: ++ made - |= [then dep=@uvH rey=(each cage tang)] - he-abet:(~(he-made he [[ost ~] (~(got by hoc) ost)]) way dep rey) + |= [then dep=@uvH reg=(each gage tang)] + he-abet:(~(he-made he [[ost ~] (~(got by hoc) ost)]) way dep reg) :: ++ unto |= [then cit=cuft] diff --git a/base/ape/helm/core.hook b/base/ape/helm/core.hook index e75c15d01..b71b14960 100644 --- a/base/ape/helm/core.hook +++ b/base/ape/helm/core.hook @@ -61,7 +61,7 @@ ^+ . =- %_(+ moz (weld zum moz)) ^= zum %- flop ^- (list move) - =+ top=`path`/(scot %p our.hid)/arvo/(scot %da lat.hid) + =+ top=`path`/(scot %p our.hid)/base/arvo/(scot %da lat.hid) :- [ost %flog /reset %vega (weld top `path`/hoon)] %+ turn ^- (list ,[p=@tas q=@tas]) @@ -86,7 +86,7 @@ %- weld :_ moz %+ turn all - =+ ark=(arch .^(%cy /(scot %p our.hid)/arvo/(scot %da lat.hid))) + =+ ark=(arch .^(%cy /(scot %p our.hid)/base/(scot %da lat.hid)/arvo)) =+ van=(~(tap by r.ark)) |= nam=@tas =. nam @@ -97,7 +97,7 @@ ?> ?=([[@ ~] ~] zaz) `term`p.i.zaz =+ tip=(end 3 1 nam) - =+ way=[(scot %p our.hid) %arvo (scot %da lat.hid) nam %hoon ~] + =+ way=[(scot %p our.hid) %base (scot %da lat.hid) %arvo nam %hoon ~] =+ fil=(,@ .^(%cx way)) :* ost %flog diff --git a/base/ape/sole/core.hook b/base/ape/sole/core.hook index 91e16a4bd..ea9ec524b 100644 --- a/base/ape/sole/core.hook +++ b/base/ape/sole/core.hook @@ -198,7 +198,7 @@ |= gyl=gill ^+ +> =. +> ?. =(p.gyl src) +> - (se-emit ost %conf (se-path gyl) gyl %load src %main) + (se-emit ost %conf (se-path gyl) gyl %load src %base) (se-join:(se-peer gyl /sole) gyl) :: ++ se-blit :: give output diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 7c21752bb..b935d8575 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1717,12 +1717,12 @@ =^ moz +>.$ ra-abet:ra-ever:~(ra-cancel ra ost ~) [moz +>.$(shells (~(del by shells) ost))] :: -++ poke-bit - |= [from ~] - ^- (quip move +>) - :_ +>.$ - =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/talk/backlog/jam - [ost %info /jamfile our.hid (foal paf (jam +<+.+>.$))]~ +::++ poke-bit +:: |= [from ~] +:: ^- (quip move +>) +:: :_ +>.$ +:: =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/talk/backlog/jam +:: [ost %info /jamfile our.hid (foal paf (jam +<+.+>.$))]~ :: ++ prep |= [from old=(unit house)] diff --git a/base/arvo/behn.hoon b/base/arvo/behn.hoon index 8042c4858..dd3172ad0 100644 --- a/base/arvo/behn.hoon +++ b/base/arvo/behn.hoon @@ -35,20 +35,29 @@ [%sic p=tile q=horn] :: /^ cast [%toy p=mark] :: /mark/ static == :: +++ milk (trel ship desk silk) :: sourced silk ++ 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 + [%bunt p=mark] :: example of mark [%call p=silk q=silk] :: slam [%cast p=mark q=silk] :: translate - [%done p=(set beam) q=cage] :: literal + [%diff p=silk q=silk] :: diff + [%done p=(set beam) q=gage] :: literal [%dude p=tank q=silk] :: error wrap - [%dune p=(set beam) q=(unit cage)] :: unit literal + [%dune p=(set beam) q=(unit gage)] :: unit literal + [%file p=beam] :: from clay + [%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 - [%plan p=beam q=spur r=hood] :: structured build + [%pact p=silk q=silk] :: patch + [%plan p=beam q=spur r=hood] :: structured assembly [%reef ~] :: kernel reef [%ride p=twig q=silk] :: silk thru twig + [%tabl p=(list (pair silk silk))] :: list [%vale p=mark q=ship r=*] :: validate [our his] + [%volt p=(set beam) q=(cask ,*)] :: unsafe add type == :: ++ volt ?(%low %high) :: voltage ++ torc $|(?(%iron %gold) [%lead p=ship]) :: security control @@ -107,7 +116,7 @@ [%roth p=sack q=path r=*] :: remote response == :: ++ kiss-ford :: - $% [%exec p=@p q=(unit silk)] :: make / kill + $% [%exec p=@p q=beak r=(unit silk)] :: make / kill [%wasp p=@p q=@uvH] :: depends query == :: ++ gift-ames :: @@ -119,11 +128,11 @@ [%mack p=(unit tang)] :: message ack == :: ++ gift-ford :: out result <-$ - $% [%made p=@uvH q=(each cage tang)] :: computed result + $% [%made p=@uvH q=(each gage tang)] :: computed result [%news ~] :: fresh depends == :: ++ sign-behn :: incoming result - $% [%a gift-ames] + $% [%a gift-ames] :: [%b gift-behn] :: [%f gift-ford] :: == :: @@ -239,15 +248,16 @@ (~(nest ut -:!>(*hide)) %| p:(slot 12 vax)) :: ++ mo-boom :: complete new boot - |= [dap=dude pup=scup dep=@uvH cux=(each cage tang)] + |= [dap=dude pup=scup dep=@uvH gux=(each gage tang)] ^+ +> - ?- -.cux - %| (mo-give %onto %| p.cux) + ?- -.gux + %| (mo-give %onto %| p.gux) %& - ?. (mo-okay q.p.cux) + ?> ?=(@ p.p.gux) + ?. (mo-okay q.p.gux) (mo-give %onto %| [%leaf "{}: bogus core"]~) =. +> (mo-bold dap dep) - =. +> (mo-born dap pup q.p.cux) + =. +> (mo-born dap pup q.p.gux) =+ old=+>.$ =+ wag=(ap-prop:(ap-abed:ap dap [%high [~ our]]) ~) ?^ -.wag @@ -274,15 +284,16 @@ == :: ++ mo-boon :: complete old boot - |= [dap=dude pup=scup dep=@uvH cux=(each cage tang)] + |= [dap=dude pup=scup dep=@uvH gux=(each gage tang)] ^+ +> ?. (~(has by bum) dap) ~& [%behn-old-boon dap] +> =. +> (mo-bold dap dep) - ?- -.cux - %| (mo-give %onto %| p.cux) - %& ap-abet:(ap-peep:(ap-abed:ap dap [%high [~ our]]) q.p.cux) + ?- -.gux + %| (mo-give %onto %| p.gux) + %& ?> ?=(@ p.p.gux) + ap-abet:(ap-peep:(ap-abed:ap dap [%high [~ our]]) q.p.gux) == :: ++ mo-bold :: wait for dep @@ -296,8 +307,9 @@ ^+ +> :: ~& [%mo-boot dap how pup] %+ mo-pass [%sys how dap (scot %p p.pup) q.pup ~] + =+ bek=[p.pup q.pup [%da now]] ^- note-behn - [%f %exec our `[%boil %core [[p.pup q.pup [%da now]] [dap %ape ~]] ~]] + [%f %exec our bek `[%boil %core [bek [dap %ape ~]] ~]] :: ++ mo-away :: foreign request |= [him=ship caz=cuss] :: @@ -426,7 +438,8 @@ == ?- -.q.+>.sih %| (mo-give %mack `p.q.+>.sih) :: XX should crash - %& =. +>.$ (mo-give %mack ~) :: XX pump should ack + %& ?> ?=(@ p.p.q.+>.sih) + =. +>.$ (mo-give %mack ~) :: XX pump should ack (mo-give(hen (mo-ball him num)) %unto %diff `cage`p.q.+>.sih) == :: @@ -439,7 +452,8 @@ ?: ?=([%f %made *] sih) ?- -.q.+>.sih %| (mo-give %mack `p.q.+>.sih) :: XX should crash - %& (mo-pass [%sys pax] %b %deal [him our] i.t.t.pax %poke p.q.+>.sih) + %& ?> ?=(@ p.p.q.+>.sih) + (mo-pass [%sys pax] %b %deal [him our] i.t.t.pax %poke p.q.+>.sih) == ?: ?=([%a %woot *] sih) +>.$ :: quit ack, boring ?> ?=([%b %unto *] sih) @@ -496,6 +510,12 @@ :: ~& [%mo-claw-play dap r.lep] $(+>.^$ ap-abet:(ap-club:(ap-abed:ap(hen p.lep) dap q.lep) r.lep)) :: + ++ mo-beak :: build beak + |= dap=dude + ^- beak + =+ pup=pup:(~(got by bum) dap) + [p.pup q.pup [%da now]] :: XX this is wrong; save the build case + :: ++ mo-club :: local action |= [dap=dude pry=prey cub=club] ^+ +> @@ -511,7 +531,7 @@ [%sys %req (scot %p him) dap (scot %ud num) ~] ^- note-behn ?- -.rok - %m [%f %exec our ~ %vale p.rok our q.rok] :: XX use build beak + %m [%f %exec our (mo-beak dap) ~ %vale p.rok our q.rok] %s [%b %deal [him our] dap %peer p.rok] %u [%b %deal [him our] dap %pull ~] == @@ -522,7 +542,7 @@ %d %+ mo-pass [%sys %rep (scot %p him) dap (scot %ud num) ~] - [%f %exec our ~ %vale p.ron our q.ron] + [%f %exec our (mo-beak dap) ~ %vale p.ron our q.ron] :: %x (mo-give(hen (mo-ball him num)) %unto %quit ~) == diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 76de83142..53ff45f48 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -1,5 +1,5 @@ !: -:: dill (4d), terminal handling +:: dill (4d), terminal handling :: |= pit=vase => |% :: interface tiles @@ -59,26 +59,12 @@ ++ gill (pair ship term) :: general contact -- :: => |% :: console protocol -++ old-axle :: all dill state +++ axle :: all dill state $: %2 :: ore=(unit ship) :: identity once set hey=(unit duct) :: default duct dug=(map duct axon) :: conversations == :: -++ axle :: all dill state - $: %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 tem=(unit (list dill-belt)) :: pending, reverse @@ -108,9 +94,8 @@ [%sav p=path q=@] :: save to file == :: ++ flog :: sent to %dill - $% [%crud p=@tas q=(list tank)] :: error with trace - [%heft ~] :: system memory - [%text p=tape] :: print text + $% [%crud p=@tas q=(list tank)] :: + [%text p=tape] :: [%veer p=@ta q=path r=@t] :: install vane [%vega p=path] :: reboot by path [%verb ~] :: verbose mode @@ -120,7 +105,6 @@ [%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 @@ -133,7 +117,6 @@ [%flog p=flog] :: wrapped error [%flow p=@tas q=(list gill)] :: terminal config [%hail ~] :: terminal refresh - [%heft ~] :: system memory [%hook ~] :: this term hung up [%harm ~] :: all terms hung up [%init p=ship] :: after gall ready @@ -149,6 +132,20 @@ ++ mess :: $% [%dill-belt p=(hypo dill-belt)] :: == :: +++ club :: agent action + $% [%peer p=path] :: subscribe + [%poke p=cage] :: apply + [%pull ~] :: unsubscribe + [%pump ~] :: pump yes/no + == :: +++ cuft :: internal gift + $% [%coup p=(unit tang)] :: poke result + [%quit ~] :: close subscription + [%reap p=(unit tang)] :: peer result + [%diff p=cage] :: subscription output + == :: +++ cuss (pair term club) :: internal kiss +++ suss (trel term ,@tas ,@da) :: config report ++ move ,[p=duct q=(mold note gift)] :: local move ++ note-ames :: weird ames move $% [%make p=(unit ,@t) q=@ud r=@ s=?] :: @@ -160,31 +157,30 @@ == :: ++ 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 [%vega p=path] :: reboot by path [%verb ~] :: verbose mode == :: -++ note-gall :: outbound message - $% [%mess p=[ship q=path] q=ship r=mess] :: - [%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-behn :: + $% [%conf dock %load ship desk] :: + [%deal p=sock q=cuss] :: == :: -++ note :: - $? [?(%a %c %e %f %g %t) %wegh ~] :: - $% [%a note-ames] :: out request $-> +++ note :: out request $-> + $% [%a note-ames] :: + [%b note-behn] :: [%c note-clay] :: [%d note-dill] :: - [%g note-gall] :: - == == :: + == :: ++ riff ,[p=desk q=(unit rave)] :: see %clay ++ sign-ames :: $% [%nice ~] :: [%init p=ship] :: == :: +++ sign-behn :: see %behn + $% [%onto p=(unit tang)] :: + == :: ++ sign-clay :: $% [%mere p=(each (set path) (pair term tang))] :: [%note p=@tD q=tank] :: @@ -193,23 +189,20 @@ ++ sign-dill :: $% [%blit p=(list blit)] :: == :: -++ sign-gall :: - $% [%crud p=@tas q=(list tank)] :: - [%mean p=ares] :: - [%nice ~] :: - [%rush %dill-blit dill-blit] :: +++ sign-behn :: + $% [%onto p=(each suss tang)] :: + [%unto p=cuft] :: == :: ++ sign-time :: $% [%wake ~] :: == :: ++ sign :: in result $<- - $? [?(%a %c %e %f %g %t) %mass p=mass] :: $% [%a sign-ames] :: + [%b sign-behn] :: [%c sign-clay] :: [%d sign-dill] :: - [%g sign-gall] :: [%t sign-time] :: - == == :: + == :: :::::::: :: dill tiles -- =| all=axle @@ -235,7 +228,6 @@ %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 %veer (dump kyz) %vega (dump kyz) %verb (dump kyz) @@ -281,25 +273,14 @@ (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] + ~& [%doll-init our] =+ myt=(flop (need tem)) =. tem ~ =. moz :_(moz [hen %pass / %c %font our %home our %base]) - =. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~]) + :: =. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~]) + =. moz :_(moz [hen %pass ~ %b %conf [[our ram] %load our %base]]) + =. moz :_(moz [hen %pass ~ %b %deal [our our] ram %peer ~]) |- ^+ +> ?~ myt +> $(myt t.myt, +> (send i.myt)) @@ -325,64 +306,19 @@ %_ +> moz :_ moz - [hen %pass ~ %g %mess [our [ram ~]] our [%dill-belt -:!>(bet) bet]] + [hen %pass ~ %b %deal [our our] ram %poke [%dill-belt -:!>(bet) bet]] == :: - ++ took :: send rush ack + ++ pump :: send diff ack %_ . moz - :_(moz [hen %pass ~ %g %took [our [ram ~]] our]) - == - :: - ++ wegh - ^- mass - :- %| - :~ ore/`ore.all - hey/`hey.all - dug/`dug.all - :: cor/`..as - == - :: - ++ 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] - :- %| - :~ ames/u.a - clay/u.c - dill/d - eyre/u.e - ford/u.f - gall/u.g - time/u.t + :_(moz [hen %pass ~ %b %deal [our our] ram %pump ~]) == :: ++ take :: receive - |= [tea=wire sih=sign] + |= sih=sign ^+ +> ?- sih - [?(%a %c %e %f %g %t) %mass *] - (wegt -.sih p.sih) - :: [%a %nice *] :: ~& [%take-nice-ames sih] +> @@ -390,15 +326,31 @@ [%a %init *] +>(moz :_(moz [hen %give +.sih])) :: - [%c %mere *] :: i don't think we get these anymore + [%c %mere *] ?: ?=(%& -.p.sih) +>.$ ~| %dill-mere-fail ~| p.p.p.sih |- ?~ q.p.p.sih !! - ~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace + ~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace $(q.p.p.sih t.q.p.p.sih) + :: + [%b %onto *] + :: ~& [%take-behn-onto +>.sih] + ?- -.+>.sih + %| (crud %onto p.p.+>.sih) + %& (done %blit [%lin (tuba "{}")]~) + == + :: + [%b %unto *] + :: ~& [%take-behn-unto +>.sih] + ?- -.+>.sih + %coup ?~(p.p.+>.sih +>.$ (crud %coup u.p.p.+>.sih)) + %quit !! :: ?? + %reap ?~(p.p.+>.sih +>.$ (crud %reap u.p.p.+>.sih)) + %diff pump:(from ((hard dill-blit) q:`vase`+>+>.sih)) + == :: [%c %note *] (from %out (tuba p.sih ' ' ~(ram re q.sih))) @@ -408,21 +360,6 @@ :: [%d %blit *] (done +.sih) - :: - [%g %crud *] - (crud p.+.sih q.+.sih) - :: (send %cru p.+.sih q.+.sih) - :: - [%g %mean *] - ~& %dill-take-mean - +> - :: - [%g %nice *] - :: ~& [%take-nice sih] - +> - :: - [%g %rush %dill-blit *] - took:(from +>+.sih) :: [%t %wake *] :: ~& %dill-wake @@ -486,8 +423,8 @@ [[p.q.hic %dojo] ~] ?: =(%earl myr) =+ fap=(sein p.q.hic) - [[fap %dojo] [fap %talk] ~] - [[p.q.hic %dojo] [p.q.hic %talk] ~] + [[fap %dojo] [fap %talk] [fap %helm] ~] + [[p.q.hic %dojo] [p.q.hic %talk] [p.q.hic %helm] ~] =^ moz all abet:(need (ax (need hey.all) [%flow %sole flo])) ?: |((lth p.q.hic 256) (gte p.q.hic (bex 64))) [moz ..^$] :: XX HORRIBLE [:_(moz [(need hey.all) %give %init p.q.hic]) ..^$] @@ -504,9 +441,7 @@ ~ :: ++ load :: trivial - |= old=?(old-axle axle) - ?: ?=(%2 -.old) - $(old [%3 ore hey dug ~ ~ ~ ~ ~ ~]:old) + |= old=axle ..^$(all old) :: |= old=* :: diable :: ..^$(ore.all `~zod) @@ -535,6 +470,8 @@ [~ ..^$] =+ our=?>(?=(^ ore.all) u.ore.all) =^ moz all - abet:(~(take as [~ hen our] (~(got by dug.all) hen)) tea q.hin) + abet:(~(take as [~ hen our] (~(got by dug.all) hen)) q.hin) [moz ..^$] -- + +:: good test diff --git a/base/arvo/doll.hoon b/base/arvo/doll.hoon index 53ff45f48..3d2649a7e 100644 --- a/base/arvo/doll.hoon +++ b/base/arvo/doll.hoon @@ -333,7 +333,7 @@ ~| p.p.p.sih |- ?~ q.p.p.sih !! - ~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace + ~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace $(q.p.p.sih t.q.p.p.sih) :: [%b %onto *] diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index dd9a84bcf..28bccb9d0 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -117,7 +117,7 @@ dop=(map host ship) :: host aliasing liz=(jug ,@uvH (each duct ixor)) :: ford depsets wup=(map hole cyst) :: secure sessions - sop=(map hole ,[ship ?]) :: foreign session names + sop=(map hole ,[ship ?]) :: foreign sess names wix=(map ixor stem) :: open views == :: :: From c58b0611f08b736a7e8efabb0e078db91722357e Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 8 May 2015 13:27:40 -0700 Subject: [PATCH 10/94] eyre ready to talk to behn. --- base/arvo/eyre.hoon | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 28bccb9d0..40164087b 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -4,6 +4,19 @@ |= pit=vase => =~ |% :: interfaces +++ club :: agent action + $% [%peer p=path] :: subscribe + [%poke p=cage] :: apply + [%pull ~] :: unsubscribe + [%pump ~] :: subscription ack + == :: +++ cuss (pair term club) :: internal kiss +++ cuft :: internal gift + $% [%coup p=(unit tang)] :: poke result + [%diff p=cage] :: subscription output + [%quit ~] :: close subscription + [%reap p=(unit tang)] :: peer result + == :: ++ gift :: out result <-$ $% [%mass p=mass] :: memory usage [%thou p=httr] :: raw http response @@ -35,6 +48,9 @@ ++ note :: out request $-> $% $: %a :: to %ames $% [%want p=sock q=[path *]] :: + == == :: + $: %b :: to %behn + $% [%deal p=sock q=cuss] :: full transmission == == :: $: %d :: to %dill $% [%flog p=[%crud p=@tas q=(list tank)]] :: @@ -71,6 +87,9 @@ ++ sign :: in result $<- $? $: %a :: by %ames $% [%went p=ship q=cape] :: + == == :: + $: %b :: by %behn + $% [%unto p=cuft] :: within agent == == :: $: %e :: by self $% [%thou p=httr] :: response for proxy @@ -503,6 +522,24 @@ %thou ?> ?=([%ay ^] tee) (ames-gram (slav %p p.tee) got/~ (slav %uv q.tee) |2.sih) + :: + %unto :: XX horrible + =+ cuf=`cuft`+>.sih + ?- -.cuf + %coup + ?~ p.cuf $(sih [%g %nice ~]) + $(sih [%g %mean `[%coup u.p.cuf]]) + :: + %reap + ?~ p.cuf $(sih [%g %nice ~]) + $(sih [%g %mean `[%reap u.p.cuf]]) + :: + %diff + $(sih [%g %rush p.p.cuf q.q.p.cuf]) + :: + %quit + $(sih [%g %mean ~]) + == :: ?(%rush %rust) ?> ?=([%of @ ^] tee) @@ -1162,14 +1199,17 @@ ++ new-mess |= [a=hasp b=wire c=cage] ^+ ..ix (hurl-note [a b] [%g %mess [- + ~]:a him c]) + :: (hurl-note [a b] [%b %deal [him -.a] +.a %poke c]) :: ++ add-subs |= [a=hasp %json b=wire c=path] ^+ ..ix (hurl-note [a b] [%g %show [- + ~]:a him c]) + :: (hurl-note [a b] [%b %deal [him -.a] +.a %peer c]) :: ++ del-subs :: XX per path? |= [a=hasp %json b=wire c=path] ^+ ..ix (hurl-note [a b] [%g %nuke [- + ~]:a him]) + :: (hurl-note [a b] [%b %deal [him -.a] +.a %pull ~]) :: ++ get-rush |= [a=whir-of b=json] ^+ ..ix From e15fcdbcdad6f3023e4a8a6c847380ed897eb65f Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 8 May 2015 13:57:34 -0700 Subject: [PATCH 11/94] Unbreak eyre. --- base/ape/talk/core.hook | 6 +++--- base/arvo/eyre.hoon | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index b935d8575..1b324087c 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1674,12 +1674,12 @@ :: ++ diff-talk-report :: |= [then rad=report] - %+ etch-friend way |= [man=span cuz=station] + %+ etch-friend [%friend way] |= [man=span cuz=station] ra-abet:(~(ra-diff-talk-report ra ost ~) man cuz rad) :: ++ coup-repeat :: |= [then saw=(unit tang)] - %+ etch-repeat way |= [num=@ud src=@p man=span] + %+ etch-repeat [%repeat way] |= [num=@ud src=@p man=span] ra-abet:(~(ra-coup-repeat ra ost ~) [num src man] saw) :: ++ etch :: parse wire @@ -1707,7 +1707,7 @@ :: ++ quit-friend :: |= then - %+ etch-friend way |= [man=span cuz=station] + %+ etch-friend [%friend way] |= [man=span cuz=station] ra-abet:(~(ra-quit ra ost ~) man cuz) :: ++ pull :: diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 40164087b..b180ec42e 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -10,7 +10,7 @@ [%pull ~] :: unsubscribe [%pump ~] :: subscription ack == :: -++ cuss (pair term club) :: internal kiss +++ cush (pair term club) :: internal kiss ++ cuft :: internal gift $% [%coup p=(unit tang)] :: poke result [%diff p=cage] :: subscription output @@ -50,7 +50,7 @@ $% [%want p=sock q=[path *]] :: == == :: $: %b :: to %behn - $% [%deal p=sock q=cuss] :: full transmission + $% [%deal p=sock q=cush] :: full transmission == == :: $: %d :: to %dill $% [%flog p=[%crud p=@tas q=(list tank)]] :: From 5a0d576bd36e3d9bab58d4f80d87cc7ec013d77c Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Fri, 8 May 2015 15:15:17 -0700 Subject: [PATCH 12/94] not staging; --- base/pub/talk/fab/hymn.hook | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/pub/talk/fab/hymn.hook b/base/pub/talk/fab/hymn.hook index 281aeddc2..d8c1cdebd 100644 --- a/base/pub/talk/fab/hymn.hook +++ b/base/pub/talk/fab/hymn.hook @@ -25,11 +25,11 @@ ;script(type "text/javascript", src "/~~/~/at/base/lib/urb.js"); ;meta(name "viewport", content "width=device-width, height=device-height, ". "initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"); - ;link(type "text/css", rel "stylesheet", href "http://localhost:8000/base/pub/talk/src/css/main.css"); + ;link(type "text/css", rel "stylesheet", href "/base/pub/talk/src/css/main.css"); ;title: urbit talk == ;body ;div#c; - ;script(type "text/javascript", src "http://localhost:8000/base/pub/talk/src/js/main.js"); + ;script(type "text/javascript", src "/base/pub/talk/src/js/main.js"); == == From 4f1a7b537b317f6acfa98c637ad015e0e5f76b77 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Fri, 8 May 2015 15:56:33 -0700 Subject: [PATCH 13/94] fix audience --- .../pub/talk/src/js/components/WritingComponent.coffee | 8 +++++--- base/pub/talk/src/js/main.js | 10 ++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/base/pub/talk/src/js/components/WritingComponent.coffee b/base/pub/talk/src/js/components/WritingComponent.coffee index c449f52a0..d83659a92 100644 --- a/base/pub/talk/src/js/components/WritingComponent.coffee +++ b/base/pub/talk/src/js/components/WritingComponent.coffee @@ -55,8 +55,7 @@ module.exports = recl $('#audi').focus() return if @state.audi.length is 0 and $('#audi').text().trim().length > 0 - audi = @state.ludi - @_setAudi() + audi = if @_setAudi() then @_setAudi() else @state.ludi else audi = @state.audi audi = @addCC audi @@ -138,10 +137,13 @@ module.exports = recl if valid is true v = $('#audi').text() v = v.split " " - v = window.util.expandAudi v for k,_v of v if _v[0] isnt "~" then v[k] = "~#{_v}" + v = window.util.expandAudi v StationActions.setAudience v + v + else + false getTime: -> d = new Date() diff --git a/base/pub/talk/src/js/main.js b/base/pub/talk/src/js/main.js index 2ce25e26e..9c44f6add 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -720,8 +720,7 @@ module.exports = recl({ return; } if (this.state.audi.length === 0 && $('#audi').text().trim().length > 0) { - audi = this.state.ludi; - this._setAudi(); + audi = this._setAudi() ? this._setAudi() : this.state.ludi; } else { audi = this.state.audi; } @@ -806,14 +805,17 @@ module.exports = recl({ if (valid === true) { v = $('#audi').text(); v = v.split(" "); - v = window.util.expandAudi(v); for (k in v) { _v = v[k]; if (_v[0] !== "~") { v[k] = "~" + _v; } } - return StationActions.setAudience(v); + v = window.util.expandAudi(v); + StationActions.setAudience(v); + return v; + } else { + return false; } }, getTime: function() { From fbf9930b34ca2eb1db11b5a2e6a674f2641f998d Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 8 May 2015 16:02:50 -0700 Subject: [PATCH 14/94] test now switched over to behn. --- base/ape/talk/core.hook | 2 +- base/ape/ucto/core.hook | 195 ++++++++++++++++++++++++++++++++++++++++ base/arvo/behn.hoon | 7 +- base/arvo/eyre.hoon | 16 ++-- 4 files changed, 209 insertions(+), 11 deletions(-) create mode 100644 base/ape/ucto/core.hook diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 1b324087c..076c40bf7 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1674,7 +1674,7 @@ :: ++ diff-talk-report :: |= [then rad=report] - %+ etch-friend [%friend way] |= [man=span cuz=station] + %+ etch-friend way |= [man=span cuz=station] ra-abet:(~(ra-diff-talk-report ra ost ~) man cuz rad) :: ++ coup-repeat :: diff --git a/base/ape/ucto/core.hook b/base/ape/ucto/core.hook new file mode 100644 index 000000000..31da2e81d --- /dev/null +++ b/base/ape/ucto/core.hook @@ -0,0 +1,195 @@ +:: ::::::::::::::: +:::: /hook/core/octo/ape :: :: :: build + :: ::::::::::::::: +/- *sole :: structures +/+ sole :: libraries +:: ::::::::::::::: +:::: :: :: :: logic + !: ::::::::::::::: +=> |% :: board logic + ++ board ,@ :: one-player bitfield + ++ point ,[x=@ y=@] :: coordinate + ++ game ,[who=? box=board boo=board] :: game state + ++ icon |=(? ?:(+< 'X' 'O')) :: display at + ++ bo :: per board + |_ bud=board :: + ++ get |=(point =(1 (cut 0 [(off +<) 1] bud))) :: get point + ++ off |=(point (add x (mul 3 y))) :: bitfield address + ++ set |=(point (con bud (bex (off +<)))) :: set point + ++ win %- lien :_ |=(a=@ =(a (dis a bud))) :: test for win + (rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks + -- :: + ++ go :: per game + |_ game :: + ++ at |_ point :: per point + ++ g +>+< :: game + ++ k !|(x o) :: ok move + ++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move + ++ o (~(get bo boo) +<) :: old at o + ++ p .(boo (~(set bo boo) +<)) :: play at o + ++ t .(who !who) :: take turn + ++ v ?:(x (icon &) ?:(o (icon |) '.')) :: view + ++ x (~(get bo box) +<) :: old at x + ++ y .(box (~(set bo box) +<)) :: play at x + -- :: + ++ res ?: ~(win bo box) `"{~[(icon &)]} wins" :: result + ?: ~(win bo boo) `"{~[(icon |)]} wins" :: + ?: =(511 (con boo box)) `"tie :-(" ~ :: + ++ row |= y=@ :~ (add y '1') :: print row + ' ' ~(v at y 0) :: + ' ' ~(v at y 1) :: + ' ' ~(v at y 2) :: + == :: + ++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table + -- :: + -- :: +:: ::::::::::::::: +:::: :: :: :: agent + :: ::::::::::::::: +=> |% :: arvo structures + ++ axle ,[%1 eye=face but=tube gam=game] :: agent state + ++ axon $?(axle [%0 eye=face gam=game]) :: historical state + ++ card $% [%diff lime] :: update + [%quit ~] :: cancel + [%peer wire dock path] :: subscribe + [%pull wire dock ~] + == :: + ++ face (pair (list ,@c) (map bone sole-share)) :: interface + ++ lime $% [%sole-effect sole-effect] :: :sole update + [%octo-game game] :: :octo update + == :: + ++ move (pair bone card) :: cause and action + ++ mote (pair ship ,?) :: remote binding + ++ sink (trel bone ship path) :: promote + ++ tube (unit (pair ,? mote)) :: alive, remote + -- :: +=> |% :: promote + ++ pick + |* [a=_rule b=_rule] + ;~ pose + (stag %& a) + (stag %| b) + == + ++ punt + |* [a=_rule] + ;~(pose (stag ~ a) (easy ~)) + :: + ++ flag + |= [sic=@t non=@t] + ;~(pose (cold %& (jest sic)) (cold %| (jest non))) + -- :: +=> |% :: 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 + ++ comp ;~(plug fed:ag ;~(pfix ace (flag %x %o))) :: login command + ++ cope |=(? ?:(+< (stag %| (cold ~ sig)) comb)) :: with wait mode + -- :: +|_ [hid=hide moz=(list move) axle] :: per agent +++ et :: + |_ [from say=sole-share] :: per console client + ++ abet +>(q.eye (~(put by q.eye) ost say)) :: continue + ++ amok +>(q.eye (~(del by q.eye) ost)) :: discontinue + ++ beep (emit %bel ~) :: bad user + ++ cusp (cope wait) :: parsing rule + ++ delt |= cal=sole-change :: input line change + =^ cul say (remit:sole cal good) :: + ?~ cul (park:abet(p.eye buf.say) | ~) :: + abet:beep:(emit det/u.cul) :: + ++ emit |= fec=sole-effect ^+ +> :: send effect + ?< =(0 ost) + +>(moz [[ost %diff %sole-effect fec] moz]) :: + ++ emil |= fex=(list sole-effect) :: send effects + ?~(fex +> $(fex t.fex, +> (emit i.fex))) :: + ++ good |=((list ,@c) -:(rose (tufa +<) cusp)) :: valid input + ++ kick |= point :: move command + =^ dud gam ~(m ~(at go gam) +<) :: + ?. dud abet:beep =+ mus=~(res go gam) :: + (park:abet(gam ?^(mus *game gam)) %2 mus) :: + ++ line =^ cal say (transmit:sole set/p.eye) :: update command + (emit %det cal) :: + ++ make =+ dur=(rust (tufa p.eye) comb) :: + ?~ dur abet:beep :: + =. + line(p.eye ~) :: + ?-(+<.dur & (kick +>.dur), | (plan +>.dur)) :: + ++ mean |=((unit tape) ?~(+< +> (emit txt/+<+))) :: optional message + ++ play |= lev=?(%0 %1 %2) :: update by level + ?-(lev %0 +>, %1 line, %2 line:show:prom) :: + ++ plow |= [lev=?(%0 %1 %2) mus=(unit tape)] :: complete print + abet:(mean:(play lev) mus) :: + ++ prom %^ emit %pro %& :- %octo :: update prompt + ?: wait "(xir turn) " :: + ": {~[(icon who.gam)]} to move (row/col): " :: + ++ plan |= mut=(unit mote) :: peer command + ?~ mut ?~(but abet:beep stop:abet) :: + ?^(but abet:beep (link:abet u.mut)) :: + ++ rend (turn `wall`~(tab go gam) |=(tape txt/+<)) :: table print + ++ show (emit %mor rend) :: update board + ++ sole ~(. cs say) :: console library + ++ wait &(?=(^ but) !=(q.q.u.but who.gam)) :: waiting turn + ++ work |= act=sole-action :: console input + ?:(?=(%det -.act) (delt +.act) make) :: + -- :: +++ abet [(flop moz) .(moz ~)] :: resolve core +++ dump %_(+> moz [mov moz]) :: send move +++ dish |=(cad=card (dump 0 cad)) :: forward move +++ 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)]) :: +++ pale |=(f=$+(sink ?) (skim (~(tap by sup.hid)) f)) :: filter peers +++ pals %+ turn (pale (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 + =. +> ?:(=(%2 lev) push +>) :: + =+ pals :: + |- ^+ +>.^$ ?~ +< +>.^$ :: + $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: +++ prix |= pax=path |= sink ^- ? :: filter gate + ?~ pax & ?~ r.+< | :: + &(=(i.pax i.r.+<) $(pax t.pax, r.+< t.r.+<)) :: +++ push =+ pey=(pale (prix /octo)) |- ^+ +> :: update friends + ?~(pey +> $(pey t.pey, +> (sell p.i.pey))) :: +++ sell |=(ost=bone (dump ost %diff %octo-game gam)) :: update friend +++ stop (dish(but ~) pull/((like +>-.but) ~)) :: cancel subscribe +:: ::::::::::::::: +:::: :: :: :: hooks + :: ::::::::::::::: +++ diff-octo-game :: friend update + |= [then gam=game] =< abet :: + ?. &(?=([~ %& *] but) =(src p.q.u.but)) +> :: + ?: =(^gam gam) +> :: + (park(gam gam) %2 ~) :: +++ peer-octo :: linked by friend + |= [from pax=path] =< abet :: + =+ who==(%x -.pax) :: + ?^ but (park %2 ~) :: [~ %& !who src] + (park:(link src !who) %2 `"link by {}") :: +++ peer-sole :: console subscribe + |= [from *] =< abet :: + (plow:(fret +<-) %2 ~) :: +++ poke-sole-action :: console input + |= [from act=sole-action] =< abet :: + (work:(flet +<-) act) :: +++ prep |= [from old=(unit ,[(list move) axon])] :: initialize + =< abet ?~ old +> :: + =< (park %2 ~) :: + ?- -.+>.old :: + %1 +>(+<+ u.old) :: + %0 +>(eye.+< eye.+>.old, gam.+< gam.+>.old):: + == :: +++ pull-octo :: + |= [from ~] =< abet :: + (park(but ~) %0 `"dropped") :: +++ pull-sole :: disconnect console + |= [from *] =< abet :: + amok:(flet +<-) :: +++ quit-octo :: unlinked by friend + |=([then ~] abet:(park(but ~) %0 `"removed")) :: +++ reap-octo :: linked to friend + |= [then saw=(unit tang)] =< abet :: + ?> ?=([~ %| *] but) :: + ?^ saw (park:stop %0 `"fail to {}") :: + (park(p.u.but %&) %0 `"link to {}") :: +-- diff --git a/base/arvo/behn.hoon b/base/arvo/behn.hoon index dd3172ad0..9a30bac2b 100644 --- a/base/arvo/behn.hoon +++ b/base/arvo/behn.hoon @@ -513,8 +513,9 @@ ++ mo-beak :: build beak |= dap=dude ^- beak - =+ pup=pup:(~(got by bum) dap) - [p.pup q.pup [%da now]] :: XX this is wrong; save the build case + :: =+ 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 :: ++ mo-club :: local action |= [dap=dude pry=prey cub=club] @@ -992,7 +993,7 @@ ^+ +> =+ cug=(ap-find cog pax) ?~ cug - ~& [%ap-punk-none pax] + ~& [%ap-punk-none cog pax] +>.$ =^ cam +>.$ %+ ap-call q.u.cug diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index b180ec42e..3df11c613 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -1198,18 +1198,18 @@ :: ++ new-mess |= [a=hasp b=wire c=cage] ^+ ..ix - (hurl-note [a b] [%g %mess [- + ~]:a him c]) - :: (hurl-note [a b] [%b %deal [him -.a] +.a %poke c]) + :: (hurl-note [a b] [%g %mess [- + ~]:a him c]) + (hurl-note [a b] [%b %deal [him -.a] +.a %poke c]) :: ++ add-subs |= [a=hasp %json b=wire c=path] ^+ ..ix - (hurl-note [a b] [%g %show [- + ~]:a him c]) - :: (hurl-note [a b] [%b %deal [him -.a] +.a %peer c]) + :: (hurl-note [a b] [%g %show [- + ~]:a him c]) + (hurl-note [a b] [%b %deal [him -.a] +.a %peer c]) :: ++ del-subs :: XX per path? |= [a=hasp %json b=wire c=path] ^+ ..ix - (hurl-note [a b] [%g %nuke [- + ~]:a him]) - :: (hurl-note [a b] [%b %deal [him -.a] +.a %pull ~]) + :: (hurl-note [a b] [%g %nuke [- + ~]:a him]) + (hurl-note [a b] [%b %deal [him -.a] +.a %pull ~]) :: ++ get-rush |= [a=whir-of b=json] ^+ ..ix @@ -1254,7 +1254,9 @@ :: ++ pass-took |= a=[p=hasp wire] - (pass-note(hen `~) [%of ire (gsig a)] [%g %took [- + ~]:p.a him]) + %+ pass-note(hen `~) + [%of ire (gsig a)] + [%b %deal [him -.p.a] +.p.a %pump ~] :: ++ pop-duct =^(ned med ~(get to med) abet(hen ned)) ++ poll From 369dd1878ad972e93d65bfa84449ff5f905e02ce Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Fri, 8 May 2015 16:47:46 -0700 Subject: [PATCH 15/94] tree for editing --- base/mar/react/door.hook | 2 +- base/pub/tree/src/css/main.css | 6 +++++- base/pub/tree/src/css/main.styl | 6 +++++- base/tree/hymn.hook | 2 +- base/tree/json.hook | 6 +++--- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/base/mar/react/door.hook b/base/mar/react/door.hook index 458e47f69..1882da030 100644 --- a/base/mar/react/door.hook +++ b/base/mar/react/door.hook @@ -54,7 +54,7 @@ == ++ react-js (crip tape) :: ++ js react-js :: convert to %js - ++ mime [/text/javascript (taco react-js)] :: convert to %mime + ++ mime [/text/javascript (taco react-js)] :: convert to %mime -- ++ grab |% :: convert from ++ noun manx :: clam from %noun diff --git a/base/pub/tree/src/css/main.css b/base/pub/tree/src/css/main.css index 1a2787de3..90b934f2f 100644 --- a/base/pub/tree/src/css/main.css +++ b/base/pub/tree/src/css/main.css @@ -75,6 +75,7 @@ html { font-family: "bau", "Helvetica Neue", helvetica, arial, sans-serif; } code, +pre, li:before, .spin, #bred a { @@ -126,13 +127,16 @@ h3 code { font-size: inherit; padding: 0.3rem; } +pre, +code { + font-size: 0.8rem; +} pre { background-color: #f5f5f5; padding: 0.3rem; margin-left: -0.3rem; } code { - font-size: 0.8rem; line-height: 1.2rem; background-color: #f4f4f4; margin-top: -0.05rem; diff --git a/base/pub/tree/src/css/main.styl b/base/pub/tree/src/css/main.styl index f3c922aae..e87456613 100644 --- a/base/pub/tree/src/css/main.styl +++ b/base/pub/tree/src/css/main.styl @@ -5,6 +5,7 @@ html font-family "bau","Helvetica Neue",helvetica,arial,sans-serif code +pre li:before .spin #bred a @@ -56,13 +57,16 @@ h3 code font-size inherit padding .3rem +pre +code + font-size .8rem + pre background-color #f5f5f5 padding .3rem margin-left -.3rem code - font-size .8rem line-height 1.2rem background-color #f4f4f4 margin-top -.05rem diff --git a/base/tree/hymn.hook b/base/tree/hymn.hook index 1c7c626c0..ba461d47e 100644 --- a/base/tree/hymn.hook +++ b/base/tree/hymn.hook @@ -1,7 +1,7 @@ :: /? 314 /= gas /$ fuel -/= ral /: /=home=/pub /% /react-js/ +/= ral /: /=home= /% /react-js/ :: :::: :: diff --git a/base/tree/json.hook b/base/tree/json.hook index 6a5c01a23..b850c877e 100644 --- a/base/tree/json.hook +++ b/base/tree/json.hook @@ -1,13 +1,13 @@ :: /? 314 /= gas /$ fuel -/= ral /: /=home=/pub /% /react-js/ -/= pal /: /=home=/pub +/= ral /: /=home= /% /react-js/ +/= pal /: /=home= /; |= a=(map ,@ta cord) a /% 2 /_ /react-js/ :: -/= sal /: /=home=/pub +/= sal /: /=home= /; |= a=(map ,@ta json) a /% 2 /_ /react-snip-json/ From 52a59d8ef1c0fb91bfd7d9076c7e699357f28b23 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 8 May 2015 17:13:10 -0700 Subject: [PATCH 16/94] fix cached dependencies --- base/arvo/ford.hoon | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/base/arvo/ford.hoon b/base/arvo/ford.hoon index 7962cc932..1927d432d 100644 --- a/base/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -301,6 +301,7 @@ ~&(dep-empty/hen +>.$) =+ dap=(~(get by deh.bay) dep) ?~ dap ~&(dep-missed/dep +>.$) :: XX ~| !! + :: ~& awap/[dep u.dap] ?- -.u.dap %done +>.$(mow :_(mow [hen %give %news ~])) %sent @@ -379,7 +380,7 @@ %0 =^ cux p.hoc ((calk p.hoc) sem q.q.hoc) ?^ cux - [p=p.hoc q=[%0 p=p.q.hoc q=((calf sem) u.cux)]] + [p=p.hoc q=[%0 p=dep.p.u.cux q=((calf sem) u.cux)]] =+ nuf=(cope hoc fun) ?- -.q.nuf %2 nuf @@ -1124,6 +1125,7 @@ (fine cof [p.kas u.vux]) :: %boil + ^- (bolt gage) %+ cool |.(leaf/"ford: boil {} {<(tope q.kas)>} {}") %+ cope (lamp cof q.kas) |= [cof=cafe bem=beam] From 49cc3c5c577f95cabb98bc95fb461f193e2c2703 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 8 May 2015 17:34:06 -0700 Subject: [PATCH 17/94] Made bad-cookie nonfatal --- base/arvo/eyre.hoon | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 3df11c613..1b1fd3927 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -1071,9 +1071,11 @@ =+ lig=(session-from-cookies pef maf) ?~ lig (new-ya (rsh 3 1 (scot %p (end 6 1 ney)))) - ~| bad-cookie/u.lig - =+ cyz=(~(got by wup) u.lig) - ~(. ya u.lig cyz(him him, cug ~)) + =+ cyz=(~(get by wup) u.lig) + ?~ cyz + ~& bad-cookie/u.lig + (new-ya (rsh 3 1 (scot %p (end 6 1 ney)))) + ~(. ya u.lig u.cyz(him him, cug ~)) :: ++ new-ya |=(ses=hole ~(. ya ses (new-cyst ses))) ++ new-cyst From cf6cd46177655dda83eac0533e918af5a1b16b3d Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 8 May 2015 18:08:18 -0700 Subject: [PATCH 18/94] Various fixes and improvements. --- base/ape/octo/core.hook | 49 ++++++------------ base/ape/ucto/core.hook | 98 +++++------------------------------- base/arvo/gall.hoon | 2 +- base/arvo/hoon.hoon | 20 +++++++- base/arvo/zuse.hoon | 2 +- base/mar/acto-game/door.hook | 12 +++++ 6 files changed, 59 insertions(+), 124 deletions(-) create mode 100644 base/mar/acto-game/door.hook diff --git a/base/ape/octo/core.hook b/base/ape/octo/core.hook index 31da2e81d..3c963efba 100644 --- a/base/ape/octo/core.hook +++ b/base/ape/octo/core.hook @@ -1,5 +1,5 @@ :: ::::::::::::::: -:::: /hook/core/octo/ape :: :: :: build +:::: /hook/core/acto/ape :: :: :: build :: ::::::::::::::: /- *sole :: structures /+ sole :: libraries @@ -56,28 +56,12 @@ == :: ++ face (pair (list ,@c) (map bone sole-share)) :: interface ++ lime $% [%sole-effect sole-effect] :: :sole update - [%octo-game game] :: :octo update + [%acto-game game] :: :acto update == :: ++ move (pair bone card) :: cause and action ++ mote (pair ship ,?) :: remote binding - ++ sink (trel bone ship path) :: promote ++ tube (unit (pair ,? mote)) :: alive, remote -- :: -=> |% :: promote - ++ pick - |* [a=_rule b=_rule] - ;~ pose - (stag %& a) - (stag %| b) - == - ++ punt - |* [a=_rule] - ;~(pose (stag ~ a) (easy ~)) - :: - ++ flag - |= [sic=@t non=@t] - ;~(pose (cold %& (jest sic)) (cold %| (jest non))) - -- :: => |% :: parsers ++ colm (cook |=(a=@ (sub a '1')) (shim '1' '3')) :: row or column ++ come ;~(plug colm ;~(pfix fas colm)) :: coordinate @@ -97,7 +81,6 @@ ?~ cul (park:abet(p.eye buf.say) | ~) :: abet:beep:(emit det/u.cul) :: ++ emit |= fec=sole-effect ^+ +> :: send effect - ?< =(0 ost) +>(moz [[ost %diff %sole-effect fec] moz]) :: ++ emil |= fex=(list sole-effect) :: send effects ?~(fex +> $(fex t.fex, +> (emit i.fex))) :: @@ -117,7 +100,7 @@ ?-(lev %0 +>, %1 line, %2 line:show:prom) :: ++ plow |= [lev=?(%0 %1 %2) mus=(unit tape)] :: complete print abet:(mean:(play lev) mus) :: - ++ prom %^ emit %pro %& :- %octo :: update prompt + ++ prom %^ emit %pro %& :- %acto :: update prompt ?: wait "(xir turn) " :: ": {~[(icon who.gam)]} to move (row/col): " :: ++ plan |= mut=(unit mote) :: peer command @@ -131,37 +114,33 @@ ?:(?=(%det -.act) (delt +.act) make) :: -- :: ++ abet [(flop moz) .(moz ~)] :: resolve core -++ dump %_(+> moz [mov moz]) :: send move +++ dump |=(mov=move %_(+> moz [mov moz])) :: send move ++ dish |=(cad=card (dump 0 cad)) :: forward move ++ 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 +++ like |=(xir=ship |*(* [/acto [xir %octo] +<])) :: to friend ++ link |= mot=mote %- dish(but `[| mot]) :: subscribe to friend - peer/((like p.mot) /octo/[?:(q.mot %x %o)]) :: -++ pale |=(f=$+(sink ?) (skim (~(tap by sup.hid)) f)) :: filter peers -++ pals %+ turn (pale (prix /sole)) |= sink :: per console + peer/((like p.mot) /acto/[?:(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 =. +> ?:(=(%2 lev) push +>) :: =+ pals :: |- ^+ +>.^$ ?~ +< +>.^$ :: $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: -++ prix |= pax=path |= sink ^- ? :: filter gate - ?~ pax & ?~ r.+< | :: - &(=(i.pax i.r.+<) $(pax t.pax, r.+< t.r.+<)) :: -++ push =+ pey=(pale (prix /octo)) |- ^+ +> :: update friends +++ push =+ pey=(pale hid (prix /acto)) |- ^+ +> :: update friends ?~(pey +> $(pey t.pey, +> (sell p.i.pey))) :: -++ sell |=(ost=bone (dump ost %diff %octo-game gam)) :: update friend +++ sell |=(ost=bone (dump ost %diff %acto-game gam)) :: update friend ++ stop (dish(but ~) pull/((like +>-.but) ~)) :: cancel subscribe :: ::::::::::::::: :::: :: :: :: hooks :: ::::::::::::::: -++ diff-octo-game :: friend update +++ diff-acto-game :: friend update |= [then gam=game] =< abet :: ?. &(?=([~ %& *] but) =(src p.q.u.but)) +> :: ?: =(^gam gam) +> :: (park(gam gam) %2 ~) :: -++ peer-octo :: linked by friend +++ peer-acto :: linked by friend |= [from pax=path] =< abet :: =+ who==(%x -.pax) :: ?^ but (park %2 ~) :: [~ %& !who src] @@ -179,15 +158,15 @@ %1 +>(+<+ u.old) :: %0 +>(eye.+< eye.+>.old, gam.+< gam.+>.old):: == :: -++ pull-octo :: +++ pull-acto :: |= [from ~] =< abet :: (park(but ~) %0 `"dropped") :: ++ pull-sole :: disconnect console |= [from *] =< abet :: amok:(flet +<-) :: -++ quit-octo :: unlinked by friend +++ quit-acto :: unlinked by friend |=([then ~] abet:(park(but ~) %0 `"removed")) :: -++ reap-octo :: linked to friend +++ reap-acto :: linked to friend |= [then saw=(unit tang)] =< abet :: ?> ?=([~ %| *] but) :: ?^ saw (park:stop %0 `"fail to {}") :: diff --git a/base/ape/ucto/core.hook b/base/ape/ucto/core.hook index 31da2e81d..f54f92b6e 100644 --- a/base/ape/ucto/core.hook +++ b/base/ape/ucto/core.hook @@ -1,5 +1,5 @@ :: ::::::::::::::: -:::: /hook/core/octo/ape :: :: :: build +:::: /hook/core/acto/ape :: :: :: build :: ::::::::::::::: /- *sole :: structures /+ sole :: libraries @@ -47,43 +47,15 @@ :::: :: :: :: agent :: ::::::::::::::: => |% :: arvo structures - ++ axle ,[%1 eye=face but=tube gam=game] :: agent state - ++ axon $?(axle [%0 eye=face gam=game]) :: historical state - ++ card $% [%diff lime] :: update - [%quit ~] :: cancel - [%peer wire dock path] :: subscribe - [%pull wire dock ~] - == :: + ++ axle ,[%0 eye=face but=tube gam=game] :: agent state + ++ card ,[%diff lime] :: update ++ face (pair (list ,@c) (map bone sole-share)) :: interface - ++ lime $% [%sole-effect sole-effect] :: :sole update - [%octo-game game] :: :octo update - == :: + ++ lime ,[%sole-effect sole-effect] :: :sole update ++ move (pair bone card) :: cause and action - ++ mote (pair ship ,?) :: remote binding - ++ sink (trel bone ship path) :: promote - ++ tube (unit (pair ,? mote)) :: alive, remote - -- :: -=> |% :: promote - ++ pick - |* [a=_rule b=_rule] - ;~ pose - (stag %& a) - (stag %| b) - == - ++ punt - |* [a=_rule] - ;~(pose (stag ~ a) (easy ~)) - :: - ++ flag - |= [sic=@t non=@t] - ;~(pose (cold %& (jest sic)) (cold %| (jest non))) -- :: => |% :: 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 - ++ comp ;~(plug fed:ag ;~(pfix ace (flag %x %o))) :: login command - ++ cope |=(? ?:(+< (stag %| (cold ~ sig)) comb)) :: with wait mode -- :: |_ [hid=hide moz=(list move) axle] :: per agent ++ et :: @@ -91,105 +63,59 @@ ++ abet +>(q.eye (~(put by q.eye) ost say)) :: continue ++ amok +>(q.eye (~(del by q.eye) ost)) :: discontinue ++ beep (emit %bel ~) :: bad user - ++ cusp (cope wait) :: parsing rule ++ delt |= cal=sole-change :: input line change =^ cul say (remit:sole cal good) :: ?~ cul (park:abet(p.eye buf.say) | ~) :: abet:beep:(emit det/u.cul) :: ++ emit |= fec=sole-effect ^+ +> :: send effect - ?< =(0 ost) +>(moz [[ost %diff %sole-effect fec] moz]) :: ++ emil |= fex=(list sole-effect) :: send effects ?~(fex +> $(fex t.fex, +> (emit i.fex))) :: - ++ good |=((list ,@c) -:(rose (tufa +<) cusp)) :: valid input + ++ good |=((list ,@c) -:(rose (tufa +<) come)) :: valid input ++ kick |= point :: move command =^ dud gam ~(m ~(at go gam) +<) :: ?. dud abet:beep =+ mus=~(res go gam) :: (park:abet(gam ?^(mus *game gam)) %2 mus) :: ++ line =^ cal say (transmit:sole set/p.eye) :: update command (emit %det cal) :: - ++ make =+ dur=(rust (tufa p.eye) comb) :: + ++ make =+ dur=(rust (tufa p.eye) come) :: ?~ dur abet:beep :: - =. + line(p.eye ~) :: - ?-(+<.dur & (kick +>.dur), | (plan +>.dur)) :: + (kick:line(p.eye ~) +.dur) :: ++ mean |=((unit tape) ?~(+< +> (emit txt/+<+))) :: optional message ++ play |= lev=?(%0 %1 %2) :: update by level ?-(lev %0 +>, %1 line, %2 line:show:prom) :: ++ plow |= [lev=?(%0 %1 %2) mus=(unit tape)] :: complete print abet:(mean:(play lev) mus) :: - ++ prom %^ emit %pro %& :- %octo :: update prompt - ?: wait "(xir turn) " :: + ++ prom %^ emit %pro %& :- %acto :: update prompt ": {~[(icon who.gam)]} to move (row/col): " :: - ++ plan |= mut=(unit mote) :: peer command - ?~ mut ?~(but abet:beep stop:abet) :: - ?^(but abet:beep (link:abet u.mut)) :: ++ rend (turn `wall`~(tab go gam) |=(tape txt/+<)) :: table print ++ show (emit %mor rend) :: update board ++ sole ~(. cs say) :: console library - ++ wait &(?=(^ but) !=(q.q.u.but who.gam)) :: waiting turn ++ work |= act=sole-action :: console input ?:(?=(%det -.act) (delt +.act) make) :: -- :: ++ abet [(flop moz) .(moz ~)] :: resolve core -++ dump %_(+> moz [mov moz]) :: send move -++ dish |=(cad=card (dump 0 cad)) :: forward move ++ 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)]) :: -++ pale |=(f=$+(sink ?) (skim (~(tap by sup.hid)) f)) :: filter peers -++ pals %+ turn (pale (prix /sole)) |= sink :: per console +++ 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 - =. +> ?:(=(%2 lev) push +>) :: =+ pals :: |- ^+ +>.^$ ?~ +< +>.^$ :: $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: -++ prix |= pax=path |= sink ^- ? :: filter gate - ?~ pax & ?~ r.+< | :: - &(=(i.pax i.r.+<) $(pax t.pax, r.+< t.r.+<)) :: -++ push =+ pey=(pale (prix /octo)) |- ^+ +> :: update friends - ?~(pey +> $(pey t.pey, +> (sell p.i.pey))) :: -++ sell |=(ost=bone (dump ost %diff %octo-game gam)) :: update friend -++ stop (dish(but ~) pull/((like +>-.but) ~)) :: cancel subscribe :: ::::::::::::::: :::: :: :: :: hooks :: ::::::::::::::: -++ diff-octo-game :: friend update - |= [then gam=game] =< abet :: - ?. &(?=([~ %& *] but) =(src p.q.u.but)) +> :: - ?: =(^gam gam) +> :: - (park(gam gam) %2 ~) :: -++ peer-octo :: linked by friend - |= [from pax=path] =< abet :: - =+ who==(%x -.pax) :: - ?^ but (park %2 ~) :: [~ %& !who src] - (park:(link src !who) %2 `"link by {}") :: ++ peer-sole :: console subscribe |= [from *] =< abet :: (plow:(fret +<-) %2 ~) :: ++ poke-sole-action :: console input |= [from act=sole-action] =< abet :: (work:(flet +<-) act) :: -++ prep |= [from old=(unit ,[(list move) axon])] :: initialize - =< abet ?~ old +> :: - =< (park %2 ~) :: - ?- -.+>.old :: - %1 +>(+<+ u.old) :: - %0 +>(eye.+< eye.+>.old, gam.+< gam.+>.old):: - == :: -++ pull-octo :: - |= [from ~] =< abet :: - (park(but ~) %0 `"dropped") :: +++ prep |= [from old=(unit ,[(list move) axle])] :: initialize + =< abet ?~ old +> =< (park %2 ~) :: + +>(+<+ u.old) :: ++ pull-sole :: disconnect console |= [from *] =< abet :: amok:(flet +<-) :: -++ quit-octo :: unlinked by friend - |=([then ~] abet:(park(but ~) %0 `"removed")) :: -++ reap-octo :: linked to friend - |= [then saw=(unit tang)] =< abet :: - ?> ?=([~ %| *] but) :: - ?^ saw (park:stop %0 `"fail to {}") :: - (park(p.u.but %&) %0 `"link to {}") :: -- diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 5d39723f5..c40ca43f7 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -226,7 +226,7 @@ ~& [%lump-path-bad pax] !! :- :- (slav %p i.pax) - (need (pick i.t.pax)) + (need (puck i.t.pax)) t.t.pax -- . == :: end preface diff --git a/base/arvo/hoon.hoon b/base/arvo/hoon.hoon index 2a3321e6e..05997f616 100644 --- a/base/arvo/hoon.hoon +++ b/base/arvo/hoon.hoon @@ -2733,6 +2733,10 @@ =|([p=@ q=@] |.((add p (mul wuc q)))) tyd :: +++ flag + |= [sic=@t non=@t] + ;~(pose (cold %& (jest sic)) (cold %| (jest non))) +:: ++ ifix |* [fel=[p=_rule q=_rule] hof=_rule] ;~(pfix p.fel ;~(sfix hof q.fel)) @@ -2745,7 +2749,15 @@ |* [bus=_rule fel=_rule] ;~(plug fel (star ;~(pfix bus fel))) :: +++ pick + |* [a=_rule b=_rule] + ;~ pose + (stag %& a) + (stag %| b) + == +:: ++ plus |*(fel=_rule ;~(plug fel (star fel))) +++ punt |*([a=_rule] ;~(pose (stag ~ a) (easy ~))) ++ slug |* raq=_|*([a=* b=*] [a b]) |* [bus=_rule fel=_rule] @@ -9654,6 +9666,7 @@ ++ pane (list ,[p=@tas q=vase]) :: kernel modules ++ pone (list ,[p=@tas q=vise]) :: kernel modules, old ++ ship ,@p :: network identity +++ sink (trel bone ship path) :: subscription ++ sled $+ [(unit (set monk)) term beam] :: namespace function (unit (unit cage)) :: ++ slad $+ [(unit (set monk)) term beam] :: undertyped @@ -9667,7 +9680,12 @@ mev=type :: -:!>([%meta *vase]) == :: ++ wire path :: event pretext -::::: hacks +::::: hacks and tools +++ pale |= [hid=hide fun=$+(sink ?)] :: filter peers + (skim (~(tap by sup.hid)) fun) +++ prix |= pax=path |= sink ^- ? :: filter gate + ?~ pax & ?~ r.+< | :: + &(=(i.pax i.r.+<) $(pax t.pax, r.+< t.r.+<)) :: ++ slod |= sed=slad ^- slut diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index a229aa8f7..11a85ce01 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -1746,7 +1746,7 @@ %+ rap 3 :- (wack a) (turn b |=(c=span (cat 3 '_' (wack c)))) :: -++ pick :: light path decoding +++ puck :: light path decoding =+ fel=(most cab (sear wick urt:ab)) |=(a=span `(unit ,[p=term q=path])`(rush a fel)) :: diff --git a/base/mar/acto-game/door.hook b/base/mar/acto-game/door.hook new file mode 100644 index 000000000..6b408e91a --- /dev/null +++ b/base/mar/acto-game/door.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/door/octo-game/mar + :: +/? 310 +!: +|_ cod=[who=? box=@ boo=@] :: game state +:: +++ grab :: convert from + |% + ++ noun ,[who=? box=@ boo=@] :: clam from %noun + -- +-- From ea5ab48776c78add3146103119e7ecc00e55b5df Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 9 May 2015 13:38:33 -0700 Subject: [PATCH 19/94] Various fixes and improvements. --- base/ape/acto/core.hook | 132 +++++++++++++++++++--------------- base/ape/helm/core.hook | 17 +++-- base/ape/octo/core.hook | 2 +- base/ape/ucto/core.hook | 11 ++- base/arvo/eyre.hoon | 3 - base/arvo/zuse.hoon | 20 ++++++ base/cat/helm/start/gate.hook | 11 +++ 7 files changed, 121 insertions(+), 75 deletions(-) create mode 100644 base/cat/helm/start/gate.hook diff --git a/base/ape/acto/core.hook b/base/ape/acto/core.hook index 34f1fbc30..cab01db91 100644 --- a/base/ape/acto/core.hook +++ b/base/ape/acto/core.hook @@ -1,105 +1,121 @@ -:: ::::::::::::::: build -:::: /hook/core/acto/ape :: :: :: +:: ::::::::::::::: +:::: /hook/core/acto/ape :: :: :: build :: ::::::::::::::: /- *sole :: structures /+ sole :: libraries -:: ::::::::::::::: logic -:::: :: :: :: +:: ::::::::::::::: +:::: :: :: :: logic !: ::::::::::::::: => |% :: board logic ++ board ,@ :: one-player bitfield ++ point ,[x=@ y=@] :: coordinate - ++ bo :: board core - |_ bud=board :: state - ++ off |=(point (add x (mul 3 y))) :: bitfield address + ++ game ,[who=? box=board boo=board] :: game state + ++ icon |=(? ?:(+< 'X' 'O')) :: display at + ++ bo :: per board + |_ bud=board :: ++ get |=(point =(1 (cut 0 [(off +<) 1] bud))) :: get point + ++ off |=(point (add x (mul 3 y))) :: bitfield address ++ set |=(point (con bud (bex (off +<)))) :: set point ++ win %- lien :_ |=(a=@ =(a (dis a bud))) :: test for win (rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks -- :: - -- :: -=> |% :: game logic - ++ game ,[%0 who=? box=board boo=board] :: game state - ++ go :: game core + ++ go :: per game |_ game :: - ++ at |_ point :: point core + ++ at |_ point :: per point ++ g +>+< :: game ++ k !|(x o) :: ok move ++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move ++ o (~(get bo boo) +<) :: old at o ++ p .(boo (~(set bo boo) +<)) :: play at o ++ t .(who !who) :: take turn - ++ v ?:(x 'X' ?:(o 'O' '.')) :: view + ++ v ?:(x (icon &) ?:(o (icon |) '.')) :: view ++ x (~(get bo box) +<) :: old at x ++ y .(box (~(set bo box) +<)) :: play at x -- :: - ++ pro ": {?:(who "X" "O")}'s move (row/col): " :: prompt - ++ res ?: ~(win bo box) `"X wins!" :: result - ?: ~(win bo boo) `"O wins!" :: + ++ res ?: ~(win bo box) `"{~[(icon &)]} wins" :: result + ?: ~(win bo boo) `"{~[(icon |)]} wins" :: ?: =(511 (con boo box)) `"tie :-(" ~ :: ++ row |= y=@ :~ (add y '1') :: print row ' ' ~(v at y 0) :: ' ' ~(v at y 1) :: ' ' ~(v at y 2) :: == :: - ++ tab ^- (list tape) :: print game - ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: + ++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table -- :: -- :: -:: ::::::::::::::: agent -:::: :: :: :: +:: ::::::::::::::: +:::: :: :: :: agent :: ::::::::::::::: => |% :: arvo structures - ++ card ,[%diff %sole-effect sole-effect] :: action - ++ move (pair bone card) :: operation + ++ axle ,[%0 eye=face gam=game] :: agent state + ++ card ,[%diff lime] :: update ++ face (pair (list ,@c) (map bone sole-share)) :: interface - ++ axle ,[%0 eye=face gay=game] :: agent state + ++ lime ,[%sole-effect sole-effect] :: :sole update + ++ move (pair bone card) :: cause and action -- :: -|_ [hid=hide moz=(list move) axle] :: agent core -++ et :: client core - |_ [from say=sole-share] :: +=> |% :: parsers + ++ 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 +++ et :: + |_ [from say=sole-share] :: per console client ++ abet +>(q.eye (~(put by q.eye) ost say)) :: continue ++ amok +>(q.eye (~(del by q.eye) ost)) :: discontinue - ++ numb (cook |=(a=@ (sub a '1')) (shim '1' '3')) :: parse row/column - ++ come ;~(plug numb ;~(pfix fas numb)) :: parse command - ++ good |=(a=(list ,@c) -:(rose (tufa a) come)) :: validate - ++ sole ~(. cs say) :: console core + ++ beep (emit %bel ~) :: bad user + ++ delt |= cal=sole-change :: input line change + =^ cul say (remit:sole cal good) :: + ?~ cul (park:abet(p.eye buf.say) | ~) :: + abet:beep:(emit det/u.cul) :: ++ emit |= fec=sole-effect ^+ +> :: send effect +>(moz [[ost %diff %sole-effect fec] moz]) :: ++ emil |= fex=(list sole-effect) :: send effects ?~(fex +> $(fex t.fex, +> (emit i.fex))) :: - ++ line =^ cal say (transmit:sole set/p.eye) :: update input line + ++ good |=((list ,@c) -:(rose (tufa +<) come)) :: valid input + ++ kick |= point :: move command + =^ dud gam ~(m ~(at go gam) +<) :: + ?. dud abet:beep =+ mus=~(res go gam) :: + (park:abet(gam ?^(mus *game gam)) %2 mus) :: + ++ line =^ cal say (transmit:sole set/p.eye) :: update command (emit %det cal) :: - ++ show (emil (turn ~(tab go gay) |=(tape txt/+<))) :: update board - ++ view (emit:line:show %pro %& acto/~(pro go gay)) :: full view update - ++ more |= [ful=? mus=(unit tape)] =< abet :: all updates - =. +> ?:(ful view line) :: - ?~(mus +> (emit %txt u.mus)) :: - ++ delt |= cal=sole-change :: input line change - =^ cul say (remit:sole cal good) :: - ?~ cul (park:abet(p.eye buf.say) | ~) :: - abet:(emit ~[%mor det/u.cul bel/~]) :: ++ make =+ dur=(rust (tufa p.eye) come) :: - ?~ dur abet:(emit bel/~) :: - =^ dud gay ~(m ~(at go gay) u.dur) :: - ?. dud abet:(emit bel/~) :: - =+ mus=~(res go gay) %. [& mus] :: - park:abet(p.eye ~, gay ?^(mus *game gay)) :: + ?~ dur abet:beep :: + (kick:line(p.eye ~) +.dur) :: + ++ mean |=((unit tape) ?~(+< +> (emit txt/+<+))) :: optional message + ++ play |= lev=?(%0 %1 %2) :: update by level + ?-(lev %0 +>, %1 line, %2 line:show:prom) :: + ++ plow |= [lev=?(%0 %1 %2) mus=(unit tape)] :: complete print + abet:(mean:(play lev) mus) :: + ++ prom %^ emit %pro %& :- %acto :: update prompt + ": {~[(icon who.gam)]} to move (row/col): " :: + ++ rend (turn `wall`~(tab go gam) |=(tape txt/+<)) :: table print + ++ show (emit %mor rend) :: update board + ++ sole ~(. cs say) :: console library ++ work |= act=sole-action :: console input ?:(?=(%det -.act) (delt +.act) make) :: -- :: -++ abet [(flop moz) .(moz ~)] :: -++ pals %+ turn (~(tap by sup.hid)) :: list clients - |= [a=bone b=ship c=path] :: - [[p=a q=b] r=(~(got by q.eye) a)] :: -++ park |= [ful=? mus=(unit tape)] :: - =+ pals |- ^+ +>.^$ :: update clients - ?~ +< +>.^$ :: - $(+< t.+<, +>.^$ (~(more et i.+<) ful mus)) :: -++ flet |=(from ~(. et +< (~(got by q.eye) ost))) :: existing peer -++ fret |=(from ~(. et +< *sole-share)) :: new peer -++ peer-sole |=([from *] abet:abet:view:(fret +<-)) :: connect -++ pull-sole |=([from *] abet:amok:(flet +<-)) :: disconnect +++ abet [(flop moz) .(moz ~)] :: resolve core +++ flet |=(from ~(. et +< (~(got by q.eye) ost))) :: in old client +++ fret |=(from ~(. et +< *sole-share)) :: in new client +++ 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 + =+ pals :: + |- ^+ +>.^$ ?~ +< +>.^$ :: + $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: +:: ::::::::::::::: +:::: :: :: :: hooks + :: ::::::::::::::: +++ peer-sole :: console subscribe + |= [from *] =< abet :: + (plow:(fret +<-) %2 ~) :: ++ poke-sole-action :: console input - |=([from act=sole-action] abet:(work:(flet +<-) act)) :: + |= [from act=sole-action] =< abet :: + (work:(flet +<-) act) :: +++ prep |= [from old=(unit ,[(list move) axle])] :: initialize + =< abet ?~ old +> =< (park %2 ~) :: + +>(+<+ u.old) :: +++ pull-sole :: disconnect console + |= [from *] =< abet :: + amok:(flet +<-) :: -- diff --git a/base/ape/helm/core.hook b/base/ape/helm/core.hook index b71b14960..dcbee84d8 100644 --- a/base/ape/helm/core.hook +++ b/base/ape/helm/core.hook @@ -13,11 +13,13 @@ bur=(unit (pair ship mace)) :: requesting ticket hoc=(map bone helm-session) :: consoles == :: + ++ helm-house ,[%1 (list helm-room)] + ++ + ++ helm-session :: $: say=sole-share :: mud=(unit (sole-dialog ,@ud)) :: == :: - ++ funk (pair ,@ ,@) :: ++ begs ,[his=@p tic=@p eny=@t ges=gens] :: begin data ++ suss ,[term @tas @da] :: config report ++ helm-wish :: @@ -54,8 +56,8 @@ [(flop moz) %_(+> hoc (~(put by hoc) ost +<+))] :: :: :: ++ he-wish-start - |= dap=term - %_(+> moz :_(moz [ost %conf /start [our.hid dap] %load our.hid %main])) + |= [who=ship dap=term] + %_(+> moz :_(moz [ost %conf /start [our.hid dap] %load who %base])) :: ++ he-wish-reset ^+ . @@ -146,8 +148,8 @@ he-abet:(he-wish-reload:(hake ost src) all) :: ++ poke-helm-start - |= [from dap=term] - he-abet:(he-wish-start:(hake ost src) dap) + |= [from who=ship dap=term] + he-abet:(he-wish-start:(hake ost src) who dap) :: ++ poke-helm-begin |= [from begs] @@ -175,9 +177,10 @@ :: ++ onto |= [then saw=(each suss tang)] + ^- (quip move +>) :_ +> :_ ~ ?- -.saw - %| [ost %pass ~ %flog %crud `@tas`-.way `tang`p.saw] - %& [ost %pass ~ %flog %text "<{}>"] + %| [ost %flog ~ %crud `@tas`-.way `tang`p.saw] + %& [ost %flog ~ %text "<{}>"] == -- diff --git a/base/ape/octo/core.hook b/base/ape/octo/core.hook index 3c963efba..894757e0b 100644 --- a/base/ape/octo/core.hook +++ b/base/ape/octo/core.hook @@ -10,7 +10,7 @@ ++ board ,@ :: one-player bitfield ++ point ,[x=@ y=@] :: coordinate ++ game ,[who=? box=board boo=board] :: game state - ++ icon |=(? ?:(+< 'X' 'O')) :: display at + ++ icon |=(? ?:(+< 'Q' 'O')) :: display at ++ bo :: per board |_ bud=board :: ++ get |=(point =(1 (cut 0 [(off +<) 1] bud))) :: get point diff --git a/base/ape/ucto/core.hook b/base/ape/ucto/core.hook index f54f92b6e..a746b49c5 100644 --- a/base/ape/ucto/core.hook +++ b/base/ape/ucto/core.hook @@ -17,7 +17,7 @@ ++ off |=(point (add x (mul 3 y))) :: bitfield address ++ set |=(point (con bud (bex (off +<)))) :: set point ++ win %- lien :_ |=(a=@ =(a (dis a bud))) :: test for win - (rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks + (rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: -- :: ++ go :: per game |_ game :: @@ -47,10 +47,10 @@ :::: :: :: :: agent :: ::::::::::::::: => |% :: arvo structures - ++ axle ,[%0 eye=face but=tube gam=game] :: agent state + ++ axle ,[%0 eye=face gam=game] :: agent state ++ card ,[%diff lime] :: update ++ face (pair (list ,@c) (map bone sole-share)) :: interface - ++ lime ,[%sole-effect sole-effect] :: :sole update + ++ lime ,[%sole-effect sole-effect] :: console update ++ move (pair bone card) :: cause and action -- :: => |% :: parsers @@ -99,9 +99,8 @@ ++ fret |=(from ~(. et +< *sole-share)) :: in new client ++ 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 - =+ pals :: - |- ^+ +>.^$ ?~ +< +>.^$ :: +++ park |= [lev=?(%0 %1 %2) mus=(unit tape)] :: general update + =+ pals |- ^+ +>.^$ ?~ +< +>.^$ :: $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: :: ::::::::::::::: :::: :: :: :: hooks diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 1b1fd3927..a92b8d91b 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -1200,17 +1200,14 @@ :: ++ new-mess |= [a=hasp b=wire c=cage] ^+ ..ix - :: (hurl-note [a b] [%g %mess [- + ~]:a him c]) (hurl-note [a b] [%b %deal [him -.a] +.a %poke c]) :: ++ add-subs |= [a=hasp %json b=wire c=path] ^+ ..ix - :: (hurl-note [a b] [%g %show [- + ~]:a him c]) (hurl-note [a b] [%b %deal [him -.a] +.a %peer c]) :: ++ del-subs :: XX per path? |= [a=hasp %json b=wire c=path] ^+ ..ix - :: (hurl-note [a b] [%g %nuke [- + ~]:a him]) (hurl-note [a b] [%b %deal [him -.a] +.a %pull ~]) :: ++ get-rush diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index 11a85ce01..40c622dd2 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -2263,4 +2263,24 @@ ++ wund (list ,[p=life q=ring r=acru]) :: mace in action ++ will (list deed) :: certificate ++ zuse %310 :: hoon/zuse kelvin +:: :: +:::: :::: this will become `%york`, separating out structures + :: :: related to arvo in + + + + + + + + + + + + + + + + + -- diff --git a/base/cat/helm/start/gate.hook b/base/cat/helm/start/gate.hook new file mode 100644 index 000000000..a9b650b02 --- /dev/null +++ b/base/cat/helm/start/gate.hook @@ -0,0 +1,11 @@ +:: +:::: /hook/gate/start/helm/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [[who=@p dap=term ~] ~] + == +[%helm-start who dap] From b8317260a9fcbf73d153cecaaa0432eaf2e70624 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 9 May 2015 13:40:53 -0700 Subject: [PATCH 20/94] Deprecate old apps to improve name completion. --- base/{app => fap}/bang/core.hook | 0 base/{app => fap}/began/core.hook | 0 base/{app => fap}/begin/core.hook | 0 base/{app => fap}/cat/core.hook | 0 base/{app => fap}/chat/core.hook | 0 base/{app => fap}/code/core.hook | 0 base/{app => fap}/cp/core.hook | 0 base/{app => fap}/curl/core.hook | 0 base/{app => fap}/dojo/core.hook | 0 base/{app => fap}/gnab/core.hook | 0 base/{app => fap}/grep/core.hook | 0 base/{app => fap}/helm/core.hook | 0 base/{app => fap}/hi/core.hook | 0 base/{app => fap}/into/core.hook | 0 base/{app => fap}/label/core.hook | 0 base/{app => fap}/ls/core.hook | 0 base/{app => fap}/ls/subdir.hoon | 0 base/{app => fap}/matrix/hymn.hook | 0 base/{app => fap}/mv/core.hook | 0 base/{app => fap}/nop/core.hook | 0 base/{app => fap}/peek/core.hook | 0 base/{app => fap}/poke/core.hook | 0 base/{app => fap}/pope/core.hook | 0 base/{app => fap}/reboot/core.hook | 0 base/{app => fap}/reload/core.hook | 0 base/{app => fap}/reset/core.hook | 0 base/{app => fap}/rm/core.hook | 0 base/{app => fap}/shell/core.hook | 0 base/{app => fap}/sole/core.hook | 0 base/{app => fap}/solid/core.hook | 0 base/{app => fap}/sync/core.hook | 0 base/{app => fap}/talk/core.hook | 0 base/{app => fap}/tease/core.hook | 0 base/{app => fap}/terminal/core.hook | 0 base/{app => fap}/terminal/hymn.hook | 0 base/{app => fap}/terminal/hymn/script.js | 0 base/{app => fap}/terminal/hymn/style.css | 0 base/{app => fap}/test/app.js | 0 base/{app => fap}/test/core.hook | 0 base/{app => fap}/test/front/hymn.hook | 0 base/{app => fap}/test/style.css | 0 base/{app => fap}/ticket/core.hook | 0 base/{app => fap}/time/core.hook | 0 base/{app => fap}/tree/core.hook | 0 base/{app => fap}/tweet/core.hook | 0 base/{app => fap}/twit/core.hook | 0 base/{app => fap}/twit/hoontap-keys.hoon | 0 base/{app => fap}/twitter-auth/core.hook | 0 base/{app => fap}/twitter-auth/hoontap-keys.txt | 0 base/{app => fap}/twitter-feed/core.hook | 0 base/{app => fap}/type/core.hook | 0 base/{app => fap}/unsync/core.hook | 0 base/{app => fap}/verb/core.hook | 0 base/{app => fap}/wipe/core.hook | 0 base/{app => fap}/ye/core.hook | 0 55 files changed, 0 insertions(+), 0 deletions(-) rename base/{app => fap}/bang/core.hook (100%) rename base/{app => fap}/began/core.hook (100%) rename base/{app => fap}/begin/core.hook (100%) rename base/{app => fap}/cat/core.hook (100%) rename base/{app => fap}/chat/core.hook (100%) rename base/{app => fap}/code/core.hook (100%) rename base/{app => fap}/cp/core.hook (100%) rename base/{app => fap}/curl/core.hook (100%) rename base/{app => fap}/dojo/core.hook (100%) rename base/{app => fap}/gnab/core.hook (100%) rename base/{app => fap}/grep/core.hook (100%) rename base/{app => fap}/helm/core.hook (100%) rename base/{app => fap}/hi/core.hook (100%) rename base/{app => fap}/into/core.hook (100%) rename base/{app => fap}/label/core.hook (100%) rename base/{app => fap}/ls/core.hook (100%) rename base/{app => fap}/ls/subdir.hoon (100%) rename base/{app => fap}/matrix/hymn.hook (100%) rename base/{app => fap}/mv/core.hook (100%) rename base/{app => fap}/nop/core.hook (100%) rename base/{app => fap}/peek/core.hook (100%) rename base/{app => fap}/poke/core.hook (100%) rename base/{app => fap}/pope/core.hook (100%) rename base/{app => fap}/reboot/core.hook (100%) rename base/{app => fap}/reload/core.hook (100%) rename base/{app => fap}/reset/core.hook (100%) rename base/{app => fap}/rm/core.hook (100%) rename base/{app => fap}/shell/core.hook (100%) rename base/{app => fap}/sole/core.hook (100%) rename base/{app => fap}/solid/core.hook (100%) rename base/{app => fap}/sync/core.hook (100%) rename base/{app => fap}/talk/core.hook (100%) rename base/{app => fap}/tease/core.hook (100%) rename base/{app => fap}/terminal/core.hook (100%) rename base/{app => fap}/terminal/hymn.hook (100%) rename base/{app => fap}/terminal/hymn/script.js (100%) rename base/{app => fap}/terminal/hymn/style.css (100%) rename base/{app => fap}/test/app.js (100%) rename base/{app => fap}/test/core.hook (100%) rename base/{app => fap}/test/front/hymn.hook (100%) rename base/{app => fap}/test/style.css (100%) rename base/{app => fap}/ticket/core.hook (100%) rename base/{app => fap}/time/core.hook (100%) rename base/{app => fap}/tree/core.hook (100%) rename base/{app => fap}/tweet/core.hook (100%) rename base/{app => fap}/twit/core.hook (100%) rename base/{app => fap}/twit/hoontap-keys.hoon (100%) rename base/{app => fap}/twitter-auth/core.hook (100%) rename base/{app => fap}/twitter-auth/hoontap-keys.txt (100%) rename base/{app => fap}/twitter-feed/core.hook (100%) rename base/{app => fap}/type/core.hook (100%) rename base/{app => fap}/unsync/core.hook (100%) rename base/{app => fap}/verb/core.hook (100%) rename base/{app => fap}/wipe/core.hook (100%) rename base/{app => fap}/ye/core.hook (100%) diff --git a/base/app/bang/core.hook b/base/fap/bang/core.hook similarity index 100% rename from base/app/bang/core.hook rename to base/fap/bang/core.hook diff --git a/base/app/began/core.hook b/base/fap/began/core.hook similarity index 100% rename from base/app/began/core.hook rename to base/fap/began/core.hook diff --git a/base/app/begin/core.hook b/base/fap/begin/core.hook similarity index 100% rename from base/app/begin/core.hook rename to base/fap/begin/core.hook diff --git a/base/app/cat/core.hook b/base/fap/cat/core.hook similarity index 100% rename from base/app/cat/core.hook rename to base/fap/cat/core.hook diff --git a/base/app/chat/core.hook b/base/fap/chat/core.hook similarity index 100% rename from base/app/chat/core.hook rename to base/fap/chat/core.hook diff --git a/base/app/code/core.hook b/base/fap/code/core.hook similarity index 100% rename from base/app/code/core.hook rename to base/fap/code/core.hook diff --git a/base/app/cp/core.hook b/base/fap/cp/core.hook similarity index 100% rename from base/app/cp/core.hook rename to base/fap/cp/core.hook diff --git a/base/app/curl/core.hook b/base/fap/curl/core.hook similarity index 100% rename from base/app/curl/core.hook rename to base/fap/curl/core.hook diff --git a/base/app/dojo/core.hook b/base/fap/dojo/core.hook similarity index 100% rename from base/app/dojo/core.hook rename to base/fap/dojo/core.hook diff --git a/base/app/gnab/core.hook b/base/fap/gnab/core.hook similarity index 100% rename from base/app/gnab/core.hook rename to base/fap/gnab/core.hook diff --git a/base/app/grep/core.hook b/base/fap/grep/core.hook similarity index 100% rename from base/app/grep/core.hook rename to base/fap/grep/core.hook diff --git a/base/app/helm/core.hook b/base/fap/helm/core.hook similarity index 100% rename from base/app/helm/core.hook rename to base/fap/helm/core.hook diff --git a/base/app/hi/core.hook b/base/fap/hi/core.hook similarity index 100% rename from base/app/hi/core.hook rename to base/fap/hi/core.hook diff --git a/base/app/into/core.hook b/base/fap/into/core.hook similarity index 100% rename from base/app/into/core.hook rename to base/fap/into/core.hook diff --git a/base/app/label/core.hook b/base/fap/label/core.hook similarity index 100% rename from base/app/label/core.hook rename to base/fap/label/core.hook diff --git a/base/app/ls/core.hook b/base/fap/ls/core.hook similarity index 100% rename from base/app/ls/core.hook rename to base/fap/ls/core.hook diff --git a/base/app/ls/subdir.hoon b/base/fap/ls/subdir.hoon similarity index 100% rename from base/app/ls/subdir.hoon rename to base/fap/ls/subdir.hoon diff --git a/base/app/matrix/hymn.hook b/base/fap/matrix/hymn.hook similarity index 100% rename from base/app/matrix/hymn.hook rename to base/fap/matrix/hymn.hook diff --git a/base/app/mv/core.hook b/base/fap/mv/core.hook similarity index 100% rename from base/app/mv/core.hook rename to base/fap/mv/core.hook diff --git a/base/app/nop/core.hook b/base/fap/nop/core.hook similarity index 100% rename from base/app/nop/core.hook rename to base/fap/nop/core.hook diff --git a/base/app/peek/core.hook b/base/fap/peek/core.hook similarity index 100% rename from base/app/peek/core.hook rename to base/fap/peek/core.hook diff --git a/base/app/poke/core.hook b/base/fap/poke/core.hook similarity index 100% rename from base/app/poke/core.hook rename to base/fap/poke/core.hook diff --git a/base/app/pope/core.hook b/base/fap/pope/core.hook similarity index 100% rename from base/app/pope/core.hook rename to base/fap/pope/core.hook diff --git a/base/app/reboot/core.hook b/base/fap/reboot/core.hook similarity index 100% rename from base/app/reboot/core.hook rename to base/fap/reboot/core.hook diff --git a/base/app/reload/core.hook b/base/fap/reload/core.hook similarity index 100% rename from base/app/reload/core.hook rename to base/fap/reload/core.hook diff --git a/base/app/reset/core.hook b/base/fap/reset/core.hook similarity index 100% rename from base/app/reset/core.hook rename to base/fap/reset/core.hook diff --git a/base/app/rm/core.hook b/base/fap/rm/core.hook similarity index 100% rename from base/app/rm/core.hook rename to base/fap/rm/core.hook diff --git a/base/app/shell/core.hook b/base/fap/shell/core.hook similarity index 100% rename from base/app/shell/core.hook rename to base/fap/shell/core.hook diff --git a/base/app/sole/core.hook b/base/fap/sole/core.hook similarity index 100% rename from base/app/sole/core.hook rename to base/fap/sole/core.hook diff --git a/base/app/solid/core.hook b/base/fap/solid/core.hook similarity index 100% rename from base/app/solid/core.hook rename to base/fap/solid/core.hook diff --git a/base/app/sync/core.hook b/base/fap/sync/core.hook similarity index 100% rename from base/app/sync/core.hook rename to base/fap/sync/core.hook diff --git a/base/app/talk/core.hook b/base/fap/talk/core.hook similarity index 100% rename from base/app/talk/core.hook rename to base/fap/talk/core.hook diff --git a/base/app/tease/core.hook b/base/fap/tease/core.hook similarity index 100% rename from base/app/tease/core.hook rename to base/fap/tease/core.hook diff --git a/base/app/terminal/core.hook b/base/fap/terminal/core.hook similarity index 100% rename from base/app/terminal/core.hook rename to base/fap/terminal/core.hook diff --git a/base/app/terminal/hymn.hook b/base/fap/terminal/hymn.hook similarity index 100% rename from base/app/terminal/hymn.hook rename to base/fap/terminal/hymn.hook diff --git a/base/app/terminal/hymn/script.js b/base/fap/terminal/hymn/script.js similarity index 100% rename from base/app/terminal/hymn/script.js rename to base/fap/terminal/hymn/script.js diff --git a/base/app/terminal/hymn/style.css b/base/fap/terminal/hymn/style.css similarity index 100% rename from base/app/terminal/hymn/style.css rename to base/fap/terminal/hymn/style.css diff --git a/base/app/test/app.js b/base/fap/test/app.js similarity index 100% rename from base/app/test/app.js rename to base/fap/test/app.js diff --git a/base/app/test/core.hook b/base/fap/test/core.hook similarity index 100% rename from base/app/test/core.hook rename to base/fap/test/core.hook diff --git a/base/app/test/front/hymn.hook b/base/fap/test/front/hymn.hook similarity index 100% rename from base/app/test/front/hymn.hook rename to base/fap/test/front/hymn.hook diff --git a/base/app/test/style.css b/base/fap/test/style.css similarity index 100% rename from base/app/test/style.css rename to base/fap/test/style.css diff --git a/base/app/ticket/core.hook b/base/fap/ticket/core.hook similarity index 100% rename from base/app/ticket/core.hook rename to base/fap/ticket/core.hook diff --git a/base/app/time/core.hook b/base/fap/time/core.hook similarity index 100% rename from base/app/time/core.hook rename to base/fap/time/core.hook diff --git a/base/app/tree/core.hook b/base/fap/tree/core.hook similarity index 100% rename from base/app/tree/core.hook rename to base/fap/tree/core.hook diff --git a/base/app/tweet/core.hook b/base/fap/tweet/core.hook similarity index 100% rename from base/app/tweet/core.hook rename to base/fap/tweet/core.hook diff --git a/base/app/twit/core.hook b/base/fap/twit/core.hook similarity index 100% rename from base/app/twit/core.hook rename to base/fap/twit/core.hook diff --git a/base/app/twit/hoontap-keys.hoon b/base/fap/twit/hoontap-keys.hoon similarity index 100% rename from base/app/twit/hoontap-keys.hoon rename to base/fap/twit/hoontap-keys.hoon diff --git a/base/app/twitter-auth/core.hook b/base/fap/twitter-auth/core.hook similarity index 100% rename from base/app/twitter-auth/core.hook rename to base/fap/twitter-auth/core.hook diff --git a/base/app/twitter-auth/hoontap-keys.txt b/base/fap/twitter-auth/hoontap-keys.txt similarity index 100% rename from base/app/twitter-auth/hoontap-keys.txt rename to base/fap/twitter-auth/hoontap-keys.txt diff --git a/base/app/twitter-feed/core.hook b/base/fap/twitter-feed/core.hook similarity index 100% rename from base/app/twitter-feed/core.hook rename to base/fap/twitter-feed/core.hook diff --git a/base/app/type/core.hook b/base/fap/type/core.hook similarity index 100% rename from base/app/type/core.hook rename to base/fap/type/core.hook diff --git a/base/app/unsync/core.hook b/base/fap/unsync/core.hook similarity index 100% rename from base/app/unsync/core.hook rename to base/fap/unsync/core.hook diff --git a/base/app/verb/core.hook b/base/fap/verb/core.hook similarity index 100% rename from base/app/verb/core.hook rename to base/fap/verb/core.hook diff --git a/base/app/wipe/core.hook b/base/fap/wipe/core.hook similarity index 100% rename from base/app/wipe/core.hook rename to base/fap/wipe/core.hook diff --git a/base/app/ye/core.hook b/base/fap/ye/core.hook similarity index 100% rename from base/app/ye/core.hook rename to base/fap/ye/core.hook From e7791411cb2e18fe99a00681bb96f5638461ca96 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 9 May 2015 13:49:11 -0700 Subject: [PATCH 21/94] The great god %gall is dead. --- base/arvo/gall.hoon | 1285 ------------------------------------------- 1 file changed, 1285 deletions(-) delete mode 100644 base/arvo/gall.hoon diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon deleted file mode 100644 index c40ca43f7..000000000 --- a/base/arvo/gall.hoon +++ /dev/null @@ -1,1285 +0,0 @@ -!: :: %gall, user-level applications -!? 164 -:::: -|= pit=vase -=> =~ -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: structures -++ axle :: all %gall state - $: %0 :: state version - pol=(map ship mast) :: apps by ship - == :: -++ bead ,[p=(set beam) q=gage] :: computed result -++ bone ,@ud :: opaque duct -++ club :: agent action - $% [%peer p=path] :: subscribe - [%poke p=cage] :: apply - [%pull ~] :: unsubscribe - [%pump ~] :: pump yes/no - == :: -++ cuft :: internal gift - $% [%coup p=(unit tang)] :: poke result - [%diff p=cage] :: subscription output - [%quit ~] :: close subscription - [%reap p=(unit tang)] :: peer result - == :: -++ cuss (pair term club) :: internal kiss -++ suss (trel term ,@tas ,@da) :: config report -++ gift :: out result <-$ - $% [%back p=?] :: %mess ack good/bad - [%crud p=@tas q=(list tank)] :: physical error - [%dumb ~] :: close duct - [%gone p=hapt] :: app death - [%mass p=mass] :: memory usage - [%mean p=ares] :: message failure - [%meta p=vase] :: meta-gift - [%nice ~] :: message success - == :: -++ hapt ,[p=ship q=path] :: app instance -++ hath ,[p=ship q=term] :: app identity -++ kiss :: in request ->$ - $% [%init p=ship] :: initialize owner - [%show p=hapt q=ship r=path] :: subscribe - [%sire p=term q=hapt] :: create subapp - :: [%cuff p=(unit cuff) q=kiss] :: controlled kiss - [%mess p=hapt q=ship r=cage] :: typed message - [%nuke p=hapt q=ship] :: clear duct - [%rote p=sack q=path r=*] :: remote request - [%roth p=sack q=path r=*] :: remote response - [%took p=hapt q=ship] :: remote acknowledge - [%wegh ~] :: report memory - [%wipe p=hapt] :: forget app - == :: -++ knob :: pending action - $% [%boot ~] :: begin boot - [%cede ~] :: selficide - [%cide p=span] :: subprocessicide - [%crud p=@tas q=(list tank)] :: error - [%feel ~] :: touch - [%load p=cage] :: continue boot - [%mess p=ship q=cage] :: typed message - [%show p=ship q=path] :: subscribe - [%sire p=term q=span] :: spawn subprocess - [%nuke p=ship] :: clear duct - [%take p=path q=vase] :: user result - [%took p=ship] :: rush queue drained - [%told p=ship] :: rush queue filled - == :: -++ mast :: apps by ship - $: hun=duct :: control duct - sap=(map ship scad) :: foreign contacts - bum=(map path seat) :: instances by path - == :: -++ move ,[p=duct q=(mold note gift)] :: typed move -++ note :: out request $-> - $? $: %a :: to %ames - $% [%wont p=sock q=path r=*] :: - == == :: - $: %b :: to %behn - $% [%deal p=sock q=cuss] :: full transmission - == == :: - $: %c :: to %clay - $% [%warp p=sock q=riff] :: - == == :: - $: %f :: to %ford - $% [%exec p=@p q=beak r=(unit silk)] :: - [%wasp p=@p q=@uvH] :: - == == :: - $: %g :: to %gall - $% [%show p=hapt q=ship r=path] :: - [%sire p=term q=hapt] :: - [%mess p=hapt q=ship r=cage] :: - [%nuke p=hapt q=ship] :: - [%took p=hapt q=ship] :: - == == :: - $: @tas :: to any - $% [%meta p=vase] :: - == == == :: -++ riff ,[p=desk q=(unit rave)] :: see %clay -++ scad :: opaque for foreign - $: p=@ud :: index - q=(map duct ,@ud) :: by duct - r=(map ,@ud duct) :: by index - == :: -++ scar :: opaque duct system - $: p=@ud :: bone sequence - q=(map duct ,[p=bone q=(unit cuff)]) :: by duct - r=(map bone duct) :: by bone - == :: -++ roon :: foreign response - $% [%d p=mark q=*] :: diff (rush) - [%e p=ares] :: error - [%f p=mark q=*] :: full refresh (rust) - [%k ~] :: message response - == :: -++ rook :: foreign request - $% [%m p=mark q=*] :: message - [%s p=path] :: subscribe - [%u ~] :: cancel/unsubscribe - == :: -++ seat :: the living app - $: app=term :: app name - $: huv=(unit vase) :: application vase - qic=(unit toil) :: current project - onz=(unit (pair duct path)) :: live fords - vey=(qeu toil) :: pending projects - == :: - nuc=(set duct) :: nuked ducts - $: tik=@ud :: build number - act=@ud :: action number - lat=@da :: last change - orm=(unit ,@da) :: build date - == :: - mom=(unit duct) :: parent duct - cub=(map span term) :: offspring - $: sup=(map bone (pair ship path)) :: subscribers - pus=(jug path bone) :: srebircsbus - peq=(map bone ,@uvI) :: peekers - qel=(map bone ,@ud) :: rush queue length - == :: - ped=@uvH :: active depends - zam=scar :: opaque ducts - == :: -++ silk :: see %ford - $& [p=silk q=silk] :: - $% [%boil p=mark q=beam r=path] :: - [%call p=silk q=silk] :: - [%done p=(set beam) q=cage] :: - [%dude p=tank q=silk] :: - [%mute p=silk q=(list (pair wing silk))] :: - [%ride p=twig q=silk] :: - [%vale p=mark q=ship r=*] :: - == :: -++ sill :: see %ford - $% [%dirt p=twig] :: - == :: -++ sign :: in result $<- - $? [?(%c %d %e %t) @tas *] :: - $: %a :: by %ames - $% [%init p=@p] :: only for :begin - [%woot p=ship q=coop] :: - [%went p=ship q=cape] :: only for apps - == == :: - $: %b :: by %behn - $% [%onto p=(each suss tang)] :: - [%unto p=cuft] :: - == == :: - $: %g :: by %gall - $% [%init p=@p] :: - [%crud p=@tas q=(list tank)] :: - [%dumb ~] :: - [%gone p=hapt] :: - [%logo p=@] :: - [%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] :: - == == :: - $: %f :: by %ford - $% [%made p=@uvH q=(each gage tang)] :: - [%news ~] :: - == == == :: -++ toil (pair duct knob) :: work in progress --- :::::::::::::::::::::::::::::::::::::::::::::::::::::: -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: functions -++ read :: read permission - |= law=(unit cuff) - ^- (unit (set monk)) - ?~(law [~ ~] p.u.law) -:: -++ ride :: all permission - |= [use=(unit (set monk)) say=(unit (set monk))] - ^- (unit cuff) - ?~(say ~ `[use u.say]) -:: -++ rite :: write permission - |= law=(unit cuff) - ^- (unit (set monk)) - ?~(law ~ `q.u.law) -:: -++ grom :: merge sets - |* [one=(set) two=(set)] - ^+ one - (~(gas in one) (~(tap in two) ~)) :: XX ugh -:: -++ grum :: merge maps - |* [one=(map) two=(map)] - ^+ one - (~(gas by one) (~(tap by two) ~)) :: XX ugh -:: -++ limp :: merge cuffs - |= [a=(unit cuff) b=(unit cuff)] - ^- (unit cuff) - ?~ a b - ?~ b a - :- ~ - :- ?~(p.u.a ~ ?~(p.u.b ~ `(grom u.p.u.b u.p.u.a))) - (grom q.u.b q.u.a) -:: -++ lump :: position - |= pax=path - ^- [p=hapt q=path] - ?. ?=([@ @ *] pax) - ~& [%lump-path-bad pax] - !! - :- :- (slav %p i.pax) - (need (puck i.t.pax)) - t.t.pax --- -. == :: end preface -=| all=axle :: all vane state -|= $: now=@da :: urban time - eny=@ :: entropy - ska=sled :: activate - == :: opaque core -=< ^? - |% :: vane interface - ++ call :: handle request - |= [hen=duct hic=(hypo (hobo kiss))] - ^- [p=(list move) q=_..^$] - => .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic))) - ?- -.q.hic - %init - [p=~ q=..^$(pol.all (~(put by pol.all) p.q.hic hen ~ ~))] - :: - %rote - (gawk hen p.q.hic q.q.hic ((hard ,[@ud rook]) r.q.hic)) - :: - %roth - (gawd hen p.q.hic q.q.hic ((hard ,[@ud roon]) r.q.hic)) - :: - %wegh - :_ ..^$ :_ ~ - :^ hen %give %mass - :- %| - :~ all/`all - :: cor/`..^$ - == - :: - %wipe - =+ mat=(~(got by pol.all) p.p.q.hic) - ~? !(~(has by bum.mat) q.p.q.hic) [%wipe-lost q.p.q.hic] - =. bum.mat (~(del by bum.mat) q.p.q.hic) - =. pol.all (~(put by pol.all) p.p.q.hic mat) - [p=~ q=..^$] - :: - ?(%mess %show %nuke %took %sire) - |- ^- [p=(list move) q=_..^^$] - =+ =| law=(unit cuff) - |- ^- $: law=(unit cuff) - hap=hapt - kon=knob - == - :- law - ?- -.q.hic - :: %cuff $(q.hic q.q.hic, law (limp p.q.hic law)) - %mess [p %mess q r]:q.hic - %show [p %show q r]:q.hic - %nuke [p %nuke q]:q.hic - %took [p %took q]:q.hic - %sire [[p.q +.q.q] %sire p -.q.q]:q.hic - == - ((goad hen law) p.hap q.hap kon) - == - :: - ++ take :: accept response - |= [pax=path hen=duct hin=(hypo sign)] :: - ^- [p=(list move) q=_..^$] - ?: ?=(%crud +<.q.hin) - ~& [%gall-crud-error pax hen] - ~& [%gall-crud-data (,[@tas (list tank)] +>.q.hin)] - ?> ?=(%g -.q.hin) - ?~ pax ~& %strange-path [~ ..^$] - =+ lum=(lump t.pax) - =+ mat=(~(get by pol.all) p.p.lum) - ?~ mat ~& %no-ship [~ ..^$] - =+ sat=(~(get by bum.u.mat) q.p.lum) - ?~ sat ~& %no-app [~ ..^$] - :- `(list move)`[hen %give %crud p.q.hin q.q.hin]~ - %= ..^$ :: XX maybe call work? - pol.all - %+ ~(put by pol.all) p.p.lum - %= u.mat - bum - %+ ~(put by bum.u.mat) q.p.lum - u.sat(qic ~) - == - == - ?: ?=([%r *] pax) - (gave hen t.pax q.hin) - ?: ?=([%x *] pax) - (gasp hen t.pax q.hin) - ?> ?=([%a *] pax) - =+ lum=(lump t.pax) - =+ mat=(~(get by pol.all) p.p.lum) - ?~ mat [~ ..^$] - =+ sat=(~(get by bum.u.mat) q.p.lum) - ?~ sat [~ ..^$] - :: ?. (~(has by q.zam.u.sat) hen) - :: ~& [%app-lost pax hen p.lum q.lum] - :: [~ ..^$] - =< abet =< work - (more:(bear:(gaff p.lum) hen) q.lum hin) - :: - ++ scry - |= $: use=(unit (set monk)) - ren=@tas - who=ship - syd=desk - lot=coin - tyl=path - == - ^- (unit (unit cage)) - =+ ^= vew ^- lens :: XX future scry - %. :- use - :- [who syd ((hard case) p.lot)] - (flop tyl) - |= $: use=(unit (set monk)) :: observers - bid=beam :: position - == :: - (beef:(gaff p.bid q.bid ~) use r.bid s.bid) - %+ bind - ?+ ren ~ - %u u.vew - %v v.vew - %w w.vew - %x x.vew - %y y.vew - %z z.vew - == - |=(a=(unit) (bind a |=(b=* [%noun !>(b)]))) - :: - ++ doze - |= [now=@da hen=duct] - ^- (unit ,@da) - ~& %nighty-night - [~ (add now ~s4)] - :: - ++ load - |= old=axle - ^+ ..^$ - ..^$(all old) - :: - ++ stay `axle`+>-.$ - -- -|% :: inner core -:: -++ leak |=(our=ship `beak`[our %home %da now]) :: default beak -++ best :: cage to gift - |= [sem=?(%rush %rust) cay=cage] - ^- gift - :- %meta - ^- vase - :- :+ %cell [%cube sem %atom %tas] - [%cell [%cube p.cay %atom %tas] p.q.cay] - [sem p.cay q.q.cay] -:: -++ gaff :: take and go - |= [our=@p imp=path] - =+ mat=(~(got by pol.all) our) - =+ sat=(~(got by bum.mat) imp) - ~(. go [our imp] mat sat) -:: -++ gape :: %r send query - |= [hen=duct law=(unit cuff)] - |= [our=@p imp=path kon=knob] - ^- [(list move) _..^^$] - ?> ?=(?(%mess %show %nuke %took) -.kon) - ?: ?=(%took -.kon) - :: ~& [%gape-took our imp hen] - [~ ..^^$] - =+ you=`ship`?-(-.kon %mess p.kon, %nuke p.kon, %show p.kon) - =+ mut=(~(get by pol.all) you) - ?~ mut - ~& [%gape-lost you hen] - !! - =+ mat=u.mut - =+ sad==+(sad=(~(get by sap.mat) our) ?^(sad u.sad [.(p 1)]:*scad)) - =^ num sad - =+ nym=(~(get by q.sad) hen) - ?^ nym [u.nym sad] - :- p.sad - :+ +(p.sad) - (~(put by q.sad) hen p.sad) - (~(put by r.sad) p.sad hen) - :- =+ ^= roc ^- rook - ?- -.kon - %mess [%m p.q.kon q.q.q.kon] - %nuke [%u ~] - %show [%s q.kon] - == - ^- (list move) - :~ :- hen - :+ %pass - [%x -.roc (scot %p you) (scot %p our) (scot %ud num) imp] - `note`[%a %wont [you our] [%q %ge imp] [num roc]] - == - %= ..^^$ - pol.all - %+ ~(put by pol.all) - you - mat(sap (~(put by sap.mat) our sad)) - == -:: -++ gasp :: %x take - |= [hen=duct pax=path sih=sign] - ^- [(list move) _..^$] - ?+ -.sih !! - %a - ?. ?=(%woot +<.sih) - ~& [%gall-bad-gasp-a pax=pax lgsih=+<.sih] - ~& [%gall-bad-gasp-b pax=pax sih=sih] `..^$ - :_ ..^$ :_ ~ - ?~ q.sih - [hen %give %nice ~] - [hen %give %mean u.q.sih] - :: - %f - ?. ?=(%made +<.sih) - ~& [%gall-bad-gasp +<.sih] `..^$ - :_ ..^$ - :_ ~ - :- hen - ?- -.q.+.sih - %| - [%give %crud %gasp-crud p.q.+.sih] - :: - %& - ?. ?=(@ p.p.q.+.sih) ~| %bad-marc !! - =+ cay=`cage`p.q.+.sih - ?+ -.pax !! - %d [%give (best %rush cay)] - %f [%give (best %rust cay)] - == == - == -:: -++ gave :: %r take - |= [hen=duct pax=path sih=sign] - ^- [(list move) _..^$] - ?> ?=([@ @ @ @ *] pax) - =+ :* our=`ship`(slav %p i.t.pax) - you=`ship`(slav %p i.t.t.pax) - num=(slav %ud i.t.t.t.pax) - imp=`path`t.t.t.t.pax - == - :: ~& [%gall-gave hen -.pax [our you num imp]] - :_ ..^$ - =+ rod=|=(ron=roon `note`[%a %wont [our you] [%q %gh imp] num ron]) - ?+ -.pax !! - %z ?+ -.sih !! - %a :_ ~ :- hen - [%pass [%r pax] %g %took [our imp] you] - :: - %f - ?< ?=(%news -.+.sih) - :_ ~ :- hen - ?- -.q.+.sih - %| [%give %mean ~ %ford-fail p.q.+.sih] - %& ?. ?=(@ p.p.q.+.sih) ~| %bad-marc !! - [%pass [%r pax] %g %mess [our imp] you `cage`p.q.+.sih] - == - :: - %g - :_ ~ :- hen - ?- -.+.sih - %crud !! - %dumb !! - %gone !! - %init !! - %logo !! - %mean [%pass [%r pax] (rod %e p.+.sih)] - %nice [%give %nice ~] - %rush [%pass [%r pax] (rod %d p.+.sih q.+.sih)] - %rust :: ~& [%gave-rust [our you num imp] hen] - [%pass [%r pax] (rod %f p.+.sih q.+.sih)] - %sage !! - %verb !! - %veer !! - %vega !! - == - == - %u !! - == -:: -++ gawd :: %r handle response - |= [hen=duct saq=sack imp=path num=@ud ron=roon] - ^- [p=(list move) q=_..^$] - ?: =(0 num) ~& %shouldnt-get-zero `..^$ - =+ mat=(~(got by pol.all) p.saq) - =+ sad=(~(got by sap.mat) q.saq) - =+ neh=(~(got by r.sad) num) - :_ ..^$ - :- [hen %give %nice ~] :_ ~ - ^- move :- neh - ?- -.ron - %d [%pass /x/d %f %exec p.saq (leak p.saq) ~ %vale p.ron q.saq q.ron] - %e [%give %mean p.ron] - %f [%pass /x/f %f %exec p.saq (leak p.saq) ~ %vale p.ron q.saq q.ron] - %k [%give %nice ~] - == -:: -++ gawk :: %r call/request - |= [hen=duct saq=sack imp=path num=@ud rok=rook] - ^- [p=(list move) q=_..^$] - :_ ..^$ :_ ~ - ^- move :- hen - :+ %pass - :* %r - :: ?-(-.rok %m %m, %s %s, %u %s) - %z - (scot %p p.saq) - (scot %p q.saq) - (scot %ud num) - imp - == - ^- note - ?- -.rok - %m [%f %exec p.saq (leak p.saq) ~ %vale p.rok q.saq q.rok] - %s [%g %show [p.saq imp] q.saq p.rok] - %u [%g %nuke [p.saq imp] q.saq] - == -:: -++ gent :: seat in mast - |= [our=@p imp=path mat=mast] - =+ ^= sat ^- seat - =+ syt=(~(get by bum.mat) imp) - ?^ syt u.syt - ?. ?=([@ ~] imp) ~& [%app-not-found imp] !! - %* . *seat - app i.imp - zam - ^- scar - :+ 1 - [[hun.mat 0 ~] ~ ~] - [[0 hun.mat] ~ ~] - == - =. bum.mat (~(put by bum.mat) imp sat) - ~(. go [our imp] mat sat) -:: -++ goad :: handle request - |= [hen=duct law=(unit cuff)] - |= [our=@p imp=path kon=knob] - ^- [(list move) _..^^$] - =+ mut=(~(get by pol.all) our) - ?^ mut - ?: &(?=([@ @ *] imp) !(~(has by bum.u.mut) imp)) :: %took for dead imps - [~ ..^^$] - abet:work:(quem:(boar:(gent our imp u.mut) hen law) kon) - ((gape hen law) our imp kon) -:: -++ go :: application core - |_ $: $: our=@p :: application owner - imp=path :: application name - == :: - mat=mast :: per owner - sat=seat :: per application - == :: - ++ abet :: resolve - %_ ..$ - all - %_ all - pol %+ ~(put by pol.all) our - ?. (~(has by bum.mat) imp) - :: ~& [%abet-gone imp] - mat - :: ~& [%onzes imp=imp onz=onz.sat] - mat(bum (~(put by bum.mat) imp sat)) - == - == - :: - ++ able :: bone to duct - |= ost=bone ^- duct - :: ?: =(0 ost) - :: hun.mat - (~(got by r.zam.sat) ost) - :: - ++ away :: application path - |= pax=path ^- path - [%a (scot %p our) ?~(imp %$ (pack imp)) pax] - :: - ++ bear :: write backward - |= hen=duct - =+ orf=(fall (~(get by q.zam.sat) hen) [p=0 q=*(unit cuff)]) - ~(apex bo:~(. au (read q.orf)) hen p.orf (rite q.orf) ~) - :: - ++ beef :: read in - |= [use=(unit (set monk)) lok=case pax=path] - ^- lens - ?. =([%da now] lok) *lens - (~(show au use) pax) - :: - ++ boar :: write forward - |= $: hen=duct :: cause - law=(unit cuff) :: permissions - == - =^ orf zam.sat - =+ orf=(~(get by q.zam.sat) hen) - ?^ orf - [[p=p.u.orf q=(limp law q.u.orf)] zam.sat] - :^ [p=p.zam.sat q=law] +(p.zam.sat) - (~(put by q.zam.sat) hen [p.zam.sat law]) - (~(put by r.zam.sat) p.zam.sat hen) - ~(apex bo:~(. au (read q.orf)) hen p.orf (rite q.orf) ~) - :: - ++ au :: read - |_ use=(unit (set monk)) :: read permission - ++ abet ^abet :: resolve - ++ show :: view - |= pax=path - ^- lens - ?~ huv.sat *lens - =+ gat=(slap u.huv.sat [%cnzy %peek]) - =+ cor=(slam gat !>([our pax])) - =+ ^= dek - |* fun=$+(vase *) - |= nam=@tas - =+ vax=(slap cor [%cnzy nam]) - ^- (unit (unit fun)) - ?: =(~ q.vax) ~ - ?: =([~ ~] q.vax) [~ ~] - [~ ~ (fun (slot 7 vax))] - =+ ^= nib - |= vax=vase - ((hard null) q.vax) - =+ ^= yob - |= vax=vase ^- cage - [((hard mark) -.q.vax) (slot 3 vax)] - =+ ^= yar - |= vax=vase ^- arch - ((hard arch) q.vax) - =+ ^= dif - |= vax=vase ^- (unit cage) - ?: =(~ q.vax) ~ - [~ (yob (slot 3 vax))] - |% - ++ u ((dek nib) %u) - ++ v ((dek yob) %v) - ++ w ((dek dif) %w) - ++ x ((dek yob) %x) - ++ y ((dek yar) %y) - ++ z ((dek yob) %z) - -- - :: - ++ bo - |_ $: hen=duct :: system cause - ost=bone :: opaque cause - say=(unit (set monk)) :: write permission - mow=(list move) :: actions - == - ++ abet [(flop mow) ^abet] :: resolve - ++ apex :: enter - ^+ . - ?. &(=(~ huv.sat) =(~ qic.sat) =(~ vey.sat) =(~ ped.sat)) . - %_(. vey.sat (~(put to vey.sat) hen [%boot ~])) - :: - ++ bing :: reset to duct - |= neh=duct - =+ orf=(fall (~(get by q.zam.sat) neh) [p=0 q=*(unit cuff)]) - %_ +>.$ - hen neh - ost p.orf - use (read q.orf) - say (rite q.orf) - == - :: - ++ birf - |= [wir=wire hon=duct caq=vase] - ^- move - ?> ?=([%pass p=* q=%g r=[p=%sire q=term r=span]] q.caq) - [hon %pass wir %g %sire q.r.q.caq our r.r.q.caq imp] - :: - ++ blow - ^+ . - :: ~& [%gall-blow ost] - => (give %mean ~) - =+ pax=+:(fall (~(get by sup.sat) ost) *[ship path]) - %= + - qic.sat ~ - sup.sat (~(del by sup.sat) ost) - pus.sat (~(del ju pus.sat) pax ost) - peq.sat (~(del by peq.sat) ost) - == - :: - ++ cave :: vase as silk - |= vax=vase - [%done ~ %$ vax] - :: - ++ conf :: configured core - |= kas=silk - ^- silk - :+ %mute kas - :_ ~ - :- [%$ 12]~ - (cave !>([[our app.sat imp] cub.sat sup.sat pus.sat [act.sat eny now]])) - :: - ++ core |=(vax=vase (cove %core vax)) :: core as silk - ++ cove :: cage as silk - |= cay=cage - ^- silk - [%done ~ cay] - :: - ++ deal :: reboot - .(tik.sat +(tik.sat)) - :: - ++ deff - |= [wir=wire hon=duct caq=vase] - ^- toil - ?> ?=([%pass p=* q=%g r=[p=%cide q=span]] q.caq) - :: ~& [%deff imp cub.sat] - [hon r.q.caq] - :: - ++ drum :: set dependencies - |= dep=@uvH - ^+ +> - ?~ dep ~&(%drum-none +>.$) - ?: =(dep ped.sat) +>.$ - =+ pax=(away %w %drum (scot %uv dep) ~) - %_ +>.$ - ped.sat dep - mow :_(mow [hun.mat %pass pax %f %wasp our dep]) :: XX cancel old - == - :: - ++ ford :: exec to ford - |= [pax=path kas=silk] - ^+ +> - =. kas - :+ %dude - leaf/"error in app {} on {} at instance {}" - kas - %_ +> - mow :_(mow [hen %pass (away pax) %f [%exec our (leak our) `kas]]) - onz.sat `[hen pax] - == - :: - ++ give :: give a gift - |= gip=gift - %_(+> mow [[hen %give gip] mow]) - :: - ++ harm :: arm as silk - |= [arm=term kas=silk] - ^- silk - [%ride [%cnzy arm] kas] - :: - ++ home :: load application - ^- silk - =+ let=((hard ,@) q.q:(need (need (ska ~ %cw [our %home %da now] /)))) - [%boil %core [[our %home %ud ?:(=(let 0) 1 let)] app.sat %app ~] ~] - :: - ++ leav - %_ . - bum.mat (~(del by bum.mat) imp) - qic.sat ~ - mow - ?~ mom.sat mow - :_(mow [u.mom.sat %give %gone our imp]) - vey.sat - %- ~(gas by vey.sat) - %+ turn (~(tap by cub.sat)) - |=([a=span @] [hen %cide a]) - == - :: - ++ mack :: apply standard - |= sih=sign - ?> ?=([%f %made *] sih) - ^- [(unit (list tank)) _+>] - ?- -.q.+.sih - & :- ~ - %- obey:(morn (slot 3 q.p.q.+.sih)) - (slot 2 q.p.q.+.sih) - | [`p.q.+.sih (give %crud %mack-made p.q.+.sih)] - == - :: - ++ meek :: apply peek - |= sih=sign - ^- [(unit cage) _+>] - ?> ?=([%f %made *] sih) - ?- -.q.+.sih - & =+ vax=`vase`q.p.q.+.sih - ?. &(?=(^ q.vax) ?=(@ -.q.vax)) - [~ (give %crud %peek-lame *(list tank))] - :: ~> %slog.[0 (skol p:(slot 3 vax))] - :- `[((hard mark) -.q.vax) (slot 3 vax)] - +>.$ - | [~ (give %crud %meek-made p.q.+.sih)] - == - :: - ++ mick :: apply w/depends - |= sih=sign - ?> ?=([%f %made *] sih) - ^- [? _+>] - :- -.q.+.sih - ?- -.q.+.sih - & %- obey:(morn (slot 3 q.p.q.+.sih)) - (slot 2 q.p.q.+.sih) - | (give %crud %mick-made p.q.+.sih) - == - :: - ++ muck :: apply part - |= sih=sign - ^- [(unit (list tank)) _+>] - ?> ?=([%f %made *] sih) - ?- -.q.+.sih - & [~ (obey q.p.q.+.sih)] - | [`p.q.+.sih (give %crud %muck-made p.q.+.sih)] - == - :: - ++ murk :: apply park - |= sih=sign - ^- [[p=@uvH q=(unit cage)] _+>] - ?> ?=([%f %made *] sih) - ?- -.q.+.sih - & ?. ?=(@ p.p.q.+.sih) ~| %bad-marc !! - [[p.+.sih `p.q.+.sih] +>.$] - | [[p.+.sih ~] (give %crud %murk-made p.q.+.sih)] - == - :: - ++ more :: domestic take - |= $: pax=path :: internal position - hin=(hypo sign) :: typed event - == - ^+ +> - ?+ -.pax !! - %s :: core operation - ?. ?& ?=([@ *] t.pax) - !=(~ qic.sat) - =(`[hen pax] onz.sat) - == - ~& :* %gall-mystery - imp pax - ?~(qic.sat ~ [p -.q]:u.qic.sat) - onz.sat - == - +>.$ - =: onz.sat ~ - qic.sat ~ - == - ?+ i.t.pax !! - :: - %park - =^ gyd +>.$ (murk q.hin) - ?~ q.gyd (drum p.gyd) - =. +>.$ (drum p.gyd) - (quen %load u.q.gyd) - :: - %part - =^ gud +>.$ (muck q.hin) - ?^ gud +>.$ - leav - :: - %peek - ?> ?=([@ *] t.t.pax) - =+ you=(need (slaw %p i.t.t.pax)) - =^ gyd +>.$ (meek q.hin) - ?~ gyd - =. +>.$ (give %mean ~ %peer-fail ~) - (give [%dumb ~]) - =+ kee=[you t.t.t.pax] - =+ ash=(sham q.q.u.gyd) - ?: =(`ash (~(get by peq.sat) ost)) - +>.$ - =. +>.$ - ?: (~(has by sup.sat) ost) +>.$ (give %nice ~) - %- %= give - peq.sat (~(put by peq.sat) ost ash) - sup.sat (~(put by sup.sat) ost kee) - pus.sat (~(put ju pus.sat) +.kee ost) - == - (best %rust u.gyd) - :: - %peer - :: ~& [%peer-goning onz=onz.sat] - ?> ?=([@ *] t.t.pax) - =+ you=(need (slaw %p i.t.t.pax)) - =^ gud +>.$ (mack q.hin) - ?^ gud - =. +>.$ (give %mean ~ %peer-fail ~) - (give [%dumb ~]) - =. +>.$ (give %nice ~) - %= +>.$ - sup.sat (~(put by sup.sat) ost [you t.t.t.pax]) - pus.sat (~(put ju pus.sat) t.t.t.pax ost) - == - :: - %poke - =^ gud +>.$ (mack q.hin) - ?^ gud (give %mean ~ %poke-mack-fail u.gud) - +>.$ - :: - %pour - =^ gud +>.$ (mack q.hin) - ?^ gud ~& -.gud +>.$ - +>.$ - :: - %prep - =^ gad +>.$ (mick q.hin) - ?. gad +>.$ - deal - :: - %pull - =^ gud +>.$ (mack q.hin) - ?^ gud +>.$ - blow - == - :: - %u :: user request - %_ +>.$ - vey.sat - (~(put to vey.sat) [hen [%take t.pax hin]]) - == - :: - %w :: autoboot - ?> ?=([%drum @ ~] t.pax) - ?> ?=([%f %news ~] q.hin) - :: ?> ?=([%drug @ @ ~] t.pax) - :: =+ :- sin=((hard ,[%c %writ p=(unit)]) q.hin) - :: [our syd]=(raid t.t.pax %p %tas ~) - :: ::~& [%sync-notified `@p`our `@ta`syd] - :: =. ped.sat (~(del by ped.sat) [our syd]) - :: ?~ p.+.sin - :: +>.$ - +>.$(vey.sat (~(put to vey.sat) hen %boot ~)) - == - :: - ++ morn :: install core - |= vax=vase - ^+ +> - =+ new=?~(huv.sat & !=(+<+.q.vax +<+.q.u.huv.sat)) - :: ?. ?=(%core -.p.vax) - :: ~| [%morn-not-core -.p.vax app.sat imp] - :: ~> %mean.|.((skol p.vax)) - :: !! - =. huv.sat `vax - ?. new +>.$ - =: act.sat +(act.sat) - lat.sat now - == - =+ pex=(~(tap by peq.sat) ~) - |- ^+ +>.^$ - ?~ pex +>.^$ - %= $ - pex t.pex - +>.^$ (quem(hen (able p.i.pex)) [%show (~(got by sup.sat) p.i.pex)]) - == - :: - ++ mort :: failed boot - |= tan=(list tank) - (give %crud %boot-lost tan) - :: - ++ nile [%done ~ [%$ [%cube 0 [%atom %n]] ~]] :: null silk - ++ obey :: process app moves - |= vax=vase - =^ sax mow (said vax) - +>.$(vey.sat (~(gas to vey.sat) sax)) - :: - ++ quem :: queue action - |= kon=knob :: content - ^+ +> - =. +> ?. ?=(%nuke -.kon) +> - ?. &(?=(^ onz.sat) =(hen p.u.onz.sat)) +> - ~& [%nukeando imp=imp onz=onz.sat] - %= +> - onz.sat ~ - mow - :_(mow [hen %pass (away q.u.onz.sat) %f [%exec our (leak our) ~]]) - == - +>.$(vey.sat (~(put to vey.sat) hen kon)) - :: - ++ quen :: push on front - |= kon=knob - ^+ +> - =+ yov=(~(tap by vey.sat) ~) :: XX ++pun - +>.$(vey.sat (~(gas to *(qeu toil)) `_yov`[[hen kon] yov])) - :: - ++ said :: sayz, done wrong - |= vud=vase - =- [p.fob (weld (flop q.fob) mow)] - ^= fob - |- ^- (pair (list toil) (list move)) - ?: =(~ q.vud) [~ ~] - =+ sud=(sump (slot 2 vud)) - =+ res=$(vud (slot 3 vud)) - :- ?~ -.sud - -.res - [u.-.sud -.res] - ?~ +.sud - +.res - [u.+.sud +.res] - :: - ++ sayz :: dissect app moves - |= vud=vase - =| toy=(list toil) - |- ^- [(list toil) (list move)] - ?: =(~ q.vud) [toy mow] - =+ sud=(sump (slot 2 vud)) - %= $ - vud (slot 3 vud) - toy ?~(-.sud toy [u.-.sud toy]) - mow ?~(+.sud mow [u.+.sud mow]) - == - :: - ++ show :: subscribe - |= [you=ship pax=path] :: subscription - %_(+> vey.sat (~(put to vey.sat) hen %show you pax)) - :: - ++ sumo :: standard gift - |= vig=vase - ^- gift - [%meta vig] - :: - ++ sump - |= wec=vase - ^- [(unit toil) (unit move)] - =+ ost=((hard bone) -.q.wec) - =+ hon=(able ost) - =+ caq=(spec (slot 3 wec)) - ?+ q.caq ~&(%sump-bad !!) - :: - [%pass p=* q=@tas r=[p=@tas q=*]] - =+ wir=(away %u ((hard path) p.q.caq)) - ?: ?=(%cide p.r.q.caq) [`(deff wir hon caq) ~] - ?: ?=(%sire p.r.q.caq) [~ `(birf wir hon caq)] - :^ ~ ~ hon - :^ %pass wir - (need ((sand %tas) ((hard ,@) q.q.caq))) - [%meta (spec (slot 15 caq))] - :: - [%give p=[p=@tas q=*]] - ?: ?=(%mean p.p.q.caq) - :- `[hon %nuke our] - `[hon %give %mean (ares q.p.q.caq)] - :- ?. ?| ?=(?(%rush %rust) p.p.q.caq) - ?& ?=(%meta p.p.q.caq) - ?=([* ?(%rush %rust) *] q.p.q.caq) - == == - ~ - `[hon %told our] - :+ ~ hon - :- %give - ?: ?=(%nice p.p.q.caq) [%nice ~] - (sumo (spec (slot 3 caq))) - == - :: - ++ warm :: vase has arm - |= cog=@tas - ^- ? - ?~(huv.sat | (slab cog p.u.huv.sat)) - :: - ++ work :: eat queue - |- ^+ + - :: ~& > :* %workeando - :: our=our - :: vey==(~ vey.sat) - :: ^= qic - :: ?: ?=(^ qic.sat) - :: [p -.q]:u.qic.sat - :: ~ - :: == - ?: |(?=(^ qic.sat) =(~ vey.sat)) +.$ :: nothing to do - =^ yev vey.sat [p q]:~(get to vey.sat) - ?: (~(has in nuc.sat) p.yev) $ - work:(yawn:(bing p.yev) q.yev) - :: - ++ xeno - |= [pim=path kon=knob] - =^ mew ..$.go - ((goad($.go +:abet) hen ~) our pim kon) - =. mat (~(got by pol.all) our) - =. sat (fall (~(get by bum.mat) imp) sat) - +>.$(mow (weld (flop mew) mow)) - :: - ++ yawl :: invoke core - |= [[arm=term pax=path] tac=tank vax=vase sam=vase] - ^+ +> - %+ ford [%s arm pax] - :+ %dude tac - [%call (harm arm (conf (core vax))) (cove %$ sam)] - :: - ++ yawn :: start event - |= kon=knob - ^+ +> - :: ~& [%gall-yawn ost imp -.kon] - =. qic.sat `[hen kon] - ?- -.kon - %boot - =. orm.sat `now - %+ ford /s/park - :: :+ %dude leaf/"booting" - ^- silk - :- home - ?~ huv.sat nile - ?: =(~ q.u.huv.sat) nile - :- nile - ?. (warm %park) - [%done ~ %$ (slot 13 u.huv.sat)] - (harm %park (conf (core u.huv.sat))) - :: - %cede - ?: (warm %part) - =+ sam=!>(ost) - ?> ?=(^ huv.sat) - (yawl /part leaf/"parting" u.huv.sat sam) - leav - :: - %cide - ?~ p.kon - ?~ imp +>.$(qic.sat ~) - ?~ t.imp - $(kon [%cede ~]) - =. qic.sat ~ - (xeno t.imp %cide i.imp) - ?. (~(has by bum.mat) [p.kon imp]) - ~& > [%cide-missed p.kon imp] +>.$(qic.sat ~) - ::~& [%cide-found p.kon imp] - =. +>.$ (xeno [p.kon imp] %cede ~) - %_ +>.$ - cub.sat (~(del by cub.sat) p.kon) - qic.sat ~ - == - :: - %feel - +>.$(qic.sat ~) - :: - %took - =+ qol=(~(get by qel.sat) ost) - :: ~& [%yawn-took-has ost qol [our hen]] - %= +>.$ - qic.sat ~ - qel.sat - ?~ qol - :: ~& [%took-underflow our hen] - qel.sat - ?: =(`1 qol) - (~(del by qel.sat) ost) - (~(put by qel.sat) ost (dec u.qol)) - == - :: - %told - =+ qol=(~(get by qel.sat) ost) - :: ~& [%yawn-told-has ost qol [our hen]] - =+ qul=?~(qol 1 +(u.qol)) - =. qel.sat (~(put by qel.sat) ost qul) - ?: =(10 qul) - ~& [%yawn-told-full ost our hen] - +>.$(qic.sat ~, vey.sat (~(put to vey.sat) hen %nuke p.kon)) - +>.$(qic.sat ~) - :: - %load - =+ [hom=(slot 2 q.p.kon) old=(slot 3 q.p.kon)] - %+ ford /s/prep - :+ %dude leaf/"prepping" - ?. (warm(huv.sat `hom) %prep) - :- nile - ?: =(~ q.old) - (core hom) - :+ %mute `silk`(core hom) - :~ [[%$ 13]~ (cave (slot 3 old))] - == - [%call (harm %prep (conf (core hom))) [nile (cave old)]] - :: - %crud - (give(qic.sat ~) %crud p.kon q.kon) - :: - %nuke - ?. (warm %pull) - blow - ?> ?=(^ huv.sat) - (yawl [%pull ~] leaf/"pulling" u.huv.sat [[%atom %ud] ost]) - :: - %mess - =+ ^- cog=term - =- |- ?~ goz ?:((warm %pock) %pock %poke) - ?: (warm i.goz) i.goz - $(goz t.goz) - ^- goz=(list term) - ?: =(%$ p.q.kon) - /pock - =+ ^= goc - |= [a=term b=(list term)] - [(cat 3 'pock-' a) (cat 3 'poke-' a) b] - =+ ofs=(met 3 app.sat) - ?. .= (cat 3 app.sat '-') :: XX temporary, until /=home=/bin - (end 3 +(ofs) p.q.kon) - (goc p.q.kon /pock) - :(goc p.q.kon (rsh 3 ofs p.q.kon) /pock) - =+ hyp=?=(%pock (end 3 4 cog)) - =+ ^- err=tape - ?.(?=(?(%poke %pock) cog) "{} with mark {}") - ?. (warm cog) - (give(qic.sat ~) %mean ~ %poke-find-fail leaf/err ~) - ?> ?=(^ huv.sat) - =+ ^= sam - ;: slop - [[%atom %ud] ost] - [[%atom %p] p.kon] - ?.(hyp q.q.kon (slop !>(p.q.q.kon) q.q.kon)) - == - :: ~& [%mess-poke cog] - %+ ford /s/poke - :+ %dude leaf/err - [%call (harm cog (conf (core u.huv.sat))) (cove %$ sam)] - :: - %show - :: ~& showing/[app.sat imp q.kon] - ?: (warm %peer) - =+ sam=!>([ost p.kon q.kon]) - ?> ?=(^ huv.sat) - =. peq.sat (~(del by peq.sat) ost) - (yawl [%peer (scot %p p.kon) q.kon] leaf/"peering" u.huv.sat sam) - ?: (warm %peek) - =+ sam=!>([p.kon q.kon]) - ?> ?=(^ huv.sat) - (yawl [%peek (scot %p p.kon) q.kon] leaf/"peeking" u.huv.sat sam) - ~& [%show-dumb app.sat imp q.kon] - (give(qic.sat ~) %dumb ~) - :: - %sire - ?: (~(has by bum.mat) [q.kon imp]) - ~& > %sire-redundant +>.$(qic.sat ~) - ::~& [%sire-made p.kon imp] - =: cub.sat (~(put by cub.sat) q.kon p.kon) - qic.sat ~ - bum.mat - %+ ~(put by bum.mat) [q.kon imp] - %* . *seat - app p.kon - mom `hen - zam - ^- scar - :+ 1 - [[hun.mat 0 ~] ~ ~] - [[0 hun.mat] ~ ~] - == - == - (xeno [q.kon imp] %feel ~) - :: - %take - ?: ?& ?=([%g %rush @ *] q.q.kon) - |((warm %posh) (warm (cat 3 'posh-' &3.q.q.kon))) - == - ?> ?=(^ huv.sat) - =+ [goc gil]=[(cat 3 'posh-' &3.q.q.kon) (spec (slot 7 q.kon))] - =. - ?:((warm goc) [goc (slot 3 gil)] [%posh gil]) - =+ sam=:(slop [[%atom %ud] ost] !>(p.kon) gil) - %+ ford /s/pour - :+ %dude leaf/"pouring" - :+ %dude (skol p.gil) - [%call (harm goc (conf (core u.huv.sat))) (cove %$ sam)] - ?: (warm %purr) - ?> ?=(^ huv.sat) - =+ sam=:(slop [[%atom %ud] ost] !>(p.kon) !>(p.q.kon) q.kon) - %+ ford /s/pour - :+ %dude leaf/"purring" - [%call (harm %purr (conf (core u.huv.sat))) (cove %$ sam)] - ?. (warm %pour) - +>.$(qic.sat ~) - ?> ?=(^ huv.sat) - =+ sam=:(slop [[%atom %ud] ost] !>(p.kon) q.kon) - %+ ford /s/pour - :+ %dude leaf/"pouring" - [%call (harm %pour (conf (core u.huv.sat))) (cove %$ sam)] - == - -- -- --- -- From fa5f5dc786303568c202a2c19dec20f221c6be13 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 9 May 2015 15:35:57 -0700 Subject: [PATCH 22/94] Didn't mean to chek in a broken helm. --- base/ape/helm/core.hook | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/base/ape/helm/core.hook b/base/ape/helm/core.hook index dcbee84d8..b71b14960 100644 --- a/base/ape/helm/core.hook +++ b/base/ape/helm/core.hook @@ -13,13 +13,11 @@ bur=(unit (pair ship mace)) :: requesting ticket hoc=(map bone helm-session) :: consoles == :: - ++ helm-house ,[%1 (list helm-room)] - ++ - ++ helm-session :: $: say=sole-share :: mud=(unit (sole-dialog ,@ud)) :: == :: + ++ funk (pair ,@ ,@) :: ++ begs ,[his=@p tic=@p eny=@t ges=gens] :: begin data ++ suss ,[term @tas @da] :: config report ++ helm-wish :: @@ -56,8 +54,8 @@ [(flop moz) %_(+> hoc (~(put by hoc) ost +<+))] :: :: :: ++ he-wish-start - |= [who=ship dap=term] - %_(+> moz :_(moz [ost %conf /start [our.hid dap] %load who %base])) + |= dap=term + %_(+> moz :_(moz [ost %conf /start [our.hid dap] %load our.hid %main])) :: ++ he-wish-reset ^+ . @@ -148,8 +146,8 @@ he-abet:(he-wish-reload:(hake ost src) all) :: ++ poke-helm-start - |= [from who=ship dap=term] - he-abet:(he-wish-start:(hake ost src) who dap) + |= [from dap=term] + he-abet:(he-wish-start:(hake ost src) dap) :: ++ poke-helm-begin |= [from begs] @@ -177,10 +175,9 @@ :: ++ onto |= [then saw=(each suss tang)] - ^- (quip move +>) :_ +> :_ ~ ?- -.saw - %| [ost %flog ~ %crud `@tas`-.way `tang`p.saw] - %& [ost %flog ~ %text "<{}>"] + %| [ost %pass ~ %flog %crud `@tas`-.way `tang`p.saw] + %& [ost %pass ~ %flog %text "<{}>"] == -- From b3027a328b9a9d7f43550e91652705def5f583d4 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 9 May 2015 15:55:05 -0700 Subject: [PATCH 23/94] And %gall is reborn. --- base/arvo/ames.hoon | 30 +- base/arvo/clay.hoon | 2 +- base/arvo/dill.hoon | 29 +- base/arvo/eyre.hoon | 99 ++-- base/arvo/gall.hoon | 1162 ++++++++++++++++++++++++++++++++++++++ base/arvo/zuse.hoon | 2 +- base/dog/solid/gate.hook | 2 +- 7 files changed, 1214 insertions(+), 112 deletions(-) create mode 100644 base/arvo/gall.hoon diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index 2b7c0ae85..f1808fb39 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -47,16 +47,10 @@ == == :: $: %a :: to %ames $% [%kick p=@da] :: - == == :: - $: %b :: to %behn - $% [%rote p=sack q=path r=*] :: - [%roth p=sack q=path r=*] :: - [%mess p=[@p %ye ~] q=@p r=cage] :: == == :: $: %g :: to %gall $% [%rote p=sack q=path r=*] :: [%roth p=sack q=path r=*] :: - [%mess p=[@p %ye ~] q=@p r=cage] :: == == :: $: @tas :: to any $% [%init p=@p] :: @@ -1778,7 +1772,7 @@ %+ turn paz |= him=ship :- hen - [%pass /ye %g %mess [him ye/~] p.p.bon [%txt !>(((hard ,@t) r.bon))]] + [%pass /ye %g %rote `sack`p.bon /ye 0 %m %helm-ye ((hard ,@t) r.bon)] == :: %mulk @@ -1791,26 +1785,6 @@ :~ :- (claw p.p.bon) [%sick %wart p.bon i.t.q.q.bon t.t.q.q.bon r.bon] == - :: - %be :: %behn request - =* imp t.t.q.q.bon - ?> (levy imp (sane %ta)) - =+ ^= pax - :+ (scot %p p.p.bon) - (scot %p q.p.bon) - q.q.bon - :: ~& [%ames-behn-request p.bon imp pax] - :_ fox [hen %pass pax %b %rote p.bon imp r.bon]~ - :: - %bh :: %behn response - =* imp t.t.q.q.bon - ?> (levy imp (sane %ta)) - =+ ^= pax - :+ (scot %p p.p.bon) - (scot %p q.p.bon) - q.q.bon - :: ~& [%ames-behn-response p.bon imp pax] - :_ fox [hen %pass pax %b %roth p.bon imp r.bon]~ :: %ge :: %gall request =* imp t.t.q.q.bon @@ -1819,6 +1793,7 @@ :+ (scot %p p.p.bon) (scot %p q.p.bon) q.q.bon + :: ~& [%ames-gall-request p.bon imp pax] :_ fox [hen %pass pax %g %rote p.bon imp r.bon]~ :: %gh :: %gall response @@ -1828,6 +1803,7 @@ :+ (scot %p p.p.bon) (scot %p q.p.bon) q.q.bon + :: ~& [%ames-gall-response p.bon imp pax] :_ fox [hen %pass pax %g %roth p.bon imp r.bon]~ == :: diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index 6fc027053..d954617f4 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -711,7 +711,7 @@ ^- (list (pair path misu)) (turn u.mut.u.dok |=([pax=path cal=[lobe cage]] [pax %dif cal])) == - =^ hat +>.$ (edit:ze now %& *cart sim) :: XX we do same thing in ++apply-edit + =^ hat +>.$ (edit:ze now %& *cart sim) :: XX do same in ++apply-edit ?~ dok ~& %no-dok +>.$ => %= . diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 53ff45f48..f8a05de9d 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -163,22 +163,22 @@ [%vega p=path] :: reboot by path [%verb ~] :: verbose mode == :: -++ note-behn :: +++ note-gall :: $% [%conf dock %load ship desk] :: [%deal p=sock q=cuss] :: == :: ++ note :: out request $-> $% [%a note-ames] :: - [%b note-behn] :: [%c note-clay] :: [%d note-dill] :: + [%g note-gall] :: == :: ++ riff ,[p=desk q=(unit rave)] :: see %clay ++ sign-ames :: $% [%nice ~] :: [%init p=ship] :: == :: -++ sign-behn :: see %behn +++ sign-gall :: see %gall $% [%onto p=(unit tang)] :: == :: ++ sign-clay :: @@ -189,7 +189,7 @@ ++ sign-dill :: $% [%blit p=(list blit)] :: == :: -++ sign-behn :: +++ sign-gall :: $% [%onto p=(each suss tang)] :: [%unto p=cuft] :: == :: @@ -198,9 +198,9 @@ == :: ++ sign :: in result $<- $% [%a sign-ames] :: - [%b sign-behn] :: [%c sign-clay] :: [%d sign-dill] :: + [%g sign-gall] :: [%t sign-time] :: == :: :::::::: :: dill tiles @@ -278,9 +278,8 @@ =+ myt=(flop (need tem)) =. tem ~ =. moz :_(moz [hen %pass / %c %font our %home our %base]) - :: =. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~]) - =. moz :_(moz [hen %pass ~ %b %conf [[our ram] %load our %base]]) - =. moz :_(moz [hen %pass ~ %b %deal [our our] ram %peer ~]) + =. 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)) @@ -306,13 +305,13 @@ %_ +> moz :_ moz - [hen %pass ~ %b %deal [our our] ram %poke [%dill-belt -:!>(bet) bet]] + [hen %pass ~ %g %deal [our our] ram %poke [%dill-belt -:!>(bet) bet]] == :: ++ pump :: send diff ack %_ . moz - :_(moz [hen %pass ~ %b %deal [our our] ram %pump ~]) + :_(moz [hen %pass ~ %g %deal [our our] ram %pump ~]) == :: ++ take :: receive @@ -333,18 +332,18 @@ ~| p.p.p.sih |- ?~ q.p.p.sih !! - ~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace + ~> %mean.|.(i.q.p.p.sih) :: pull ford fail into stack trace $(q.p.p.sih t.q.p.p.sih) :: - [%b %onto *] - :: ~& [%take-behn-onto +>.sih] + [%g %onto *] + :: ~& [%take-gall-onto +>.sih] ?- -.+>.sih %| (crud %onto p.p.+>.sih) %& (done %blit [%lin (tuba "{}")]~) == :: - [%b %unto *] - :: ~& [%take-behn-unto +>.sih] + [%g %unto *] + :: ~& [%take-gall-unto +>.sih] ?- -.+>.sih %coup ?~(p.p.+>.sih +>.$ (crud %coup u.p.p.+>.sih)) %quit !! :: ?? diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index a92b8d91b..e5adf9d62 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -48,9 +48,6 @@ ++ note :: out request $-> $% $: %a :: to %ames $% [%want p=sock q=[path *]] :: - == == :: - $: %b :: to %behn - $% [%deal p=sock q=cush] :: full transmission == == :: $: %d :: to %dill $% [%flog p=[%crud p=@tas q=(list tank)]] :: @@ -63,10 +60,7 @@ [%wasp p=@p q=@uvH] :: == == :: $: %g :: to %gall - $% [%mess p=hapt q=ship r=cage] :: - [%nuke p=hapt q=ship] :: - [%show p=hapt q=ship r=path] :: - [%took p=hapt q=ship] :: + $% [%deal p=sock q=cush] :: full transmission == == :: $: %t :: to %temp $% [%wait p=@da] :: @@ -78,17 +72,11 @@ [%cast p=mark q=silk] :: [%done p=(set beam) q=cage] :: == :: -++ sine :: - $? sign :: - $: %g :: - $% [%veer p=@ta q=path r=@t] :: - [%vega p=path] :: - == == == :: ++ sign :: in result $<- $? $: %a :: by %ames $% [%went p=ship q=cape] :: == == :: - $: %b :: by %behn + $: %g :: by %gall $% [%unto p=cuft] :: within agent == == :: $: %e :: by self @@ -98,13 +86,6 @@ $% [%made p=@uvH q=(each gage tang)] :: [%news ~] :: == == :: - $: %g :: by %gall - $% [%dumb ~] :: - [%mean p=ares] :: - [%nice ~] :: - [%rush p=mark q=*] :: - [%rust p=mark q=*] :: - == == :: $: %t :: by %time $% [%wake ~] :: timer activate == == :: @@ -156,7 +137,7 @@ eve=[p=@u q=(map ,@u even)] :: queued events med=(qeu duct) :: waiting /~/to/ == -:: +++ honk $%([%nice ~] [%mean p=ares]) :: old gall result ++ even :: client event $% [%mean p=[hasp path] q=ares] [%news p=@uv] @@ -177,7 +158,7 @@ == :: ++ perk-auth :: parsed auth - $% [%at p=pork] :: inject auth + $% [%at p=pork] :: inject auth [%del p=(unit ship)] [%get him=ship rem=pork] [%js ~] @@ -195,7 +176,7 @@ [%js p=@t] :: script [%json p=json] :: data [%html p=manx] :: successful page - [%htme p=manx] :: authentication failure + [%htme p=manx] :: authentication fail == -- :: |% @@ -507,16 +488,22 @@ %wegh !! == :: + ++ axom :: old response + |= [tee=whir hon=honk] + ^+ +> + ?+ tee !! + ~ ?-(-.hon %nice (nice-json), %mean (mean-json 500 p.hon)) + [%of @ ^] (get-ack:(ire-ix p.tee) q.tee hon) + == ++ axon :: accept response |= [tee=whir typ=type sih=sign] ^+ +> - :: %- emule |. ^+ ..axon =. our ?~(hov our u.hov) :: XX ?- &2.sih %crud +>.$(mow [[hen %slip %d %flog +.sih] mow]) - %dumb - =. +> ?+(tee +> [%of ^] pop-duct:(ire-ix p.tee)) - (emule |.(~|(gall-dumb/tee !!))) + :: %dumb + :: =. +> ?+(tee +> [%of ^] pop-duct:(ire-ix p.tee)) + :: (emule |.(~|(gall-dumb/tee !!))) :: %went +>.$ %thou @@ -526,35 +513,16 @@ %unto :: XX horrible =+ cuf=`cuft`+>.sih ?- -.cuf - %coup - ?~ p.cuf $(sih [%g %nice ~]) - $(sih [%g %mean `[%coup u.p.cuf]]) - :: - %reap - ?~ p.cuf $(sih [%g %nice ~]) - $(sih [%g %mean `[%reap u.p.cuf]]) + ?(%coup %reap) + (axom tee ?~(p.cuf [%nice ~] [%mean `[-.cuf u.p.cuf]])) :: %diff - $(sih [%g %rush p.p.cuf q.q.p.cuf]) + ?> ?=([%of @ ^] tee) + ?. ?=(%json p.p.cuf) + (back tee 0v0 %json p.cuf) + (get-rush:(ire-ix p.tee) q.tee ((hard json) q.q.p.cuf)) :: - %quit - $(sih [%g %mean ~]) - == - :: - ?(%rush %rust) - ?> ?=([%of @ ^] tee) - ?. ?=(%json p.sih) - =- (back tee 0v0 %json -) - `cage`[p.sih (slot 3 (spec (slot 3 [typ +.sih])))] - ~! [q.tee *whir-of] - (get-rush:(ire-ix p.tee) q.tee ((hard json) q.sih)) - :: - ?(%nice %mean) - :: ~& [tee `@tas`&2.sih] - ?+ tee !! - ~ ~& empty-ack/&2.sih - ?-(&2.sih %nice (nice-json), %mean (mean-json 500 p.sih)) - [%of @ ^] (get-ack:(ire-ix p.tee) q.tee +.sih) + %quit (axom tee [%mean ~]) == :: %wake @@ -1200,22 +1168,22 @@ :: ++ new-mess |= [a=hasp b=wire c=cage] ^+ ..ix - (hurl-note [a b] [%b %deal [him -.a] +.a %poke c]) + (hurl-note [a b] [%g %deal [him -.a] +.a %poke c]) :: ++ add-subs |= [a=hasp %json b=wire c=path] ^+ ..ix - (hurl-note [a b] [%b %deal [him -.a] +.a %peer c]) + (hurl-note [a b] [%g %deal [him -.a] +.a %peer c]) :: ++ del-subs :: XX per path? |= [a=hasp %json b=wire c=path] ^+ ..ix - (hurl-note [a b] [%b %deal [him -.a] +.a %pull ~]) + (hurl-note [a b] [%g %deal [him -.a] +.a %pull ~]) :: ++ get-rush |= [a=whir-of b=json] ^+ ..ix (get-even [%rush [[(slav %p p.a) q.a] r.a] (joba %json b)]) :: ++ get-ack - |= [a=whir-of b=$&([%nice ~] [%mean p=ares])] ^+ ..ix + |= [a=whir-of b=honk] ^+ ..ix ?- -.b %mean ?~ p.b :: XX actually a yawn-told-full @@ -1255,7 +1223,7 @@ |= a=[p=hasp wire] %+ pass-note(hen `~) [%of ire (gsig a)] - [%b %deal [him -.p.a] +.p.a %pump ~] + [%g %deal [him -.p.a] +.p.a %pump ~] :: ++ pop-duct =^(ned med ~(get to med) abet(hen ned)) ++ poll @@ -1326,9 +1294,10 @@ |= old=bolo ^+ ..^$ =+ mej=|=(a=* (met 3 (jam a))) - ~& :* gub=(mej gub.old) hov=(mej hov.old) ged=(mej ged.old) ded=(mej ded.old) - pox=(mej pox.old) ask=(mej ask.old) kes=(mej kes.old) ney=(mej ney.old) - dop=(mej dop.old) liz=(mej liz.old) wup=(mej wup.old) sop=(mej sop.old) + ~& :* gub=(mej gub.old) hov=(mej hov.old) ged=(mej ged.old) + ded=(mej ded.old) pox=(mej pox.old) ask=(mej ask.old) + kes=(mej kes.old) ney=(mej ney.old) dop=(mej dop.old) + liz=(mej liz.old) wup=(mej wup.old) sop=(mej sop.old) wix=(mej wix.old) == ..^$(+>- old) @@ -1340,12 +1309,8 @@ :: ++ stay `bolo`+>-.$ ++ take :: accept response - |= [tea=wire hen=duct hin=(hypo sine)] + |= [tea=wire hen=duct hin=(hypo sign)] ^- [p=(list move) q=_..^$] - ?: ?=(%veer +<.q.hin) :: vomit - [[hen %give +.q.hin]~ ..^$] - ?: ?=(%vega +<.q.hin) :: vomit - [[hen %give +.q.hin]~ ..^$] =+ our=`@p`0x100 :: XX sentinel =+ ska=(slod ski) =+ sky=|=(* `(unit)`=+(a=(ska +<) ?~(a ~ ?~(u.a ~ [~ u.u.a])))) diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon new file mode 100644 index 000000000..774534f4c --- /dev/null +++ b/base/arvo/gall.hoon @@ -0,0 +1,1162 @@ +!: :: %gall, agent execution +!? 163 +:::: +|= pit=vase +=> =~ +|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: rest of arvo + :::::::::::::::::::::::::::::::::::::::::::::::::::::: +++ 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 + == :: +++ milk (trel ship desk silk) :: sourced silk +++ 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 + [%bunt p=mark] :: example of mark + [%call p=silk q=silk] :: slam + [%cast p=mark q=silk] :: translate + [%diff p=silk q=silk] :: diff + [%done p=(set beam) q=gage] :: literal + [%dude p=tank q=silk] :: error wrap + [%dune p=(set beam) q=(unit gage)] :: unit literal + [%file p=beam] :: from clay + [%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 + [%pact p=silk q=silk] :: patch + [%plan p=beam q=spur r=hood] :: structured assembly + [%reef ~] :: kernel reef + [%ride p=twig q=silk] :: silk thru twig + [%tabl p=(list (pair silk silk))] :: list + [%vale p=mark q=ship r=*] :: validate [our his] + [%volt p=(set beam) q=(cask ,*)] :: unsafe add type + == :: +++ volt ?(%low %high) :: voltage +++ torc $|(?(%iron %gold) [%lead p=ship]) :: security control +++ roon :: reverse ames msg + $% [%d p=mark q=*] :: diff (diff) + [%x ~] :: + == :: +++ rook :: forward ames msg + $% [%m p=mark q=*] :: message + [%s p=path] :: subscribe + [%u ~] :: cancel/unsubscribe + == :: +-- :: +|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: local arvo + :::::::::::::::::::::::::::::::::::::::::::::::::::::: +++ club :: agent action + $% [%peer p=path] :: subscribe + [%poke p=cage] :: apply + [%pull ~] :: unsubscribe + [%pump ~] :: subscription ack + == :: +++ culm :: config action + $% [%load p=scup] :: load/reload + :: [%kick ~] :: restart everything + :: [%stop ~] :: toggle suspend + :: [%wipe ~] :: destroy all state + == :: +++ cuss (pair dude club) :: internal kiss +++ cuft :: internal gift + $% [%coup p=(unit tang)] :: poke result + [%diff p=cage] :: subscription output + [%quit ~] :: close subscription + [%reap p=(unit tang)] :: peer result + == :: +++ cote :: ++ap note + $% [%meta p=@tas q=vase] :: + [%send p=ship q=cuss] :: + == :: +++ cove (pair duct (mold cote cuft)) :: internal move +++ cute (pair bone (mold cote cuft)) :: internal move +++ dude term :: local identity +++ scup (pair ship desk) :: autoupdate +++ suss (trel dude ,@tas ,@da) :: config report +++ tang (list tank) :: error abstraction +-- :: +|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %gall cards + :::::::::::::::::::::::::::::::::::::::::::::::::::::: +++ kiss-ames :: + $% [%wont p=sock q=path r=*] :: + == :: +++ kiss-gall :: incoming request + $% [%conf p=dock q=culm] :: configure app + [%init p=ship] :: set owner + [%deal p=sock q=cuss] :: full transmission + [%rote p=sack q=path r=*] :: remote request + [%roth p=sack q=path r=*] :: remote response + == :: +++ kiss-ford :: + $% [%exec p=@p q=beak r=(unit silk)] :: make / kill + [%wasp p=@p q=@uvH] :: depends query + == :: +++ gift-ames :: + $% [%woot p=ship q=(unit ares)] :: e2e reaction message + == :: +++ gift-gall :: outgoing result + $% [%onto p=(each suss tang)] :: about agent + [%unto p=cuft] :: within agent + [%mack p=(unit tang)] :: message ack + == :: +++ gift-ford :: out result <-$ + $% [%made p=@uvH q=(each gage tang)] :: computed result + [%news ~] :: fresh depends + == :: +++ sign-gall :: incoming result + $% [%a gift-ames] :: + [%f gift-ford] :: + [%g gift-gall] :: + == :: +++ note-gall :: outgoing request + $? [@tas %meta p=vase] :: + $% [%a kiss-ames] :: + [%f kiss-ford] :: + [%g kiss-gall] :: + == == :: +++ move ,[p=duct q=(mold note-gall gift-gall)] :: typed move +-- :: +|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %gall state + :::::::::::::::::::::::::::::::::::::::::::::::::::::: +++ axle :: all state + $: %0 :: state version + pol=(map ship mast) :: apps by ship + == :: +++ gest :: subscriber data + $: sup=(map bone (pair ship path)) :: subscribers + pus=(jug path bone) :: srebircsbus + qel=(map bone ,@ud) :: queue meter + == :: +++ mast :: ship state + $: sys=duct :: system duct + sap=(map ship scad) :: foreign contacts + bum=(map dude seat) :: running agents + wub=(map dude sofa) :: waiting queue + == :: +++ ffuc :: new cuff + $: p=(unit (set ship)) :: disclosing to + q=ship :: attributed to + == :: +++ prey (pair volt ffuc) :: privilege +++ scad :: foreign connection + $: p=@ud :: index + q=(map duct ,@ud) :: by duct + r=(map ,@ud duct) :: by index + == :: +++ scar :: opaque input + $: p=@ud :: bone sequence + q=(map duct bone) :: by duct + r=(map bone duct) :: by bone + == :: +++ seat :: agent state + $: mom=duct :: control duct + liv=? :: unstopped + toc=torc :: privilege + tyc=stic :: statistics + ged=gest :: subscribers + hav=vase :: running state + pup=scup :: update control + zam=scar :: opaque ducts + == :: +++ sofa :: queue for blocked + $: kys=(qeu (trel duct prey club)) :: queued kisses + == :: +++ stic :: statistics + $: act=@ud :: change number + eny=@uvI :: entropy + lat=@da :: time + == :: +-- :: + :::::::::::::::::::::::::::::::::::::::::::::::::::::: vane header + :::::::::::::::::::::::::::::::::::::::::::::::::::::: +. == +=| all=axle :: all vane state +|= $: now=@da :: urban time + eny=@uvI :: entropy + ska=sled :: activate + == :: opaque core +|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: state machine + :::::::::::::::::::::::::::::::::::::::::::::::::::::: +++ mo + |_ $: $: our=@p + hen=duct + moz=(list move) + == + mast + == + ++ mo-abed :: initialize + |= [our=@p hen=duct] + ^+ +> + %_ +> + our our + hen hen + +<+ (~(got by pol.all) our) + == + :: + ++ mo-abet :: resolve to + ^- [(list move) _+>+] + :_ +>+(pol.all (~(put by pol.all) our +<+)) + %- flop + %+ turn moz + |= a=move + ?. ?=(%pass -.q.a) a + [p.a %pass [(scot %p our) p.q.a] q.q.a] + :: + ++ mo-conf :: configure + |= [dap=dude lum=culm] + (mo-boot dap ?:((~(has by bum) dap) %old %new) p.lum) + :: + ++ mo-pass :: standard pass + |= [pax=path noh=note-gall] + %_(+> moz :_(moz [hen %pass pax noh])) + :: + ++ mo-give + |= git=gift-gall + %_(+> moz :_(moz [hen %give git])) + :: + ++ mo-okay :: valid agent core + |= vax=vase + ^- ? + (~(nest ut -:!>(*hide)) %| p:(slot 12 vax)) + :: + ++ mo-boom :: complete new boot + |= [dap=dude pup=scup dep=@uvH gux=(each gage tang)] + ^+ +> + ?- -.gux + %| (mo-give %onto %| p.gux) + %& + ?> ?=(@ p.p.gux) + ?. (mo-okay q.p.gux) + (mo-give %onto %| [%leaf "{}: bogus core"]~) + =. +> (mo-bold dap dep) + =. +> (mo-born dap pup q.p.gux) + =+ old=+>.$ + =+ wag=(ap-prop:(ap-abed:ap dap [%high [~ our]]) ~) + ?^ -.wag + =. +>.$ old + (mo-give %onto %| u.-.wag) + =. +>.$ ap-abet:+.wag + (mo-give:(mo-claw dap) %onto %& dap %boot now) + == + :: + ++ mo-born :: new seat + |= [dap=dude pup=scup hav=vase] + =+ sat=*seat + %_ +>.$ + bum + %+ ~(put by bum) dap + %_ sat + mom hen + pup pup + hav hav + p.zam 1 + q.zam [[[~ ~] 0] ~ ~] + r.zam [[0 [~ ~]] ~ ~] + == + == + :: + ++ mo-boon :: complete old boot + |= [dap=dude pup=scup dep=@uvH gux=(each gage tang)] + ^+ +> + ?. (~(has by bum) dap) + ~& [%gall-old-boon dap] + +> + =. +> (mo-bold dap dep) + ?- -.gux + %| (mo-give %onto %| p.gux) + %& ?> ?=(@ p.p.gux) + ap-abet:(ap-peep:(ap-abed:ap dap [%high [~ our]]) q.p.gux) + == + :: + ++ mo-bold :: wait for dep + |= [dap=dude dep=@uvH] + ^+ +> + %+ mo-pass [%sys %dep dap ~] + [%f %wasp our dep] + :: + ++ mo-boot :: create ship + |= [dap=dude how=?(%new %old) pup=scup] + ^+ +> + :: ~& [%mo-boot dap how pup] + %+ mo-pass [%sys how dap (scot %p p.pup) q.pup ~] + =+ bek=[p.pup q.pup [%da now]] + ^- note-gall + [%f %exec our bek `[%boil %core [bek [dap %ape ~]] ~]] + :: + ++ mo-away :: foreign request + |= [him=ship caz=cuss] :: + ^+ +> + :: ~& [%mo-away him caz] + ?: ?=(%pump -.q.caz) + :: + :: you'd think this would send an ack for the diff + :: that caused this pump. it would, but we already + :: sent it when we got the diff in ++mo-cyst. then + :: we'd have to save the network duct and connect it + :: to this returning pump. + :: + +> + =^ num +>.$ (mo-bale him) + =+ ^= roc ^- rook + ?- -.q.caz + %poke [%m p.p.q.caz q.q.p.q.caz] + %pull [%u ~] + %peer [%s p.q.caz] + == + %+ mo-pass + [%sys %way -.q.caz ~] + `note-gall`[%a %wont [our him] [%q %ge p.caz ~] [num roc]] + :: + ++ mo-baal :: error convert a + |= art=(unit ares) + ^- ares + ?~(art ~ ?~(u.art `[%blank ~] u.art)) + :: + ++ mo-baba :: error convert b + |= ars=ares + ^- (unit tang) + ?~ ars ~ + `[[%leaf (trip p.u.ars)] q.u.ars] + :: + ++ mo-awed :: foreign response + |= [him=ship why=?(%peer %poke %pull) art=(unit ares)] + ^+ +> + :: ~& [%mo-awed him why art] + =+ tug=(mo-baba (mo-baal art)) + ?- why + %peer (mo-give %unto %reap tug) + %poke (mo-give %unto %coup tug) + %pull ~& [%pull-fail tug] + +>.$ + == + :: + ++ mo-bale :: assign outbone + |= him=ship + ^- [@ud _+>] + =+ sad=(fall (~(get by sap) him) `scad`[1 ~ ~]) + =+ nom=(~(get by q.sad) hen) + ?^ nom [u.nom +>.$] + :- p.sad + %_ +>.$ + sap + %+ ~(put by sap) him + %_ sad + p +(p.sad) + q (~(put by q.sad) hen p.sad) + r (~(put by r.sad) p.sad hen) + == + == + :: + ++ mo-ball :: outbone by index + |= [him=ship num=@ud] + ^- duct + (~(got by r:(~(got by sap) him)) num) + :: + ++ mo-come :: handle locally + |= [her=ship caz=cuss] + ^+ +> + =+ pry=`prey`[%high [~ her]] + (mo-club p.caz pry q.caz) + :: + ++ mo-coup :: back from mo-away + |= [dap=dude him=ship cup=ares] + %^ mo-give %unto %coup + ?~ cup ~ + [~ `tang`[[%leaf (trip p.u.cup)] q.u.cup]] + :: + ++ mo-cyst :: take in /sys + |= [pax=path sih=sign-gall] + ^+ +> + ?+ -.pax !! + %dep :: update + ?> ?=([%f %news *] sih) + ?> ?=([@ ~] t.pax) + =+ sot=(~(get by bum) i.t.pax) + ?~ sot + ~& [%mo-cyst-none i.t.pax] + +>.$ + (mo-boot i.t.pax %old pup.u.sot) + :: + %new + ?> ?=([%f %made *] sih) + ?> ?=([@ @ @ ~] t.pax) + (mo-boom i.t.pax [(slav %p i.t.t.pax) i.t.t.t.pax] +>.sih) + :: + %old :: reload old + ?> ?=([%f %made *] sih) + ?> ?=([@ @ @ ~] t.pax) + (mo-boon i.t.pax [(slav %p i.t.t.pax) i.t.t.t.pax] +>.sih) + :: + %red :: diff ack + ?> ?=([@ @ @ ~] t.pax) + ?> ?=([%a %woot *] sih) + =+ :* him=(slav %p i.t.pax) + dap=i.t.t.pax + num=(slav %ud i.t.t.t.pax) + == + => .(pax `path`[%req t.pax]) + ?~ q.+>.sih + (mo-pass [%sys pax] %g %deal [him our] dap %pump ~) + ~& [%diff-bad-ack q.+>.sih] :: should not happen + =. +>.$ (mo-pass [%sys pax] %g %deal [him our] dap %pull ~) + (mo-pass [%sys pax] %a %wont [our him] [%q %gh dap ~] [num %x ~]) + :: + %rep :: reverse request + ?> ?=([@ @ @ ~] t.pax) + ?> ?=([%f %made *] sih) + =+ :* him=(slav %p i.t.pax) + dap=i.t.t.pax + num=(slav %ud i.t.t.t.pax) + == + ?- -.q.+>.sih + %| (mo-give %mack `p.q.+>.sih) :: XX should crash + %& ?> ?=(@ p.p.q.+>.sih) + =. +>.$ (mo-give %mack ~) :: XX pump should ack + (mo-give(hen (mo-ball him num)) %unto %diff `cage`p.q.+>.sih) + == + :: + %req :: inbound request + ?> ?=([@ @ @ ~] t.pax) + =+ :* him=(slav %p i.t.pax) + dap=i.t.t.pax + num=(slav %ud i.t.t.t.pax) + == + ?: ?=([%f %made *] sih) + ?- -.q.+>.sih + %| (mo-give %mack `p.q.+>.sih) :: XX should crash + %& ?> ?=(@ p.p.q.+>.sih) + (mo-pass [%sys pax] %g %deal [him our] i.t.t.pax %poke p.q.+>.sih) + == + ?: ?=([%a %woot *] sih) +>.$ :: quit ack, boring + ?> ?=([%g %unto *] sih) + =+ cuf=`cuft`+>.sih + ?- -.cuf + %coup (mo-give %mack p.cuf) + %diff %+ mo-pass [%sys %red t.pax] + [%a %wont [our him] [%q %gh dap ~] [num %d p.p.cuf q.q.p.cuf]] + %quit %+ mo-pass [%sys pax] + [%a %wont [our him] [%q %gh dap ~] [num %x ~]] + %reap (mo-give %mack p.cuf) + == + :: + %way :: outbound request + ?> ?=([%a %woot *] sih) + ?> ?=([@ ~] t.pax) + %- mo-awed + :* p.+>.sih + (?(%peer %poke %pull) i.t.pax) + +>+.sih + == + == + :: + ++ mo-cook :: take in /use + |= [pax=path hin=(hypo sign-gall)] + ^+ +> + ?. ?=([@ @ ?(%inn %out) *] pax) + ~& [%mo-cook-bad-pax pax] + !! + =+ dap=`@tas`i.pax + =+ pry=`prey`[%high [~ (slav %p i.t.pax)]] + =+ pap=(ap-abed:ap dap pry) + =+ vax=(slot 3 `vase`hin) + ?- i.t.t.pax + %inn ap-abet:(ap-pour:pap t.t.t.pax (slot 3 `vase`hin)) + %out ?. ?=([%g %unto *] q.hin) + ~& [%mo-cook-weird q.hin] + ~& [%mo-cook-weird-path pax] + +>.$ + ap-abet:(ap-pout:pap t.t.t.pax +>.q.hin) + == + :: + ++ mo-claw :: clear queue + |= dap=dude + ^+ +> + ?. (~(has by bum) dap) +> + =+ suf=(~(get by wub) dap) + =+ neh=hen + ?~ suf +>.$ + |- ^+ +>.^$ + ?: =(~ kys.u.suf) + +>.^$(hen neh, wub (~(del by wub) dap)) + =^ lep kys.u.suf [p q]:~(get to kys.u.suf) + :: ~& [%mo-claw-play dap r.lep] + $(+>.^$ ap-abet:(ap-club:(ap-abed:ap(hen p.lep) dap q.lep) r.lep)) + :: + ++ mo-beak :: build beak + |= dap=dude + ^- 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 + :: + ++ mo-club :: local action + |= [dap=dude pry=prey cub=club] + ^+ +> + ?: |(!(~(has by bum) dap) (~(has by wub) dap)) + :: ~& [%mo-club-qeu dap cub] + =+ syf=(fall (~(get by wub) dap) *sofa) + +>.$(wub (~(put by wub) dap syf(kys (~(put to kys.syf) [hen pry cub])))) + ap-abet:(ap-club:(ap-abed:ap dap pry) cub) + :: + ++ mo-gawk :: ames forward + |= [him=@p dap=dude num=@ud rok=rook] + %+ mo-pass + [%sys %req (scot %p him) dap (scot %ud num) ~] + ^- note-gall + ?- -.rok + %m [%f %exec our (mo-beak dap) ~ %vale p.rok our q.rok] + %s [%g %deal [him our] dap %peer p.rok] + %u [%g %deal [him our] dap %pull ~] + == + :: + ++ mo-gawd :: ames backward + |= [him=@p dap=dude num=@ud ron=roon] + ?- -.ron + %d + %+ mo-pass + [%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 ~) + == + :: + ++ ap :: agent engine + |_ $: $: dap=dude + pry=prey + ost=bone + zip=(list cute) + dub=(list (each suss tang)) + == + seat + == + :: + ++ ap-abed :: initialize + |= [dap=dude pry=prey] + ^+ +> + =: ^dap dap + ^pry pry + +>+<+ `seat`(~(got by bum) dap) + == + =+ unt=(~(get by q.zam) hen) + =: act.tyc +(act.tyc) + eny.tyc (shax (mix (add dap act.tyc) eny)) + lat.tyc now + == + ?^ unt + +>.$(ost u.unt) + %= +>.$ + ost p.zam + p.zam +(p.zam) + q.zam (~(put by q.zam) hen p.zam) + r.zam (~(put by r.zam) p.zam hen) + == + :: + ++ ap-abet :: resolve + ^+ +> + => ap-abut + %_ +> + bum (~(put by bum) dap +<+) + moz :(weld (turn zip ap-aver) (turn dub ap-avid) moz) + == + :: + ++ ap-abut :: track queue + ^+ . + =+ [pyz=zip ful=*(set bone)] + |- ^+ +> + ?~ pyz + =+ ded=(~(tap in ful) ~) + |- ^+ +>.^$ + ?~ ded +>.^$ + $(ded t.ded, +>.^$ ap-kill(ost 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 + ^- move + :- (~(got by r.zam) p.cov) + ?- -.q.cov + ?(%slip %sick) !! + %give ?<(=(0 p.cov) [%give %unto p.q.cov]) + %pass + :+ %pass `path`[%use dap p.q.cov] + ?- -.q.q.cov + %send `note-gall`[%g %deal [our p.q.q.cov] q.q.q.cov] + %meta `note-gall`[`@tas`p.q.q.cov %meta `vase`q.q.q.cov] + == + == + :: + ++ ap-avid :: onto results + |=([a=(each suss tang)] [hen %give %onto a]) + :: + ++ ap-call :: call into server + |= [cog=term arg=vase] + ^- [(unit tang) _+>] + =. +> ap-hide + =+ arm=(ap-farm cog) + ?: ?=(%| -.arm) [`p.arm +>.$] + =+ zem=(ap-slam cog p.arm arg) + ?: ?=(%| -.zem) [`p.zem +>.$] + (ap-sake p.zem) + :: + ++ ap-club :: apply effect + |= cub=club + ^+ +> + ?- -.cub + %poke (ap-poke +.cub) + %peer (ap-peer +.cub) + %pull ap-pull + %pump ap-fall + == + :: + ++ 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-pump:(ap-lame %diff (ap-suck "pour: no diff")) | her pax) + =+ ^= arg ^- vase + %- slop + ?: =(0 p.u.cug) + [!>([`@ud`ost `@p`q.q.pry `path`+.pax]) !>(cag)] + [!>([`@ud`ost `@p`q.q.pry (slag (dec p.u.cug) `path`+.pax)]) q.cag] + =^ cam +>.$ (ap-call q.u.cug arg) + ?^ cam + (ap-pump:(ap-lame q.u.cug u.cam) | her pax) + (ap-pump & her pax) + :: + ++ ap-pump :: break 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 + ^+ . + =+ soy=(~(get by qel.ged) ost) + ?: |(?=(~ soy) =(0 u.soy)) + ~& [%ap-fill-under [our dap] q.q.pry ost] + + + =. u.soy (dec u.soy) + :: ~& [%ap-fill-sub [[our dap] q.q.pry ost] u.soy] + ?: =(0 u.soy) + +(qel.ged (~(del by qel.ged) ost)) + +(qel.ged (~(put by qel.ged) ost u.soy)) + :: + ++ ap-farm :: produce arm + |= cog=term + ^- (each vase tang) + =+ puz=(mule |.((~(mint ut p.hav) [%noun [%cnzy cog]]))) + ?: ?=(%| -.puz) [%| p.puz] + =+ ton=(mock [q.hav q.p.puz] ap-sled) + ?- -.ton + %0 [%& p.p.puz p.ton] + %1 [%| (turn p.ton |=(a=* (smyt (path a))))] + %2 [%| p.ton] + == + :: + ++ ap-fill :: add to queue + ^- [? _.] + =+ suy=(fall (~(get by qel.ged) ost) 0) + ?: =(8 suy) + ~& [%ap-fill-full [our dap] q.q.pry ost] + [%| +] + :: ~? !=(8 suy) [%ap-fill-add [[our dap] q.q.pry ost] +(suy)] + [%& +(qel.ged (~(put by qel.ged) ost +(suy)))] + :: + ++ ap-find :: general arm + |= [cog=term pax=path] + =+ dep=0 + |- ^- (unit (pair ,@ud term)) + =+ ^= spu + ?~ pax ~ + $(pax t.pax, dep +(dep), cog (ap-hype cog i.pax)) + ?^ spu spu + ?.((ap-fond cog) ~ `[dep cog]) + :: + ++ ap-fond :: check for arm + |= cog=term + ^- ? + (slob cog p.hav) + :: + ++ ap-give :: return result + |= cit=cuft + ^+ +> + +>(zip :_(zip [ost %give cit])) + :: + ++ ap-hide :: set up hide + %_ . + +12.q.hav + ^- hide + :* :* our + dap + ~ + == + ~ + sup.ged + pus.ged + tyc + == + == + :: + ++ ap-hype :: hyphenate + |=([a=term b=term] `term`(cat 3 a (cat 3 '-' b))) + :: + ++ ap-move :: process each move + |= vax=vase + ^- (each cute 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)")] + =+ hun=(~(get by r.zam) -.q.vax) + ?. (~(has by r.zam) -.q.vax) + [%| (ap-suck "move: invalid card (bone {<-.q.vax>})")] + =+ cav=(slot 3 (spec (slot 3 vax))) + ?+ +<.q.vax + (ap-move-pass -.q.vax +<.q.vax cav) + %diff (ap-move-diff -.q.vax cav) + %peer (ap-move-peer -.q.vax cav) + %pull (ap-move-pull -.q.vax cav) + %poke (ap-move-poke -.q.vax cav) + %send (ap-move-send -.q.vax cav) + %quit (ap-move-quit -.q.vax cav) + == + :: + ++ ap-move-quit :: give quit move + |= [sto=bone vax=vase] + ^- (each cute tang) + ?^ q.vax [%| (ap-suck "move: improper quit")] + [%& `cute`[sto %give `cuft`[%quit ~]]] + :: + ++ ap-move-diff :: give diff move + |= [sto=bone vax=vase] + ^- (each cute tang) + ?. &(?=(^ q.vax) ?=(@ -.q.vax) ((sane %tas) -.q.vax)) + [%| (ap-suck "move: improper diff")] + [%& sto %give %diff `cage`[-.q.vax (slot 3 vax)]] + :: + ++ ap-move-mess :: extract path, target + |= vax=vase + ^- (each (trel path ship term) tang) + ?. ?& ?=([p=* [q=@ r=@] s=*] q.vax) + (gte 1 (met 7 q.q.vax)) + == + [%| (ap-suck "move: malformed target")] + =+ pux=((soft path) p.q.vax) + ?. &(?=(^ pux) (levy u.pux (sane %ta))) + [%| (ap-suck "move: malformed path")] + [%& [(scot %p q.q.vax) %out r.q.vax u.pux] q.q.vax r.q.vax] + :: + ++ ap-move-pass :: pass general move + |= [sto=bone wut=* vax=vase] + ^- (each cute 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 {(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) + =+ yep=(ap-move-mess vax) + ?: ?=(%| -.yep) yep + =+ gaw=(slot 7 vax) + ?. &(?=([p=@ q=*] q.gaw) ((sane %tas) p.q.gaw)) + [%| (ap-suck "poke: malformed cage")] + :^ %& sto %pass + :- p.p.yep + [%send q.p.yep r.p.yep %poke p.q.gaw (slot 3 (spec gaw))] + :: + ++ ap-move-peer :: pass %peer + |= [sto=bone vax=vase] + ^- (each cute tang) + =+ yep=(ap-move-mess vax) + ?: ?=(%| -.yep) yep + =+ pux=((soft path) +>.q.vax) + ?. &(?=(^ pux) (levy u.pux (sane %ta))) + [%| (ap-suck "peer: malformed path")] + :^ %& sto %pass + :- p.p.yep + [%send q.p.yep r.p.yep %peer u.pux] + :: + ++ ap-move-pull :: pass %pull + |= [sto=bone vax=vase] + ^- (each cute tang) + =+ yep=(ap-move-mess vax) + ?: ?=(%| -.yep) yep + ?. =(~ +>.q.vax) + [%| (ap-suck "pull: malformed card")] + :^ %& sto %pass + :- p.p.yep + [%send q.p.yep r.p.yep %pull ~] + :: + ++ ap-move-send :: pass gall action + |= [sto=bone vax=vase] + ^- (each cute tang) + ?. ?& ?=([p=* [q=@ r=@] [s=@ t=*]] q.vax) + (gte 1 (met 7 q.q.vax)) + ((sane %tas) r.q.vax) + == + [%| (ap-suck "move: malformed send")] + =+ pux=((soft path) p.q.vax) + ?. &(?=(^ pux) (levy u.pux (sane %ta))) + [%| (ap-suck "move: malformed path")] + ?: ?=(%poke s.q.vax) + =+ gav=(spec (slot 7 vax)) + ?> =(%poke -.q.gav) + ?. ?& ?=([p=@ q=*] t.q.vax) + ((sane %tas) p.t.q.vax) + == + [%| (ap-suck "move: malformed poke")] + :^ %& sto %pass + :- [(scot %p q.q.vax) %out r.q.vax u.pux] + ^- cote + :: ~& [%ap-move-send `path`[(scot %p q.q.vax) %out r.q.vax u.pux]] + [%send q.q.vax r.q.vax %poke p.t.q.vax (slot 3 (spec (slot 3 gav)))] + =+ cob=((soft club) [s t]:q.vax) + ?~ cob + [%| (ap-suck "move: malformed club")] + :^ %& sto %pass + :- [(scot %p q.q.vax) %out r.q.vax u.pux] + :: ~& [%ap-move-send `path`[(scot %p q.q.vax) %out r.q.vax u.pux]] + [%send q.q.vax r.q.vax u.cob] + :: + ++ ap-pass :: request action + |= [pax=path coh=cote] + ^+ +> + +>(zip :_(zip [ost %pass pax coh])) + :: + ++ ap-peep :: reinstall + |= vax=vase + ^+ +> + (ap-prep(hav vax) `hav) + :: + ++ ap-peer :: apply %peer + |= pax=path + ^+ +> + =+ cug=(ap-find %peer pax) + ?~ cug + (ap-peon pax) + =^ 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 ~) + :: + ++ ap-peon :: add subscriber + |= pax=path + %_ +>.$ + sup.ged (~(put by sup.ged) ost [q.q.pry pax]) + pus.ged (~(put ju pus.ged) pax ost) + == + :: + ++ ap-poke :: apply %poke + |= cag=cage + ^+ +> + =+ cug=(ap-find %poke p.cag ~) + ?~ cug + (ap-give %coup `(ap-suck "no poke arm")) + :: ~& [%ap-poke dap p.cag cug] + =^ tur +>.$ + %+ ap-call q.u.cug + %+ slop + !>([`@ud`ost `@p`q.q.pry]) + ?. =(0 p.u.cug) q.cag + (slop (ap-term %tas p.cag) q.cag) + (ap-give %coup tur) + :: + ++ ap-lame :: pour error + |= [wut=@tas why=tang] + ^+ +> + =+ cug=(ap-find /lame) + ?~ cug + ~& [%ap-lame wut why] + +>.$ + =^ cam +>.$ + %+ ap-call q.u.cug + !>([[`@ud`ost `@p`q.q.pry] wut why]) + ?^ cam + ~&([%ap-lame-lame u.cam] +>.$) + +>.$ + :: + ++ ap-pour :: generic take + |= [pax=path vax=vase] + ^+ +> + ?. &(?=([@ *] q.vax) ((sane %tas) -.q.vax)) + (ap-lame %pour (ap-suck "pour: malformed card")) + =+ cug=(ap-find [-.q.vax pax]) + ?~ cug + (ap-lame -.q.vax (ap-suck "pour: no {(trip -.q.vax)}: {}")) + =^ cam +>.$ + %+ ap-call q.u.cug + %+ slop + !>([`@ud`ost `@p`q.q.pry `path`(slag p.u.cug pax)]) + (slot 3 vax) + ?^ cam (ap-lame -.q.vax u.cam) + +>.$ + :: + ++ ap-pout :: specific take + |= [pax=path cuf=cuft] + ^+ +> + ?- -.cuf + %coup (ap-punk q.q.pry %coup +.pax `!>(p.cuf)) + %diff (ap-diff q.q.pry pax p.cuf) + %quit (ap-punk q.q.pry %quit +.pax ~) + %reap (ap-punk q.q.pry %reap +.pax `!>(p.cuf)) + == + :: + ++ ap-prep :: install + |= vux=(unit vase) + ^+ +> + =^ gac +>.$ (ap-prop vux) + %= +>.$ + dub + :_(dub ?~(gac [%& dap ?~(vux %boot %bump) now] [%| u.gac])) + == + :: + ++ ap-prop :: install + |= vux=(unit vase) + ^- [(unit tang) _+>] + ?. (ap-fond %prep) + ?~ vux + `+>.$ + ?. (~(nest ut p:(slot 13 hav)) %| p:(slot 13 u.vux)) + :_(+>.$ `(ap-suck "prep mismatch")) + `+>.$(+13.q.hav +13.q.u.vux) + =^ tur +>.$ + %+ ap-call %prep + %+ slop + !>([`@ud`ost `@p`q.q.pry]) + ?~(vux !>(~) (slop !>(~) (slot 13 u.vux))) + ?~(tur `+>.$ :_(+>.$ `u.tur)) + :: + ++ ap-pull :: pull inbound + =+ wim=(~(get by sup.ged) ost) + ?~ wim ~&(%ap-pull-none +) + =: sup.ged (~(del by sup.ged) ost) + pus.ged (~(del ju pus.ged) q.u.wim ost) + qel.ged (~(del by qel.ged) ost) + == + =+ cug=(ap-find %pull q.u.wim) + ?~ cug +> + =^ cam +> + %+ ap-call q.u.cug + !>([[`@ud`ost `@p`q.q.pry] (slag p.u.cug q.u.wim)]) + ?^ cam (ap-lame q.u.cug u.cam) + +>+ + :: + ++ ap-kill :: queue kill + ~& [%ap-kill dap ost] + (ap-give:ap-pull %quit ~) + :: + ++ ap-punk :: non-diff gall take + |= [her=ship cog=term pax=path vux=(unit vase)] + ^+ +> + =+ cug=(ap-find cog pax) + ?~ cug + ~& [%ap-punk-none cog pax] + +>.$ + =^ cam +>.$ + %+ ap-call q.u.cug + =+ den=!>([`@ud`ost `@p`q.q.pry (slag p.u.cug pax)]) + ?~(vux den (slop den u.vux)) + ?^ cam (ap-lame q.u.cug u.cam) + +>.$ + :: + ++ ap-safe :: process move list + |= vax=vase + ^- (each (list cute) tang) + ?~ q.vax [%& ~] + ?@ q.vax [%| (ap-suck "move: malformed list")] + =+ sud=(ap-move (slot 2 vax)) + ?: ?=(%| -.sud) sud + =+ res=$(vax (slot 3 vax)) + ?: ?=(%| -.res) res + [%& p.sud p.res] + :: + ++ ap-sake :: handle result + |= vax=vase + ^- [(unit tang) _+>] + ?: ?=(@ q.vax) + [`(ap-suck "sake: invalid product (atom)") +>.$] + =+ muz=(ap-safe (slot 2 vax)) + ?: ?=(%| -.muz) [`p.muz +>.$] + =+ sav=(ap-save (slot 3 vax)) + ?: ?=(%| -.sav) [`p.sav +>.$] + :- ~ + %_ +>.$ + zip (weld (flop p.muz) zip) + hav p.sav + == + :: + ++ ap-save :: verify core + |= vax=vase + ^- (each vase tang) + ?. (~(nest ut p.hav) %| p.vax) + [%| (ap-suck "invalid core")] + [%& vax] + :: + ++ ap-slam :: virtual slam + |= [cog=term gat=vase arg=vase] + ^- (each vase tang) + =+ wiz=(mule |.((slit p.gat p.arg))) + ?: ?=(%| -.wiz) + ~& %ap-slam-mismatch + ~> %slog.[0 ~(duck ut p.arg)] + ~> %slog.[0 ~(duck ut (~(peek ut p.gat) %free 6))] + [%| (ap-suck "call: {}: type mismatch")] + =+ ton=(mong [q.gat q.arg] ap-sled) + ?- -.ton + %0 [%& p.wiz p.ton] + %1 [%| (turn p.ton |=(a=* (smyt (path a))))] + %2 [%| p.ton] + == + :: + ++ ap-sled (mole (slod ska)) :: namespace view + ++ ap-suck :: standard tang + |= msg=tape + ^- tang + [%leaf (weld "gall: {}: " msg)]~ + :: + ++ ap-term :: atomic vase + |= [a=@tas b=@] + ^- vase + [[%cube b %atom a] b] + :: + ++ ap-vain :: card to vane + |= sep=@tas + ^- (unit ,@tas) + ?+ sep ~& [%ap-vain sep] + ~ + %cash `%a + %conf `%g + %deal `%g + %exec `%f + %flog `%d + %mess `%g + %nuke `%g + %show `%g + %took `%g + %plug `%c + %want `%a + == + -- + -- +++ call :: request + |= [hen=duct hic=(hypo (hobo kiss-gall))] + ^- [p=(list move) q=_..^$] + => .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss-gall) p.q.hic))) + ?- -.q.hic + %conf + ?. (~(has by pol.all) p.p.q.hic) + ~& [%gall-not-ours p.p.q.hic] + [~ ..^$] + mo-abet:(mo-conf:(mo-abed:mo p.p.q.hic hen) q.p.q.hic q.q.hic) + :: + %deal + =< mo-abet + ?. (~(has by pol.all) q.p.q.hic) :: either to us + ?> (~(has by pol.all) p.p.q.hic) :: or from us + (mo-away:(mo-abed:mo p.p.q.hic hen) q.p.q.hic q.q.hic) + (mo-come:(mo-abed:mo q.p.q.hic hen) p.p.q.hic q.q.hic) + :: + %init + ~& [%gall-init p.q.hic] + [~ ..^$(pol.all (~(put by pol.all) p.q.hic [hen ~ ~ ~]))] + :: + %rote + :: ~& [%gall-rote p.q.hic] + ?. (~(has by pol.all) p.p.q.hic) + ~& [%gall-not-ours p.q.hic] + [~ ..^$] + ?> ?=([@ ~] q.q.hic) + =+ dap=i.q.q.hic + =+ our=p.p.q.hic + =+ him=q.p.q.hic + =+ mes=((hard ,[@ud rook]) r.q.hic) + =< mo-abet + (mo-gawk:(mo-abed:mo our hen) him dap mes) + :: + %roth + :: ~& [%gall-roth p.q.hic] + ?. (~(has by pol.all) p.p.q.hic) + ~& [%gall-not-ours p.q.hic] + [~ ..^$] + ?> ?=([@ ~] q.q.hic) + =+ dap=i.q.q.hic + =+ our=p.p.q.hic + =+ him=q.p.q.hic + =+ mes=((hard ,[@ud roon]) r.q.hic) + =< mo-abet + (mo-gawd:(mo-abed:mo our hen) him dap mes) + == +:: +++ doze :: sleep until + |= [now=@da hen=duct] + ^- (unit ,@da) + ~ +:: +++ load :: recreate vane + |= old=axle + ^+ ..^$ + ..^$(all old) +:: +++ scry + |= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path] + ^- (unit (unit (pair mark ,*))) + [~ ~] +:: +++ stay :: save w/o cache + `axle`all +:: +++ take :: response + |= [tea=wire hen=duct hin=(hypo sign-gall)] + ^- [p=(list move) q=_..^$] + ~| [%gall-take tea] + ?> ?=([@ ?(%sys %use) *] tea) + =+ our=(need (slaw %p i.tea)) + =+ mow=(mo-abed:mo our hen) + ?: ?=(%sys i.t.tea) + mo-abet:(mo-cyst:mow t.t.tea q.hin) + ?> ?=(%use i.t.tea) + mo-abet:(mo-cook:mow t.t.tea hin) +-- diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index 40c622dd2..8c8140cec 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -1767,7 +1767,7 @@ %pawn `@p`0 == :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: section 3bI, Arvo models :: +:: section 3bI, Arvo structures :: :: ++ acru :: asym cryptosuite $_ ^? |% :: opaque object diff --git a/base/dog/solid/gate.hook b/base/dog/solid/gate.hook index 0615fdc6a..37f65e490 100644 --- a/base/dog/solid/gate.hook +++ b/base/dog/solid/gate.hook @@ -21,7 +21,7 @@ =+ all=.*(0 ken) =+ ^= vay ^- (list ,[p=@tas q=@tas]) :~ [%$ %zuse] - [%b %behn] + [%g %gall] [%f %ford] [%a %ames] [%c %clay] From 66f7b16d5e223567c91d17dce76e2136e1a88116 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 11 May 2015 10:53:47 -0700 Subject: [PATCH 24/94] Various fixes and improvements. --- base/ape/helm/core.hook | 2 +- base/lib/helm/core.hook | 160 ++++++++++++++++++++++++++++++++++++++++ base/lib/hood/core.hook | 7 ++ base/lib/sole/core.hook | 2 - base/sur/helm/core.hook | 8 ++ base/sur/hood/core.hook | 6 ++ base/sur/talk/core.hook | 2 +- 7 files changed, 183 insertions(+), 4 deletions(-) create mode 100644 base/lib/helm/core.hook create mode 100644 base/lib/hood/core.hook create mode 100644 base/sur/helm/core.hook create mode 100644 base/sur/hood/core.hook diff --git a/base/ape/helm/core.hook b/base/ape/helm/core.hook index b71b14960..46431bdd8 100644 --- a/base/ape/helm/core.hook +++ b/base/ape/helm/core.hook @@ -19,13 +19,13 @@ == :: ++ funk (pair ,@ ,@) :: ++ begs ,[his=@p tic=@p eny=@t ges=gens] :: begin data - ++ suss ,[term @tas @da] :: config report ++ helm-wish :: $| $? %reset :: reset kernel %verb :: verbose mode == :: $% [%reload p=(list term)] :: reload vanes == :: + ++ suss ,[term @tas @da] :: config report ++ dill :: sent to %dill $% [%crud p=term q=(list tank)] :: fat report [%text p=tape] :: thin report diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook new file mode 100644 index 000000000..23c28523f --- /dev/null +++ b/base/lib/helm/core.hook @@ -0,0 +1,160 @@ +:: :: :: +:::: /hook/core/helm/lib :: :: + :: :: :: +/? 310 :: version +:: :: :: +:::: :: :: + :: :: :: +|% :: :: +++ helm-part :: helm state + $: %helm :: doubletag + %0 :: state version + bur=(unit (pair ship mace)) :: requesting ticket + hoc=(map bone helm-session) :: consoles + == :: +++ helm-session :: + $: say=sole-share :: console state + mud=(unit (sole-dialog ,@ud)) :: console dialog + == :: +:: :: :: +:::: :: :: + :: :: :: +++ helm-begin :: begin command + $: his=@p :: identity + tic=@p :: ticket + eny=@t :: entropy + ges=gens :: description + == :: +++ helm-init :: report init + $: him=ship :: + == :: +++ helm-start :: start (local) server + $: syd=desk :: desk + dap=term :: program + == :: +++ helm-reset :: reset command + ,~ :: +++ helm-verb :: reset command + ,~ :: +++ helm-reload :: reload command + (list term) :: +-- :: +:: :: :: +:::: :: :: + !: :: :: +|% :: helm library +++ helm-work :: work in helm + |= [[hide from] helm-part] + ?> =(src our) + =+ sez=(fall (~(get by hoc) ost) *helm-session) + => |% :: arvo structures + ++ card :: + $% [%cash wire p=@p q=buck] :: + [%conf wire dock %load ship term] :: + [%flog wire dill] :: + [%plug wire @p @tas @p @tas] :: + [%want wire sock path *] :: send message + == :: + ++ suss ,[term @tas @da] :: config report + ++ dill :: sent to %dill + $% [%crud p=term q=(list tank)] :: fat report + [%text p=tape] :: thin report + [%veer p=@ta q=path r=@t] :: install vane + [%vega p=path] :: reboot by path + [%verb ~] :: verbose mode + == :: + ++ move (pair bone card) :: user-level move + -- + |_ moz=(list move) + ++ abet :: resolve + [(flop moz) %_(+>+>+<+ hoc (~(put by hoc) ost sez))] + :: + ++ emit |=(card %_(+> moz [[ost +<] moz])) :: return card + ++ emil :: return cards + |= (list card) + ^+ +> + ?~(+< +> $(+< t.+<, +> (emit i.+<))) + :: + ++ poke-begin :: make/send keypair + |= helm-begin =< abet + ?> ?=(~ bur) + =+ buz=(shax :(mix (jam ges) eny)) + =+ loy=(bruw 2.048 buz) + %- emit(bur `[his [0 sec:ex:loy]~]) + [%want /ticketing [our (sein his)] /q/ta his tic ges pub:ex:loy] + :: + ++ poke-init :: initialize + |= him=ship =< abet + (emit %flog /helm %crud %hax-init leaf/(scow %p him) ~) + :: + ++ poke-start :: start a server + |= helm-start =< abet + (emit %conf /helm [our dap] %load our syd) + :: + ++ poke-reload :: reload vanes + |= all=(list term) =< abet + %- emil + %+ turn all + =+ ark=(arch .^(%cy /(scot %p our)/base/(scot %da lat)/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) + =+ way=[(scot %p our) %base (scot %da lat) %arvo nam %hoon ~] + =+ fil=(,@ .^(%cx way)) + :* %flog + /reload + [%veer ?:(=('z' tip) %$ tip) way (,@ .^(%cx way))] + == + :: + ++ poke-reset :: reset system + |= helm-reset =< abet + %- emil + =+ top=`path`/(scot %p our)/base/arvo/(scot %da lat) + :- [%flog /reset %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] + =+ way=`path`(welp top /[q]) + =+ txt=((hard ,@) .^(%cx (welp way /hoon))) + [%flog /reset %veer p way txt] + :: + ++ poke-will :: hear certificate + |= wil=(unit will) =< abet + ?> ?=(^ bur) + ?> ?=(^ wil) + %- emil(bur ~) + :~ [%cash /helm p.u.bur q.u.bur u.wil] + [%plug /helm our %main (sein our) %main] + [%plug /helm our %arvo (sein our) %arvo] + [%plug /helm our %try (sein our) %try] + == + :: + ++ poke-verb + |= ~ =< abet + (emit %flog /helm %verb ~) + :: + ++ take-onto :: result of %conf + |= saw=(each suss tang) =< abet + %- emit + ?- -.saw + %| [%flog ~ %crud %onto `tang`p.saw] + %& [%flog ~ %text "<{}>"] + == + -- +-- diff --git a/base/lib/hood/core.hook b/base/lib/hood/core.hook new file mode 100644 index 000000000..3fbf277cd --- /dev/null +++ b/base/lib/hood/core.hook @@ -0,0 +1,7 @@ +:: :: :: +:::: /hook/core/hood/lib :: :: + :: :: :: +/? 310 :: arvo version +/- *helm :: structures +/+ helm :: libraries +. diff --git a/base/lib/sole/core.hook b/base/lib/sole/core.hook index 4ffa639f3..ae0a12ed2 100644 --- a/base/lib/sole/core.hook +++ b/base/lib/sole/core.hook @@ -1,8 +1,6 @@ :: :::: /hook/core/sole/lib :: - :: This file is in the public domain. - :: /? 310 /- *sole !: diff --git a/base/sur/helm/core.hook b/base/sur/helm/core.hook new file mode 100644 index 000000000..6333ffe87 --- /dev/null +++ b/base/sur/helm/core.hook @@ -0,0 +1,8 @@ +:: :: :: +:::: /hook/core/helm/sur :: :: + :: :: :: +/? 310 :: arvo version +/- *sole :: structures +:: :: :: +:::: :: :: + !: :: :: diff --git a/base/sur/hood/core.hook b/base/sur/hood/core.hook new file mode 100644 index 000000000..6a56db615 --- /dev/null +++ b/base/sur/hood/core.hook @@ -0,0 +1,6 @@ +:: :: :: +:::: /hook/core/hood/sur :: :: + :: :: :: +/? 310 :: arvo version +/- *sole, *helm :: structures +. diff --git a/base/sur/talk/core.hook b/base/sur/talk/core.hook index 98ce2596c..8c4d79847 100644 --- a/base/sur/talk/core.hook +++ b/base/sur/talk/core.hook @@ -38,7 +38,7 @@ == :: ++ posture :: security posture $? %black :: channel - %white :: village + %white :: chamber %green :: journal %brown :: mailbox == :: From 1a7b72fbe9be3d979d97ed31ef4f6a05d27b36ec Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 11 May 2015 11:05:14 -0700 Subject: [PATCH 25/94] Forgot a file. --- base/ape/hood/core.hook | 99 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 base/ape/hood/core.hook diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook new file mode 100644 index 000000000..13fc3a4d0 --- /dev/null +++ b/base/ape/hood/core.hook @@ -0,0 +1,99 @@ +:: :: :: +:::: /hook/core/hood/ape :: :: + :: :: :: +/? 314 :: zuse version +/- *sole :: structures +/+ sole, helm :: libraries +:: :: :: +:::: :: :: + !: :: :: +=> |% :: gall boilerplate + ++ suss ,[term @tas @da] :: config report + ++ dill :: sent to %dill + $% [%crud p=term q=tang] :: fat report + [%text p=tape] :: thin report + [%veer p=@ta q=path r=@t] :: install vane + [%vega p=path] :: reboot by path + [%verb ~] :: verbose mode + == :: + ++ card :: + $% [%cash wire p=@p q=buck] :: + [%conf wire dock %load ship term] :: + [%flog wire dill] :: + [%plug wire @p @tas @p @tas] :: + [%want wire sock path *] :: send message + == :: + ++ move (pair bone card) :: user-level move + -- +=> |% :: module boilerplate + ++ hood-good :: + |* hed=hood-head :: + |= paw=hood-part :: + ?- hed :: + %helm ?>(?=(%helm -.paw) `helm-part`paw) :: + == :: + ++ hood-head ,_-:*hood-part :: + ++ hood-mold :: + |= hed=hood-head :: + ?- hed :: + %helm helm-part :: + == :: + ++ hood-part :: + $? helm-part :: + == :: + -- :: +:: :: :: +:::: :: :: + :: :: :: +|_ $: hid=hide :: system state + moz=(list move) :: transient moves + lac=(map ,@tas hood-part) :: part system + == :: +++ abet [(flop moz) .(moz ~)] :: resolve core +++ able :: find/make part + |* hed=hood-head + =+ rep=(~(get by lac) hed) + ((hood-good hed) ?^(rep u.rep `hood-part`*(hood-mold hed))) +:: +++ ably :: save part + |= [moz=(list move) rep=hood-part] + %_ +> + moz (weld moz ^moz) + lac (~(put by lac) -.rep rep) + == +:: :: :: +:::: :: :: + :: :: :: +++ poke-helm-begin :: + |= [from helm-begin] + abet:(ably (poke-begin:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-helm-init :: + |= [from helm-init] + abet:(ably (poke-init:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-helm-reload :: + |= [from helm-reload] + abet:(ably (poke-reload:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-helm-reset :: + |= [from ~] + abet:(ably (poke-reset:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-helm-verb :: + |= [from ~] + abet:(ably (poke-verb:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-helm-start :: + |= [from helm-start] + abet:(ably (poke-start:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ poke-will :: + |= [from (unit will)] + abet:(ably (poke-will:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ onto-helm :: + |= [then saw=(each suss tang)] + ^- (quip move +>) + abet:(ably (take-onto:(helm-work [hid ost src] (able %helm)) +<+)) +-- From 9e84fca27e9645cd2e5557696c1e946f0b3a2493 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 11 May 2015 11:16:04 -0700 Subject: [PATCH 26/94] Fix %mack. --- base/arvo/ames.hoon | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index f1808fb39..27e05c7dc 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -61,12 +61,10 @@ $? $: %a :: from %ames $% [%went p=ship q=cape] :: == == :: - $: %b :: from %gall + $: %g :: from %gall $% [%unto p=cuft] :: [%mack p=(unit tang)] :: message ack - == == :: - $: %g :: from %gall - $% [%mean p=ares] :: + [%mean p=ares] :: XX old, clean up [%nice ~] :: == == :: $: @tas :: @@ -1679,7 +1677,6 @@ [hen [%slip %a %kick now]] [hen [%slip %e %init p.bon]] [hen [%slip %g %init p.bon]] - [hen [%slip %b %init p.bon]] :: temporary %behn [hen [%slip %d %init p.bon]] :: must be after gall ~ == @@ -1834,10 +1831,10 @@ ?- +<.sih %crud [[[hen [%slip %d %flog +.sih]] ~] +>] %went [~ +>] - %mack ?~ +>.sih $(sih [%g %nice ~]) + %mack ?~ +>.sih $(sih [%g %nice ~]) :: XX using old code $(sih [%g %mean `[%mack +>+.sih]]) %unto ~|([%ames-unto tea hen +>-.sih] !!) - ?(%mean %nice) + ?(%mean %nice) :: XX obsolete ?: ?=([%ye ~] tea) [~ +>.$] ?> ?=([@ @ @ *] tea) From 0eaaa00f6f724ff97c4e1b6c1a6b0f29ea538641 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 11 May 2015 12:09:41 -0700 Subject: [PATCH 27/94] cherry-pick 8caa882 'add tym to dojo' --- base/ape/dojo/core.hook | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/base/ape/dojo/core.hook b/base/ape/dojo/core.hook index 235a4a406..97325d14c 100644 --- a/base/ape/dojo/core.hook +++ b/base/ape/dojo/core.hook @@ -505,6 +505,10 @@ ^- silk [%boil %gate [he-beak (flop way)] ~] :: + ++ 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 ^+ +>+> @@ -540,7 +544,7 @@ %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 [%reef ~]]] + %ex [/hand [%ride p.q.u.cud [[%done ~ %$ dy-twig-head] [%reef ~]]]] %tu :- /hand :+ %done ~ :- %noun From 1f2ed6ae760efc3b07b5bb16bdfa653e43d5c5b5 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 11 May 2015 17:31:37 -0700 Subject: [PATCH 28/94] Merge old helm code into hood/kiln. --- base/ape/hood/core.hook | 105 ++++---- base/ape/talk/core.hook | 3 + base/arvo/dill.hoon | 2 +- base/arvo/doll.hoon | 477 --------------------------------- base/arvo/gall.hoon | 8 +- base/cat/hood/init/gate.hook | 12 + base/cat/hood/merge/gate.hook | 12 + base/cat/hood/reload/gate.hook | 12 + base/cat/hood/start/gate.hook | 11 + base/cat/hood/sync/gate.hook | 12 + base/cat/hood/unix/gate.hook | 15 ++ base/dog/hood/begin/gate.hook | 45 ++++ base/dog/hood/reload/gate.hook | 12 + base/dog/hood/reset/gate.hook | 12 + base/dog/hood/verb/gate.hook | 13 + base/lib/helm/core.hook | 16 +- base/lib/hood/core.hook | 7 - base/lib/kiln/core.hook | 331 +++++++++++++++++++++++ base/lib/talk/core.hook | 1 - 19 files changed, 559 insertions(+), 547 deletions(-) delete mode 100644 base/arvo/doll.hoon create mode 100644 base/cat/hood/init/gate.hook create mode 100644 base/cat/hood/merge/gate.hook create mode 100644 base/cat/hood/reload/gate.hook create mode 100644 base/cat/hood/start/gate.hook create mode 100644 base/cat/hood/sync/gate.hook create mode 100644 base/cat/hood/unix/gate.hook create mode 100644 base/dog/hood/begin/gate.hook create mode 100644 base/dog/hood/reload/gate.hook create mode 100644 base/dog/hood/reset/gate.hook create mode 100644 base/dog/hood/verb/gate.hook delete mode 100644 base/lib/hood/core.hook create mode 100644 base/lib/kiln/core.hook diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index 13fc3a4d0..3bb123ffd 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -2,98 +2,105 @@ :::: /hook/core/hood/ape :: :: :: :: :: /? 314 :: zuse version -/- *sole :: structures -/+ sole, helm :: libraries +/+ sole, talk, helm, kiln :: libraries :: :: :: :::: :: :: !: :: :: -=> |% :: gall boilerplate - ++ suss ,[term @tas @da] :: config report - ++ dill :: sent to %dill - $% [%crud p=term q=tang] :: fat report - [%text p=tape] :: thin report - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: - ++ card :: - $% [%cash wire p=@p q=buck] :: - [%conf wire dock %load ship term] :: - [%flog wire dill] :: - [%plug wire @p @tas @p @tas] :: - [%want wire sock path *] :: send message - == :: - ++ move (pair bone card) :: user-level move - -- => |% :: module boilerplate ++ hood-good :: |* hed=hood-head :: |= paw=hood-part :: ?- hed :: - %helm ?>(?=(%helm -.paw) `helm-part`paw) :: + %helm ?>(?=(%helm -.paw) `helm-part`paw) :: + %kiln ?>(?=(%kiln -.paw) `kiln-part`paw) :: == :: ++ hood-head ,_-:*hood-part :: ++ hood-mold :: |= hed=hood-head :: ?- hed :: %helm helm-part :: + %kiln kiln-part :: == :: ++ hood-part :: $? helm-part :: + kiln-part :: == :: -- :: :: :: :: :::: :: :: :: :: :: |_ $: hid=hide :: system state - moz=(list move) :: transient moves - lac=(map ,@tas hood-part) :: part system + [%0 lac=(map ,@tas hood-part)] :: part system == :: -++ abet [(flop moz) .(moz ~)] :: resolve core ++ able :: find/make part |* hed=hood-head =+ rep=(~(get by lac) hed) ((hood-good hed) ?^(rep u.rep `hood-part`*(hood-mold hed))) :: ++ ably :: save part - |= [moz=(list move) rep=hood-part] - %_ +> - moz (weld moz ^moz) - lac (~(put by lac) -.rep rep) - == + |* [moz=(list) rep=hood-part] + [(flop moz) +>(lac (~(put by lac) -.rep rep))] :: :: :: :::: :: :: :: :: :: -++ poke-helm-begin :: - |= [from helm-begin] - abet:(ably (poke-begin:(helm-work [hid +<-] (able %helm)) +<+)) +++ poke-hood-begin :: + |= [from hood-begin] + (ably (poke-begin:(helm-work [hid +<-] (able %helm)) +<+)) :: -++ poke-helm-init :: - |= [from helm-init] - abet:(ably (poke-init:(helm-work [hid +<-] (able %helm)) +<+)) +++ poke-hood-init :: + |= [from hood-init] + (ably (poke-init:(helm-work [hid +<-] (able %helm)) +<+)) :: -++ poke-helm-reload :: - |= [from helm-reload] - abet:(ably (poke-reload:(helm-work [hid +<-] (able %helm)) +<+)) +++ poke-hood-reload :: + |= [from hood-reload] + (ably (poke-reload:(helm-work [hid +<-] (able %helm)) +<+)) :: -++ poke-helm-reset :: +++ poke-hood-reset :: |= [from ~] - abet:(ably (poke-reset:(helm-work [hid +<-] (able %helm)) +<+)) + (ably (poke-reset:(helm-work [hid +<-] (able %helm)) +<+)) :: -++ poke-helm-verb :: +++ poke-hood-verb :: |= [from ~] - abet:(ably (poke-verb:(helm-work [hid +<-] (able %helm)) +<+)) + (ably (poke-verb:(helm-work [hid +<-] (able %helm)) +<+)) :: -++ poke-helm-start :: - |= [from helm-start] - abet:(ably (poke-start:(helm-work [hid +<-] (able %helm)) +<+)) +++ poke-hood-start :: + |= [from hood-start] + (ably (poke-start:(helm-work [hid +<-] (able %helm)) +<+)) :: ++ poke-will :: |= [from (unit will)] - abet:(ably (poke-will:(helm-work [hid +<-] (able %helm)) +<+)) + (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 suss tang)] - ^- (quip move +>) - abet:(ably (take-onto:(helm-work [hid ost src] (able %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 +<+)) +:: +++ coup-kiln-spam + |= [then saw=(unit tang)] + ~? ?=(^ saw) [%kiln-spam-lame u.saw] + [~ +>] -- diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 076c40bf7..6d4523b40 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1649,6 +1649,9 @@ ?: oug (weld "@ " txt) (weld " " txt) + :: + %app + [' ' (trip p.sep)] == -- :: diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index f8a05de9d..4aa76eaaa 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -274,7 +274,7 @@ (done %blit [bit ~]) :: ++ init :: initialize - ~& [%doll-init our] + ~& [%dill-init our] =+ myt=(flop (need tem)) =. tem ~ =. moz :_(moz [hen %pass / %c %font our %home our %base]) diff --git a/base/arvo/doll.hoon b/base/arvo/doll.hoon deleted file mode 100644 index 3d2649a7e..000000000 --- a/base/arvo/doll.hoon +++ /dev/null @@ -1,477 +0,0 @@ -!: -:: dill (4d), terminal handling -:: -|= pit=vase -=> |% :: interface tiles -++ console-action :: console to app - $% [%det console-change] :: edit prompt line - [%inn ~] :: enter session - [%out ~] :: exit session - [%ret ~] :: submit and clear - == :: -++ console-buffer (list ,@c) :: command state -++ console-change :: network change - $: ler=console-clock :: destination clock - haw=@uvH :: source hash - ted=console-edit :: state change - == :: -++ console-clock ,[own=@ud his=@ud] :: vector clock -++ console-edit :: shared state change - $% [%del p=@ud] :: delete one at - [%ins p=@ud q=@c] :: insert at - [%mor p=(list console-edit)] :: combination - [%nop ~] :: no-op - [%set p=console-buffer] :: discontinuity - == :: -++ console-effect :: app to console - $% [%bel ~] :: beep - [%blk p=@ud q=@c] :: blink/match char at - [%clr ~] :: clear screen - [%det console-change] :: edit input - [%nex ~] :: save and clear input - [%tan p=(list tank)] :: classic tank - :: [%taq p=tanq] :: modern tank - [%txt p=tape] :: text line - == :: -++ dill-belt :: console input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%cru p=@tas q=(list tank)] :: echo error - [%ctl p=@c] :: control-key - [%del ~] :: true delete - [%met p=@c] :: meta-key - [%ret ~] :: return - [%rez p=@ud q=@ud] :: resize, cols, rows - [%txt p=(list ,@c)] :: utf32 text - [%yow p=gill] :: connect to app - == :: -++ dill-blit :: console output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%mor p=(list dill-blit)] :: multiple blits - [%pro p=(list ,@c)] :: show as cursor/line - [%qit ~] :: close console - [%out p=(list ,@c)] :: send output line - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: -++ gill (pair ship term) :: general contact --- :: -=> |% :: console protocol -++ axle :: all dill state - $: %2 :: - ore=(unit ship) :: identity once set - hey=(unit duct) :: default duct - dug=(map duct axon) :: conversations - == :: -++ axon :: dill per duct - $: ram=term :: console program - tem=(unit (list dill-belt)) :: pending, reverse - wid=_80 :: terminal width - pos=@ud :: cursor position - see=(list ,@c) :: current line - == :: --- => :: -|% :: protocol below -++ blew ,[p=@ud q=@ud] :: columns rows -++ belt :: raw console input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%ctl p=@c] :: control-key - [%del ~] :: true delete - [%met p=@c] :: meta-key - [%ret ~] :: return - [%txt p=(list ,@c)] :: utf32 text - == :: -++ blit :: raw console output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%lin p=(list ,@c)] :: set current line - [%mor ~] :: newline - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: -++ flog :: sent to %dill - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: -++ gift :: out result <-$ - $% [%bbye ~] :: reset prompt - [%blit p=(list blit)] :: terminal output - [%init p=@p] :: set owner - [%logo ~] :: logout - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: -++ 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 - == :: --- => :: -|% :: protocol outward -++ mess :: - $% [%dill-belt p=(hypo dill-belt)] :: - == :: -++ club :: agent action - $% [%peer p=path] :: subscribe - [%poke p=cage] :: apply - [%pull ~] :: unsubscribe - [%pump ~] :: pump yes/no - == :: -++ cuft :: internal gift - $% [%coup p=(unit tang)] :: poke result - [%quit ~] :: close subscription - [%reap p=(unit tang)] :: peer result - [%diff p=cage] :: subscription output - == :: -++ cuss (pair term club) :: internal kiss -++ suss (trel term ,@tas ,@da) :: config report -++ move ,[p=duct q=(mold note gift)] :: local move -++ note-ames :: weird ames move - $% [%make p=(unit ,@t) q=@ud r=@ s=?] :: - [%sith p=@p q=@uw r=?] :: - == :: -++ note-clay :: - $% [%font p=@p q=@tas r=@p s=@tas] :: - [%warp p=sock q=riff] :: wait for clay, hack - == :: -++ note-dill :: note to self, odd - $% [%crud p=@tas q=(list tank)] :: - [%init p=ship] :: - [%text p=tape] :: - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: -++ note-behn :: - $% [%conf dock %load ship desk] :: - [%deal p=sock q=cuss] :: - == :: -++ note :: out request $-> - $% [%a note-ames] :: - [%b note-behn] :: - [%c note-clay] :: - [%d note-dill] :: - == :: -++ riff ,[p=desk q=(unit rave)] :: see %clay -++ sign-ames :: - $% [%nice ~] :: - [%init p=ship] :: - == :: -++ sign-behn :: see %behn - $% [%onto p=(unit tang)] :: - == :: -++ sign-clay :: - $% [%mere p=(each (set path) (pair term tang))] :: - [%note p=@tD q=tank] :: - [%writ p=riot] :: - == :: -++ sign-dill :: - $% [%blit p=(list blit)] :: - == :: -++ sign-behn :: - $% [%onto p=(each suss tang)] :: - [%unto p=cuft] :: - == :: -++ sign-time :: - $% [%wake ~] :: - == :: -++ sign :: in result $<- - $% [%a sign-ames] :: - [%b sign-behn] :: - [%c sign-clay] :: - [%d sign-dill] :: - [%t sign-time] :: - == :: -:::::::: :: dill tiles --- -=| all=axle -|= [now=@da eny=@ ski=sled] :: current invocation -=> |% - ++ as :: per cause - |_ $: [moz=(list move) hen=duct our=ship] - axon - == - ++ abet :: resolve - ^- [(list move) axle] - [(flop moz) all(dug (~(put by dug.all) hen +<+))] - :: - ++ call :: receive input - |= kyz=kiss - ^+ +> - ?+ -.kyz ~& [%strange-kiss -.kyz] +> - %flow +> - %harm +> - %hail +> - %belt (send `dill-belt`p.kyz) - %text (from %out (tuba p.kyz)) - %crud :: (send `dill-belt`[%cru p.kyz q.kyz]) - (crud p.kyz q.kyz) - %blew (send %rez p.p.kyz q.p.kyz) - %veer (dump kyz) - %vega (dump kyz) - %verb (dump kyz) - == - :: - ++ crud - |= [err=@tas tac=(list tank)] - =+ ^= wol ^- wall - :- (trip err) - (zing (turn tac |=(a=tank (~(win re a) [0 wid])))) - |- ^+ +>.^$ - ?~ wol +>.^$ - $(wol t.wol, +>.^$ (from %out (tuba i.wol))) - :: - ++ dump :: pass down to hey - |= git=gift - ?> ?=(^ hey.all) - +>(moz [[u.hey.all %give git] moz]) - :: - ++ done :: return gift - |= git=gift - +>(moz :_(moz [hen %give git])) - :: - ++ from :: receive belt - |= bit=dill-blit - ^+ +> - ?: ?=(%mor -.bit) - |- ^+ +>.^$ - ?~ p.bit +>.^$ - $(p.bit t.p.bit, +>.^$ ^$(bit i.p.bit)) - ?: ?=(%out -.bit) - %+ done %blit - :~ [%lin p.bit] - [%mor ~] - [%lin see] - [%hop pos] - == - ?: ?=(%pro -.bit) - (done(see p.bit) %blit [[%lin p.bit] [%hop pos] ~]) - ?: ?=(%hop -.bit) - (done(pos p.bit) %blit [bit ~]) - ?: ?=(%qit -.bit) - (dump %logo ~) - (done %blit [bit ~]) - :: - ++ init :: initialize - ~& [%doll-init our] - =+ myt=(flop (need tem)) - =. tem ~ - =. moz :_(moz [hen %pass / %c %font our %home our %base]) - :: =. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~]) - =. moz :_(moz [hen %pass ~ %b %conf [[our ram] %load our %base]]) - =. moz :_(moz [hen %pass ~ %b %deal [our our] ram %peer ~]) - |- ^+ +> - ?~ myt +> - $(myt t.myt, +> (send i.myt)) - :: - ++ into :: preinitialize - |= gyl=(list gill) - %_ +> - tem `(turn gyl |=(a=gill [%yow a])) - moz - :_ moz - :* hen - %pass - / - %c - [%warp [our our] %base `[%sing %y [%ud 1] /]] - == - == - :: - ++ send :: send action - |= bet=dill-belt - ?^ tem - +>(tem `[bet u.tem]) - %_ +> - moz - :_ moz - [hen %pass ~ %b %deal [our our] ram %poke [%dill-belt -:!>(bet) bet]] - == - :: - ++ pump :: send diff ack - %_ . - moz - :_(moz [hen %pass ~ %b %deal [our our] ram %pump ~]) - == - :: - ++ take :: receive - |= sih=sign - ^+ +> - ?- sih - [%a %nice *] - :: ~& [%take-nice-ames sih] - +> - :: - [%a %init *] - +>(moz :_(moz [hen %give +.sih])) - :: - [%c %mere *] - ?: ?=(%& -.p.sih) - +>.$ - ~| %dill-mere-fail - ~| p.p.p.sih - |- - ?~ q.p.p.sih !! - ~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace - $(q.p.p.sih t.q.p.p.sih) - :: - [%b %onto *] - :: ~& [%take-behn-onto +>.sih] - ?- -.+>.sih - %| (crud %onto p.p.+>.sih) - %& (done %blit [%lin (tuba "{}")]~) - == - :: - [%b %unto *] - :: ~& [%take-behn-unto +>.sih] - ?- -.+>.sih - %coup ?~(p.p.+>.sih +>.$ (crud %coup u.p.p.+>.sih)) - %quit !! :: ?? - %reap ?~(p.p.+>.sih +>.$ (crud %reap u.p.p.+>.sih)) - %diff pump:(from ((hard dill-blit) q:`vase`+>+>.sih)) - == - :: - [%c %note *] - (from %out (tuba p.sih ' ' ~(ram re q.sih))) - :: - [%c %writ *] - init - :: - [%d %blit *] - (done +.sih) - :: - [%t %wake *] - :: ~& %dill-wake - +> - == - -- - :: - ++ ax :: make ++as - |= [hen=duct kyz=kiss] :: - ?~ ore.all ~ - =+ nux=(~(get by dug.all) hen) - ?^ nux - (some ~(. as [~ hen u.ore.all] u.nux)) - ?. ?=(%flow -.kyz) ~ - %- some - %. q.kyz - %~ into as - :- [~ hen u.ore.all] - :* p.kyz - [~ ~] - 80 - 0 - (tuba "<{(trip p.kyz)}>") - == - -- -|% :: poke/peek pattern -++ call :: handle request - |= $: hen=duct - hic=(hypo (hobo kiss)) - == - ^- [p=(list move) q=_..^$] - => %= . :: XX temporary - q.hic - ^- kiss - ?: ?=(%soft -.q.hic) - :: ~& [%dill-call-soft (,@tas `*`-.p.q.hic)] - ((hard kiss) p.q.hic) - ?: (~(nest ut -:!>(*kiss)) | p.hic) q.hic - ~& [%dill-call-flub (,@tas `*`-.q.hic)] - ((hard kiss) q.hic) - == - ?: ?=(%boot -.q.hic) - :_(..^$ [hen %pass ~ (note %a p.q.hic)]~) - ?: ?=(%flog -.q.hic) - :: ~& [%dill-flog +.q.hic] - ?: ?=([%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]~)) - :_(..^$ ?~(hey.all ~ [u.hey.all %slip %d p.q.hic]~)) - =. hey.all ?^(hey.all hey.all `hen) - ?: ?=(%init -.q.hic) - :: ~& [%call-init hen] - ?: =(ore.all `p.q.hic) - [[hen %give q.hic]~ ..^$] - =: ore.all `p.q.hic - dug.all ~ - == - =+ ^= flo ^- (list (pair ship term)) - =+ myr=(clan p.q.hic) - ?: =(%pawn myr) - [[p.q.hic %dojo] ~] - ?: =(%earl myr) - =+ fap=(sein p.q.hic) - [[fap %dojo] [fap %talk] [fap %helm] ~] - [[p.q.hic %dojo] [p.q.hic %talk] [p.q.hic %helm] ~] - =^ moz all abet:(need (ax (need hey.all) [%flow %sole flo])) - ?: |((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) - ?~ nus - ~& [%dill-no-flow q.hic] - [~ ..^$] - =^ moz all abet:(call:u.nus q.hic) - [moz ..^$] -:: -++ doze - |= [now=@da hen=duct] - ^- (unit ,@da) - ~ -:: -++ load :: trivial - |= old=axle - ..^$(all old) - :: |= old=* :: diable - :: ..^$(ore.all `~zod) -:: -++ scry - |= [fur=(unit (set monk)) ren=@tas his=ship syd=desk lot=coin tyl=path] - ^- (unit (unit cage)) - [~ ~] -:: -++ stay all -:: -++ take :: process move - |= [tea=wire hen=duct hin=(hypo sign)] - ^- [p=(list move) q=_..^$] - ?: =(~ ore.all) - ?: ?=([%a %init *] q.hin) - :: ~& [%take-init hen] - =. hey.all ?^(hey.all hey.all `hen) - [[[hen %give +.q.hin] ~] ..^$] - :: [~ ..^$] - ~& [%take-back q.hin] - [~ ..^$] - ?. (~(has by dug.all) hen) - ~& [%take-weird-sign q.hin] - ~& [%take-weird-hen hen] - [~ ..^$] - =+ our=?>(?=(^ ore.all) u.ore.all) - =^ moz all - abet:(~(take as [~ hen our] (~(got by dug.all) hen)) q.hin) - [moz ..^$] --- - -:: good test diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 774534f4c..7c743993a 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -1072,10 +1072,10 @@ %deal `%g %exec `%f %flog `%d - %mess `%g - %nuke `%g - %show `%g - %took `%g + %font `%c + %info `%c + %lynx `%c + %merg `%c %plug `%c %want `%a == diff --git a/base/cat/hood/init/gate.hook b/base/cat/hood/init/gate.hook new file mode 100644 index 000000000..b585a6a54 --- /dev/null +++ b/base/cat/hood/init/gate.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/gate/reload/hood/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [~ ~] + == +:- %hood-init +p.bec diff --git a/base/cat/hood/merge/gate.hook b/base/cat/hood/merge/gate.hook new file mode 100644 index 000000000..a64345752 --- /dev/null +++ b/base/cat/hood/merge/gate.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/gate/merge/hood/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [[syd=@tas her=@p sud=@tas gem=?([?(%auto germ) ~] ~)] ~] + == +:- %hood-merge +[syd her sud ?~(gem %auto -.gem)] diff --git a/base/cat/hood/reload/gate.hook b/base/cat/hood/reload/gate.hook new file mode 100644 index 000000000..2d25a9af8 --- /dev/null +++ b/base/cat/hood/reload/gate.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/gate/reload/hood/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [arg=(list term) ~] + == +:- %hood-reload +arg diff --git a/base/cat/hood/start/gate.hook b/base/cat/hood/start/gate.hook new file mode 100644 index 000000000..3a1ca77c0 --- /dev/null +++ b/base/cat/hood/start/gate.hook @@ -0,0 +1,11 @@ +:: +:::: /hook/gate/start/hood/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [[who=@p dap=term ~] ~] + == +[%hood-start who dap] diff --git a/base/cat/hood/sync/gate.hook b/base/cat/hood/sync/gate.hook new file mode 100644 index 000000000..fd20cd1dc --- /dev/null +++ b/base/cat/hood/sync/gate.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/gate/sync/hood/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [arg=[syd=@tas her=@p sud=@tas ~] ~] + == +:- %hood-sync +arg diff --git a/base/cat/hood/unix/gate.hook b/base/cat/hood/unix/gate.hook new file mode 100644 index 000000000..d737627c3 --- /dev/null +++ b/base/cat/hood/unix/gate.hook @@ -0,0 +1,15 @@ +:: +:::: /hook/gate/unix/hood/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [[syd=@tas syn=?(~ [? ~])] ~] + == +:+ %hood-unix + syd +?~ syn + ~ +`-.syn diff --git a/base/dog/hood/begin/gate.hook b/base/dog/hood/begin/gate.hook new file mode 100644 index 000000000..8ae62069a --- /dev/null +++ b/base/dog/hood/begin/gate.hook @@ -0,0 +1,45 @@ +:: +:::: /hook/gate/begin/hood/gun + :: +/? 314 +/- *sole +:: +:::: + !: +=> |% + ++ begs ,[his=@p tic=@p yen=@t ges=gens] + -- +|= $: [now=@da eny=@uvI bec=beak] + [~ ~] + == +^- (sole-result (cask begs)) +%+ sole-lo + [%& %hood-begin "your ship: ~"] +%+ sole-go fed:ag +|= his=@p +%+ sole-lo + [%& %hood-ticket "your ticket: ~"] +%+ sole-go fed:ag +|= tic=@p +%+ sole-lo + [%& %hood-entropy "some entropy: "] +%+ sole-go (boss 256 (more gon qit)) +|= yen=@t +=+ ney=(shax yen) +%+ sole-yo `tank`[%leaf "entropy check: {(scow %p `@p`(mug ney))}"] +%+ sole-so %hood-begin +:* his + tic + ney +:: + ^- gens + :- %en + =+ can=(clan his) + ?- can + %czar [%czar ~] + %duke [%duke %anon ~] + %earl [%earl (scot %p his)] + %king [%king ?:(=(~doznec his) 'Urban Republic' (scot %p his))] + %pawn [%pawn ~] + == +== diff --git a/base/dog/hood/reload/gate.hook b/base/dog/hood/reload/gate.hook new file mode 100644 index 000000000..58b621e4a --- /dev/null +++ b/base/dog/hood/reload/gate.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/gate/reload/hood/gun + :: +/? 314 +/- *sole +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [arg=(list term) ~] + == +(sole-so %hood-reload arg) diff --git a/base/dog/hood/reset/gate.hook b/base/dog/hood/reset/gate.hook new file mode 100644 index 000000000..a9a018dd7 --- /dev/null +++ b/base/dog/hood/reset/gate.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/gate/reset/hood/gun + :: +/? 314 +/- *sole +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [~ ~] + == +(sole-so %hood-reset ~) diff --git a/base/dog/hood/verb/gate.hook b/base/dog/hood/verb/gate.hook new file mode 100644 index 000000000..2365b8cb0 --- /dev/null +++ b/base/dog/hood/verb/gate.hook @@ -0,0 +1,13 @@ +:: +:::: /hook/gate/verb/hood/gun + :: +/? 314 +/- *sole +:: +:::: + !: +|= $: [now=@da eny=@ bec=beak] + [~ ~] + == +~& %hood-verb +(sole-so %hood-verb ~) diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook index 23c28523f..eb8160f7f 100644 --- a/base/lib/helm/core.hook +++ b/base/lib/helm/core.hook @@ -19,24 +19,24 @@ :: :: :: :::: :: :: :: :: :: -++ helm-begin :: begin command +++ hood-begin :: begin command $: his=@p :: identity tic=@p :: ticket eny=@t :: entropy ges=gens :: description == :: -++ helm-init :: report init +++ hood-init :: report init $: him=ship :: == :: -++ helm-start :: start (local) server +++ hood-start :: start (local) server $: syd=desk :: desk dap=term :: program == :: -++ helm-reset :: reset command +++ hood-reset :: reset command ,~ :: ++ helm-verb :: reset command ,~ :: -++ helm-reload :: reload command +++ hood-reload :: reload command (list term) :: -- :: :: :: :: @@ -76,7 +76,7 @@ ?~(+< +> $(+< t.+<, +> (emit i.+<))) :: ++ poke-begin :: make/send keypair - |= helm-begin =< abet + |= hood-begin =< abet ?> ?=(~ bur) =+ buz=(shax :(mix (jam ges) eny)) =+ loy=(bruw 2.048 buz) @@ -88,7 +88,7 @@ (emit %flog /helm %crud %hax-init leaf/(scow %p him) ~) :: ++ poke-start :: start a server - |= helm-start =< abet + |= hood-start =< abet (emit %conf /helm [our dap] %load our syd) :: ++ poke-reload :: reload vanes @@ -114,7 +114,7 @@ == :: ++ poke-reset :: reset system - |= helm-reset =< abet + |= hood-reset =< abet %- emil =+ top=`path`/(scot %p our)/base/arvo/(scot %da lat) :- [%flog /reset %vega (weld top `path`/hoon)] diff --git a/base/lib/hood/core.hook b/base/lib/hood/core.hook deleted file mode 100644 index 3fbf277cd..000000000 --- a/base/lib/hood/core.hook +++ /dev/null @@ -1,7 +0,0 @@ -:: :: :: -:::: /hook/core/hood/lib :: :: - :: :: :: -/? 310 :: arvo version -/- *helm :: structures -/+ helm :: libraries -. diff --git a/base/lib/kiln/core.hook b/base/lib/kiln/core.hook new file mode 100644 index 000000000..ccbc2f539 --- /dev/null +++ b/base/lib/kiln/core.hook @@ -0,0 +1,331 @@ +:: :: :: +:::: /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-desk :: per-desk state + $: auto=? :: escalate on failure + gem=germ :: strategy + her=@p :: from ship + sud=@tas :: from desk + cas=case :: at case + == :: +:: :: :: +:::: :: :: + :: :: :: +++ hood-unix :: + $: syd=desk :: + syn=(unit bean) :: + == :: +++ hood-sync :: + $: syd=desk :: + her=ship :: + sud=desk :: + == :: +++ hood-merge :: + $: syd=desk :: + ali=ship :: + sud=desk :: + gim=?(%auto germ) :: + == :: +-- :: +:: :: :: +:::: :: :: + !: :: :: +|% :: helm library +++ kiln-work :: work in kiln + |= [[hide from] kiln-part] + ?> =(src our) + => |% :: arvo structures + ++ card :: + $% [%exec wire @p beak (unit silk)] :: + [%font wire @p @tas @p @tas] :: + [%info wire @p @tas nori] :: + [%lynx wire @p @tas (unit ,?)] :: + [%merg wire @p @tas @p @tas germ] :: + [%plug wire @p @tas @p @tas] :: + [%poke wire dock pear] :: + == :: + ++ pear :: poke fruit + $% [%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 + -- + |_ moz=(list move) + ++ abet :: resolve + [(flop moz) `kiln-part`+>+>->] + :: + ++ emit |=(card %_(+> moz [[ost +<] moz])) :: return card + ++ emil :: return cards + |= (list card) + ^+ +> + ?~(+< +> $(+< t.+<, +> (emit i.+<))) + :: + ++ poke-unix :: + |= hood-unix + abet:(emit %lynx /kiln our syd syn) + :: + ++ poke-sync :: + |= hood-sync + abet:(emit %font /kiln our syd her sud) + :: + ++ poke-merge :: + |= hood-merge + abet:abet:(merge:(work syd) ali sud gim) + :: + ++ take |=(way=wire ?>(?=([@ ~] way) (work i.way))) :: general handler + ++ take-mere :: + |= [way=wire are=(each (set path) (pair term tang))] + abet:abet:(mere:(take way) are) + :: + ++ take-made :: + |= [way=wire dep=@uvH reg=(each gage tang)] + abet:abet:(made:(take way) dep reg) + :: + ++ take-coup-fancy :: + |= [way=wire saw=(unit tang)] + abet:abet:(coup-fancy:(take way) saw) + :: + ++ work :: state machine + |= syd=desk + =+ ^- kiln-desk + %+ fall (~(get by rem) syd) + =+ *kiln-desk + %_(- cas [%da lat]) + |% + ++ abet :: resolve + ..work(rem (~(put by rem) syd auto gem her sud cas)) + :: + ++ blab :: emit, XX remove + |= new=(list move) + ^+ +> + +>.$(moz (welp new moz)) + :: + ++ win . :: successful poke + ++ lose + ^+ . + ~| %kiln-work-failed + !! + :: + ++ 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)] + :: + ++ perform :: + ^+ . + (blab [ost %merg /kiln/[syd] our syd her sud gem] ~) + :: + ++ fancy-merge :: send to self + |= [syd=desk her=@p sud=desk gem=?(%auto germ)] + ^+ +> + %- blab :_ ~ + [ost %poke /kiln/fancy/[^syd] [our %kiln] %hood-merge [syd her sud gem]] + :: + ++ spam + |= mes=(list tank) + %- blab :_ ~ + :* ost %poke /kiln/spam/[syd] + [our %talk] %talk-command + ^- command:talk + :- %publish + %- flop + =< acc + %+ roll mes + =< .(eny eny) + |= [tan=tank acc=(list thought:talk) eny=@uvI] + ^- [acc=(list thought:talk) eny=@uvI] + =+ (sham eny mes) + :_ - + :_ acc + ^- thought:talk + :+ - + [[[%& our (main our)] [*envelope:talk %pending]] ~ ~] + [lat *bouquet:talk [%app (crip ~(ram re tan))]] + == + :: + ++ merge + |= [her=@p sud=@tas gim=?(%auto germ)] + ^+ +> + =. cas [%da lat] + ?. ?=(%auto gim) + perform(auto |, gem gim, her her, sud sud) + ?: =(0 .^(%cw /(scot %p our)/[syd]/(scot %da lat))) + => $(gim %init) + .(auto &) + => $(gim %fine) + .(auto &) + :: + ++ coup-fancy + |= saw=(unit tang) + ?~ saw + => (spam leaf/"%melding %{(trip sud)} into scratch space" ~) + %- blab :_ ~ + [ost %merg /kiln/[syd] our (cat 3 syd '-scratch') her sud gem] + =+ :- "failed to set up conflict resolution scratch space" + "I'm out of ideas" + lose:(spam leaf/-< leaf/-> ~) + :: + ++ mere + |= are=(each (set path) (pair term tang)) + ^+ +> + ?: =(%meld gem) + ?: ?=(%& -.are) + ?. auto + =+ "successfully merged with strategy {}" + win:(spam leaf/- ?~(p.are ~ [>`(set path)`p.are< ~])) + =+ "mashing conflicts" + => .(+>.$ (spam leaf/- ~)) + =+ tic=(cat 3 syd '-scratch') + %- blab :_ ~ + :* ost %exec /kiln/[syd] + our [our tic %da lat] ~ %tabl + ^- (list (pair silk silk)) + %+ turn (~(tap in p.are)) + |= pax=path + ^- (pair silk silk) + :- [%done ~ %path -:!>(*path) pax] + =+ base=[%file [our tic %da lat] (flop pax)] + =+ alis=[%file [her sud cas] (flop pax)] + =+ bobs=[%file [our syd %da lat] (flop pax)] + =+ dali=[%diff base alis] + =+ dbob=[%diff base bobs] + =+ ^- for=mark + =+ (slag (dec (lent pax)) pax) + ?~(- %$ i.-) + [%mash for [her sud dali] [our syd dbob]] + == + =+ "failed to merge with strategy {}" + lose:(spam leaf/- q.p.are) + ?: ?=(%& -.are) + =+ "successfully merged with strategy {}" + win:(spam leaf/- ?~(p.are ~ [>`(set path)`p.are< ~])) + ?. auto + =+ "failed to merge with strategy {}" + lose:(spam leaf/- q.p.are) + ?+ 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< q.p.are]) + :: + %fine + ?. ?=(%bad-fine-merge p.p.are) + =+ "auto merge failed on strategy %fine" + lose:(spam leaf/- >p.p.are< q.p.are) + => (spam leaf/"%fine merge failed, trying %meet" ~) + perform(gem %meet) + :: + %meet + ?. ?=(%meet-conflict p.p.are) + =+ "auto merge failed on strategy %meet" + lose:(spam leaf/- >p.p.are< q.p.are) + => (spam leaf/"%meet merge failed, trying %mate" ~) + perform(gem %mate) + :: + %mate + ?. ?=(%mate-conflict p.p.are) + =+ "auto merge failed on strategy %mate" + lose:(spam leaf/- >p.p.are< q.p.are) + => .(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 syd %auto) + == + :: + ++ made + |= [dep=@uvH reg=(each gage tang)] + ^+ +> + ?: ?=(%| -.reg) + =+ "failed to mash" + lose:(spam leaf/- p.reg) + =+ ^- can=(list (pair path (unit miso))) + %+ turn (tage-to-cages (gage-to-tage p.reg)) + |= [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 %info /kiln/[syd]/dash + our (cat 3 syd '-scratch') + %& *cart + %+ murn can + |= [p=path q=(unit miso)] + `(unit (pair path miso))`?~(q ~ `[p u.q]) + == + -- + -- +-- diff --git a/base/lib/talk/core.hook b/base/lib/talk/core.hook index 8cde98c44..02e5434c9 100644 --- a/base/lib/talk/core.hook +++ b/base/lib/talk/core.hook @@ -10,7 +10,6 @@ :: |% ++ main :: main story - |= our=ship ^- cord =+ can=(clan our) ?+ can %porch From 6952ecaa75be329b1d297dd12c9b52dbe6ac5f96 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 11 May 2015 17:43:47 -0700 Subject: [PATCH 29/94] Switch from helm to hood. --- base/ape/dojo/core.hook | 2 +- base/arvo/dill.hoon | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/base/ape/dojo/core.hook b/base/ape/dojo/core.hook index 97325d14c..0f5613dda 100644 --- a/base/ape/dojo/core.hook +++ b/base/ape/dojo/core.hook @@ -235,7 +235,7 @@ ;~(pfix fas sym) == (cook |=(a=term `goal`[our.hid a]) sym) - (easy [our.hid %helm]) + (easy [our.hid %hood]) == ++ dp-model-cat ;~(plug dp-server-cat dp-config) :: ++dojo-model ++ dp-model-dog ;~(plug dp-server-dog dp-config) :: ++dojo-model diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 4aa76eaaa..5e2d04939 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -422,8 +422,8 @@ [[p.q.hic %dojo] ~] ?: =(%earl myr) =+ fap=(sein p.q.hic) - [[fap %dojo] [fap %talk] [fap %helm] ~] - [[p.q.hic %dojo] [p.q.hic %talk] [p.q.hic %helm] ~] + [[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])) ?: |((lth p.q.hic 256) (gte p.q.hic (bex 64))) [moz ..^$] :: XX HORRIBLE [:_(moz [(need hey.all) %give %init p.q.hic]) ..^$] From 5d718597c5e62d8a24ad29c2d6798740cf9abe2a Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 11 May 2015 17:50:40 -0700 Subject: [PATCH 30/94] sole transmute fix --- base/lib/sole/core.hook | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/lib/sole/core.hook b/base/lib/sole/core.hook index ae0a12ed2..00b1af625 100644 --- a/base/lib/sole/core.hook +++ b/base/lib/sole/core.hook @@ -35,6 +35,7 @@ :: ++ transmute :: dex as after sin |= [sin=sole-edit dex=sole-edit] + ~| [%transmute sin dex] ^- sole-edit ?: ?=(%mor -.sin) |- ^- sole-edit @@ -56,7 +57,7 @@ ?- -.dex %del ?: =(p.sin p.dex) [%nop ~] ?:((lth p.sin p.dex) dex(p (dec p.dex)) dex) - %ins ?:((lte p.sin p.dex) dex(p (dec p.dex)) dex) + %ins ?:((lth p.sin p.dex) dex(p (dec p.dex)) dex) == :: %ins From fdbf46ce1616b9d202c92160dabc50a1b1760e86 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Tue, 12 May 2015 12:57:58 -0700 Subject: [PATCH 31/94] added json octo interfaces --- base/ape/helm/core.hook | 2 +- base/ape/octo/core.hook | 32 +++++++++++++++++++------------- base/arvo/eyre.hoon | 3 ++- base/arvo/gall.hoon | 2 +- base/lib/helm/core.hook | 2 +- base/mar/octo-game/door.hook | 26 ++++++++++++++++++++++++++ base/mar/octo-move/door.hook | 16 ++++++++++++++++ 7 files changed, 66 insertions(+), 17 deletions(-) create mode 100644 base/mar/octo-game/door.hook create mode 100644 base/mar/octo-move/door.hook diff --git a/base/ape/helm/core.hook b/base/ape/helm/core.hook index 46431bdd8..ed4fd97b4 100644 --- a/base/ape/helm/core.hook +++ b/base/ape/helm/core.hook @@ -97,7 +97,7 @@ ?> ?=([[@ ~] ~] zaz) `term`p.i.zaz =+ tip=(end 3 1 nam) - =+ way=[(scot %p our.hid) %base (scot %da lat.hid) %arvo nam %hoon ~] + =+ way=[(scot %p our.hid) %home (scot %da lat.hid) %arvo nam %hoon ~] =+ fil=(,@ .^(%cx way)) :* ost %flog diff --git a/base/ape/octo/core.hook b/base/ape/octo/core.hook index 894757e0b..e49722fae 100644 --- a/base/ape/octo/core.hook +++ b/base/ape/octo/core.hook @@ -1,5 +1,5 @@ :: ::::::::::::::: -:::: /hook/core/acto/ape :: :: :: build +:::: /hook/core/octo/ape :: :: :: build :: ::::::::::::::: /- *sole :: structures /+ sole :: libraries @@ -10,7 +10,7 @@ ++ board ,@ :: one-player bitfield ++ point ,[x=@ y=@] :: coordinate ++ game ,[who=? box=board boo=board] :: game state - ++ icon |=(? ?:(+< 'Q' 'O')) :: display at + ++ icon |=(? ?:(+< 'X' 'O')) :: display at ++ bo :: per board |_ bud=board :: ++ get |=(point =(1 (cut 0 [(off +<) 1] bud))) :: get point @@ -56,7 +56,7 @@ == :: ++ face (pair (list ,@c) (map bone sole-share)) :: interface ++ lime $% [%sole-effect sole-effect] :: :sole update - [%acto-game game] :: :acto update + [%octo-game game] :: :octo update == :: ++ move (pair bone card) :: cause and action ++ mote (pair ship ,?) :: remote binding @@ -100,7 +100,7 @@ ?-(lev %0 +>, %1 line, %2 line:show:prom) :: ++ plow |= [lev=?(%0 %1 %2) mus=(unit tape)] :: complete print abet:(mean:(play lev) mus) :: - ++ prom %^ emit %pro %& :- %acto :: update prompt + ++ prom %^ emit %pro %& :- %octo :: update prompt ?: wait "(xir turn) " :: ": {~[(icon who.gam)]} to move (row/col): " :: ++ plan |= mut=(unit mote) :: peer command @@ -118,9 +118,9 @@ ++ dish |=(cad=card (dump 0 cad)) :: forward move ++ flet |=(from ~(. et +< (~(got by q.eye) ost))) :: in old client ++ fret |=(from ~(. et +< *sole-share)) :: in new client -++ like |=(xir=ship |*(* [/acto [xir %octo] +<])) :: to friend +++ like |=(xir=ship |*(* [/octo [xir %octo] +<])) :: to friend ++ link |= mot=mote %- dish(but `[| mot]) :: subscribe to friend - peer/((like p.mot) /acto/[?:(q.mot %x %o)]) :: + peer/((like p.mot) /octo/[?:(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 @@ -128,19 +128,19 @@ =+ pals :: |- ^+ +>.^$ ?~ +< +>.^$ :: $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: -++ push =+ pey=(pale hid (prix /acto)) |- ^+ +> :: update friends +++ push =+ pey=(pale hid (prix /octo)) |- ^+ +> :: update friends ?~(pey +> $(pey t.pey, +> (sell p.i.pey))) :: -++ sell |=(ost=bone (dump ost %diff %acto-game gam)) :: update friend +++ sell |=(ost=bone (dump ost %diff %octo-game gam)) :: update friend ++ stop (dish(but ~) pull/((like +>-.but) ~)) :: cancel subscribe :: ::::::::::::::: :::: :: :: :: hooks :: ::::::::::::::: -++ diff-acto-game :: friend update +++ diff-octo-game :: friend update |= [then gam=game] =< abet :: ?. &(?=([~ %& *] but) =(src p.q.u.but)) +> :: ?: =(^gam gam) +> :: (park(gam gam) %2 ~) :: -++ peer-acto :: linked by friend +++ peer-octo :: linked by friend |= [from pax=path] =< abet :: =+ who==(%x -.pax) :: ?^ but (park %2 ~) :: [~ %& !who src] @@ -151,6 +151,12 @@ ++ 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) ++ prep |= [from old=(unit ,[(list move) axon])] :: initialize =< abet ?~ old +> :: =< (park %2 ~) :: @@ -158,15 +164,15 @@ %1 +>(+<+ u.old) :: %0 +>(eye.+< eye.+>.old, gam.+< gam.+>.old):: == :: -++ pull-acto :: +++ pull-octo :: |= [from ~] =< abet :: (park(but ~) %0 `"dropped") :: ++ pull-sole :: disconnect console |= [from *] =< abet :: amok:(flet +<-) :: -++ quit-acto :: unlinked by friend +++ quit-octo :: unlinked by friend |=([then ~] abet:(park(but ~) %0 `"removed")) :: -++ reap-acto :: linked to friend +++ reap-octo :: linked to friend |= [then saw=(unit tang)] =< abet :: ?> ?=([~ %| *] but) :: ?^ saw (park:stop %0 `"fail to {}") :: diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index e5adf9d62..e6192d7cc 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -519,6 +519,7 @@ %diff ?> ?=([%of @ ^] tee) ?. ?=(%json p.p.cuf) + ::~> %slog.`rose/[" " "[" "]"]^~[>%backing< >p.p.cuf< (sell q.p.cuf)] (back tee 0v0 %json p.cuf) (get-rush:(ire-ix p.tee) q.tee ((hard json) q.q.p.cuf)) :: @@ -632,7 +633,7 @@ |=([him=ship gam=gram] (pass-note ~ %a %want [our him] [%e -.gam] +.gam)) :: ++ back :: %ford bounce - |= [tea=whir dep=@uvH mar=mark cay=cage] + |= [tea=whir dep=@uvH mar=mark cay=cage] (pass-note tea (ford-req root-beak [%cast mar %done ~ cay])) :: XX deps :: ++ ford-kill (pass-note ~ %f [%exec our *beak ~]) :: XX unused diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 7c743993a..709647924 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -765,7 +765,7 @@ ^- (each cute tang) ?. &(?=(^ q.vax) ?=(@ -.q.vax) ((sane %tas) -.q.vax)) [%| (ap-suck "move: improper diff")] - [%& sto %give %diff `cage`[-.q.vax (slot 3 vax)]] + [%& sto %give %diff `cage`[-.q.vax (slot 3 (spec vax))]] :: ++ ap-move-mess :: extract path, target |= vax=vase diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook index eb8160f7f..3bae59840 100644 --- a/base/lib/helm/core.hook +++ b/base/lib/helm/core.hook @@ -106,7 +106,7 @@ ?> ?=([[@ ~] ~] zaz) `term`p.i.zaz =+ tip=(end 3 1 nam) - =+ way=[(scot %p our) %base (scot %da lat) %arvo nam %hoon ~] + =+ way=[(scot %p our) %home (scot %da lat) %arvo nam %hoon ~] =+ fil=(,@ .^(%cx way)) :* %flog /reload diff --git a/base/mar/octo-game/door.hook b/base/mar/octo-game/door.hook new file mode 100644 index 000000000..d776a3c4b --- /dev/null +++ b/base/mar/octo-game/door.hook @@ -0,0 +1,26 @@ +:: +:::: /hook/door/octo-game/mar + :: +/? 310 +!: +|% +++ rip9 + =+ b=0 + |= a=@ ^- (list ,@A) + ?: =(b 9) ~ + [(cut 0 [b 1] a) $(b +(b))] +-- +!: +|_ cod=[who=? box=@ boo=@] :: game state +:: +++ grab :: convert from + |% + ++ noun ,[who=? box=@ boo=@] :: clam from %noun + -- +++ grow + |% + ++ json ^- ^json + => |=(bor=@ `^json`a/(turn (rip9 bor) |=(a=@A [%b =(1 a)]))) + (jobe who/s/?:(who.cod %x %o) box/(. box.cod) boo/(. boo.cod) ~) + -- +-- diff --git a/base/mar/octo-move/door.hook b/base/mar/octo-move/door.hook new file mode 100644 index 000000000..ab13eee6b --- /dev/null +++ b/base/mar/octo-move/door.hook @@ -0,0 +1,16 @@ +:: +:::: /hook/door/octo-move/mar + :: +/? 314 +!: +:::: + :: +=+ point=,[x=@ y=@] +|_ point +:: +++ grab :: convert from + |% + ++ json (corl need (at ni ni ~):jo) :: reparse from %json + ++ noun point :: clam from %noun + -- +-- From 5665fb132a431e1efdc6628d4c06c7a18f806fed Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Tue, 12 May 2015 13:10:22 -0700 Subject: [PATCH 32/94] Various cleanups. --- base/ape/helm/core.hook | 183 ------ base/ape/hood/core.hook | 11 +- base/arvo/ames.hoon | 50 +- base/arvo/behn.hoon | 1162 --------------------------------------- base/arvo/clay.hoon | 47 +- base/arvo/dill.hoon | 98 +--- base/arvo/eyre.hoon | 1 - base/arvo/gall.hoon | 144 +---- base/arvo/hoon.hoon | 3 +- base/arvo/zuse.hoon | 347 +++++++++++- base/lib/kiln/core.hook | 4 +- base/sur/sole/core.hook | 24 - 12 files changed, 360 insertions(+), 1714 deletions(-) delete mode 100644 base/ape/helm/core.hook delete mode 100644 base/arvo/behn.hoon diff --git a/base/ape/helm/core.hook b/base/ape/helm/core.hook deleted file mode 100644 index 46431bdd8..000000000 --- a/base/ape/helm/core.hook +++ /dev/null @@ -1,183 +0,0 @@ -:: :: :: -:::: /hook/core/helm/ape :: :: - :: :: :: -/? 314 :: zuse version -/- *sole :: structures -/+ sole :: libraries -:: :: :: -:::: :: :: - !: :: :: -=> |% :: principal structures - ++ helm-house :: all state - $: %0 :: state version - bur=(unit (pair ship mace)) :: requesting ticket - hoc=(map bone helm-session) :: consoles - == :: - ++ helm-session :: - $: say=sole-share :: - mud=(unit (sole-dialog ,@ud)) :: - == :: - ++ 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 - == :: - ++ suss ,[term @tas @da] :: config report - ++ dill :: sent to %dill - $% [%crud p=term q=(list tank)] :: fat report - [%text p=tape] :: thin report - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: - ++ card :: - $% [%cash wire p=@p q=buck] :: - [%conf wire dock %load ship term] :: - [%flog wire dill] :: - [%plug wire @p @tas @p @tas] :: - [%want wire sock path *] :: send message - == :: - ++ move (pair bone card) :: user-level move - -- :: -:: :: -:::: :: - :: :: -|_ $: 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-wish-start - |= dap=term - %_(+> moz :_(moz [ost %conf /start [our.hid dap] %load our.hid %main])) - :: - ++ he-wish-reset - ^+ . - =- %_(+ moz (weld zum moz)) - ^= zum %- flop ^- (list move) - =+ top=`path`/(scot %p our.hid)/base/arvo/(scot %da lat.hid) - :- [ost %flog /reset %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] - =+ way=`path`(welp top /[q]) - =+ txt=((hard ,@) .^(%cx (welp way /hoon))) - [ost %flog /reset %veer p way txt] - :: - ++ he-wish-reload - |= all=(list term) - %_ +>.$ - moz - %- weld - :_ moz - %+ turn all - =+ ark=(arch .^(%cy /(scot %p our.hid)/base/(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) - =+ way=[(scot %p our.hid) %base (scot %da lat.hid) %arvo nam %hoon ~] - =+ fil=(,@ .^(%cx way)) - :* ost - %flog - /reload - [%veer ?:(=('z' tip) %$ tip) way (,@ .^(%cx way))] - == - == - :: - ++ he-wish-verb - %_ . - moz - :_ moz - [ost %flog /verb %verb ~] - == - ++ he-wish-init - |= him=ship - %_ +>.$ - moz - :_ moz - [ost %flog /init %crud %hax-init leaf/(scow %p him) ~] - == - -- -:: -++ hake :: poke core - |= [ost=bone src=ship] - ?> =(src our.hid) - ~(. he [ost ~] (fall (~(get by hoc) ost) *helm-session)) -:: -++ poke-helm-reset - |= [from ~] - ~& %poke-helm-reset - he-abet:he-wish-reset:(hake ost src) -:: -++ poke-helm-verb - |= [from ~] - ~& %poke-helm-verb - he-abet:he-wish-verb:(hake ost src) -:: -++ poke-helm-init - |= [from him=ship] - ~& %poke-helm-init - he-abet:(he-wish-init:(hake ost src) him) -:: -++ poke-helm-reload - |= [from all=(list term)] - he-abet:(he-wish-reload:(hake ost src) all) -:: -++ poke-helm-start - |= [from dap=term] - he-abet:(he-wish-start:(hake ost src) dap) -:: -++ poke-helm-begin - |= [from begs] - ~& %behn-helm-begin - ?> ?=(~ bur) - =+ buz=(shax :(mix (jam ges) eny)) - =+ loy=(bruw 2.048 buz) - :_ +>.$(bur `[his [0 sec:ex:loy]~]) - :~ :* ost %want /ticketing [our.hid (sein his)] /q/ta - his tic ges pub:ex:loy - == - == -:: -++ poke-will - |= [from wil=(unit will)] - ?> ?=(^ bur) - :_ +>.$(bur ~) - ?~ wil - !! - :~ [ost %cash ~ p.u.bur q.u.bur u.wil] - [ost %plug ~ our.hid %main (sein our.hid) %main] - [ost %plug ~ our.hid %arvo (sein our.hid) %arvo] - [ost %plug ~ our.hid %try (sein our.hid) %try] - == -:: -++ onto - |= [then saw=(each suss tang)] - :_ +> :_ ~ - ?- -.saw - %| [ost %pass ~ %flog %crud `@tas`-.way `tang`p.saw] - %& [ost %pass ~ %flog %text "<{}>"] - == --- diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index 3bb123ffd..f033b6faf 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -15,11 +15,11 @@ %kiln ?>(?=(%kiln -.paw) `kiln-part`paw) :: == :: ++ hood-head ,_-:*hood-part :: - ++ hood-mold :: - |= hed=hood-head :: + ++ hood-make :: + |* hed=hood-head :: ?- hed :: - %helm helm-part :: - %kiln kiln-part :: + %helm *helm-part :: + %kiln *kiln-part :: == :: ++ hood-part :: $? helm-part :: @@ -35,7 +35,8 @@ ++ able :: find/make part |* hed=hood-head =+ rep=(~(get by lac) hed) - ((hood-good hed) ?^(rep u.rep `hood-part`*(hood-mold hed))) + =+ par=?^(rep u.rep `hood-part`(hood-make hed)) + ((hood-good hed) par) :: ++ ably :: save part |* [moz=(list) rep=hood-part] diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index 27e05c7dc..9b71a3efe 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -4,43 +4,7 @@ => =~ :: structures |% -++ flog :: error wrapper - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - == :: -++ cuft :: internal gift - $% [%coup p=(unit tang)] :: poke result - [%diff p=cage] :: subscription output - [%quit ~] :: close subscription - [%reap p=(unit tang)] :: peer result - == :: -++ gift :: out result <-$ - $% [%hear p=lane q=@] :: receive packet - [%init p=@p] :: report install - [%mass p=mass] :: memory usage - [%send p=lane q=@] :: transmit packet - [%waft p=sock q=*] :: response message - [%wart p=sock q=@tas r=path s=*] :: network request - [%went p=ship q=cape] :: reaction message - [%woot p=ship q=coop] :: e2e reaction message - == :: -++ hasp ,[p=ship q=term] :: see %gall -++ kiss :: in request ->$ - $% [%barn ~] :: new unix process - [%crud p=@tas q=(list tank)] :: error with trace - [%cash p=@p q=buck] :: civil license - [%hear p=lane q=@] :: receive packet - [%hole p=lane q=@] :: packet failed - [%junk p=@] :: entropy - [%kick p=@da] :: wake up - [%make p=(unit ,@t) q=@ud r=@ s=?] :: wild license - [%sith p=@p q=@uw r=?] :: imperial generator - [%wake ~] :: timer activate - [%want p=sock q=path r=*] :: send message - [%wegh ~] :: report memory - [%wont p=sock q=path r=*] :: e2e send message - == :: -++ move ,[p=duct q=(mold note gift)] :: local move +++ move ,[p=duct q=(mold note gift-ames)] :: local move ++ note :: out request $-> $? $: %d :: to %dill $% [%flog p=flog] :: @@ -1596,16 +1560,16 @@ |% :: vane interface ++ call :: handle request |= $: hen=duct - hic=(hypo (hobo kiss)) + hic=(hypo (hobo kiss-ames)) == => %= . :: XX temporary q.hic - ^- kiss + ^- kiss-ames ?: ?=(%soft -.q.hic) - ((hard kiss) p.q.hic) - ?: (~(nest ut -:!>(*kiss)) | p.hic) q.hic + ((hard kiss-ames) p.q.hic) + ?: (~(nest ut -:!>(*kiss-ames)) | p.hic) q.hic ~& [%ames-call-flub (,@tas `*`-.q.hic)] - ((hard kiss) q.hic) + ((hard kiss-ames) q.hic) == ^- [p=(list move) q=_..^$] =^ duy ..knob @@ -1855,7 +1819,7 @@ == :: ++ knob - |= [hen=duct kyz=kiss] + |= [hen=duct kyz=kiss-ames] ^- [(list move) _+>] ?: ?=(%crud -.kyz) [[[hen [%slip %d %flog kyz]] ~] +>] diff --git a/base/arvo/behn.hoon b/base/arvo/behn.hoon deleted file mode 100644 index 9a30bac2b..000000000 --- a/base/arvo/behn.hoon +++ /dev/null @@ -1,1162 +0,0 @@ -!: :: %behn, agent execution -!? 163 -:::: -|= pit=vase -=> =~ -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: rest of arvo - :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ 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 - == :: -++ milk (trel ship desk silk) :: sourced silk -++ 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 - [%bunt p=mark] :: example of mark - [%call p=silk q=silk] :: slam - [%cast p=mark q=silk] :: translate - [%diff p=silk q=silk] :: diff - [%done p=(set beam) q=gage] :: literal - [%dude p=tank q=silk] :: error wrap - [%dune p=(set beam) q=(unit gage)] :: unit literal - [%file p=beam] :: from clay - [%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 - [%pact p=silk q=silk] :: patch - [%plan p=beam q=spur r=hood] :: structured assembly - [%reef ~] :: kernel reef - [%ride p=twig q=silk] :: silk thru twig - [%tabl p=(list (pair silk silk))] :: list - [%vale p=mark q=ship r=*] :: validate [our his] - [%volt p=(set beam) q=(cask ,*)] :: unsafe add type - == :: -++ volt ?(%low %high) :: voltage -++ torc $|(?(%iron %gold) [%lead p=ship]) :: security control -++ roon :: reverse ames msg - $% [%d p=mark q=*] :: diff (diff) - [%x ~] :: - == :: -++ rook :: forward ames msg - $% [%m p=mark q=*] :: message - [%s p=path] :: subscribe - [%u ~] :: cancel/unsubscribe - == :: --- :: -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: local arvo - :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ club :: agent action - $% [%peer p=path] :: subscribe - [%poke p=cage] :: apply - [%pull ~] :: unsubscribe - [%pump ~] :: subscription ack - == :: -++ culm :: config action - $% [%load p=scup] :: load/reload - :: [%kick ~] :: restart everything - :: [%stop ~] :: toggle suspend - :: [%wipe ~] :: destroy all state - == :: -++ cuss (pair dude club) :: internal kiss -++ cuft :: internal gift - $% [%coup p=(unit tang)] :: poke result - [%diff p=cage] :: subscription output - [%quit ~] :: close subscription - [%reap p=(unit tang)] :: peer result - == :: -++ cote :: ++ap note - $% [%meta p=@tas q=vase] :: - [%send p=ship q=cuss] :: - == :: -++ cove (pair duct (mold cote cuft)) :: internal move -++ cute (pair bone (mold cote cuft)) :: internal move -++ dude term :: local identity -++ scup (pair ship desk) :: autoupdate -++ suss (trel dude ,@tas ,@da) :: config report -++ tang (list tank) :: error abstraction --- :: -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %behn cards - :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ kiss-ames :: - $% [%wont p=sock q=path r=*] :: - == :: -++ kiss-behn :: incoming request - $% [%conf p=dock q=culm] :: configure app - [%init p=ship] :: set owner - [%deal p=sock q=cuss] :: full transmission - [%rote p=sack q=path r=*] :: remote request - [%roth p=sack q=path r=*] :: remote response - == :: -++ kiss-ford :: - $% [%exec p=@p q=beak r=(unit silk)] :: make / kill - [%wasp p=@p q=@uvH] :: depends query - == :: -++ gift-ames :: - $% [%woot p=ship q=(unit ares)] :: e2e reaction message - == :: -++ gift-behn :: outgoing result - $% [%onto p=(each suss tang)] :: about agent - [%unto p=cuft] :: within agent - [%mack p=(unit tang)] :: message ack - == :: -++ gift-ford :: out result <-$ - $% [%made p=@uvH q=(each gage tang)] :: computed result - [%news ~] :: fresh depends - == :: -++ sign-behn :: incoming result - $% [%a gift-ames] :: - [%b gift-behn] :: - [%f gift-ford] :: - == :: -++ note-behn :: outgoing request - $? [@tas %meta p=vase] :: - $% [%a kiss-ames] :: - [%b kiss-behn] :: - [%f kiss-ford] :: - == == :: -++ move ,[p=duct q=(mold note-behn gift-behn)] :: typed move --- :: -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %behn state - :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ axle :: all state - $: %0 :: state version - pol=(map ship mast) :: apps by ship - == :: -++ gest :: subscriber data - $: sup=(map bone (pair ship path)) :: subscribers - pus=(jug path bone) :: srebircsbus - qel=(map bone ,@ud) :: queue meter - == :: -++ mast :: ship state - $: sys=duct :: system duct - sap=(map ship scad) :: foreign contacts - bum=(map dude seat) :: running agents - wub=(map dude sofa) :: waiting queue - == :: -++ ffuc :: new cuff - $: p=(unit (set ship)) :: disclosing to - q=ship :: attributed to - == :: -++ prey (pair volt ffuc) :: privilege -++ scad :: foreign connection - $: p=@ud :: index - q=(map duct ,@ud) :: by duct - r=(map ,@ud duct) :: by index - == :: -++ scar :: opaque input - $: p=@ud :: bone sequence - q=(map duct bone) :: by duct - r=(map bone duct) :: by bone - == :: -++ seat :: agent state - $: mom=duct :: control duct - liv=? :: unstopped - toc=torc :: privilege - tyc=stic :: statistics - ged=gest :: subscribers - hav=vase :: running state - pup=scup :: update control - zam=scar :: opaque ducts - == :: -++ sofa :: queue for blocked - $: kys=(qeu (trel duct prey club)) :: queued kisses - == :: -++ stic :: statistics - $: act=@ud :: change number - eny=@uvI :: entropy - lat=@da :: time - == :: --- :: - :::::::::::::::::::::::::::::::::::::::::::::::::::::: vane header - :::::::::::::::::::::::::::::::::::::::::::::::::::::: -. == -=| all=axle :: all vane state -|= $: now=@da :: urban time - eny=@uvI :: entropy - ska=sled :: activate - == :: opaque core -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: state machine - :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ mo - |_ $: $: our=@p - hen=duct - moz=(list move) - == - mast - == - ++ mo-abed :: initialize - |= [our=@p hen=duct] - ^+ +> - %_ +> - our our - hen hen - +<+ (~(got by pol.all) our) - == - :: - ++ mo-abet :: resolve to - ^- [(list move) _+>+] - :_ +>+(pol.all (~(put by pol.all) our +<+)) - %- flop - %+ turn moz - |= a=move - ?. ?=(%pass -.q.a) a - [p.a %pass [(scot %p our) p.q.a] q.q.a] - :: - ++ mo-conf :: configure - |= [dap=dude lum=culm] - (mo-boot dap ?:((~(has by bum) dap) %old %new) p.lum) - :: - ++ mo-pass :: standard pass - |= [pax=path noh=note-behn] - %_(+> moz :_(moz [hen %pass pax noh])) - :: - ++ mo-give - |= git=gift-behn - %_(+> moz :_(moz [hen %give git])) - :: - ++ mo-okay :: valid agent core - |= vax=vase - ^- ? - (~(nest ut -:!>(*hide)) %| p:(slot 12 vax)) - :: - ++ mo-boom :: complete new boot - |= [dap=dude pup=scup dep=@uvH gux=(each gage tang)] - ^+ +> - ?- -.gux - %| (mo-give %onto %| p.gux) - %& - ?> ?=(@ p.p.gux) - ?. (mo-okay q.p.gux) - (mo-give %onto %| [%leaf "{}: bogus core"]~) - =. +> (mo-bold dap dep) - =. +> (mo-born dap pup q.p.gux) - =+ old=+>.$ - =+ wag=(ap-prop:(ap-abed:ap dap [%high [~ our]]) ~) - ?^ -.wag - =. +>.$ old - (mo-give %onto %| u.-.wag) - =. +>.$ ap-abet:+.wag - (mo-give:(mo-claw dap) %onto %& dap %boot now) - == - :: - ++ mo-born :: new seat - |= [dap=dude pup=scup hav=vase] - =+ sat=*seat - %_ +>.$ - bum - %+ ~(put by bum) dap - %_ sat - mom hen - pup pup - hav hav - p.zam 1 - q.zam [[[~ ~] 0] ~ ~] - r.zam [[0 [~ ~]] ~ ~] - == - == - :: - ++ mo-boon :: complete old boot - |= [dap=dude pup=scup dep=@uvH gux=(each gage tang)] - ^+ +> - ?. (~(has by bum) dap) - ~& [%behn-old-boon dap] - +> - =. +> (mo-bold dap dep) - ?- -.gux - %| (mo-give %onto %| p.gux) - %& ?> ?=(@ p.p.gux) - ap-abet:(ap-peep:(ap-abed:ap dap [%high [~ our]]) q.p.gux) - == - :: - ++ mo-bold :: wait for dep - |= [dap=dude dep=@uvH] - ^+ +> - %+ mo-pass [%sys %dep dap ~] - [%f %wasp our dep] - :: - ++ mo-boot :: create ship - |= [dap=dude how=?(%new %old) pup=scup] - ^+ +> - :: ~& [%mo-boot dap how pup] - %+ mo-pass [%sys how dap (scot %p p.pup) q.pup ~] - =+ bek=[p.pup q.pup [%da now]] - ^- note-behn - [%f %exec our bek `[%boil %core [bek [dap %ape ~]] ~]] - :: - ++ mo-away :: foreign request - |= [him=ship caz=cuss] :: - ^+ +> - :: ~& [%mo-away him caz] - ?: ?=(%pump -.q.caz) - :: - :: you'd think this would send an ack for the diff - :: that caused this pump. it would, but we already - :: sent it when we got the diff in ++mo-cyst. then - :: we'd have to save the network duct and connect it - :: to this returning pump. - :: - +> - =^ num +>.$ (mo-bale him) - =+ ^= roc ^- rook - ?- -.q.caz - %poke [%m p.p.q.caz q.q.p.q.caz] - %pull [%u ~] - %peer [%s p.q.caz] - == - %+ mo-pass - [%sys %way -.q.caz ~] - `note-behn`[%a %wont [our him] [%q %be p.caz ~] [num roc]] - :: - ++ mo-baal :: error convert a - |= art=(unit ares) - ^- ares - ?~(art ~ ?~(u.art `[%blank ~] u.art)) - :: - ++ mo-baba :: error convert b - |= ars=ares - ^- (unit tang) - ?~ ars ~ - `[[%leaf (trip p.u.ars)] q.u.ars] - :: - ++ mo-awed :: foreign response - |= [him=ship why=?(%peer %poke %pull) art=(unit ares)] - ^+ +> - :: ~& [%mo-awed him why art] - =+ tug=(mo-baba (mo-baal art)) - ?- why - %peer (mo-give %unto %reap tug) - %poke (mo-give %unto %coup tug) - %pull ~& [%pull-fail tug] - +>.$ - == - :: - ++ mo-bale :: assign outbone - |= him=ship - ^- [@ud _+>] - =+ sad=(fall (~(get by sap) him) `scad`[1 ~ ~]) - =+ nom=(~(get by q.sad) hen) - ?^ nom [u.nom +>.$] - :- p.sad - %_ +>.$ - sap - %+ ~(put by sap) him - %_ sad - p +(p.sad) - q (~(put by q.sad) hen p.sad) - r (~(put by r.sad) p.sad hen) - == - == - :: - ++ mo-ball :: outbone by index - |= [him=ship num=@ud] - ^- duct - (~(got by r:(~(got by sap) him)) num) - :: - ++ mo-come :: handle locally - |= [her=ship caz=cuss] - ^+ +> - =+ pry=`prey`[%high [~ her]] - (mo-club p.caz pry q.caz) - :: - ++ mo-coup :: back from mo-away - |= [dap=dude him=ship cup=ares] - %^ mo-give %unto %coup - ?~ cup ~ - [~ `tang`[[%leaf (trip p.u.cup)] q.u.cup]] - :: - ++ mo-cyst :: take in /sys - |= [pax=path sih=sign-behn] - ^+ +> - ?+ -.pax !! - %dep :: update - ?> ?=([%f %news *] sih) - ?> ?=([@ ~] t.pax) - =+ sot=(~(get by bum) i.t.pax) - ?~ sot - ~& [%mo-cyst-none i.t.pax] - +>.$ - (mo-boot i.t.pax %old pup.u.sot) - :: - %new - ?> ?=([%f %made *] sih) - ?> ?=([@ @ @ ~] t.pax) - (mo-boom i.t.pax [(slav %p i.t.t.pax) i.t.t.t.pax] +>.sih) - :: - %old :: reload old - ?> ?=([%f %made *] sih) - ?> ?=([@ @ @ ~] t.pax) - (mo-boon i.t.pax [(slav %p i.t.t.pax) i.t.t.t.pax] +>.sih) - :: - %red :: diff ack - ?> ?=([@ @ @ ~] t.pax) - ?> ?=([%a %woot *] sih) - =+ :* him=(slav %p i.t.pax) - dap=i.t.t.pax - num=(slav %ud i.t.t.t.pax) - == - => .(pax `path`[%req t.pax]) - ?~ q.+>.sih - (mo-pass [%sys pax] %b %deal [him our] dap %pump ~) - ~& [%diff-bad-ack q.+>.sih] :: should not happen - =. +>.$ (mo-pass [%sys pax] %b %deal [him our] dap %pull ~) - (mo-pass [%sys pax] %a %wont [our him] [%q %bh dap ~] [num %x ~]) - :: - %rep :: reverse request - ?> ?=([@ @ @ ~] t.pax) - ?> ?=([%f %made *] sih) - =+ :* him=(slav %p i.t.pax) - dap=i.t.t.pax - num=(slav %ud i.t.t.t.pax) - == - ?- -.q.+>.sih - %| (mo-give %mack `p.q.+>.sih) :: XX should crash - %& ?> ?=(@ p.p.q.+>.sih) - =. +>.$ (mo-give %mack ~) :: XX pump should ack - (mo-give(hen (mo-ball him num)) %unto %diff `cage`p.q.+>.sih) - == - :: - %req :: inbound request - ?> ?=([@ @ @ ~] t.pax) - =+ :* him=(slav %p i.t.pax) - dap=i.t.t.pax - num=(slav %ud i.t.t.t.pax) - == - ?: ?=([%f %made *] sih) - ?- -.q.+>.sih - %| (mo-give %mack `p.q.+>.sih) :: XX should crash - %& ?> ?=(@ p.p.q.+>.sih) - (mo-pass [%sys pax] %b %deal [him our] i.t.t.pax %poke p.q.+>.sih) - == - ?: ?=([%a %woot *] sih) +>.$ :: quit ack, boring - ?> ?=([%b %unto *] sih) - =+ cuf=`cuft`+>.sih - ?- -.cuf - %coup (mo-give %mack p.cuf) - %diff %+ mo-pass [%sys %red t.pax] - [%a %wont [our him] [%q %bh dap ~] [num %d p.p.cuf q.q.p.cuf]] - %quit %+ mo-pass [%sys pax] - [%a %wont [our him] [%q %bh dap ~] [num %x ~]] - %reap (mo-give %mack p.cuf) - == - :: - %way :: outbound request - ?> ?=([%a %woot *] sih) - ?> ?=([@ ~] t.pax) - %- mo-awed - :* p.+>.sih - (?(%peer %poke %pull) i.t.pax) - +>+.sih - == - == - :: - ++ mo-cook :: take in /use - |= [pax=path hin=(hypo sign-behn)] - ^+ +> - ?. ?=([@ @ ?(%inn %out) *] pax) - ~& [%mo-cook-bad-pax pax] - !! - =+ dap=`@tas`i.pax - =+ pry=`prey`[%high [~ (slav %p i.t.pax)]] - =+ pap=(ap-abed:ap dap pry) - =+ vax=(slot 3 `vase`hin) - ?- i.t.t.pax - %inn ap-abet:(ap-pour:pap t.t.t.pax (slot 3 `vase`hin)) - %out ?. ?=([%b %unto *] q.hin) - ~& [%mo-cook-weird q.hin] - ~& [%mo-cook-weird-path pax] - +>.$ - ap-abet:(ap-pout:pap t.t.t.pax +>.q.hin) - == - :: - ++ mo-claw :: clear queue - |= dap=dude - ^+ +> - ?. (~(has by bum) dap) +> - =+ suf=(~(get by wub) dap) - =+ neh=hen - ?~ suf +>.$ - |- ^+ +>.^$ - ?: =(~ kys.u.suf) - +>.^$(hen neh, wub (~(del by wub) dap)) - =^ lep kys.u.suf [p q]:~(get to kys.u.suf) - :: ~& [%mo-claw-play dap r.lep] - $(+>.^$ ap-abet:(ap-club:(ap-abed:ap(hen p.lep) dap q.lep) r.lep)) - :: - ++ mo-beak :: build beak - |= dap=dude - ^- 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 - :: - ++ mo-club :: local action - |= [dap=dude pry=prey cub=club] - ^+ +> - ?: |(!(~(has by bum) dap) (~(has by wub) dap)) - :: ~& [%mo-club-qeu dap cub] - =+ syf=(fall (~(get by wub) dap) *sofa) - +>.$(wub (~(put by wub) dap syf(kys (~(put to kys.syf) [hen pry cub])))) - ap-abet:(ap-club:(ap-abed:ap dap pry) cub) - :: - ++ mo-gawk :: ames forward - |= [him=@p dap=dude num=@ud rok=rook] - %+ mo-pass - [%sys %req (scot %p him) dap (scot %ud num) ~] - ^- note-behn - ?- -.rok - %m [%f %exec our (mo-beak dap) ~ %vale p.rok our q.rok] - %s [%b %deal [him our] dap %peer p.rok] - %u [%b %deal [him our] dap %pull ~] - == - :: - ++ mo-gawd :: ames backward - |= [him=@p dap=dude num=@ud ron=roon] - ?- -.ron - %d - %+ mo-pass - [%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 ~) - == - :: - ++ ap :: agent engine - |_ $: $: dap=dude - pry=prey - ost=bone - zip=(list cute) - dub=(list (each suss tang)) - == - seat - == - :: - ++ ap-abed :: initialize - |= [dap=dude pry=prey] - ^+ +> - =: ^dap dap - ^pry pry - +>+<+ `seat`(~(got by bum) dap) - == - =+ unt=(~(get by q.zam) hen) - =: act.tyc +(act.tyc) - eny.tyc (shax (mix (add dap act.tyc) eny)) - lat.tyc now - == - ?^ unt - +>.$(ost u.unt) - %= +>.$ - ost p.zam - p.zam +(p.zam) - q.zam (~(put by q.zam) hen p.zam) - r.zam (~(put by r.zam) p.zam hen) - == - :: - ++ ap-abet :: resolve - ^+ +> - => ap-abut - %_ +> - bum (~(put by bum) dap +<+) - moz :(weld (turn zip ap-aver) (turn dub ap-avid) moz) - == - :: - ++ ap-abut :: track queue - ^+ . - =+ [pyz=zip ful=*(set bone)] - |- ^+ +> - ?~ pyz - =+ ded=(~(tap in ful) ~) - |- ^+ +>.^$ - ?~ ded +>.^$ - $(ded t.ded, +>.^$ ap-kill(ost 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 - ^- move - :- (~(got by r.zam) p.cov) - ?- -.q.cov - ?(%slip %sick) !! - %give ?<(=(0 p.cov) [%give %unto p.q.cov]) - %pass - :+ %pass `path`[%use dap p.q.cov] - ?- -.q.q.cov - %send `note-behn`[%b %deal [our p.q.q.cov] q.q.q.cov] - %meta `note-behn`[`@tas`p.q.q.cov %meta `vase`q.q.q.cov] - == - == - :: - ++ ap-avid :: onto results - |=([a=(each suss tang)] [hen %give %onto a]) - :: - ++ ap-call :: call into server - |= [cog=term arg=vase] - ^- [(unit tang) _+>] - =. +> ap-hide - =+ arm=(ap-farm cog) - ?: ?=(%| -.arm) [`p.arm +>.$] - =+ zem=(ap-slam cog p.arm arg) - ?: ?=(%| -.zem) [`p.zem +>.$] - (ap-sake p.zem) - :: - ++ ap-club :: apply effect - |= cub=club - ^+ +> - ?- -.cub - %poke (ap-poke +.cub) - %peer (ap-peer +.cub) - %pull ap-pull - %pump ap-fall - == - :: - ++ 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-pump:(ap-lame %diff (ap-suck "pour: no diff")) | her pax) - =+ ^= arg ^- vase - %- slop - ?: =(0 p.u.cug) - [!>([`@ud`ost `@p`q.q.pry `path`+.pax]) !>(cag)] - [!>([`@ud`ost `@p`q.q.pry (slag (dec p.u.cug) `path`+.pax)]) q.cag] - =^ cam +>.$ (ap-call q.u.cug arg) - ?^ cam - (ap-pump:(ap-lame q.u.cug u.cam) | her pax) - (ap-pump & her pax) - :: - ++ ap-pump :: break 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 - ^+ . - =+ soy=(~(get by qel.ged) ost) - ?: |(?=(~ soy) =(0 u.soy)) - ~& [%ap-fill-under [our dap] q.q.pry ost] - + - =. u.soy (dec u.soy) - :: ~& [%ap-fill-sub [[our dap] q.q.pry ost] u.soy] - ?: =(0 u.soy) - +(qel.ged (~(del by qel.ged) ost)) - +(qel.ged (~(put by qel.ged) ost u.soy)) - :: - ++ ap-farm :: produce arm - |= cog=term - ^- (each vase tang) - =+ puz=(mule |.((~(mint ut p.hav) [%noun [%cnzy cog]]))) - ?: ?=(%| -.puz) [%| p.puz] - =+ ton=(mock [q.hav q.p.puz] ap-sled) - ?- -.ton - %0 [%& p.p.puz p.ton] - %1 [%| (turn p.ton |=(a=* (smyt (path a))))] - %2 [%| p.ton] - == - :: - ++ ap-fill :: add to queue - ^- [? _.] - =+ suy=(fall (~(get by qel.ged) ost) 0) - ?: =(8 suy) - ~& [%ap-fill-full [our dap] q.q.pry ost] - [%| +] - :: ~? !=(8 suy) [%ap-fill-add [[our dap] q.q.pry ost] +(suy)] - [%& +(qel.ged (~(put by qel.ged) ost +(suy)))] - :: - ++ ap-find :: general arm - |= [cog=term pax=path] - =+ dep=0 - |- ^- (unit (pair ,@ud term)) - =+ ^= spu - ?~ pax ~ - $(pax t.pax, dep +(dep), cog (ap-hype cog i.pax)) - ?^ spu spu - ?.((ap-fond cog) ~ `[dep cog]) - :: - ++ ap-fond :: check for arm - |= cog=term - ^- ? - (slob cog p.hav) - :: - ++ ap-give :: return result - |= cit=cuft - ^+ +> - +>(zip :_(zip [ost %give cit])) - :: - ++ ap-hide :: set up hide - %_ . - +12.q.hav - ^- hide - :* :* our - dap - ~ - == - ~ - sup.ged - pus.ged - tyc - == - == - :: - ++ ap-hype :: hyphenate - |=([a=term b=term] `term`(cat 3 a (cat 3 '-' b))) - :: - ++ ap-move :: process each move - |= vax=vase - ^- (each cute 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)")] - =+ hun=(~(get by r.zam) -.q.vax) - ?. (~(has by r.zam) -.q.vax) - [%| (ap-suck "move: invalid card (bone {<-.q.vax>})")] - =+ cav=(slot 3 (spec (slot 3 vax))) - ?+ +<.q.vax - (ap-move-pass -.q.vax +<.q.vax cav) - %diff (ap-move-diff -.q.vax cav) - %peer (ap-move-peer -.q.vax cav) - %pull (ap-move-pull -.q.vax cav) - %poke (ap-move-poke -.q.vax cav) - %send (ap-move-send -.q.vax cav) - %quit (ap-move-quit -.q.vax cav) - == - :: - ++ ap-move-quit :: give quit move - |= [sto=bone vax=vase] - ^- (each cute tang) - ?^ q.vax [%| (ap-suck "move: improper quit")] - [%& `cute`[sto %give `cuft`[%quit ~]]] - :: - ++ ap-move-diff :: give diff move - |= [sto=bone vax=vase] - ^- (each cute tang) - ?. &(?=(^ q.vax) ?=(@ -.q.vax) ((sane %tas) -.q.vax)) - [%| (ap-suck "move: improper diff")] - [%& sto %give %diff `cage`[-.q.vax (slot 3 vax)]] - :: - ++ ap-move-mess :: extract path, target - |= vax=vase - ^- (each (trel path ship term) tang) - ?. ?& ?=([p=* [q=@ r=@] s=*] q.vax) - (gte 1 (met 7 q.q.vax)) - == - [%| (ap-suck "move: malformed target")] - =+ pux=((soft path) p.q.vax) - ?. &(?=(^ pux) (levy u.pux (sane %ta))) - [%| (ap-suck "move: malformed path")] - [%& [(scot %p q.q.vax) %out r.q.vax u.pux] q.q.vax r.q.vax] - :: - ++ ap-move-pass :: pass general move - |= [sto=bone wut=* vax=vase] - ^- (each cute 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 {(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) - =+ yep=(ap-move-mess vax) - ?: ?=(%| -.yep) yep - =+ gaw=(slot 7 vax) - ?. &(?=([p=@ q=*] q.gaw) ((sane %tas) p.q.gaw)) - [%| (ap-suck "poke: malformed cage")] - :^ %& sto %pass - :- p.p.yep - [%send q.p.yep r.p.yep %poke p.q.gaw (slot 3 (spec gaw))] - :: - ++ ap-move-peer :: pass %peer - |= [sto=bone vax=vase] - ^- (each cute tang) - =+ yep=(ap-move-mess vax) - ?: ?=(%| -.yep) yep - =+ pux=((soft path) +>.q.vax) - ?. &(?=(^ pux) (levy u.pux (sane %ta))) - [%| (ap-suck "peer: malformed path")] - :^ %& sto %pass - :- p.p.yep - [%send q.p.yep r.p.yep %peer u.pux] - :: - ++ ap-move-pull :: pass %pull - |= [sto=bone vax=vase] - ^- (each cute tang) - =+ yep=(ap-move-mess vax) - ?: ?=(%| -.yep) yep - ?. =(~ +>.q.vax) - [%| (ap-suck "pull: malformed card")] - :^ %& sto %pass - :- p.p.yep - [%send q.p.yep r.p.yep %pull ~] - :: - ++ ap-move-send :: pass gall action - |= [sto=bone vax=vase] - ^- (each cute tang) - ?. ?& ?=([p=* [q=@ r=@] [s=@ t=*]] q.vax) - (gte 1 (met 7 q.q.vax)) - ((sane %tas) r.q.vax) - == - [%| (ap-suck "move: malformed send")] - =+ pux=((soft path) p.q.vax) - ?. &(?=(^ pux) (levy u.pux (sane %ta))) - [%| (ap-suck "move: malformed path")] - ?: ?=(%poke s.q.vax) - =+ gav=(spec (slot 7 vax)) - ?> =(%poke -.q.gav) - ?. ?& ?=([p=@ q=*] t.q.vax) - ((sane %tas) p.t.q.vax) - == - [%| (ap-suck "move: malformed poke")] - :^ %& sto %pass - :- [(scot %p q.q.vax) %out r.q.vax u.pux] - ^- cote - :: ~& [%ap-move-send `path`[(scot %p q.q.vax) %out r.q.vax u.pux]] - [%send q.q.vax r.q.vax %poke p.t.q.vax (slot 3 (spec (slot 3 gav)))] - =+ cob=((soft club) [s t]:q.vax) - ?~ cob - [%| (ap-suck "move: malformed club")] - :^ %& sto %pass - :- [(scot %p q.q.vax) %out r.q.vax u.pux] - :: ~& [%ap-move-send `path`[(scot %p q.q.vax) %out r.q.vax u.pux]] - [%send q.q.vax r.q.vax u.cob] - :: - ++ ap-pass :: request action - |= [pax=path coh=cote] - ^+ +> - +>(zip :_(zip [ost %pass pax coh])) - :: - ++ ap-peep :: reinstall - |= vax=vase - ^+ +> - (ap-prep(hav vax) `hav) - :: - ++ ap-peer :: apply %peer - |= pax=path - ^+ +> - =+ cug=(ap-find %peer pax) - ?~ cug - (ap-peon pax) - =^ 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 ~) - :: - ++ ap-peon :: add subscriber - |= pax=path - %_ +>.$ - sup.ged (~(put by sup.ged) ost [q.q.pry pax]) - pus.ged (~(put ju pus.ged) pax ost) - == - :: - ++ ap-poke :: apply %poke - |= cag=cage - ^+ +> - =+ cug=(ap-find %poke p.cag ~) - ?~ cug - (ap-give %coup `(ap-suck "no poke arm")) - :: ~& [%ap-poke dap p.cag cug] - =^ tur +>.$ - %+ ap-call q.u.cug - %+ slop - !>([`@ud`ost `@p`q.q.pry]) - ?. =(0 p.u.cug) q.cag - (slop (ap-term %tas p.cag) q.cag) - (ap-give %coup tur) - :: - ++ ap-lame :: pour error - |= [wut=@tas why=tang] - ^+ +> - =+ cug=(ap-find /lame) - ?~ cug - ~& [%ap-lame wut why] - +>.$ - =^ cam +>.$ - %+ ap-call q.u.cug - !>([[`@ud`ost `@p`q.q.pry] wut why]) - ?^ cam - ~&([%ap-lame-lame u.cam] +>.$) - +>.$ - :: - ++ ap-pour :: generic take - |= [pax=path vax=vase] - ^+ +> - ?. &(?=([@ *] q.vax) ((sane %tas) -.q.vax)) - (ap-lame %pour (ap-suck "pour: malformed card")) - =+ cug=(ap-find [-.q.vax pax]) - ?~ cug - (ap-lame -.q.vax (ap-suck "pour: no {(trip -.q.vax)}: {}")) - =^ cam +>.$ - %+ ap-call q.u.cug - %+ slop - !>([`@ud`ost `@p`q.q.pry `path`(slag p.u.cug pax)]) - (slot 3 vax) - ?^ cam (ap-lame -.q.vax u.cam) - +>.$ - :: - ++ ap-pout :: specific take - |= [pax=path cuf=cuft] - ^+ +> - ?- -.cuf - %coup (ap-punk q.q.pry %coup +.pax `!>(p.cuf)) - %diff (ap-diff q.q.pry pax p.cuf) - %quit (ap-punk q.q.pry %quit +.pax ~) - %reap (ap-punk q.q.pry %reap +.pax `!>(p.cuf)) - == - :: - ++ ap-prep :: install - |= vux=(unit vase) - ^+ +> - =^ gac +>.$ (ap-prop vux) - %= +>.$ - dub - :_(dub ?~(gac [%& dap ?~(vux %boot %bump) now] [%| u.gac])) - == - :: - ++ ap-prop :: install - |= vux=(unit vase) - ^- [(unit tang) _+>] - ?. (ap-fond %prep) - ?~ vux - `+>.$ - ?. (~(nest ut p:(slot 13 hav)) %| p:(slot 13 u.vux)) - :_(+>.$ `(ap-suck "prep mismatch")) - `+>.$(+13.q.hav +13.q.u.vux) - =^ tur +>.$ - %+ ap-call %prep - %+ slop - !>([`@ud`ost `@p`q.q.pry]) - ?~(vux !>(~) (slop !>(~) (slot 13 u.vux))) - ?~(tur `+>.$ :_(+>.$ `u.tur)) - :: - ++ ap-pull :: pull inbound - =+ wim=(~(get by sup.ged) ost) - ?~ wim ~&(%ap-pull-none +) - =: sup.ged (~(del by sup.ged) ost) - pus.ged (~(del ju pus.ged) q.u.wim ost) - qel.ged (~(del by qel.ged) ost) - == - =+ cug=(ap-find %pull q.u.wim) - ?~ cug +> - =^ cam +> - %+ ap-call q.u.cug - !>([[`@ud`ost `@p`q.q.pry] (slag p.u.cug q.u.wim)]) - ?^ cam (ap-lame q.u.cug u.cam) - +>+ - :: - ++ ap-kill :: queue kill - ~& [%ap-kill dap ost] - (ap-give:ap-pull %quit ~) - :: - ++ ap-punk :: non-diff gall take - |= [her=ship cog=term pax=path vux=(unit vase)] - ^+ +> - =+ cug=(ap-find cog pax) - ?~ cug - ~& [%ap-punk-none cog pax] - +>.$ - =^ cam +>.$ - %+ ap-call q.u.cug - =+ den=!>([`@ud`ost `@p`q.q.pry (slag p.u.cug pax)]) - ?~(vux den (slop den u.vux)) - ?^ cam (ap-lame q.u.cug u.cam) - +>.$ - :: - ++ ap-safe :: process move list - |= vax=vase - ^- (each (list cute) tang) - ?~ q.vax [%& ~] - ?@ q.vax [%| (ap-suck "move: malformed list")] - =+ sud=(ap-move (slot 2 vax)) - ?: ?=(%| -.sud) sud - =+ res=$(vax (slot 3 vax)) - ?: ?=(%| -.res) res - [%& p.sud p.res] - :: - ++ ap-sake :: handle result - |= vax=vase - ^- [(unit tang) _+>] - ?: ?=(@ q.vax) - [`(ap-suck "sake: invalid product (atom)") +>.$] - =+ muz=(ap-safe (slot 2 vax)) - ?: ?=(%| -.muz) [`p.muz +>.$] - =+ sav=(ap-save (slot 3 vax)) - ?: ?=(%| -.sav) [`p.sav +>.$] - :- ~ - %_ +>.$ - zip (weld (flop p.muz) zip) - hav p.sav - == - :: - ++ ap-save :: verify core - |= vax=vase - ^- (each vase tang) - ?. (~(nest ut p.hav) %| p.vax) - [%| (ap-suck "invalid core")] - [%& vax] - :: - ++ ap-slam :: virtual slam - |= [cog=term gat=vase arg=vase] - ^- (each vase tang) - =+ wiz=(mule |.((slit p.gat p.arg))) - ?: ?=(%| -.wiz) - ~& %ap-slam-mismatch - ~> %slog.[0 ~(duck ut p.arg)] - ~> %slog.[0 ~(duck ut (~(peek ut p.gat) %free 6))] - [%| (ap-suck "call: {}: type mismatch")] - =+ ton=(mong [q.gat q.arg] ap-sled) - ?- -.ton - %0 [%& p.wiz p.ton] - %1 [%| (turn p.ton |=(a=* (smyt (path a))))] - %2 [%| p.ton] - == - :: - ++ ap-sled (mole (slod ska)) :: namespace view - ++ ap-suck :: standard tang - |= msg=tape - ^- tang - [%leaf (weld "behn: {}: " msg)]~ - :: - ++ ap-term :: atomic vase - |= [a=@tas b=@] - ^- vase - [[%cube b %atom a] b] - :: - ++ ap-vain :: card to vane - |= sep=@tas - ^- (unit ,@tas) - ?+ sep ~& [%ap-vain sep] - ~ - %cash `%a - %conf `%b - %deal `%b - %exec `%f - %flog `%d - %mess `%g - %nuke `%g - %show `%g - %took `%g - %plug `%c - %want `%a - == - -- - -- -++ call :: request - |= [hen=duct hic=(hypo (hobo kiss-behn))] - ^- [p=(list move) q=_..^$] - => .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss-behn) p.q.hic))) - ?- -.q.hic - %conf - ?. (~(has by pol.all) p.p.q.hic) - ~& [%behn-not-ours p.p.q.hic] - [~ ..^$] - mo-abet:(mo-conf:(mo-abed:mo p.p.q.hic hen) q.p.q.hic q.q.hic) - :: - %deal - =< mo-abet - ?. (~(has by pol.all) q.p.q.hic) :: either to us - ?> (~(has by pol.all) p.p.q.hic) :: or from us - (mo-away:(mo-abed:mo p.p.q.hic hen) q.p.q.hic q.q.hic) - (mo-come:(mo-abed:mo q.p.q.hic hen) p.p.q.hic q.q.hic) - :: - %init - ~& [%behn-init p.q.hic] - [~ ..^$(pol.all (~(put by pol.all) p.q.hic [hen ~ ~ ~]))] - :: - %rote - :: ~& [%behn-rote p.q.hic] - ?. (~(has by pol.all) p.p.q.hic) - ~& [%behn-not-ours p.q.hic] - [~ ..^$] - ?> ?=([@ ~] q.q.hic) - =+ dap=i.q.q.hic - =+ our=p.p.q.hic - =+ him=q.p.q.hic - =+ mes=((hard ,[@ud rook]) r.q.hic) - =< mo-abet - (mo-gawk:(mo-abed:mo our hen) him dap mes) - :: - %roth - :: ~& [%behn-roth p.q.hic] - ?. (~(has by pol.all) p.p.q.hic) - ~& [%behn-not-ours p.q.hic] - [~ ..^$] - ?> ?=([@ ~] q.q.hic) - =+ dap=i.q.q.hic - =+ our=p.p.q.hic - =+ him=q.p.q.hic - =+ mes=((hard ,[@ud roon]) r.q.hic) - =< mo-abet - (mo-gawd:(mo-abed:mo our hen) him dap mes) - == -:: -++ doze :: sleep until - |= [now=@da hen=duct] - ^- (unit ,@da) - ~ -:: -++ load :: recreate vane - |= old=axle - ^+ ..^$ - ..^$(all old) -:: -++ scry - |= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path] - ^- (unit (unit (pair mark ,*))) - [~ ~] -:: -++ stay :: save w/o cache - `axle`all -:: -++ take :: response - |= [tea=wire hen=duct hin=(hypo sign-behn)] - ^- [p=(list move) q=_..^$] - ~| [%behn-take tea] - ?> ?=([@ ?(%sys %use) *] tea) - =+ our=(need (slaw %p i.tea)) - =+ mow=(mo-abed:mo our hen) - ?: ?=(%sys i.t.tea) - mo-abet:(mo-cyst:mow t.t.tea q.hin) - ?> ?=(%use i.t.tea) - mo-abet:(mo-cook:mow t.t.tea hin) --- diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index d954617f4..cb47fc374 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -17,30 +17,8 @@ mer=(map (pair ship desk) mery) :: outstanding merges syn=? :: sync to unix == :: -++ gift :: out result <-$ - $% [%ergo p=@p q=@tas r=@ud s=(list ,[path (unit mime)])] - :: version update - [%mass p=mass] :: memory usage - [%mere p=(each (set path) (pair term tang))] :: merge result - [%note p=@tD q=tank] :: debug message - [%writ p=riot] :: response - == :: -++ khan :: - $: fil=(unit (unit cage)) :: XX see khan-to-soba - dir=(map ,@ta khan) :: - == :: -++ kiss :: in request ->$ - $% [%font p=@p q=@tas r=@p s=@tas] :: set upstream - [%info p=@p q=@tas r=nori] :: internal edit - [%init p=@p] :: report install - [%into p=@p q=@tas r=khan] :: external edit - [%lynx p=@p q=@tas r=(unit ,?)] :: sync to unix - [%merg p=@p q=@tas r=@p s=@tas t=germ] :: merge desks - [%plug p=@p q=@tas r=@p s=@tas] :: unset upstream - [%wart p=sock q=@tas r=path s=*] :: network request - [%warp p=sock q=riff] :: file request - [%wegh ~] :: report memory - == :: +++ gift gift-clay :: out result <-$ +++ kiss kiss-clay :: in request ->$ ++ mery :: $: gem=germ :: strategy cas=case :: ali's case @@ -102,26 +80,6 @@ $: @tas :: by any $% [%crud p=@tas q=(list tank)] :: == == == :: -++ 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 - [%bunt p=mark] :: example of mark - [%call p=silk q=silk] :: slam - [%cast p=mark q=silk] :: translate - [%diff p=silk q=silk] :: diff - [%done p=(set beam) q=gage] :: literal - [%dude p=tank q=silk] :: error wrap - [%dune p=(set beam) q=(unit gage)] :: unit literal - [%join p=mark q=silk r=silk] :: merge - [%mute p=silk q=(list (pair wing silk))] :: mutant - [%pact p=silk q=silk] :: patch - [%reef ~] :: kernel reef - [%ride p=twig q=silk] :: silk thru twig - [%tabl p=(list (pair silk silk))] :: list - [%vale p=mark q=ship r=*] :: validate [our his] - [%volt p=(set beam) q=(cask ,*)] :: unsafe add type - == :: ++ raft :: filesystem $: fat=(map ship room) :: domestic hoy=(map ship rung) :: foreign @@ -138,7 +96,6 @@ mer=(map (pair ship desk) mery) :: outstanding merges syn=? :: sync to unix == :: -++ riff ,[p=desk q=(unit rave)] :: request/desist ++ rind :: request manager $: nix=@ud :: request index bom=(map ,@ud ,[p=duct q=rave]) :: outstanding diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 5e2d04939..a3b8c3061 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -3,59 +3,6 @@ :: |= pit=vase => |% :: interface tiles -++ console-action :: console to app - $% [%det console-change] :: edit prompt line - [%inn ~] :: enter session - [%out ~] :: exit session - [%ret ~] :: submit and clear - == :: -++ console-buffer (list ,@c) :: command state -++ console-change :: network change - $: ler=console-clock :: destination clock - haw=@uvH :: source hash - ted=console-edit :: state change - == :: -++ console-clock ,[own=@ud his=@ud] :: vector clock -++ console-edit :: shared state change - $% [%del p=@ud] :: delete one at - [%ins p=@ud q=@c] :: insert at - [%mor p=(list console-edit)] :: combination - [%nop ~] :: no-op - [%set p=console-buffer] :: discontinuity - == :: -++ console-effect :: app to console - $% [%bel ~] :: beep - [%blk p=@ud q=@c] :: blink/match char at - [%clr ~] :: clear screen - [%det console-change] :: edit input - [%nex ~] :: save and clear input - [%tan p=(list tank)] :: classic tank - :: [%taq p=tanq] :: modern tank - [%txt p=tape] :: text line - == :: -++ dill-belt :: console input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%cru p=@tas q=(list tank)] :: echo error - [%ctl p=@c] :: control-key - [%del ~] :: true delete - [%met p=@c] :: meta-key - [%ret ~] :: return - [%rez p=@ud q=@ud] :: resize, cols, rows - [%txt p=(list ,@c)] :: utf32 text - [%yow p=gill] :: connect to app - == :: -++ dill-blit :: console output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%mor p=(list dill-blit)] :: multiple blits - [%pro p=(list ,@c)] :: show as cursor/line - [%qit ~] :: close console - [%out p=(list ,@c)] :: send output line - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: ++ gill (pair ship term) :: general contact -- :: => |% :: console protocol @@ -74,41 +21,7 @@ == :: -- => :: |% :: protocol below -++ blew ,[p=@ud q=@ud] :: columns rows -++ belt :: raw console input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%ctl p=@c] :: control-key - [%del ~] :: true delete - [%met p=@c] :: meta-key - [%ret ~] :: return - [%txt p=(list ,@c)] :: utf32 text - == :: -++ blit :: raw console output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%lin p=(list ,@c)] :: set current line - [%mor ~] :: newline - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: -++ flog :: sent to %dill - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: -++ gift :: out result <-$ - $% [%bbye ~] :: reset prompt - [%blit p=(list blit)] :: terminal output - [%init p=@p] :: set owner - [%logo ~] :: logout - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: +++ gift gift-dill :: out result <-$ ++ kiss :: in request ->$ $% [%belt p=belt] :: terminal input [%blew p=blew] :: terminal config @@ -132,19 +45,12 @@ ++ mess :: $% [%dill-belt p=(hypo dill-belt)] :: == :: -++ club :: agent action - $% [%peer p=path] :: subscribe - [%poke p=cage] :: apply - [%pull ~] :: unsubscribe - [%pump ~] :: pump yes/no - == :: ++ cuft :: internal gift $% [%coup p=(unit tang)] :: poke result [%quit ~] :: close subscription [%reap p=(unit tang)] :: peer result [%diff p=cage] :: subscription output == :: -++ cuss (pair term club) :: internal kiss ++ suss (trel term ,@tas ,@da) :: config report ++ move ,[p=duct q=(mold note gift)] :: local move ++ note-ames :: weird ames move @@ -165,7 +71,7 @@ == :: ++ note-gall :: $% [%conf dock %load ship desk] :: - [%deal p=sock q=cuss] :: + [%deal p=sock q=cush] :: == :: ++ note :: out request $-> $% [%a note-ames] :: diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index e5adf9d62..fb8fed907 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -32,7 +32,6 @@ [[%got ~] p=@uvH q=httr] :: remote response == :: ++ hasp ,[p=ship q=term] :: don't see %gall -++ hapt ,[p=ship q=path] :: do see %gall ++ kiss :: in request ->$ $% [%born ~] :: new unix process [%crud p=@tas q=(list tank)] :: XX rethink diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 7c743993a..c75575efc 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -5,60 +5,6 @@ => =~ |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: rest of arvo :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ 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 - == :: -++ milk (trel ship desk silk) :: sourced silk -++ 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 - [%bunt p=mark] :: example of mark - [%call p=silk q=silk] :: slam - [%cast p=mark q=silk] :: translate - [%diff p=silk q=silk] :: diff - [%done p=(set beam) q=gage] :: literal - [%dude p=tank q=silk] :: error wrap - [%dune p=(set beam) q=(unit gage)] :: unit literal - [%file p=beam] :: from clay - [%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 - [%pact p=silk q=silk] :: patch - [%plan p=beam q=spur r=hood] :: structured assembly - [%reef ~] :: kernel reef - [%ride p=twig q=silk] :: silk thru twig - [%tabl p=(list (pair silk silk))] :: list - [%vale p=mark q=ship r=*] :: validate [our his] - [%volt p=(set beam) q=(cask ,*)] :: unsafe add type - == :: ++ volt ?(%low %high) :: voltage ++ torc $|(?(%iron %gold) [%lead p=ship]) :: security control ++ roon :: reverse ames msg @@ -73,76 +19,13 @@ -- :: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: local arvo :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ club :: agent action - $% [%peer p=path] :: subscribe - [%poke p=cage] :: apply - [%pull ~] :: unsubscribe - [%pump ~] :: subscription ack - == :: -++ culm :: config action - $% [%load p=scup] :: load/reload - :: [%kick ~] :: restart everything - :: [%stop ~] :: toggle suspend - :: [%wipe ~] :: destroy all state - == :: -++ cuss (pair dude club) :: internal kiss -++ cuft :: internal gift - $% [%coup p=(unit tang)] :: poke result - [%diff p=cage] :: subscription output - [%quit ~] :: close subscription - [%reap p=(unit tang)] :: peer result - == :: ++ cote :: ++ap note $% [%meta p=@tas q=vase] :: - [%send p=ship q=cuss] :: + [%send p=ship q=cush] :: == :: ++ cove (pair duct (mold cote cuft)) :: internal move ++ cute (pair bone (mold cote cuft)) :: internal move -++ dude term :: local identity -++ scup (pair ship desk) :: autoupdate -++ suss (trel dude ,@tas ,@da) :: config report -++ tang (list tank) :: error abstraction --- :: -|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %gall cards - :::::::::::::::::::::::::::::::::::::::::::::::::::::: -++ kiss-ames :: - $% [%wont p=sock q=path r=*] :: - == :: -++ kiss-gall :: incoming request - $% [%conf p=dock q=culm] :: configure app - [%init p=ship] :: set owner - [%deal p=sock q=cuss] :: full transmission - [%rote p=sack q=path r=*] :: remote request - [%roth p=sack q=path r=*] :: remote response - == :: -++ kiss-ford :: - $% [%exec p=@p q=beak r=(unit silk)] :: make / kill - [%wasp p=@p q=@uvH] :: depends query - == :: -++ gift-ames :: - $% [%woot p=ship q=(unit ares)] :: e2e reaction message - == :: -++ gift-gall :: outgoing result - $% [%onto p=(each suss tang)] :: about agent - [%unto p=cuft] :: within agent - [%mack p=(unit tang)] :: message ack - == :: -++ gift-ford :: out result <-$ - $% [%made p=@uvH q=(each gage tang)] :: computed result - [%news ~] :: fresh depends - == :: -++ sign-gall :: incoming result - $% [%a gift-ames] :: - [%f gift-ford] :: - [%g gift-gall] :: - == :: -++ note-gall :: outgoing request - $? [@tas %meta p=vase] :: - $% [%a kiss-ames] :: - [%f kiss-ford] :: - [%g kiss-gall] :: - == == :: -++ move ,[p=duct q=(mold note-gall gift-gall)] :: typed move +++ move ,[p=duct q=(mold note-arvo gift-arvo)] :: typed move -- :: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %gall state :::::::::::::::::::::::::::::::::::::::::::::::::::::: @@ -235,7 +118,7 @@ (mo-boot dap ?:((~(has by bum) dap) %old %new) p.lum) :: ++ mo-pass :: standard pass - |= [pax=path noh=note-gall] + |= [pax=path noh=note-arvo] %_(+> moz :_(moz [hen %pass pax noh])) :: ++ mo-give @@ -308,11 +191,11 @@ :: ~& [%mo-boot dap how pup] %+ mo-pass [%sys how dap (scot %p p.pup) q.pup ~] =+ bek=[p.pup q.pup [%da now]] - ^- note-gall + ^- note-arvo [%f %exec our bek `[%boil %core [bek [dap %ape ~]] ~]] :: ++ mo-away :: foreign request - |= [him=ship caz=cuss] :: + |= [him=ship caz=cush] :: ^+ +> :: ~& [%mo-away him caz] ?: ?=(%pump -.q.caz) @@ -333,7 +216,7 @@ == %+ mo-pass [%sys %way -.q.caz ~] - `note-gall`[%a %wont [our him] [%q %ge p.caz ~] [num roc]] + `note-arvo`[%a %wont [our him] [%q %ge p.caz ~] [num roc]] :: ++ mo-baal :: error convert a |= art=(unit ares) @@ -381,7 +264,7 @@ (~(got by r:(~(got by sap) him)) num) :: ++ mo-come :: handle locally - |= [her=ship caz=cuss] + |= [her=ship caz=cush] ^+ +> =+ pry=`prey`[%high [~ her]] (mo-club p.caz pry q.caz) @@ -393,7 +276,7 @@ [~ `tang`[[%leaf (trip p.u.cup)] q.u.cup]] :: ++ mo-cyst :: take in /sys - |= [pax=path sih=sign-gall] + |= [pax=path sih=sign-arvo] ^+ +> ?+ -.pax !! %dep :: update @@ -478,7 +361,7 @@ == :: ++ mo-cook :: take in /use - |= [pax=path hin=(hypo sign-gall)] + |= [pax=path hin=(hypo sign-arvo)] ^+ +> ?. ?=([@ @ ?(%inn %out) *] pax) ~& [%mo-cook-bad-pax pax] @@ -530,7 +413,7 @@ |= [him=@p dap=dude num=@ud rok=rook] %+ mo-pass [%sys %req (scot %p him) dap (scot %ud num) ~] - ^- note-gall + ^- note-arvo ?- -.rok %m [%f %exec our (mo-beak dap) ~ %vale p.rok our q.rok] %s [%g %deal [him our] dap %peer p.rok] @@ -611,8 +494,8 @@ %pass :+ %pass `path`[%use dap p.q.cov] ?- -.q.q.cov - %send `note-gall`[%g %deal [our p.q.q.cov] q.q.q.cov] - %meta `note-gall`[`@tas`p.q.q.cov %meta `vase`q.q.q.cov] + %send `note-arvo`[%g %deal [our p.q.q.cov] q.q.q.cov] + %meta `note-arvo`[`@tas`p.q.q.cov %meta `vase`q.q.q.cov] == == :: @@ -762,6 +645,7 @@ :: ++ ap-move-diff :: give diff move |= [sto=bone vax=vase] + =. vax (spec vax) ^- (each cute tang) ?. &(?=(^ q.vax) ?=(@ -.q.vax) ((sane %tas) -.q.vax)) [%| (ap-suck "move: improper diff")] @@ -1149,7 +1033,7 @@ `axle`all :: ++ take :: response - |= [tea=wire hen=duct hin=(hypo sign-gall)] + |= [tea=wire hen=duct hin=(hypo sign-arvo)] ^- [p=(list move) q=_..^$] ~| [%gall-take tea] ?> ?=([@ ?(%sys %use) *] tea) diff --git a/base/arvo/hoon.hoon b/base/arvo/hoon.hoon index 05997f616..910b46f23 100644 --- a/base/arvo/hoon.hoon +++ b/base/arvo/hoon.hoon @@ -9634,7 +9634,6 @@ a :: == :: ++ kirk (unit (set monk)) :: audience -++ khan ,[p=@tas q=@ta] :: foreign identity ++ lens :: observation core $_ ^? :: |% ++ u *(unit (unit ,~)) :: existence @@ -9652,7 +9651,7 @@ ++ mass (each noun (list (pair cord ,mass))) :: memory usage ++ mill (each vase milt) :: vase/metavase ++ milt ,[p=* q=*] :: metavase -++ monk (each ship khan) :: general identity +++ monk (each ship ,[p=@tas q=@ta]) :: general identity ++ mold :: new kernel action |* [a=$+(* *) b=$+(* *)] :: forward/reverse $% [%pass p=path q=a] :: advance diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index 8c8140cec..f8fadd68c 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -1887,7 +1887,7 @@ wab=(map ship bath) :: relationship == :: ++ cred :: credential - $: hut=hoot :: client host + $: hut=hart :: client host aut=(jug ,@tas ,@t) :: client identities orx=oryx :: CSRF secret acl=(unit ,@t) :: accept-language @@ -2001,7 +2001,6 @@ ++ hiss ,[p=purl q=moth] :: outbound request ++ hist ,[p=@ud q=(list ,@t)] :: depth texts ++ hole ,@t :: session identity -++ hoot ,[p=? q=(unit ,@ud) r=host] :: secure/port/host ++ hort ,[p=(unit ,@ud) q=host] :: http port/host ++ host $%([& p=(list ,@t)] [| p=@if]) :: http host ++ hoke %+ each ,[%localhost ~] :: local host @@ -2264,23 +2263,329 @@ ++ will (list deed) :: certificate ++ zuse %310 :: hoon/zuse kelvin :: :: -:::: :::: this will become `%york`, separating out structures - :: :: related to arvo in - - - - - - - - - - - - - - - - - +:::: :::: this will become `%york`, vane structures. + :: :: +++ gift-ames :: out result <-$ + $% [%hear p=lane q=@] :: receive packet + [%init p=@p] :: report install + [%mass p=mass] :: memory usage + [%send p=lane q=@] :: transmit packet + [%waft p=sock q=*] :: response message + [%wart p=sock q=@tas r=path s=*] :: network request + [%went p=ship q=cape] :: reaction message + [%woot p=ship q=coop] :: e2e reaction message + == :: +++ kiss-ames :: in request ->$ + $% [%barn ~] :: new unix process + [%crud p=@tas q=(list tank)] :: error with trace + [%cash p=@p q=buck] :: civil license + [%hear p=lane q=@] :: receive packet + [%hole p=lane q=@] :: packet failed + [%junk p=@] :: entropy + [%kick p=@da] :: wake up + [%make p=(unit ,@t) q=@ud r=@ s=?] :: wild license + [%sith p=@p q=@uw r=?] :: imperial generator + [%wake ~] :: timer activate + [%want p=sock q=path r=*] :: send message + [%wegh ~] :: report memory + [%wont p=sock q=path r=*] :: e2e send message + == :: +:: +:::: %clay + :: +++ khan :: + $: fil=(unit (unit cage)) :: XX see khan-to-soba + dir=(map ,@ta khan) :: + == :: +++ mick (list ,[path (unit mime)]) +++ riff ,[p=desk q=(unit rave)] :: request/desist +:::: :: +++ gift-clay :: out result <-$ + $% [%ergo p=@p q=@tas r=@ud s=mick] :: version update + [%mass p=mass] :: memory usage + [%mere p=(each (set path) (pair term tang))] :: merge result + [%note p=@tD q=tank] :: debug message + [%writ p=riot] :: response + == :: +++ kiss-clay :: in request ->$ + $% [%font p=@p q=@tas r=@p s=@tas] :: set upstream + [%info p=@p q=@tas r=nori] :: internal edit + [%init p=@p] :: report install + [%into p=@p q=@tas r=khan] :: external edit + [%lynx p=@p q=@tas r=(unit ,?)] :: sync to unix + [%merg p=@p q=@tas r=@p s=@tas t=germ] :: merge desks + [%plug p=@p q=@tas r=@p s=@tas] :: unset upstream + [%wart p=sock q=@tas r=path s=*] :: network request + [%warp p=sock q=riff] :: file request + [%wegh ~] :: report memory + == :: +:: +:::: + :: +++ blew ,[p=@ud q=@ud] :: columns rows +++ belt :: old belt + $% [%aro p=?(%d %l %r %u)] :: arrow key + [%bac ~] :: true backspace + [%ctl p=@c] :: control-key + [%del ~] :: true delete + [%met p=@c] :: meta-key + [%ret ~] :: return + [%txt p=(list ,@c)] :: utf32 text + == :: +++ blit :: old blit + $% [%bel ~] :: make a noise + [%clr ~] :: clear the screen + [%hop p=@ud] :: set cursor position + [%lin p=(list ,@c)] :: set current line + [%mor ~] :: newline + [%sag p=path q=*] :: save to jamfile + [%sav p=path q=@] :: save to file + == :: +++ dill-belt :: new belt + $% [%aro p=?(%d %l %r %u)] :: arrow key + [%bac ~] :: true backspace + [%cru p=@tas q=(list tank)] :: echo error + [%ctl p=@] :: control-key + [%del ~] :: true delete + [%met p=@] :: meta-key + [%ret ~] :: return + [%rez p=@ud q=@ud] :: resize, cols, rows + [%txt p=(list ,@c)] :: utf32 text + [%yow p=gill] :: connect to app + == :: +++ dill-blit :: new blit + $% [%bel ~] :: make a noise + [%clr ~] :: clear the screen + [%hop p=@ud] :: set cursor position + [%mor p=(list dill-blit)] :: multiple blits + [%pro p=(list ,@c)] :: show as cursor/line + [%qit ~] :: close console + [%out p=(list ,@c)] :: send output line + [%sag p=path q=*] :: save to jamfile + [%sav p=path q=@] :: save to file + == :: +++ flog :: sent to %dill + $% [%crud p=@tas q=(list tank)] :: + [%text p=tape] :: + [%veer p=@ta q=path r=@t] :: install vane + [%vega p=path] :: reboot by path + [%verb ~] :: verbose mode + == :: +++ gill (pair ship term) :: general contact +:::: +++ gift-dill :: out result <-$ + $% [%bbye ~] :: reset prompt + [%blit p=(list blit)] :: terminal output + [%init p=@p] :: set owner + [%logo ~] :: logout + [%veer p=@ta q=path r=@t] :: install vane + [%vega p=path] :: reboot by path + [%verb ~] :: verbose mode + == :: +++ kiss-dill :: 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 + == :: +:: +:::: %eyre + :: +++ gram :: inter-ship message + $? [[%lon ~] p=hole] :: login request + [[%aut ~] p=hole] :: login reply + [[%hat ~] p=hole q=hart] :: login redirect + [[%get ~] p=@uvH q=[? clip httq]] :: remote request + [[%got ~] p=@uvH q=httr] :: remote response + == :: +:::: :: +++ kiss-eyre :: in request ->$ + $% [%born ~] :: new unix process + [%crud p=@tas q=(list tank)] :: XX rethink + [%init p=@p] :: report install + [%them p=(unit hiss)] :: outbound request + [%they p=@ud q=httr] :: inbound response + [%this p=? q=clip r=httq] :: inbound request + [%thud ~] :: inbound cancel + [%wart p=sack q=@tas r=_`[path *]`*gram] :: urbit message + [%wegh ~] :: report memory + == :: +++ gift-eyre :: out result <-$ + $% [%mass p=mass] :: memory usage + [%thou p=httr] :: raw http response + [%thus p=@ud q=(unit hiss)] :: http request/cancel + [%veer p=@ta q=path r=@t] :: drop-through + [%vega p=path] :: drop-through + == :: +:: +:::: %ford + :: +++ 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 + == :: +++ milk (trel ship desk silk) :: sourced silk +++ 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 + [%bunt p=mark] :: example of mark + [%call p=silk q=silk] :: slam + [%cast p=mark q=silk] :: translate + [%diff p=silk q=silk] :: diff + [%done p=(set beam) q=gage] :: literal + [%dude p=tank q=silk] :: error wrap + [%dune p=(set beam) q=(unit gage)] :: unit literal + [%file p=beam] :: from clay + [%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 + [%pact p=silk q=silk] :: patch + [%plan p=beam q=spur r=hood] :: structured assembly + [%reef ~] :: kernel reef + [%ride p=twig q=silk] :: silk thru twig + [%tabl p=(list (pair silk silk))] :: list + [%vale p=mark q=ship r=*] :: validate [our his] + [%volt p=(set beam) q=(cask ,*)] :: unsafe add type + == :: +:::: +++ gift-ford :: out result <-$ + $% [%made p=@uvH q=(each gage tang)] :: computed result + [%mass p=mass] :: memory usage + [%news ~] :: fresh depends + == :: +++ kiss-ford :: in request ->$ + $% [%exec p=@p q=beak r=(unit silk)] :: make / kill + [%wasp p=@p q=@uvH] :: depends query + [%wegh ~] :: report memory + == :: +:: +:::: %gall + :: +++ club :: agent action + $% [%peer p=path] :: subscribe + [%poke p=cage] :: apply + [%pull ~] :: unsubscribe + [%pump ~] :: pump yes/no + == :: +++ cuft :: internal gift + $% [%coup p=(unit tang)] :: poke result + [%diff p=cage] :: subscription output + [%quit ~] :: close subscription + [%reap p=(unit tang)] :: peer result + == :: +++ culm :: config action + $% [%load p=scup] :: load/reload + :: [%kick ~] :: restart everything + :: [%stop ~] :: toggle suspend + :: [%wipe ~] :: destroy all state + == :: +++ cush (pair term club) :: internal kiss +++ dude term :: server identity +++ scup (pair ship desk) :: autoupdate +++ suss (trel dude ,@tas ,@da) :: config report +:::: :: +++ kiss-gall :: incoming request + $% [%conf p=dock q=culm] :: configure app + [%init p=ship] :: set owner + [%deal p=sock q=cush] :: full transmission + [%rote p=sack q=path r=*] :: remote request + [%roth p=sack q=path r=*] :: remote response + == :: +++ gift-gall :: outgoing result + $% [%onto p=(each suss tang)] :: about agent + [%unto p=cuft] :: within agent + [%mack p=(unit tang)] :: message ack + == :: +:: +:::: %time + :: +++ gift-time :: out result <-$ + $% [%mass p=mass] :: memory usage + [%wake ~] :: wakey-wakey + == :: +++ kiss-time :: in request ->$ + $% [%rest p=@da] :: cancel alarm + [%wait p=@da] :: set alarm + [%wake ~] :: timer activate + [%wegh ~] :: report memory + == :: +:: +:::: %arvo + :: +++ gift-arvo :: out result <-$ + $? gift-ames + gift-clay + gift-dill + gift-eyre + gift-ford + gift-gall + gift-time + == +++ kiss-arvo :: in request ->$ + $? kiss-ames + kiss-clay + kiss-dill + kiss-eyre + kiss-ford + kiss-gall + kiss-time + == +++ note-arvo :: out request $-> + $? [@tas %meta vase] + $% [%a kiss-ames] + [%c kiss-clay] + [%d kiss-dill] + [%e kiss-eyre] + [%f kiss-ford] + [%g kiss-gall] + [%t kiss-time] + == == +++ sign-arvo :: in result $<- + $% [%a gift-ames] + [%c gift-clay] + [%d gift-dill] + [%e gift-eyre] + [%f gift-ford] + [%g gift-gall] + [%t gift-time] + == -- diff --git a/base/lib/kiln/core.hook b/base/lib/kiln/core.hook index ccbc2f539..8caa456d6 100644 --- a/base/lib/kiln/core.hook +++ b/base/lib/kiln/core.hook @@ -42,7 +42,7 @@ :: :: :: :::: :: :: !: :: :: -|% :: helm library +|% :: kiln library ++ kiln-work :: work in kiln |= [[hide from] kiln-part] ?> =(src our) @@ -296,7 +296,7 @@ :~ :~ leaf/"" leaf/"done setting up scratch space in %{-}" leaf/"please resolve the following conflicts and run" - leaf/":helm+merge %{(trip syd)} {} %{-}" + leaf/":+merge %{(trip syd)} {} %{-}" == ?~ annotated ~ diff --git a/base/sur/sole/core.hook b/base/sur/sole/core.hook index aca52e358..b050ecb96 100644 --- a/base/sur/sole/core.hook +++ b/base/sur/sole/core.hook @@ -89,28 +89,4 @@ leg=(list sole-edit) :: unmerged edits buf=sole-buffer :: sole state == :: -++ dill-belt :: sole input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%cru p=@tas q=(list tank)] :: echo error - [%ctl p=@] :: control-key - [%del ~] :: true delete - [%met p=@] :: meta-key - [%ret ~] :: return - [%rez p=@ud q=@ud] :: resize, cols, rows - [%txt p=(list ,@c)] :: utf32 text - [%yow p=gill] :: connect to app - == :: -++ dill-blit :: sole output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%mor p=(list dill-blit)] :: multiple blits - [%pro p=(list ,@c)] :: show as cursor/line - [%qit ~] :: close console - [%out p=(list ,@c)] :: send output line - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: -++ gill (pair ship term) :: general contact -- From 30d32255b91230c30daf578f0f9a663b145dd6cb Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Tue, 12 May 2015 15:00:18 -0700 Subject: [PATCH 33/94] Let %them through. --- base/arvo/gall.hoon | 1 + 1 file changed, 1 insertion(+) diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index d2cec0220..643a8adb1 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -961,6 +961,7 @@ %lynx `%c %merg `%c %plug `%c + %them `%e %want `%a == -- From 6ac76f9f73e4553fb6e6eaf9ccae24a636212db4 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Tue, 12 May 2015 15:21:10 -0700 Subject: [PATCH 34/94] octo frontend --- base/pub/octo/fab/hymn.hook | 19 +++++++++++++ base/pub/octo/src/main.css | 54 +++++++++++++++++++++++++++++++++++++ base/pub/octo/src/main.js | 44 ++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 base/pub/octo/fab/hymn.hook create mode 100644 base/pub/octo/src/main.css create mode 100644 base/pub/octo/src/main.js diff --git a/base/pub/octo/fab/hymn.hook b/base/pub/octo/fab/hymn.hook new file mode 100644 index 000000000..bf7ba4d94 --- /dev/null +++ b/base/pub/octo/fab/hymn.hook @@ -0,0 +1,19 @@ +:: +:: +:::: /hook/hymn/fab/octo/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 "/~~/~/at/base/lib/urb.js"); + ;link(type "text/css", rel "stylesheet", href "/home/pub/octo/src/main.css"); + ;title: urbit cit cat eot + == + ;body + ;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 new file mode 100644 index 000000000..839f686b7 --- /dev/null +++ b/base/pub/octo/src/main.css @@ -0,0 +1,54 @@ +#bord, +#whom { + width: 600px; + text-align: center; + position: absolute; + left: 50%; + margin-left: -300px; +} + +#bord { + width: 600px; + height: 600px; + position: absolute; + top: 18px; +} + +#whom, +.spac { + font-size: 100px; + line-height: 200px; +} + +.spac { + width: 198px; + height: 198px; + border: 1px solid #000; + text-align: center; + float: left; + cursor: pointer; +} + +.spac[data-index="0-0"], +.spac[data-index="1-0"], +.spac[data-index="2-0"] { + border-top: 0; +} + +.spac[data-index="0-0"], +.spac[data-index="0-1"], +.spac[data-index="0-2"] { + border-left: 0; +} + +.spac[data-index="2-0"], +.spac[data-index="2-1"], +.spac[data-index="2-2"] { + border-right: 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 diff --git a/base/pub/octo/src/main.js b/base/pub/octo/src/main.js new file mode 100644 index 000000000..b96a5a139 --- /dev/null +++ b/base/pub/octo/src/main.js @@ -0,0 +1,44 @@ +$(function() { + $bord = $('#bord') + $whom = $('#whom') + + 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) + x++ + if((i+1)%3 == 0) { + y++ + x=0 + } + } + $bord.html(s) + $whom.html((state.who == 'x' ? symb[1] : symb[2])) + } + + + urb.appl = 'octo' + urb.bind('/octo/o', function(err,res) { + draw(res.data) + }) + + 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) { + $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 From 2b940d93466b2ef955c1c6cffd81e9341e5b8130 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Wed, 13 May 2015 01:02:34 -0700 Subject: [PATCH 35/94] Various fixes and improvements; test can :?begin. --- base/ape/dojo/core.hook | 4 ++-- base/ape/hood/core.hook | 10 +++++++--- base/ape/talk/core.hook | 2 +- base/arvo/ames.hoon | 8 +++++--- base/arvo/dill.hoon | 2 +- base/arvo/gall.hoon | 2 +- base/lib/helm/core.hook | 30 +++++++++++++----------------- 7 files changed, 30 insertions(+), 28 deletions(-) diff --git a/base/ape/dojo/core.hook b/base/ape/dojo/core.hook index 0f5613dda..134731064 100644 --- a/base/ape/dojo/core.hook +++ b/base/ape/dojo/core.hook @@ -715,13 +715,13 @@ == -- :: -++ peer +++ peer-sole |= [from pax=path] ^- (quip move +>) ~? !=(src our.hid) [%dojo-peer-stranger ost src pax] :: ?> =(src our.hid) ?< (~(has by hoc) ost) - ?> =(/sole pax) + ?> =(~ pax) =< he-abet %~ he-peer he :- [ost ~] diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index f033b6faf..a037be6ae 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -76,11 +76,11 @@ |= [from hood-merge] (ably (poke-merge:(kiln-work [hid +<-] (able %kiln)) +<+)) :: -++ poke-hood-sync :: +++ poke-hood-sync :: |= [from hood-sync] (ably (poke-sync:(kiln-work [hid +<-] (able %kiln)) +<+)) :: -++ poke-hood-unix :: +++ poke-hood-unix :: |= [from hood-unix] (ably (poke-unix:(kiln-work [hid +<-] (able %kiln)) +<+)) :: @@ -100,8 +100,12 @@ |= [then saw=(unit tang)] (ably (take-coup-fancy:(kiln-work [hid ost src] (able %kiln)) way +<+)) :: -++ coup-kiln-spam +++ coup-kiln-spam :: |= [then saw=(unit tang)] ~? ?=(^ saw) [%kiln-spam-lame u.saw] [~ +>] +:: +++ went-helm :: + |= [then her=ship kay=cape] + (ably (take-went:(helm-work [hid ost src] (able %helm)) way +<+)) -- diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 6d4523b40..51038f566 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1714,7 +1714,7 @@ ra-abet:(~(ra-quit ra ost ~) man cuz) :: ++ pull :: - |= [from ~] + |= [from *] ^- [(list move) _+>] :: ~& [%talk-pull `*`ost] =^ moz +>.$ ra-abet:ra-ever:~(ra-cancel ra ost ~) diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index 9b71a3efe..5f6d77cff 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -454,7 +454,9 @@ ^- [(unit will) _+>] ?. =(our (sein her)) [~ +>.$] =+ nes=sen - ?. =(tic (end 6 1 (shaf %tick (mix her (shax sec:ex:q.nes))))) + =+ ryt=(end 6 1 (shaf %tick (mix her (shax sec:ex:q.nes)))) + ?. =(tic ryt) + ~& [%ames-wrong-ticket `@p`ryt] [~ +>.$] =+ rad=(~(get by hoc.saf) her) ?^ rad @@ -1671,7 +1673,7 @@ :+ (scot %p p.p.bon) (scot %p q.p.bon) q.q.bon - [hen %pass pax %g %rote p.bon /helm 0 %m %will wil]~ + [hen %pass pax %g %rote p.bon /hood 0 %m %will wil]~ ?> ?=([@ @ *] t.q.q.bon) :_ fox =+ [cak=i.t.q.q.bon ven=i.t.t.q.q.bon] @@ -1724,7 +1726,7 @@ == :: %ye :: %ye - :: ~& [%ye bon] + :: ~& [%ye bon] ?> =(p.p.bon (sein q.p.bon)) =+ ^= paz ^- (list ,@p) %+ skim pals:(~(um am [now fox]) p.p.bon) diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index a3b8c3061..98426399c 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -325,7 +325,7 @@ =+ ^= flo ^- (list (pair ship term)) =+ myr=(clan p.q.hic) ?: =(%pawn myr) - [[p.q.hic %dojo] ~] + [[p.q.hic %dojo] [p.q.hic %hood] ~] ?: =(%earl myr) =+ fap=(sein p.q.hic) [[fap %dojo] [fap %talk] [fap %hood] ~] diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 643a8adb1..e2dcd692b 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -989,7 +989,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] [~ ..^$] diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook index 3bae59840..bab89d6d2 100644 --- a/base/lib/helm/core.hook +++ b/base/lib/helm/core.hook @@ -45,24 +45,15 @@ |% :: helm library ++ helm-work :: work in helm |= [[hide from] helm-part] - ?> =(src our) =+ sez=(fall (~(get by hoc) ost) *helm-session) => |% :: arvo structures ++ card :: $% [%cash wire p=@p q=buck] :: [%conf wire dock %load ship term] :: - [%flog wire dill] :: + [%flog wire flog] :: [%plug wire @p @tas @p @tas] :: [%want wire sock path *] :: send message == :: - ++ suss ,[term @tas @da] :: config report - ++ dill :: sent to %dill - $% [%crud p=term q=(list tank)] :: fat report - [%text p=tape] :: thin report - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: ++ move (pair bone card) :: user-level move -- |_ moz=(list move) @@ -81,7 +72,7 @@ =+ buz=(shax :(mix (jam ges) eny)) =+ loy=(bruw 2.048 buz) %- emit(bur `[his [0 sec:ex:loy]~]) - [%want /ticketing [our (sein his)] /q/ta his tic ges pub:ex:loy] + [%want /helm/ticket [our (sein his)] /q/ta his tic ges pub:ex:loy] :: ++ poke-init :: initialize |= him=ship =< abet @@ -135,26 +126,31 @@ [%flog /reset %veer p way txt] :: ++ poke-will :: hear certificate - |= wil=(unit will) =< abet + |= wil=(unit will) ?> ?=(^ bur) - ?> ?=(^ wil) + ?> ?=(^ wil) + =< abet %- emil(bur ~) + ~& [%poke-will wil] :~ [%cash /helm p.u.bur q.u.bur u.wil] - [%plug /helm our %main (sein our) %main] - [%plug /helm our %arvo (sein our) %arvo] - [%plug /helm our %try (sein our) %try] + [%plug /helm our %home (sein our) %kids] == :: - ++ poke-verb + ++ poke-verb :: toggle verbose |= ~ =< abet (emit %flog /helm %verb ~) :: ++ take-onto :: result of %conf |= saw=(each suss tang) =< abet + ~& [%take-onto saw] %- emit ?- -.saw %| [%flog ~ %crud %onto `tang`p.saw] %& [%flog ~ %text "<{}>"] == + :: + ++ take-went :: result of %want + |= [way=path her=ship kay=cape] =< abet + (emit %flog ~ %text "went: {<[way kay]>}") -- -- From 6cb1505288817457bdb0e3c4d62a2a50b14c97bf Mon Sep 17 00:00:00 2001 From: Philip C Monk Date: Wed, 13 May 2015 17:18:43 -0400 Subject: [PATCH 36/94] fixed merges --- base/arvo/clay.hoon | 7 +++++-- base/lib/kiln/core.hook | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index cb47fc374..e6b5de048 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -727,8 +727,11 @@ [%done ~ %null !>(~)] =+ (~(get by mim.u.dok) a) ?^ - [%done ~ %mime !>(u.-)] - :^ %cast %mime %done :- ~ - (need (read:ze %x [%ud let.dom] a)) + :+ %cast %mime + =+ (need (need (read-x:ze let.dom a))) + ?: ?=(%& -<) + [%done ~ p.-] + (lobe-to-silk:ze a p.-) == == :: diff --git a/base/lib/kiln/core.hook b/base/lib/kiln/core.hook index 8caa456d6..3212f7bf7 100644 --- a/base/lib/kiln/core.hook +++ b/base/lib/kiln/core.hook @@ -151,11 +151,11 @@ ^+ . (blab [ost %merg /kiln/[syd] our syd her sud gem] ~) :: - ++ fancy-merge :: send to self + ++ fancy-merge :: send to self |= [syd=desk her=@p sud=desk gem=?(%auto germ)] ^+ +> %- blab :_ ~ - [ost %poke /kiln/fancy/[^syd] [our %kiln] %hood-merge [syd her sud gem]] + [ost %poke /kiln/fancy/[^syd] [our %hood] %hood-merge [syd her sud gem]] :: ++ spam |= mes=(list tank) From 7d733fd85cef5d4f5497a744fe95f6985baf5c68 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Wed, 13 May 2015 16:21:51 -0700 Subject: [PATCH 37/94] whom --- base/pub/octo/src/main.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/base/pub/octo/src/main.css b/base/pub/octo/src/main.css index 839f686b7..8304a1b3e 100644 --- a/base/pub/octo/src/main.css +++ b/base/pub/octo/src/main.css @@ -14,6 +14,11 @@ top: 18px; } +#whom { + color: red; + top: 636px; +} + #whom, .spac { font-size: 100px; From cc2a7defb5046fcc2ea032d5ae501d70729e3866 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Wed, 13 May 2015 16:31:13 -0700 Subject: [PATCH 38/94] Various fixes and improvements. --- base/ape/dojo/core.hook | 3 +-- base/ape/sole/core.hook | 33 +++++++++++++++++++++++++-------- base/arvo/ames.hoon | 2 +- base/arvo/gall.hoon | 8 +++++--- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/base/ape/dojo/core.hook b/base/ape/dojo/core.hook index 134731064..fbe96a538 100644 --- a/base/ape/dojo/core.hook +++ b/base/ape/dojo/core.hook @@ -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 diff --git a/base/ape/sole/core.hook b/base/ape/sole/core.hook index ea9ec524b..fde899d5b 100644 --- a/base/ape/sole/core.hook +++ b/base/ape/sole/core.hook @@ -134,8 +134,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))) @@ -614,6 +615,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 +639,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 +667,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 +686,7 @@ == :: ++ pull - |= from + |= [from pax=path] ^- (quip move +>) :: ~& [%sole-pull ost] =^ moz +> diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index 5f6d77cff..7adecb07f 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -1648,7 +1648,7 @@ == :: %cake - :: ~& [%cake p.bon q.bon r.bon] + ~& [%cake p.bon q.bon r.bon] :_ fox :~ [s.bon %give %woot q.p.bon r.bon] == diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index e2dcd692b..39f40afae 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -428,7 +428,8 @@ [%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 @@ -548,6 +549,7 @@ :: ++ 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] @@ -778,7 +780,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 @@ -989,7 +991,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] [~ ..^$] From 15bcbb23e7b4f0f088d84bb47feb86894c017e55 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Wed, 13 May 2015 18:13:13 -0700 Subject: [PATCH 39/94] cleaning up %base to %home --- base/ape/dojo/core.hook | 4 ++-- base/ape/octo/core.hook | 2 +- base/ape/sole/core.hook | 2 +- base/arvo/dill.hoon | 4 ++-- base/arvo/gall.hoon | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/base/ape/dojo/core.hook b/base/ape/dojo/core.hook index fbe96a538..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] @@ -726,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/octo/core.hook b/base/ape/octo/core.hook index e49722fae..1b6a2c61b 100644 --- a/base/ape/octo/core.hook +++ b/base/ape/octo/core.hook @@ -165,7 +165,7 @@ %0 +>(eye.+< eye.+>.old, gam.+< gam.+>.old):: == :: ++ pull-octo :: - |= [from ~] =< abet :: + |= [from *] =< abet :: (park(but ~) %0 `"dropped") :: ++ pull-sole :: disconnect console |= [from *] =< abet :: diff --git a/base/ape/sole/core.hook b/base/ape/sole/core.hook index fde899d5b..2dd6b1939 100644 --- a/base/ape/sole/core.hook +++ b/base/ape/sole/core.hook @@ -199,7 +199,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 diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 98426399c..2c4e7262b 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -184,7 +184,7 @@ =+ myt=(flop (need tem)) =. 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 %conf [[our ram] %load our %home]]) =. moz :_(moz [hen %pass ~ %g %deal [our our] ram %peer ~]) |- ^+ +> ?~ myt +> @@ -200,7 +200,7 @@ %pass / %c - [%warp [our our] %base `[%sing %y [%ud 1] /]] + [%warp [our our] %home `[%sing %y [%ud 1] /]] == == :: diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 750cd53b3..43d09368c 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -398,7 +398,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] From ab48a5f0f12598d460d80e8fd02bce52bd3a44f5 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Thu, 14 May 2015 12:21:13 -0700 Subject: [PATCH 40/94] path out of talk --- base/pub/talk/fab/hymn.hook | 4 +- .../src/js/components/StationComponent.coffee | 2 +- base/pub/talk/src/js/main.js | 162 ++++++++++-------- 3 files changed, 98 insertions(+), 70 deletions(-) diff --git a/base/pub/talk/fab/hymn.hook b/base/pub/talk/fab/hymn.hook index d8c1cdebd..83357f06d 100644 --- a/base/pub/talk/fab/hymn.hook +++ b/base/pub/talk/fab/hymn.hook @@ -25,11 +25,11 @@ ;script(type "text/javascript", src "/~~/~/at/base/lib/urb.js"); ;meta(name "viewport", content "width=device-width, height=device-height, ". "initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"); - ;link(type "text/css", rel "stylesheet", href "/base/pub/talk/src/css/main.css"); + ;link(type "text/css", rel "stylesheet", href "/home/pub/talk/src/css/main.css"); ;title: urbit talk == ;body ;div#c; - ;script(type "text/javascript", src "/base/pub/talk/src/js/main.js"); + ;script(type "text/javascript", src "/home/pub/talk/src/js/main.js"); == == diff --git a/base/pub/talk/src/js/components/StationComponent.coffee b/base/pub/talk/src/js/components/StationComponent.coffee index ed9d7200a..810d7d26c 100644 --- a/base/pub/talk/src/js/components/StationComponent.coffee +++ b/base/pub/talk/src/js/components/StationComponent.coffee @@ -95,7 +95,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/main.js b/base/pub/talk/src/js/main.js index 9c44f6add..9a30503a1 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -615,7 +615,7 @@ module.exports = recl({ className: "slat" }, "talk"), div({ className: "path" - }, window.util.mainStation(window.urb.user)), div({ + }, ""), div({ className: "caret" }, "") ]) @@ -2380,7 +2380,7 @@ moment.tz.load(require('./data/packed/latest.json')); },{"moment":"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/node_modules/moment-timezone/node_modules/moment/moment.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/base/pub/talk/src/js/node_modules/moment-timezone/node_modules/moment/moment.js":[function(require,module,exports){ //! moment.js -//! version : 2.10.2 +//! version : 2.10.3 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com @@ -2403,28 +2403,12 @@ moment.tz.load(require('./data/packed/latest.json')); hookCallback = callback; } - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false - }; - } - 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; + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; } function map(arr, fn) { @@ -2461,21 +2445,45 @@ moment.tz.load(require('./data/packed/latest.json')); return createLocalOrUTC(input, format, locale, strict, true).utc(); } + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false + }; + } + + function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; + } + function valid__isValid(m) { if (m._isValid == null) { + var flags = getParsingFlags(m); 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; + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated; if (m._strict) { m._isValid = m._isValid && - m._pf.charsLeftOver === 0 && - m._pf.unusedTokens.length === 0 && - m._pf.bigHour === undefined; + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; } } return m._isValid; @@ -2484,10 +2492,10 @@ moment.tz.load(require('./data/packed/latest.json')); function valid__createInvalid (flags) { var m = create_utc__createUTC(NaN); if (flags != null) { - extend(m._pf, flags); + extend(getParsingFlags(m), flags); } else { - m._pf.userInvalidated = true; + getParsingFlags(m).userInvalidated = true; } return m; @@ -2523,7 +2531,7 @@ moment.tz.load(require('./data/packed/latest.json')); to._offset = from._offset; } if (typeof from._pf !== 'undefined') { - to._pf = from._pf; + to._pf = getParsingFlags(from); } if (typeof from._locale !== 'undefined') { to._locale = from._locale; @@ -2558,7 +2566,7 @@ moment.tz.load(require('./data/packed/latest.json')); } function isMoment (obj) { - return obj instanceof Moment || (obj != null && hasOwnProp(obj, '_isAMomentObject')); + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); } function toInt(argumentForCoercion) { @@ -2996,7 +3004,7 @@ moment.tz.load(require('./data/packed/latest.json')); if (month != null) { array[MONTH] = month; } else { - config._pf.invalidMonth = input; + getParsingFlags(config).invalidMonth = input; } }); @@ -3080,7 +3088,7 @@ moment.tz.load(require('./data/packed/latest.json')); var overflow; var a = m._a; - if (a && m._pf.overflow === -2) { + if (a && getParsingFlags(m).overflow === -2) { overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : @@ -3090,11 +3098,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 +3115,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 +3165,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 +3445,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 +3541,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 +3557,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 +3565,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 +3631,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 +3642,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 +3650,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 +3698,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 +3752,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 +4325,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 +4335,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 +4448,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 +4603,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 +4728,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 +4845,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 +5035,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 +5252,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 +5459,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); From e190e20256b4050b430dce156877a8f71cf97ef4 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Thu, 14 May 2015 12:24:43 -0700 Subject: [PATCH 41/94] Checking in for fun and profit. --- base/ape/hood/core.hook | 136 ++++++++++++++++++++++++---------------- base/arvo/dill.hoon | 2 +- base/arvo/zuse.hoon | 1 + base/lib/kiln/core.hook | 10 --- 4 files changed, 85 insertions(+), 64 deletions(-) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index a037be6ae..41b21a879 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -2,7 +2,7 @@ :::: /hook/core/hood/ape :: :: :: :: :: /? 314 :: zuse version -/+ sole, talk, helm, kiln :: libraries +/+ sole, talk, helm, kiln, drum :: libraries :: :: :: :::: :: :: !: :: :: @@ -44,58 +44,6 @@ :: :: :: :::: :: :: :: :: :: -++ 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,7 +53,89 @@ ~? ?=(^ saw) [%kiln-spam-lame u.saw] [~ +>] :: +++ coup-drum :: + |= [then saw=(unit tang)] + =+ gyl=(drum-phat way) + ?: (drum-stop ost gyl) [~ +>.$] + (ably (take-coup:(drum-work [hid ost src] (able %drum)) gyl +<+)) +:: +++ 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-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-will :: + |= [from (unit will)] + (ably (poke-will:(helm-work [hid +<-] (able %helm)) +<+)) +:: +++ reap-drum + |= [then saw=(unit tang)] + (ably (reap:(helm-work [hid ost src] (able %drum)) (drum-phat way) +<+)) +:: +++ onto-drum :: + |= [then saw=(each ,[term @tas @da] tang)] + (ably (take-onto:(helm-work [hid ost src] (able %drum)) (drum-phat way) +<+)) +:: +++ 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 +<+)) +:: ++ went-helm :: |= [then her=ship kay=cape] (ably (take-went:(helm-work [hid ost src] (able %helm)) way +<+)) +:: +++ peer-drum + |= [from pax=path] + (ably (peer:(drum-work [hid +<-] (able %drum)) +<+)) +:: +++ 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)) +<+)) +:: +++ diff-sole-effect-drum + |= [then sole-effect] + =+ gyl=(drum-phat way) + ?: (drum-stop ost gyl) [~ +>.$] + (ably (diff-sole-effect:(drum-work [hid +<-] (able %drum)) gyl +<+)) +:: +++ quit-drum + |= then + =+ gyl=(drum-phat way) + ?: (drum-stop ost gyl) [~ +>.$] + (ably (quit:(drum-work [hid +<-] (able %drum)) gyl)) -- diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 98426399c..849d64e3d 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -185,7 +185,7 @@ =. 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 ~]) + =. moz :_(moz [hen %pass ~ %g %deal [our our] ram %peer /drum]) |- ^+ +> ?~ myt +> $(myt t.myt, +> (send i.myt)) diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index f8fadd68c..0a131ba37 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -2521,6 +2521,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 diff --git a/base/lib/kiln/core.hook b/base/lib/kiln/core.hook index 3212f7bf7..46f084efa 100644 --- a/base/lib/kiln/core.hook +++ b/base/lib/kiln/core.hook @@ -60,16 +60,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 From 6656d492830e567d1ca9cf83943693c16aed4712 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Thu, 14 May 2015 13:13:45 -0700 Subject: [PATCH 42/94] switchable websole v1 --- base/arvo/dill.hoon | 2 +- base/lib/sole/core.hook | 2 +- base/pub/sole/fab/hymn.hook | 2 +- base/pub/sole/src/main.coffee | 77 +++++++++++++++++++++++++++-------- 4 files changed, 63 insertions(+), 20 deletions(-) diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 2c4e7262b..1ff1c10b5 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -200,7 +200,7 @@ %pass / %c - [%warp [our our] %home `[%sing %y [%ud 1] /]] + [%warp [our our] %base `[%sing %y [%ud 1] /]] == == :: diff --git a/base/lib/sole/core.hook b/base/lib/sole/core.hook index 00b1af625..0f082cf1f 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) == == 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..a6c160af8 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 + " "] + [pro,cur,buf] = [@props.appl+@props.prompt[@props.appl], @props.cursor, @props.input + " "] pre {}, 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,7 +46,8 @@ $ -> matr = rend (Matr rows:[] - prompt:"" + appl:"" + prompt:{"": "# "} input:"" cursor:0 history:[] @@ -51,17 +56,24 @@ $ -> update = (a) -> matr.setProps a buffer = new Share "" window.buffer = buffer + choose = (appl)-> urb.appl = appl; update {appl} + print = (txt)-> update rows: [matr.props.rows..., txt] sync = (ted)-> update input: buffer.buf, cursor: buffer.transpose ted, matr.props.cursor - - peer = (ruh) -> - if ruh.map then return ruh.map peer + updPrompt = (app,pro) -> + prompt = $.extend {}, matr.props.prompt + if pro? then prompt[app] = pro else delete prompt[app] + update {prompt} + + 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 'act' then switch ruh.act @@ -77,11 +89,26 @@ $ -> # 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 + updPrompt "", null + 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 + update appl: apps[1 + apps.indexOf matr.props.appl] ? apps[0] + part = (appl)-> + unless matr.props.prompt[app]? + return print '# not-joined: '+app + urb.unsubscribe {appl, path: "/sole", wire: "/"} + if appl is matr.props.appl then cycle() + updPrompt appl, null + join urb.appl + window.join = join; window.part = part + pressed = [] deltim = null #later = (data)-> @@ -96,9 +123,17 @@ $ -> # ), 500 sendAction = (data)-> - urb.send {mark: 'sole-action', data}, (e,res)-> + if urb.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? + return bell() + else switch buffer.buf[0] + when '+' then join app + when '-' then part app + else bell() + doEdit = (ted)-> det = buffer.transmit ted sync ted @@ -141,13 +176,21 @@ $ -> 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' + if mapr.appl = "" + updPrompt "", null + cycle() + apps = Object.keys mapr.prompt + updPrompt "", (apps.join ", ")+'# ' + choose '' when 't' if mapr.cursor is 0 or mapr.input.length < 2 return bell() From ee4a39d600e3a6262c6f9a146ae8883f7ea35bab Mon Sep 17 00:00:00 2001 From: Philip C Monk Date: Thu, 14 May 2015 16:28:25 -0400 Subject: [PATCH 43/94] sped up merges --- base/arvo/clay.hoon | 64 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index e6b5de048..05ca6d1eb 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -865,8 +865,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 +933,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)] ^+ +> @@ -1572,7 +1593,7 @@ ^+ ..me ?: don ..me(mer (~(put by mer) ali dat)) - ..me(mer (~(del by mer) ali), reg :_(reg [hen %mere gon.dat])) + ze:wake(mer (~(del by mer) ali), reg :_(reg [hen %mere gon.dat])) :: ++ route |= [sat=term res=(each riot (each gage tang))] @@ -2097,7 +2118,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 +2133,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 +2148,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) + hot + ~& [%mate-erg erg.dat] checkout :: ++ checkout @@ -2594,8 +2621,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 - =+ wex=(di:wak syd) + =+ wex=(di:une syd) =+ dat=?-(+<.q.hin %writ [%& p.q.hin], %made [%| q.q.hin]) =+ ^- kan=(unit ankh) %+ biff (~(get by fat.ruf) her) @@ -2605,7 +2631,7 @@ 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))] + [-.woo ..^$(ruf abet:(pish:une syd +.woo ran.wao))] ?: ?=([%auto @ @ @ @ ~] tea) =+ our=(slav %p i.t.tea) =* syd i.t.t.tea @@ -2764,6 +2790,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 !! From 64d6e9696ee0f720d9559371239fa4b5a1641fc4 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Thu, 14 May 2015 13:57:12 -0700 Subject: [PATCH 44/94] full talk name --- base/pub/talk/src/css/main.css | 3 ++- base/pub/talk/src/css/main.styl | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 5594e515b..04e8b975a 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -471,7 +471,7 @@ a { display: block; } .iden > div { - max-width: 10rem; + max-width: 11rem; display: inline-block; } .iden > div, @@ -536,6 +536,7 @@ a { } .writing .iden .ship { margin-right: 0.3rem; + letter-spacing: 0; } #audi { display: inline-block; diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index dfe505843..5c9f488e7 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -421,7 +421,7 @@ a display block .iden > div - max-width 10rem + max-width 11rem display inline-block .iden > div @@ -491,6 +491,7 @@ a .writing .iden .ship margin-right .3rem + letter-spacing 0 #audi display inline-block From 94aa7c7678ab28f14e982ef0094b737d48c6ea23 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Thu, 14 May 2015 14:59:45 -0700 Subject: [PATCH 45/94] switching sole --- base/arvo/eyre.hoon | 3 +- base/lib/urb.js | 3 +- base/pub/sole/src/main.coffee | 62 ++++++++++++++++++++--------------- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 32e824a8c..741e2ed11 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -1133,7 +1133,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 diff --git a/base/lib/urb.js b/base/lib/urb.js index bd528dc6f..215d39ef4 100644 --- a/base/lib/urb.js +++ b/base/lib/urb.js @@ -244,12 +244,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/pub/sole/src/main.coffee b/base/pub/sole/src/main.coffee index a6c160af8..3a153e3fb 100644 --- a/base/pub/sole/src/main.coffee +++ b/base/pub/sole/src/main.coffee @@ -3,8 +3,8 @@ str = JSON.stringify Prompt = recl render: -> - [pro,cur,buf] = [@props.appl+@props.prompt[@props.appl], @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: -> @@ -54,17 +54,28 @@ $ -> offset:0 ), term window.matr = matr update = (a) -> matr.setProps a - buffer = new Share "" + buffer = "": new Share "" window.buffer = buffer - choose = (appl)-> urb.appl = appl; update {appl} + 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)-> - update input: buffer.buf, cursor: buffer.transpose ted, matr.props.cursor + 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 @@ -75,7 +86,7 @@ $ -> when 'pro' then updPrompt app, ruh.pro.cad when 'hop' then update cursor: ruh.hop; bell() # XX buffer.transpose? 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() @@ -93,19 +104,21 @@ $ -> if matr.props.prompt[app]? return print '# already-joined: '+app choose app - updPrompt "", null 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 - update appl: apps[1 + apps.indexOf matr.props.appl] ? apps[0] + if apps.length < 2 then return + choose apps[1 + apps.indexOf urb.appl] ? apps[0] part = (appl)-> - unless matr.props.prompt[app]? - return print '# not-joined: '+app + mapr = matr.props + unless mapr.prompt[appl]? + return print '# not-joined: '+appl urb.unsubscribe {appl, path: "/sole", wire: "/"} - if appl is matr.props.appl then cycle() + if appl is mapr.appl then cycle() updPrompt appl, null + sysStatus() join urb.appl window.join = join; window.part = part @@ -123,19 +136,19 @@ $ -> # ), 500 sendAction = (data)-> - if urb.appl then 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? + app = /^[a-z-]+$/.exec(buffer[""].buf.slice(1)) + unless app? and app[0]? return bell() - else switch buffer.buf[0] - when '+' then join app - when '-' then part app + 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} @@ -185,12 +198,9 @@ $ -> when 'g' then bell() when 'x' then cycle() when 'v' - if mapr.appl = "" - updPrompt "", null - cycle() - apps = Object.keys mapr.prompt - updPrompt "", (apps.join ", ")+'# ' - choose '' + 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() From 8ba1b0ccf399ff271386346957af1bc9d96d4c8e Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Thu, 14 May 2015 14:59:45 -0700 Subject: [PATCH 46/94] switching sole --- base/arvo/eyre.hoon | 3 +- base/lib/urb.js | 3 +- base/pub/sole/src/main.coffee | 62 ++++++++++++++++++++--------------- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 32e824a8c..741e2ed11 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -1133,7 +1133,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 diff --git a/base/lib/urb.js b/base/lib/urb.js index bd528dc6f..215d39ef4 100644 --- a/base/lib/urb.js +++ b/base/lib/urb.js @@ -244,12 +244,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/pub/sole/src/main.coffee b/base/pub/sole/src/main.coffee index a6c160af8..3a153e3fb 100644 --- a/base/pub/sole/src/main.coffee +++ b/base/pub/sole/src/main.coffee @@ -3,8 +3,8 @@ str = JSON.stringify Prompt = recl render: -> - [pro,cur,buf] = [@props.appl+@props.prompt[@props.appl], @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: -> @@ -54,17 +54,28 @@ $ -> offset:0 ), term window.matr = matr update = (a) -> matr.setProps a - buffer = new Share "" + buffer = "": new Share "" window.buffer = buffer - choose = (appl)-> urb.appl = appl; update {appl} + 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)-> - update input: buffer.buf, cursor: buffer.transpose ted, matr.props.cursor + 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 @@ -75,7 +86,7 @@ $ -> when 'pro' then updPrompt app, ruh.pro.cad when 'hop' then update cursor: ruh.hop; bell() # XX buffer.transpose? 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() @@ -93,19 +104,21 @@ $ -> if matr.props.prompt[app]? return print '# already-joined: '+app choose app - updPrompt "", null 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 - update appl: apps[1 + apps.indexOf matr.props.appl] ? apps[0] + if apps.length < 2 then return + choose apps[1 + apps.indexOf urb.appl] ? apps[0] part = (appl)-> - unless matr.props.prompt[app]? - return print '# not-joined: '+app + mapr = matr.props + unless mapr.prompt[appl]? + return print '# not-joined: '+appl urb.unsubscribe {appl, path: "/sole", wire: "/"} - if appl is matr.props.appl then cycle() + if appl is mapr.appl then cycle() updPrompt appl, null + sysStatus() join urb.appl window.join = join; window.part = part @@ -123,19 +136,19 @@ $ -> # ), 500 sendAction = (data)-> - if urb.appl then 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? + app = /^[a-z-]+$/.exec(buffer[""].buf.slice(1)) + unless app? and app[0]? return bell() - else switch buffer.buf[0] - when '+' then join app - when '-' then part app + 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} @@ -185,12 +198,9 @@ $ -> when 'g' then bell() when 'x' then cycle() when 'v' - if mapr.appl = "" - updPrompt "", null - cycle() - apps = Object.keys mapr.prompt - updPrompt "", (apps.join ", ")+'# ' - choose '' + 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() From 53c01ebe812043fdfec5ece12ce71600b864a5c3 Mon Sep 17 00:00:00 2001 From: Philip C Monk Date: Thu, 14 May 2015 18:45:22 -0400 Subject: [PATCH 47/94] removed bad printf --- base/arvo/clay.hoon | 2 -- 1 file changed, 2 deletions(-) diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index c05af6bc4..25c93445f 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) From 24f970eb4f73089b7913585f5cf38ef4676d4c0f Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Thu, 14 May 2015 16:06:56 -0700 Subject: [PATCH 48/94] not listening --- base/pub/talk/src/js/components/WritingComponent.coffee | 2 ++ base/pub/talk/src/js/main.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/base/pub/talk/src/js/components/WritingComponent.coffee b/base/pub/talk/src/js/components/WritingComponent.coffee index d83659a92..5ea01eeb5 100644 --- a/base/pub/talk/src/js/components/WritingComponent.coffee +++ b/base/pub/talk/src/js/components/WritingComponent.coffee @@ -46,6 +46,8 @@ module.exports = recl for s in listening if audi.indexOf(s) is -1 cc = true + if listening.length is 0 + cc = true if cc is true audi.push window.util.mainStationPath(window.urb.user) audi diff --git a/base/pub/talk/src/js/main.js b/base/pub/talk/src/js/main.js index 9a30503a1..54aef09c6 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -708,6 +708,9 @@ module.exports = recl({ cc = true; } } + if (listening.length === 0) { + cc = true; + } if (cc === true) { audi.push(window.util.mainStationPath(window.urb.user)); } From 9a60d48e210038eb8fd916368c45764bae7bfd44 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Thu, 14 May 2015 16:27:45 -0700 Subject: [PATCH 49/94] Various fixes and improvements. --- base/ape/hood/core.hook | 4 ++++ base/ape/talk/core.hook | 8 +++++--- base/arvo/ames.hoon | 1 - base/arvo/eyre.hoon | 1 + base/arvo/gall.hoon | 4 ++-- base/lib/helm/core.hook | 4 ++++ 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index a037be6ae..dbd02a98b 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -96,6 +96,10 @@ |= [then @uvH (each gage tang)] (ably (take-made:(kiln-work [hid ost src] (able %kiln)) way +<+)) :: +++ note-helm :: + |= [then (pair ,@tD tank)] + (ably (take-note:(helm-work [hid ost src] (able %helm)) way +<+)) +:: ++ coup-kiln-fancy :: |= [then saw=(unit tang)] (ably (take-coup-fancy:(kiln-work [hid ost src] (able %kiln)) way +<+)) diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 51038f566..78446c335 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1549,7 +1549,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 @@ -1609,6 +1609,7 @@ == :: ++ te-whom :: render sender + ~& [%te-whom man lix te-best te-maud] (~(ta-show ta man (need te-best)) ~ te-maud) -- :: @@ -1658,6 +1659,7 @@ ++ peer :: accept subscription |= [from pax=path] ^- [(list move) _+>] + :: ~& [%talk-peer src ost pax] ?: ?=([%sole *] pax) ?> =(our.hid src) ?< (~(has by shells) ost) @@ -1714,9 +1716,9 @@ ra-abet:(~(ra-quit ra ost ~) man cuz) :: ++ pull :: - |= [from *] + |= [from pax=path] ^- [(list move) _+>] - :: ~& [%talk-pull `*`ost] + :: ~& [%talk-pull src ost pax] =^ moz +>.$ ra-abet:ra-ever:~(ra-cancel ra ost ~) [moz +>.$(shells (~(del by shells) ost))] :: diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index 7adecb07f..2a8f6b7c0 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -1648,7 +1648,6 @@ == :: %cake - ~& [%cake p.bon q.bon r.bon] :_ fox :~ [s.bon %give %woot q.p.bon r.bon] == diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 741e2ed11..f549ac996 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -1133,6 +1133,7 @@ :: ++ del-subs :: XX per path? |= [a=dock %json b=wire c=path] ^+ ..ix + ~& [%eyre-del-subs +< hen] =. ..ix (hurl-note [a b] [%g %deal [him -.a] +.a %pull ~]) (nice-json:pop-duct:(ire-ix ire)) :: XX gall ack :: diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 43d09368c..9b2f1923b 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -575,10 +575,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 diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook index bab89d6d2..77c5523fe 100644 --- a/base/lib/helm/core.hook +++ b/base/lib/helm/core.hook @@ -149,6 +149,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]>}") From 6b4f6a80f1a91a2d6e864c6d93fa835d0ebcb06e Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 15 May 2015 01:09:12 -0700 Subject: [PATCH 50/94] Various fixes. --- base/ape/acto/core.hook | 2 +- base/ape/hood/core.hook | 2 +- base/ape/talk/core.hook | 1 - base/lib/helm/core.hook | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) 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/hood/core.hook b/base/ape/hood/core.hook index dbd02a98b..3e11c40da 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -48,7 +48,7 @@ |= [from hood-begin] (ably (poke-begin:(helm-work [hid +<-] (able %helm)) +<+)) :: -++ poke-hood-init :: +++ poke-helm-init :: |= [from hood-init] (ably (poke-init:(helm-work [hid +<-] (able %helm)) +<+)) :: diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 78446c335..458c8eb8d 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -1609,7 +1609,6 @@ == :: ++ te-whom :: render sender - ~& [%te-whom man lix te-best te-maud] (~(ta-show ta man (need te-best)) ~ te-maud) -- :: diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook index 77c5523fe..5bbc618e8 100644 --- a/base/lib/helm/core.hook +++ b/base/lib/helm/core.hook @@ -131,7 +131,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] == From 817f7234a2af71286026af11bc69561a6af155f3 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 15 May 2015 11:27:44 -0700 Subject: [PATCH 51/94] web dependency tracking injection --- base/arvo/eyre.hoon | 33 +++++++++++++++++++++++++++++---- base/arvo/ford.hoon | 10 +++++++++- base/arvo/zuse.hoon | 1 + base/lib/urb.js | 11 +++++++++++ 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 741e2ed11..21c9d5668 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -184,9 +184,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 "");)) :: @@ -294,6 +296,28 @@ 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 |% @@ -582,7 +606,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 +614,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]]) diff --git a/base/arvo/ford.hoon b/base/arvo/ford.hoon index f1c4a696c..1d1637291 100644 --- a/base/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -1111,9 +1111,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 diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index f8fadd68c..9175dccfe 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -2475,6 +2475,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 diff --git a/base/lib/urb.js b/base/lib/urb.js index 215d39ef4..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() { From e63ea914ababe7d88ceb56058bcb67e0ca832e31 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Fri, 15 May 2015 12:36:56 -0700 Subject: [PATCH 52/94] eyre blocking css --- base/arvo/eyre.hoon | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 741e2ed11..92f310bbd 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -299,25 +299,19 @@ |% ++ 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"; - == - ;link(rel "stylesheet", href "/home/lib/base.css"); + ;= ;p: Please log in. + ;p.mono: ~;{span#ship(contenteditable "")} + ;input#pass(onchange "urb.submit()"); + ;pre:code#err; + ;script@"/~/at/~/auth.js"; == :: ++ 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"); + ;= ;p: Goodbye ~;{span#ship}. + ;button#act(onclick "urb.away()"): Log out + ;pre:code#err; + ;script@"/~/at/~/auth.js"; == :: ++ poke-test @@ -333,7 +327,15 @@ } ''' == - ++ titl |=([a=cord b=marl] ;html:(head:title:"{(trip a)}" body:"*{b}")) + ++ titl + |= [a=cord b=marl] + ;html + ;head + ;title:"{(trip a)}" + ;link(rel "stylesheet", href "/home/lib/base.css"); + == + ;body:div#c:"*{b}" + == -- -- |% :: functions From 67003df527565e2efb6e9a5787a79ae125beb2f0 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 15 May 2015 14:01:19 -0700 Subject: [PATCH 53/94] restore authentication to /~/at injection --- base/arvo/eyre.hoon | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 379f1a0cc..304a3a777 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -409,7 +409,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) @@ -667,7 +667,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 @@ -683,7 +683,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 ~]) @@ -906,7 +908,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 @@ -984,7 +987,8 @@ %get ~| aute/ham ?: |(=(anon him.ham) (~(has in aut.yac) him.ham)) - process(him him.ham, pok rem.ham) + =. aut & + process(pok rem.ham, ..ya abet.yac(him him.ham)) ?. =(our him.ham) [%| ((teba foreign-auth.yac) him.ham hat rem.ham quy)] (show-login-page ~) @@ -1025,7 +1029,7 @@ ?~ 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 @@ -1158,7 +1162,6 @@ :: ++ del-subs :: XX per path? |= [a=dock %json b=wire c=path] ^+ ..ix - ~& [%eyre-del-subs +< hen] =. ..ix (hurl-note [a b] [%g %deal [him -.a] +.a %pull ~]) (nice-json:pop-duct:(ire-ix ire)) :: XX gall ack :: From 17df698c70b6a10aef83e76346f051ed8daf3b38 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 15 May 2015 16:21:09 -0700 Subject: [PATCH 54/94] remember logins --- base/arvo/eyre.hoon | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 096ad9646..1bd5af7d3 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -653,8 +653,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 ~ @@ -989,8 +989,10 @@ %get ~| aute/ham ?: |(=(anon him.ham) (~(has in aut.yac) him.ham)) - =. aut & - process(pok rem.ham, ..ya abet.yac(him him.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 ~) From 2c9828637d1a6df06bfe3fdea79f9a1673c9b764 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 15 May 2015 17:22:59 -0700 Subject: [PATCH 55/94] curedly flipped octo frontend --- base/pub/octo/fab/hymn.hook | 2 +- base/pub/octo/src/main.css | 10 +++++----- base/pub/octo/src/main.js | 9 +++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/base/pub/octo/fab/hymn.hook b/base/pub/octo/fab/hymn.hook index bf7ba4d94..89d4b9cf4 100644 --- a/base/pub/octo/fab/hymn.hook +++ b/base/pub/octo/fab/hymn.hook @@ -7,7 +7,7 @@ ;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/pub/octo/src/main.css"); ;title: urbit cit cat eot == diff --git a/base/pub/octo/src/main.css b/base/pub/octo/src/main.css index 8304a1b3e..fd6b6c3c2 100644 --- a/base/pub/octo/src/main.css +++ b/base/pub/octo/src/main.css @@ -37,23 +37,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..c165bd53a 100644 --- a/base/pub/octo/src/main.js +++ b/base/pub/octo/src/main.js @@ -4,15 +4,16 @@ $(function() { 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++ @@ -41,4 +42,4 @@ $(function() { function(i) { return Number(i); }) urb.send({mark:'octo-move',data:data}) }) -}) \ No newline at end of file +}) From 08ab26aec71c27e70195046244618ce1cf0a6c76 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 15 May 2015 17:23:40 -0700 Subject: [PATCH 56/94] drum compiles. --- base/ape/hood/core.hook | 21 +- base/ape/sole/core.hook | 5 - main/ape/talk/core.hook | 1879 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 1888 insertions(+), 17 deletions(-) create mode 100644 main/ape/talk/core.hook diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index ff69a53dc..7d7a3359b 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -11,6 +11,7 @@ |* 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) :: == :: @@ -18,11 +19,13 @@ ++ hood-make :: |* hed=hood-head :: ?- hed :: + %drum *drum-part :: %helm *helm-part :: %kiln *kiln-part :: == :: ++ hood-part :: - $? helm-part :: + $? drum-part :: + helm-part :: kiln-part :: == :: -- :: @@ -55,9 +58,7 @@ :: ++ coup-drum :: |= [then saw=(unit tang)] - =+ gyl=(drum-phat way) - ?: (drum-stop ost gyl) [~ +>.$] - (ably (take-coup:(drum-work [hid ost src] (able %drum)) gyl +<+)) + (ably (take-coup:(drum-work [hid ost src] (able %drum)) way +<+)) :: ++ poke-hood-begin :: |= [from hood-begin] @@ -97,11 +98,11 @@ :: ++ reap-drum |= [then saw=(unit tang)] - (ably (reap:(helm-work [hid ost src] (able %drum)) (drum-phat way) +<+)) + (ably (reap:(drum-work [hid ost src] (able %drum)) way +<+)) :: ++ onto-drum :: |= [then saw=(each ,[term @tas @da] tang)] - (ably (take-onto:(helm-work [hid ost src] (able %drum)) (drum-phat way) +<+)) + (ably (take-onto:(drum-work [hid ost src] (able %drum)) way +<+)) :: ++ mere-kiln :: |= [then are=(each (set path) (pair term tang))] @@ -133,13 +134,9 @@ :: ++ diff-sole-effect-drum |= [then sole-effect] - =+ gyl=(drum-phat way) - ?: (drum-stop ost gyl) [~ +>.$] - (ably (diff-sole-effect:(drum-work [hid +<-] (able %drum)) gyl +<+)) + (ably (diff-sole-effect:(drum-work [hid ost src] (able %drum)) way +<+)) :: ++ quit-drum |= then - =+ gyl=(drum-phat way) - ?: (drum-stop ost gyl) [~ +>.$] - (ably (quit:(drum-work [hid +<-] (able %drum)) gyl)) + (ably (quit:(drum-work [hid ost src] (able %drum)) way)) -- diff --git a/base/ape/sole/core.hook b/base/ape/sole/core.hook index 2dd6b1939..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 -- :: @@ -254,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 diff --git a/main/ape/talk/core.hook b/main/ape/talk/core.hook new file mode 100644 index 000000000..7555a45d6 --- /dev/null +++ b/main/ape/talk/core.hook @@ -0,0 +1,1879 @@ +:: +:::: /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-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 ~ + ?: =(';' i.buf) + ((sh-sane-rule sh-scad) inv (tufa t.buf)) + ?: =('@' i.buf) + (sh-sane-chat +.buf) + (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 ~ + ?: =(';' -.buf.say.she) + (rust (tufa +.buf.say.she) sh-scad) + ?: =('@' -.buf.say.she) + `[%say %lin | (crip (tufa +.buf.say.she))] + `[%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 + ^+ +>+>+> + ~& [%activate 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 "" + %lin + =+ txt=(trip q.sep) + ?: p.sep + (weld ": " txt) + ?: oug + (weld "@ " txt) + (weld " " txt) + == + -- +:: +++ peer + |= [from 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 + |= [from cod=command] + ^- [(list move) _+>] + :: ~& [%talk-poke-command her cod] + ra-abet:(~(ra-apply ra ost ~) her cod) +:: +++ poke-sole-action + |= [from act=sole-action] + ra-abet:(~(ra-sole ra ost [ost %give %nice ~]~) act) +:: +++ diff-twit-stat + |= [then +:: +++ 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)/try/(scot %da lat.hid)/talk/backlog/jam + [ost %pass /jamfile %c %info our.hid (foal paf (jam +<+.+>.$))]~ +:: +++ prep + |= old=(unit (unit house-any)) + ^- [(list move) _+>] + ?> ?=(^ old) + =| moz=(list move) + |- + ?~ u.old + =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/talk/backlog/jam + ?. ?=([%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)] +-- From e14b37eb6ce772c5bfa7d2a790bda3c55f2fd055 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Fri, 15 May 2015 17:24:35 -0700 Subject: [PATCH 57/94] Bogus file. --- main/ape/talk/core.hook | 1879 --------------------------------------- 1 file changed, 1879 deletions(-) delete mode 100644 main/ape/talk/core.hook diff --git a/main/ape/talk/core.hook b/main/ape/talk/core.hook deleted file mode 100644 index 7555a45d6..000000000 --- a/main/ape/talk/core.hook +++ /dev/null @@ -1,1879 +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-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 ~ - ?: =(';' i.buf) - ((sh-sane-rule sh-scad) inv (tufa t.buf)) - ?: =('@' i.buf) - (sh-sane-chat +.buf) - (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 ~ - ?: =(';' -.buf.say.she) - (rust (tufa +.buf.say.she) sh-scad) - ?: =('@' -.buf.say.she) - `[%say %lin | (crip (tufa +.buf.say.she))] - `[%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 - ^+ +>+>+> - ~& [%activate 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 "" - %lin - =+ txt=(trip q.sep) - ?: p.sep - (weld ": " txt) - ?: oug - (weld "@ " txt) - (weld " " txt) - == - -- -:: -++ peer - |= [from 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 - |= [from cod=command] - ^- [(list move) _+>] - :: ~& [%talk-poke-command her cod] - ra-abet:(~(ra-apply ra ost ~) her cod) -:: -++ poke-sole-action - |= [from act=sole-action] - ra-abet:(~(ra-sole ra ost [ost %give %nice ~]~) act) -:: -++ diff-twit-stat - |= [then -:: -++ 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)/try/(scot %da lat.hid)/talk/backlog/jam - [ost %pass /jamfile %c %info our.hid (foal paf (jam +<+.+>.$))]~ -:: -++ prep - |= old=(unit (unit house-any)) - ^- [(list move) _+>] - ?> ?=(^ old) - =| moz=(list move) - |- - ?~ u.old - =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/talk/backlog/jam - ?. ?=([%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)] --- From 88fac8916c2c4d6387f46ab681fd3368479173d4 Mon Sep 17 00:00:00 2001 From: Daniel Klein Date: Sat, 16 May 2015 18:53:07 -0400 Subject: [PATCH 58/94] Removing chat clutter --- base/app/chat/core.hook | 496 --- base/pub/doc.md | 4 +- base/pub/doc/arvo/ames/commentary.md | 4 +- base/pub/doc/guide/b-cli.md | 78 +- base/pub/radio/fab/hymn.hook | 26 - base/pub/radio/src/main.css | 327 -- base/pub/radio/src/main.js | 5901 -------------------------- base/pub/src/doc/chat/help.txt | 29 - base/pub/src/radio/hymn.hook | 11 - base/pub/src/radio/main.js | 14 - base/pub/talk/fab/hymn.hook | 2 +- base/pub/talk/src/js/package.json | 4 +- 12 files changed, 57 insertions(+), 6839 deletions(-) delete mode 100644 base/app/chat/core.hook delete mode 100644 base/pub/radio/fab/hymn.hook delete mode 100644 base/pub/radio/src/main.css delete mode 100644 base/pub/radio/src/main.js delete mode 100644 base/pub/src/doc/chat/help.txt delete mode 100644 base/pub/src/radio/hymn.hook delete mode 100644 base/pub/src/radio/main.js diff --git a/base/app/chat/core.hook b/base/app/chat/core.hook deleted file mode 100644 index fb00c9f01..000000000 --- a/base/app/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/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/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/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 Date: Sat, 16 May 2015 17:31:28 -0700 Subject: [PATCH 59/94] drum in hood works, modulo slow update bug. --- base/ape/hood/core.hook | 27 +++++++++++--------- base/arvo/dill.hoon | 13 +++++----- base/arvo/gall.hoon | 55 ++++++++++++++++++++++++----------------- base/lib/helm/core.hook | 7 +++--- base/lib/kiln/core.hook | 13 ++++------ 5 files changed, 63 insertions(+), 52 deletions(-) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index 7d7a3359b..fa8a4ba30 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -7,6 +7,8 @@ :::: :: :: !: :: :: => |% :: module boilerplate + ++ hood-0 :: + ,[%0 lac=(map ,@tas hood-part)] :: ++ hood-good :: |* hed=hood-head :: |= paw=hood-part :: @@ -17,33 +19,33 @@ == :: ++ hood-head ,_-:*hood-part :: ++ hood-make :: - |* hed=hood-head :: + |* [our=@p hed=hood-head] :: ?- hed :: - %drum *drum-part :: + %drum (drum-port our) :: %helm *helm-part :: %kiln *kiln-part :: == :: ++ hood-part :: - $? drum-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))] :: :: :: :::: :: :: :: :: :: @@ -60,6 +62,10 @@ |= [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)) +<+)) @@ -102,6 +108,7 @@ :: ++ onto-drum :: |= [then saw=(each ,[term @tas @da] tang)] + ~& [%onto-drum +<] (ably (take-onto:(drum-work [hid ost src] (able %drum)) way +<+)) :: ++ mere-kiln :: @@ -132,10 +139,6 @@ |= [from dill-belt] (ably (poke-dill-belt:(drum-work [hid +<-] (able %drum)) +<+)) :: -++ diff-sole-effect-drum - |= [then sole-effect] - (ably (diff-sole-effect:(drum-work [hid ost src] (able %drum)) way +<+)) -:: ++ quit-drum |= then (ably (quit:(drum-work [hid ost src] (able %drum)) way)) diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index 2d59c6f14..c981f31fa 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -252,7 +252,8 @@ :: ~& [%take-gall-unto +>.sih] ?- -.+>.sih %coup ?~(p.p.+>.sih +>.$ (crud %coup u.p.p.+>.sih)) - %quit !! :: ?? + %quit ~& %dill-console-quit + (dump %logo ~) %reap ?~(p.p.+>.sih +>.$ (crud %reap u.p.p.+>.sih)) %diff pump:(from ((hard dill-blit) q:`vase`+>+>.sih)) == @@ -287,7 +288,7 @@ [~ ~] 80 0 - (tuba "<{(trip p.kyz)}>") + (tuba "<%dill: awaiting {(trip p.kyz)}>") == -- |% :: poke/peek pattern @@ -325,12 +326,12 @@ =+ ^= flo ^- (list (pair ship term)) =+ myr=(clan p.q.hic) ?: =(%pawn myr) - [[p.q.hic %dojo] [p.q.hic %hood] ~] + [[p.q.hic %dojo] ~] ?: =(%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])) + [[fap %dojo] [fap %talk] ~] + [[p.q.hic %dojo] [p.q.hic %talk] ~] + =^ moz all abet:(need (ax (need hey.all) [%flow %hood flo])) ?: |((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) diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 9b2f1923b..2ed0592dc 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 @@ -153,6 +152,11 @@ ++ mo-born :: new seat |= [dap=dude pup=scup hav=vase] =+ sat=*seat + =+ typ=p:(slot 13 hav) + ~? =(%hood dap) [%mo-born dap `@p`(mug typ)] + =. . ?. =(%hood dap) . + ~> %slog.[0 ~(duck ut typ)] + . %_ +>.$ bum %+ ~(put by bum) dap @@ -436,7 +440,7 @@ |_ $: $: dap=dude pry=prey ost=bone - zip=(list cute) + zip=(list cove) dub=(list (each suss tang)) == seat @@ -485,8 +489,8 @@ =^ 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 @@ -528,12 +532,13 @@ =. q.cag (spec q.cag) =+ 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) - [!>([`@ud`ost `@p`q.q.pry `path`+.pax]) !>(cag)] - [!>([`@ud`ost `@p`q.q.pry (slag (dec p.u.cug) `path`+.pax)]) q.cag] + [!>([`@ud`ost `@p`q.q.pry `path`pax]) !>(cag)] + [!>([`@ud`ost `@p`q.q.pry (slag (dec p.u.cug) `path`pax)]) q.cag] =^ cam +>.$ (ap-call q.u.cug arg) ?^ cam (ap-pump:(ap-lame q.u.cug u.cam) | her pax) @@ -621,7 +626,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)")] @@ -641,14 +646,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))]] @@ -667,7 +672,7 @@ :: ++ 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) @@ -681,7 +686,7 @@ :: ++ 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) @@ -693,19 +698,20 @@ :: ++ 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) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "peer: malformed path")] + ~& [%ap-move-peer-wire p.p.yep] :^ %& sto %pass :- p.p.yep [%send q.p.yep r.p.yep %peer u.pux] :: ++ ap-move-pull :: pass %pull |= [sto=bone vax=vase] - ^- (each cute tang) + ^- (each cove tang) =+ yep=(ap-move-mess vax) ?: ?=(%| -.yep) yep ?. =(~ +>.q.vax) @@ -716,7 +722,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) @@ -761,12 +767,13 @@ =. +> (ap-peon pax) =+ cug=(ap-find %peer 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:ap-pule %reap cam) - (ap-give %reap ~) + =. zip (weld zip `(list cove)`[[ost %give %reap cam] old]) + ?^(cam ap-pule +>.$) :: ++ ap-peon :: add subscriber |= pax=path @@ -825,7 +832,7 @@ ^+ +> ?- -.cuf %coup (ap-punk q.q.pry %coup +.pax `!>(p.cuf)) - %diff (ap-diff q.q.pry pax p.cuf) + %diff (ap-diff q.q.pry +.pax p.cuf) %quit (ap-punk q.q.pry %quit +.pax ~) %reap (ap-punk q.q.pry %reap +.pax `!>(p.cuf)) == @@ -845,8 +852,12 @@ ?. (ap-fond %prep) ?~ vux `+>.$ + =+ [new=p:(slot 13 hav) old=p:(slot 13 u.vux)] + ~& [%ap-prop-nest `@p`(mug new) `@p`(mug old)] ?. (~(nest ut p:(slot 13 hav)) %| p:(slot 13 u.vux)) + ~& %nested-bad :_(+>.$ `(ap-suck "prep mismatch")) + ~& %nested-good `+>.$(+13.q.hav +13.q.u.vux) =^ tur +>.$ %+ ap-call %prep @@ -899,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)) diff --git a/base/lib/helm/core.hook b/base/lib/helm/core.hook index 5bbc618e8..b3b9ef60d 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 :: diff --git a/base/lib/kiln/core.hook b/base/lib/kiln/core.hook index 46f084efa..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 @@ -117,7 +114,7 @@ ++ win . :: successful poke ++ lose ^+ . - ~| %kiln-work-failed + ~| %kiln-work-fail !! :: ++ gage-to-tage :: From 7318467c6c1779f449b8f1a144f29e46d62ce001 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 16 May 2015 18:05:56 -0700 Subject: [PATCH 60/94] Forgot to add. --- base/lib/drum/core.hook | 791 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 791 insertions(+) create mode 100644 base/lib/drum/core.hook diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook new file mode 100644 index 000000000..9d2515b21 --- /dev/null +++ b/base/lib/drum/core.hook @@ -0,0 +1,791 @@ +:: :: :: +:::: /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)] :: add agents + [%del p=(list gill)] :: delete agents + == :: +-- :: +!: :: :: +:::: :: :: + :: :: :: +|% :: helm library +++ 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)) + == + :: + ++ 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) + == + == + -- + -- + |_ [moz=(list move) biz=(list dill-blit)] + ++ diff-sole-effect :: + |= [way=wire fec=sole-effect] =< se-abet + =+ gyl=(drum-phat way) + ?: (se-aint gyl) +>.$ + (se-diff gyl fec) + :: + ++ peer :: + |= pax=path =< se-abet + ^+ +> + ~& [%drum-peer ost src pax] + ?. ?| =(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 + +>(ray (~(put in ray) wel)) + :: + ++ reap :: + |= [way=wire saw=(unit tang)] + =< se-abet =< se-view + =+ gyl=(drum-phat way) + ~& [%drum-reap gyl saw] + ?~ saw + (se-join gyl) + (se-dump:(se-diss 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-diss 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 +> + ?: (~(has by fur) q.i.yar) $(yar t.yar) + ~& [%adit-conf i.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) + ~& [%adze-peer i.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) + =+ wag=(~(tap in eel)) + |- ^+ wag + ?~ wag ~ + =+ mor=$(wag t.wag) + ?:(=(~ (~(get by fug) i.wag)) mor [i.wag mor]) + :: + ++ se-anon :: rotate index + =+ wag=se-amor + ?~ wag + + +(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-diss :: with prejudice + |= gyl=gill + (se-drop(eel (~(del in eel) gyl)) gyl) + :: + ++ 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 + |= gyl=gill + ^+ +> + ?. (~(has by fug) gyl) +> + =. fug (~(del by fug) gyl) + =. +> (se-text "[detached from {}]") + se-prom(liv.maz ?~(fug & liv.maz)) + :: + ++ se-join :: confirm connection + |= gyl=gill + ^+ +> + ~& [%drum-join gyl] + ?> =(~ (~(got by fug) gyl)) + se-prom(liv.maz |, fug (~(put by fug) gyl `*target)) + :: + ++ se-nuke :: teardown + |= gyl=gill + ^+ +> + (se-diss:(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)) + == + :: + ++ se-plot :: status line + ^- tape + =+ ^= pry + |= gill + =+((trip q.+<) ?:(=(our p.+>-) - :(welp (scow %p p.+>-) "/" -))) + =+ ^= yal ^- (list tape) + %+ weld + ^- (list tape) + %+ turn (~(tap by fug)) + |= [a=gill b=(unit target)] + =+ c=(pry a) + ?~(b ['?' c] c) + ^- (list tape) + %+ turn (skip (~(tap by eel)) |=(gill (~(has by fug) +<))) + |=(a=gill ['>' (pry a)]) + |- ^- 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 in 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 ~]) + +>(tar.maz +<+) + ?. liv + =. ..ta (se-nuke gyl) + ..ta(liv.maz =(~ fug)) + (se-alas(fug (~(put by fug) gyl ``target`+<+)) gyl) + :: + ++ 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 ?: mav ta-bel + +>(+> 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))]) + -- + -- +-- From 37e9bfad79ab35dcae98ada14beb7b53cd312827 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 16 May 2015 18:31:34 -0700 Subject: [PATCH 61/94] Work around duplicate-triggering slow update bug. --- base/lib/drum/core.hook | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook index 9d2515b21..8f93c9bac 100644 --- a/base/lib/drum/core.hook +++ b/base/lib/drum/core.hook @@ -55,7 +55,7 @@ [%del p=(list gill)] :: delete agents == :: -- :: -!: :: :: +:: :: :: :::: :: :: :: :: :: |% :: helm library @@ -178,7 +178,6 @@ ++ peer :: |= pax=path =< se-abet ^+ +> - ~& [%drum-peer ost src pax] ?. ?| =(our src) :: ourself &(=(%duke (clan our)) =(our (sein src))) :: or our own yacht == :: From be7ce2d332057cce821a54ae320999e9d552089b Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 16 May 2015 19:37:36 -0700 Subject: [PATCH 62/94] hood without sole seems ready to use. --- base/ape/hood/core.hook | 1 - base/arvo/dill.hoon | 14 +++----------- base/arvo/gall.hoon | 9 --------- base/lib/drum/core.hook | 3 --- 4 files changed, 3 insertions(+), 24 deletions(-) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index fa8a4ba30..ac899dbca 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -108,7 +108,6 @@ :: ++ onto-drum :: |= [then saw=(each ,[term @tas @da] tang)] - ~& [%onto-drum +<] (ably (take-onto:(drum-work [hid ost src] (able %drum)) way +<+)) :: ++ mere-kiln :: diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index c981f31fa..7a329052c 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -180,7 +180,7 @@ (done %blit [bit ~]) :: ++ init :: initialize - ~& [%dill-init our] + ~& [%dill-init our ram] =+ myt=(flop (need tem)) =. tem ~ =. moz :_(moz [hen %pass / %c %font our %home our %base]) @@ -288,7 +288,7 @@ [~ ~] 80 0 - (tuba "<%dill: awaiting {(trip p.kyz)}>") + (tuba "") == -- |% :: poke/peek pattern @@ -323,15 +323,7 @@ =: ore.all `p.q.hic dug.all ~ == - =+ ^= flo ^- (list (pair ship term)) - =+ myr=(clan p.q.hic) - ?: =(%pawn myr) - [[p.q.hic %dojo] ~] - ?: =(%earl myr) - =+ fap=(sein p.q.hic) - [[fap %dojo] [fap %talk] ~] - [[p.q.hic %dojo] [p.q.hic %talk] ~] - =^ moz all abet:(need (ax (need hey.all) [%flow %hood 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) diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 2ed0592dc..3addb696b 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -152,11 +152,6 @@ ++ mo-born :: new seat |= [dap=dude pup=scup hav=vase] =+ sat=*seat - =+ typ=p:(slot 13 hav) - ~? =(%hood dap) [%mo-born dap `@p`(mug typ)] - =. . ?. =(%hood dap) . - ~> %slog.[0 ~(duck ut typ)] - . %_ +>.$ bum %+ ~(put by bum) dap @@ -704,7 +699,6 @@ =+ pux=((soft path) +>.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "peer: malformed path")] - ~& [%ap-move-peer-wire p.p.yep] :^ %& sto %pass :- p.p.yep [%send q.p.yep r.p.yep %peer u.pux] @@ -853,11 +847,8 @@ ?~ vux `+>.$ =+ [new=p:(slot 13 hav) old=p:(slot 13 u.vux)] - ~& [%ap-prop-nest `@p`(mug new) `@p`(mug old)] ?. (~(nest ut p:(slot 13 hav)) %| p:(slot 13 u.vux)) - ~& %nested-bad :_(+>.$ `(ap-suck "prep mismatch")) - ~& %nested-good `+>.$(+13.q.hav +13.q.u.vux) =^ tur +>.$ %+ ap-call %prep diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook index 8f93c9bac..df122a226 100644 --- a/base/lib/drum/core.hook +++ b/base/lib/drum/core.hook @@ -250,7 +250,6 @@ |- ^+ +> ?~ yar +> ?: (~(has by fur) q.i.yar) $(yar t.yar) - ~& [%adit-conf i.yar] %= $ yar t.yar +> @@ -263,7 +262,6 @@ |- ^+ +> ?~ lee +> ?: (~(has by fug) i.lee) $(lee t.lee) - ~& [%adze-peer i.lee] $(lee t.lee, +> (se-peer i.lee)) :: ++ se-aint :: ignore result @@ -352,7 +350,6 @@ ++ se-join :: confirm connection |= gyl=gill ^+ +> - ~& [%drum-join gyl] ?> =(~ (~(got by fug) gyl)) se-prom(liv.maz |, fug (~(put by fug) gyl `*target)) :: From c305ecaa2a409a7b0126d093f569457341b2d12e Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sat, 16 May 2015 21:50:05 -0700 Subject: [PATCH 63/94] Various fixes and improvements. --- base/lib/drum/core.hook | 46 ++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook index df122a226..3b138e7b8 100644 --- a/base/lib/drum/core.hook +++ b/base/lib/drum/core.hook @@ -54,11 +54,9 @@ $% [%add p=(list gill)] :: add agents [%del p=(list gill)] :: delete agents == :: --- :: :: :: :: :::: :: :: :: :: :: -|% :: helm library ++ deft-apes :: default servers |= our=ship %- ~(gas in *(set well)) @@ -199,7 +197,6 @@ |= [way=wire saw=(unit tang)] =< se-abet =< se-view =+ gyl=(drum-phat way) - ~& [%drum-reap gyl saw] ?~ saw (se-join gyl) (se-dump:(se-diss gyl) u.saw) @@ -283,15 +280,12 @@ :: ++ se-amor :: live targets ^- (list gill) - =+ wag=(~(tap in eel)) - |- ^+ wag - ?~ wag ~ - =+ mor=$(wag t.wag) - ?:(=(~ (~(get by fug) i.wag)) mor [i.wag mor]) + (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 @@ -347,16 +341,27 @@ =. +> (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 ^+ +> ?> =(~ (~(got by fug) gyl)) - se-prom(liv.maz |, fug (~(put by fug) gyl `*target)) + (se-alas:se-prom(liv.maz |, fug (~(put by fug) gyl `*target)) gyl) :: ++ se-nuke :: teardown |= gyl=gill ^+ +> - (se-diss:(se-pull(liv.maz |) gyl) gyl) + =+ lag=se-agon + =. +>.$ (se-diss:(se-pull(liv.maz |) gyl) gyl) + ?. &(?=(^ lag) !=(gyl u.lag)) +>.$ + (se-alas u.lag) :: ++ se-like :: act in master |= kus=ukase @@ -374,19 +379,23 @@ :: ++ se-plot :: status line ^- tape + =+ lag=se-agon =+ ^= pry - |= gill + |= 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=(pry a) + =+ c=(yey a) ?~(b ['?' c] c) ^- (list tape) - %+ turn (skip (~(tap by eel)) |=(gill (~(has by fug) +<))) - |=(a=gill ['>' (pry a)]) + %+ turn (skip (~(tap by fur)) |=([term *] (~(has by fug) [our +<-]))) + |=([term *] ['-' (pry our +<-)]) |- ^- tape ?~ yal ~ ?~ t.yal i.yal @@ -447,7 +456,7 @@ :: ++ se-peer :: send a peer |= gyl=gill - (se-emit(fug (~(put in fug) gyl ~)) ost %peer (drum-path gyl) gyl /sole) + (se-emit(fug (~(put by fug) gyl ~)) ost %peer (drum-path gyl) gyl /sole) :: ++ se-pull :: cancel subscription |= gyl=gill @@ -476,11 +485,11 @@ ?: mav ?. liv (se-blit `dill-blit`[%qit ~]) - +>(tar.maz +<+) + se-prom:+>(tar.maz +<+) ?. liv =. ..ta (se-nuke gyl) ..ta(liv.maz =(~ fug)) - (se-alas(fug (~(put by fug) gyl ``target`+<+)) gyl) + ..ta(fug (~(put by fug) gyl ``target`+<+)) :: ++ ta-ant :: toggle master ^+ . @@ -597,8 +606,7 @@ %- ta-hom(pos.inp 0, kil `(scag pos.inp buf.say.inp)) (ta-cut 0 pos.inp) %v ta-ant - %x ?: mav ta-bel - +>(+> se-anon) + %x +>(+> se-anon) %y ?~ kil ta-bel %- ta-hom(pos.inp (add pos.inp (lent u.kil))) (ta-cat pos.inp u.kil) From e28c7fd4686399226830fb249f4540372b178aec Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sun, 17 May 2015 12:39:03 -0700 Subject: [PATCH 64/94] Fix queuing issue. --- base/ape/hood/core.hook | 38 +++++++++++++++++++------------------- base/arvo/gall.hoon | 14 +++++++------- base/lib/drum/core.hook | 25 +++++++++++++++++++++++-- 3 files changed, 49 insertions(+), 28 deletions(-) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index ac899dbca..897fb5798 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -98,18 +98,18 @@ |= [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)) +<+)) :: -++ 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 +<+)) -:: ++ mere-kiln :: |= [then are=(each (set path) (pair term tang))] (ably (take-mere:(kiln-work [hid ost src] (able %kiln)) way +<+)) @@ -122,23 +122,23 @@ |= [then (pair ,@tD tank)] (ably (take-note:(helm-work [hid ost src] (able %helm)) way +<+)) :: -++ went-helm :: - |= [then her=ship kay=cape] - (ably (take-went:(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)) +<+)) :: -++ 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)) +<+)) -:: ++ 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/arvo/gall.hoon b/base/arvo/gall.hoon index 3addb696b..23942c444 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -525,24 +525,23 @@ ++ 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 - %. [| her pax] + %. [| her +.pax] ap-pump:(ap-lame %diff (ap-suck "diff: no {<`path`[p.cag pax]>}")) =+ ^= arg ^- vase %- slop ?: =(0 p.u.cug) - [!>([`@ud`ost `@p`q.q.pry `path`pax]) !>(cag)] - [!>([`@ud`ost `@p`q.q.pry (slag (dec p.u.cug) `path`pax)]) q.cag] + [!>([`@ud`ost `@p`q.q.pry `path`+.pax]) !>(cag)] + [!>([`@ud`ost `@p`q.q.pry (slag (dec p.u.cug) `path`+.pax)]) q.cag] =^ cam +>.$ (ap-call q.u.cug arg) ?^ cam (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 ~) @@ -699,6 +698,7 @@ =+ pux=((soft path) +>.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "peer: malformed path")] + ~& [%ap-move-peer-path p.p.yep] :^ %& sto %pass :- p.p.yep [%send q.p.yep r.p.yep %peer u.pux] @@ -826,7 +826,7 @@ ^+ +> ?- -.cuf %coup (ap-punk q.q.pry %coup +.pax `!>(p.cuf)) - %diff (ap-diff q.q.pry +.pax p.cuf) + %diff (ap-diff q.q.pry pax p.cuf) %quit (ap-punk q.q.pry %quit +.pax ~) %reap (ap-punk q.q.pry %reap +.pax `!>(p.cuf)) == diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook index 3b138e7b8..498071406 100644 --- a/base/lib/drum/core.hook +++ b/base/lib/drum/core.hook @@ -51,8 +51,9 @@ inp=sole-command :: input state == :: ++ ukase :: master command - $% [%add p=(list gill)] :: add agents - [%del p=(list gill)] :: delete agents + $% [%add p=(list gill)] :: attach to + [%del p=(list gill)] :: detach from + [%new p=(list well)] :: create == :: :: :: :: :::: :: :: @@ -145,6 +146,7 @@ ;~ pose (stag %add ;~(pfix lus sp-gills)) (stag %del ;~(pfix hep sp-gills)) + (stag %new ;~(pfix tar sp-wells)) == :: ++ sp-gills @@ -164,6 +166,12 @@ ;~(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)] @@ -321,6 +329,13 @@ %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)) + :: ++ se-diss :: with prejudice |= gyl=gill (se-drop(eel (~(del in eel) gyl)) gyl) @@ -352,6 +367,7 @@ ++ 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) :: @@ -375,6 +391,11 @@ |- ^+ +>.^$ ?~ 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 From 9c31e52b645d99d1b001faf7d3b859989151080e Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Sun, 17 May 2015 13:27:59 -0700 Subject: [PATCH 65/94] login css, talk details --- base/arvo/eyre.hoon | 45 ++++++++++++--- base/lib/base.css | 57 +++++++++++++------ base/pub/talk/src/css/main.css | 23 +++++--- base/pub/talk/src/css/main.styl | 26 +++++---- .../src/js/components/StationComponent.coffee | 19 ++++++- .../src/js/components/WritingComponent.coffee | 6 +- base/pub/talk/src/js/main.js | 32 ++++++++++- 7 files changed, 156 insertions(+), 52 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index c85421bee..c03b7d1fd 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -274,12 +274,11 @@ }) } - if(window.ship) ship.innerText = urb.ship urb.foreign = /^\/~\/am/.test(window.location.pathname) urb.submit = function(){ 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) + @@ -298,17 +297,47 @@ ++ xml |% ++ login-page - %+ titl 'Log in' - ;= ;p: Please log in. - ;p.mono: ~;{span#ship(contenteditable "")} - ;input#pass(onchange "urb.submit()"); + %+ titl 'Log in :urbit' + ;= ;h1: Please log in + ;p.ship + ;div.sig: ~ + ;span#ship(contenteditable ""); + == + ;input#pass(type "password"); + ;script:''' + $(function() { + $ship = $('#ship') + $pass = $('#pass') + $ship.on('keydown', function(e) { + if(e.keyCode === 13 || e.keyCode === 9) { + $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() + } + }) + ''' ;pre:code#err; ;script@"/~/at/~/auth.js"; == :: ++ logout-page %+ titl 'Log out' - ;= ;p: Goodbye ~;{span#ship}. + ;= ;h1: Goodbye ~;{span#ship}. ;button#act(onclick "urb.away()"): Log out ;pre:code#err; ;script@"/~/at/~/auth.js"; @@ -331,7 +360,9 @@ |= [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}" diff --git a/base/lib/base.css b/base/lib/base.css index 69c5bb780..889ccb047 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; +#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; +} + +#ship, +input { + border: none; + padding: .3rem; + outline: none; + border-bottom: 3px solid #555; } diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 04e8b975a..8c88feb0d 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -317,16 +317,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; } @@ -509,12 +515,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; @@ -540,15 +543,17 @@ a { } #audi { display: inline-block; - background-color: #eee; margin-right: -0.2rem; + margin-bottom: 0.3rem; outline: none; overflow: hidden; max-width: 9rem; + 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 5c9f488e7..ca0a1f8c5 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -258,16 +258,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 @@ -463,13 +469,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 @@ -495,15 +497,17 @@ a #audi display inline-block - background-color #eee margin-right -.2rem + margin-bottom .3rem outline none overflow hidden max-width 9rem + 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 810d7d26c..89a05bd9b 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() diff --git a/base/pub/talk/src/js/components/WritingComponent.coffee b/base/pub/talk/src/js/components/WritingComponent.coffee index 5ea01eeb5..5091bc4e6 100644 --- a/base/pub/talk/src/js/components/WritingComponent.coffee +++ b/base/pub/talk/src/js/components/WritingComponent.coffee @@ -125,8 +125,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() @@ -138,10 +140,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 54aef09c6..d2d980c6d 100644 --- a/base/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -522,16 +522,37 @@ module.exports = recl({ } return $("#station-container").toggleClass('open'); }, + validateSource: function(s) { + if (this.state.configs[this.state.station].sources.indexOf(s) !== -1) { + return false; + } + if (s.length < 5) { + return false; + } + if (s[0] !== "~") { + return false; + } + if (s.indexOf("/") === -1) { + return false; + } + return true; + }, _keyUp: function(e) { var _sources, v; + $('.sour-ctrl .join').removeClass('valid-false'); if (e.keyCode === 13) { - v = this.$input.val(); - if (this.state.configs[this.state.station].sources.indexOf(v) === -1) { + v = this.$input.val().toLowerCase(); + if (v[0] !== "~") { + v = "~" + v; + } + if (this.validateSource(v)) { _sources = _.clone(this.state.configs[this.state.station].sources); _sources.push(v); StationActions.setSources(this.state.station, _sources); this.$input.val(''); return this.$input.blur(); + } else { + return $('.sour-ctrl .join').addClass('valid-false'); } } }, @@ -793,6 +814,9 @@ module.exports = recl({ if (v.length === 0) { return true; } + if (v.length < 5) { + return false; + } v = v.split(" "); for (i = 0, len = v.length; i < len; i++) { a = v[i]; @@ -807,6 +831,9 @@ module.exports = recl({ StationActions.setValidAudience(valid); if (valid === true) { v = $('#audi').text(); + if (v.length === 0) { + v = window.util.mainStationPath(window.urb.user); + } v = v.split(" "); for (k in v) { _v = v[k]; @@ -814,7 +841,6 @@ module.exports = recl({ v[k] = "~" + _v; } } - v = window.util.expandAudi(v); StationActions.setAudience(v); return v; } else { From 3610971c939b516926ca7ff344153af4817c5c26 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Sun, 17 May 2015 16:55:46 -0700 Subject: [PATCH 66/94] talker --- base/pub/talk/src/css/main.css | 12 ++++++------ base/pub/talk/src/css/main.styl | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 8c88feb0d..1681a4f34 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -102,6 +102,8 @@ input { } .time { font-weight: 200; + letter-spacing: 0.1rem; + color: #555; } #length, .audi, @@ -233,6 +235,7 @@ body { border-left: 16rem solid transparent; } #station-container #head .ship { + font-size: 0.9rem; font-weight: 400; } #station-container:hover #where { @@ -370,10 +373,6 @@ body { #messages .message.same .iden { display: none; } -#messages .message:hover .mess, -#messages .message:hover .attr { - color: #555; -} #messages .message:hover .type { color: #f04941; } @@ -428,8 +427,9 @@ a { content: "~"; } .type.private:before { - content: "╿"; - font-size: 0.8rem; + content: "•"; + font-size: 1rem; + line-height: 0.7rem; } .type.public:before { content: "▒"; diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index ca0a1f8c5..3f84242f8 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 @@ -173,6 +175,7 @@ body border-left 16rem solid transparent #station-container #head .ship + font-size .9rem font-weight 400 #station-container:hover #where @@ -319,10 +322,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) @@ -378,8 +377,9 @@ a content "~" .type.private:before - content "╿" - font-size .8rem + content "•" + font-size 1rem + line-height .7rem .type.public:before content "▒" From 4d9c60d57ae4e6e0e8c382d2135e3e2a0533e9ed Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sun, 17 May 2015 18:56:59 -0700 Subject: [PATCH 67/94] Sync base to kids in capital ships. --- base/arvo/clay.hoon | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index 25c93445f..b416863ea 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -2439,10 +2439,15 @@ :: %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) From 1f17f998527ce633aa61e3dbf344346f3f16ca64 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sun, 17 May 2015 19:34:05 -0700 Subject: [PATCH 68/94] Various fixes and improvements. --- base/ape/octo/core.hook | 2 +- base/ape/talk/core.hook | 54 ++++++++++++++++++++++++----------------- base/ape/ucto/core.hook | 33 +++++++++++++------------ base/arvo/clay.hoon | 2 +- base/arvo/gall.hoon | 14 ++++++++--- base/lib/drum/core.hook | 26 +++++++++----------- 6 files changed, 74 insertions(+), 57 deletions(-) diff --git a/base/ape/octo/core.hook b/base/ape/octo/core.hook index 1b6a2c61b..aae642bf5 100644 --- a/base/ape/octo/core.hook +++ b/base/ape/octo/core.hook @@ -151,7 +151,7 @@ ++ poke-sole-action :: console input |= [from act=sole-action] =< abet :: (work:(flet +<-) act) :: -++ poke-octo-move +++ poke-octo-move |= [from wha=point] =< abet =^ dud gam ~(m ~(at go gam) wha) ?> dud diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index 458c8eb8d..db413874c 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -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) @@ -1709,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 pax=path] ^- [(list move) _+>] - :: ~& [%talk-pull src ost pax] - =^ 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..b7d04845f 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 - :: ::::::::::::::: +:: :: :: +:::: :: :: hooks + :: :: :: ++ peer-sole :: console subscribe |= [from *] =< abet :: (plow:(fret +<-) %2 ~) :: diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index b416863ea..438c1e888 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -2648,7 +2648,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" diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 23942c444..6ad9d24a7 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -236,8 +236,7 @@ ?- why %peer (mo-give %unto %reap tug) %poke (mo-give %unto %coup tug) - %pull ~& [%pull-fail tug] - +>.$ + %pull +>.$ == :: ++ mo-bale :: assign outbone @@ -410,6 +409,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 @@ -478,7 +478,14 @@ =+ 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) @@ -698,7 +705,6 @@ =+ pux=((soft path) +>.q.vax) ?. &(?=(^ pux) (levy u.pux (sane %ta))) [%| (ap-suck "peer: malformed path")] - ~& [%ap-move-peer-path p.p.yep] :^ %& sto %pass :- p.p.yep [%send q.p.yep r.p.yep %peer u.pux] diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook index 498071406..ccaa9d83a 100644 --- a/base/lib/drum/core.hook +++ b/base/lib/drum/core.hook @@ -207,7 +207,7 @@ =+ gyl=(drum-phat way) ?~ saw (se-join gyl) - (se-dump:(se-diss gyl) u.saw) + (se-dump:(se-drop & gyl) u.saw) :: ++ take-coup :: |= [way=wire saw=(unit tang)] @@ -216,7 +216,7 @@ =+ gyl=(drum-phat way) ?: (se-aint gyl) +>.$ ~& [%drum-coup-fail src ost gyl u.saw] - (se-dump:(se-diss gyl) u.saw) + (se-dump:(se-drop & gyl) u.saw) :: ++ take-onto :: |= [way=wire saw=(each suss tang)] @@ -236,7 +236,7 @@ =< se-abet =< se-view =+ gyl=(drum-phat way) ~& [%drum-quit src ost gyl] - (se-drop gyl) + (se-drop %| gyl) :: :: :: :::: :: :: :: :: :: @@ -336,10 +336,6 @@ (se-text "[already running {}/{}]") +>(ray (~(put in ray) wel)) :: - ++ se-diss :: with prejudice - |= gyl=gill - (se-drop(eel (~(del in eel) gyl)) gyl) - :: ++ se-dump :: print tanks |= tac=(list tank) ^+ +> @@ -349,11 +345,16 @@ $(wol t.wol, +>.^$ (se-blit %out (tuba i.wol))) :: ++ se-drop :: disconnect - |= gyl=gill + |= [pej=? gyl=gill] ^+ +> - ?. (~(has by fug) gyl) +> + =+ lag=se-agon + ?. (~(has by fug) gyl) +>.$ =. fug (~(del by fug) gyl) - =. +> (se-text "[detached from {}]") + =. 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 @@ -374,10 +375,7 @@ ++ se-nuke :: teardown |= gyl=gill ^+ +> - =+ lag=se-agon - =. +>.$ (se-diss:(se-pull(liv.maz |) gyl) gyl) - ?. &(?=(^ lag) !=(gyl u.lag)) +>.$ - (se-alas u.lag) + (se-drop:(se-pull(liv.maz |) gyl) & gyl) :: ++ se-like :: act in master |= kus=ukase From 925196bc5d0736c4250a1783b9110c954f1d0e24 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sun, 17 May 2015 20:26:38 -0700 Subject: [PATCH 69/94] Alas, too hasty a fix. --- base/arvo/clay.hoon | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index 438c1e888..a5ad2881b 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -2445,8 +2445,9 @@ ?: =(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]~ + ~ + :: ?. ?=(?(%king %czar) can) ~ + :: [hen %pass / %c %font p.q.hic %kids p.q.hic %base]~ == :: %info From 4fc95723e7d3e38ee62d3e2c70d6c78af8dccdc8 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Sun, 17 May 2015 20:51:17 -0700 Subject: [PATCH 70/94] Various fixes and unimprovements. --- base/arvo/gall.hoon | 5 ++++- base/lib/drum/core.hook | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 6ad9d24a7..9c1790dbd 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -133,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) diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook index ccaa9d83a..7d1f71de0 100644 --- a/base/lib/drum/core.hook +++ b/base/lib/drum/core.hook @@ -254,7 +254,8 @@ =+ yar=(~(tap by ray)) |- ^+ +> ?~ yar +> - ?: (~(has by fur) q.i.yar) $(yar t.yar) + =+ hig=(~(get by fur) q.i.yar) + ?: &(?=(^ hig) ?=(^ u.hig) =(p.i.yar syd.u.u.hig)) $(yar t.yar) %= $ yar t.yar +> From cf6962abad9bfe8af311acabc461d4bf03b9ad6d Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 18 May 2015 12:51:33 -0700 Subject: [PATCH 71/94] New protocol 7 for breach. --- base/arvo/ames.hoon | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/base/arvo/ames.hoon b/base/arvo/ames.hoon index 7980a6312..56b37e712 100644 --- a/base/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -457,7 +457,7 @@ vix=(bex +((cut 0 [25 2] mag))) :: width of sender tay=(cut 0 [27 5] mag) :: message type == - ?> =(6 vez) + ?> =(7 vez) ?> =(chk (end 0 20 (mug bod))) :+ [(end 3 wix bod) (cut 3 [wix vix] bod)] (kins tay) @@ -477,7 +477,7 @@ =+ tay=(ksin q.kec) %+ mix %+ can 0 - :~ [3 6] + :~ [3 7] [20 (mug bod)] [2 yax] [2 qax] @@ -1060,7 +1060,7 @@ ++ gnaw :: gnaw:am |= [kay=cape ryn=lane pac=rock] :: process packet ^- [p=(list boon) q=fort] - ?. =(6 (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) From a7e98574de8cdd5d432124e179c81199229cb4bf Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 13:35:53 -0700 Subject: [PATCH 72/94] 0vtest dephash for node testing --- base/arvo/ford.hoon | 1 + 1 file changed, 1 insertion(+) diff --git a/base/arvo/ford.hoon b/base/arvo/ford.hoon index 1d1637291..ae989eaac 100644 --- a/base/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -230,6 +230,7 @@ |= dep=@uvH ?~ dep ~&(dep-empty/hen +>.$) + ?: =(dep 0vtest) :_(mow [hen %give %news ~]) :: upstream testing =+ dap=(~(get by deh.bay) dep) ?~ dap ~&(dep-missed/dep +>.$) :: XX ~| !! :: ~& awap/[dep u.dap] From fcaf1c7d0629bb068cfdfa3d78f3dd42dc662d88 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 13:35:53 -0700 Subject: [PATCH 73/94] 0vtest dephash for node testing --- base/arvo/ford.hoon | 1 + 1 file changed, 1 insertion(+) diff --git a/base/arvo/ford.hoon b/base/arvo/ford.hoon index 053a07181..ce0a6432e 100644 --- a/base/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -230,6 +230,7 @@ |= dep=@uvH ?~ dep ~&(dep-empty/hen +>.$) + ?: =(dep 0vtest) :_(mow [hen %give %news ~]) :: upstream testing =+ dap=(~(get by deh.bay) dep) ?~ dap ~&(dep-missed/dep +>.$) :: XX ~| !! :: ~& awap/[dep u.dap] From c8422ac0e3b666855a00cf6872c763fa644ec3e6 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 13:44:10 -0700 Subject: [PATCH 74/94] add 0vtest try2 --- base/arvo/ford.hoon | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/arvo/ford.hoon b/base/arvo/ford.hoon index ae989eaac..99cb93510 100644 --- a/base/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -230,7 +230,8 @@ |= dep=@uvH ?~ dep ~&(dep-empty/hen +>.$) - ?: =(dep 0vtest) :_(mow [hen %give %news ~]) :: upstream testing + ?: =(dep 0vtest) :: upstream testing + +>.$(mow :_(mow [hen %give %news ~])) =+ dap=(~(get by deh.bay) dep) ?~ dap ~&(dep-missed/dep +>.$) :: XX ~| !! :: ~& awap/[dep u.dap] From 3e18602fc708d572c1a96b90d80bad89d8a146cc Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 13:44:10 -0700 Subject: [PATCH 75/94] add 0vtest try2 --- base/arvo/ford.hoon | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/arvo/ford.hoon b/base/arvo/ford.hoon index ce0a6432e..26a197661 100644 --- a/base/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -230,7 +230,8 @@ |= dep=@uvH ?~ dep ~&(dep-empty/hen +>.$) - ?: =(dep 0vtest) :_(mow [hen %give %news ~]) :: upstream testing + ?: =(dep 0vtest) :: upstream testing + +>.$(mow :_(mow [hen %give %news ~])) =+ dap=(~(get by deh.bay) dep) ?~ dap ~&(dep-missed/dep +>.$) :: XX ~| !! :: ~& awap/[dep u.dap] From 6ef4246c1938abcbd96bc8e1c279fea278e49322 Mon Sep 17 00:00:00 2001 From: Philip C Monk Date: Mon, 18 May 2015 16:52:16 -0400 Subject: [PATCH 76/94] deleted old %gall apps --- base/fap/bang/core.hook | 21 - base/fap/began/core.hook | 58 - base/fap/begin/core.hook | 442 ------ base/fap/cat/core.hook | 35 - base/fap/chat/core.hook | 496 ------- base/fap/code/core.hook | 9 - base/fap/cp/core.hook | 18 - base/fap/curl/core.hook | 20 - base/fap/dojo/core.hook | 740 --------- base/fap/gnab/core.hook | 21 - base/fap/grep/core.hook | 66 - base/fap/helm/core.hook | 505 ------- base/fap/hi/core.hook | 50 - base/fap/into/core.hook | 19 - base/fap/label/core.hook | 13 - base/fap/ls/core.hook | 17 - base/fap/ls/subdir.hoon | 20 - base/fap/matrix/hymn.hook | 165 --- base/fap/mv/core.hook | 17 - base/fap/nop/core.hook | 1 - base/fap/peek/core.hook | 34 - base/fap/poke/core.hook | 30 - base/fap/pope/core.hook | 47 - base/fap/reboot/core.hook | 37 - base/fap/reload/core.hook | 30 - base/fap/reset/core.hook | 38 - base/fap/rm/core.hook | 18 - base/fap/shell/core.hook | 569 ------- base/fap/sole/core.hook | 643 -------- base/fap/solid/core.hook | 41 - base/fap/sync/core.hook | 16 - base/fap/talk/core.hook | 1897 ------------------------ base/fap/tease/core.hook | 28 - base/fap/terminal/core.hook | 306 ---- base/fap/terminal/hymn.hook | 33 - base/fap/terminal/hymn/script.js | 104 -- base/fap/terminal/hymn/style.css | 54 - base/fap/test/app.js | 73 - base/fap/test/core.hook | 334 ----- base/fap/test/front/hymn.hook | 31 - base/fap/test/style.css | 82 - base/fap/ticket/core.hook | 24 - base/fap/time/core.hook | 11 - base/fap/tree/core.hook | 26 - base/fap/tweet/core.hook | 13 - base/fap/twit/core.hook | 217 --- base/fap/twit/hoontap-keys.hoon | 4 - base/fap/twitter-auth/core.hook | 34 - base/fap/twitter-auth/hoontap-keys.txt | 5 - base/fap/twitter-feed/core.hook | 22 - base/fap/type/core.hook | 19 - base/fap/unsync/core.hook | 16 - base/fap/verb/core.hook | 12 - base/fap/wipe/core.hook | 13 - base/fap/ye/core.hook | 42 - 55 files changed, 7636 deletions(-) delete mode 100644 base/fap/bang/core.hook delete mode 100644 base/fap/began/core.hook delete mode 100644 base/fap/begin/core.hook delete mode 100644 base/fap/cat/core.hook delete mode 100644 base/fap/chat/core.hook delete mode 100644 base/fap/code/core.hook delete mode 100644 base/fap/cp/core.hook delete mode 100644 base/fap/curl/core.hook delete mode 100644 base/fap/dojo/core.hook delete mode 100644 base/fap/gnab/core.hook delete mode 100644 base/fap/grep/core.hook delete mode 100644 base/fap/helm/core.hook delete mode 100644 base/fap/hi/core.hook delete mode 100644 base/fap/into/core.hook delete mode 100644 base/fap/label/core.hook delete mode 100644 base/fap/ls/core.hook delete mode 100644 base/fap/ls/subdir.hoon delete mode 100644 base/fap/matrix/hymn.hook delete mode 100644 base/fap/mv/core.hook delete mode 100644 base/fap/nop/core.hook delete mode 100644 base/fap/peek/core.hook delete mode 100644 base/fap/poke/core.hook delete mode 100644 base/fap/pope/core.hook delete mode 100644 base/fap/reboot/core.hook delete mode 100644 base/fap/reload/core.hook delete mode 100644 base/fap/reset/core.hook delete mode 100644 base/fap/rm/core.hook delete mode 100644 base/fap/shell/core.hook delete mode 100644 base/fap/sole/core.hook delete mode 100644 base/fap/solid/core.hook delete mode 100644 base/fap/sync/core.hook delete mode 100644 base/fap/talk/core.hook delete mode 100644 base/fap/tease/core.hook delete mode 100644 base/fap/terminal/core.hook delete mode 100644 base/fap/terminal/hymn.hook delete mode 100644 base/fap/terminal/hymn/script.js delete mode 100644 base/fap/terminal/hymn/style.css delete mode 100644 base/fap/test/app.js delete mode 100644 base/fap/test/core.hook delete mode 100644 base/fap/test/front/hymn.hook delete mode 100644 base/fap/test/style.css delete mode 100644 base/fap/ticket/core.hook delete mode 100644 base/fap/time/core.hook delete mode 100644 base/fap/tree/core.hook delete mode 100644 base/fap/tweet/core.hook delete mode 100644 base/fap/twit/core.hook delete mode 100644 base/fap/twit/hoontap-keys.hoon delete mode 100644 base/fap/twitter-auth/core.hook delete mode 100644 base/fap/twitter-auth/hoontap-keys.txt delete mode 100644 base/fap/twitter-feed/core.hook delete mode 100644 base/fap/type/core.hook delete mode 100644 base/fap/unsync/core.hook delete mode 100644 base/fap/verb/core.hook delete mode 100644 base/fap/wipe/core.hook delete mode 100644 base/fap/ye/core.hook 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 708cd7d93..000000000
--- a/base/fap/talk/core.hook
+++ /dev/null
@@ -1,1897 +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) _+>]
-  ::  ~&  [%talk-poke-command her cod]
-  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}")) -:: --- From 1df8566df316d3f2ab918d6e3fb499a3275147f8 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 14:19:13 -0700 Subject: [PATCH 77/94] set ship cookie --- base/arvo/eyre.hoon | 129 ++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 65 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 4224d83ab..581920319 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -116,7 +116,7 @@ ++ perk-auth :: parsed auth $% [%at p=pork] :: inject auth [%del p=(unit ship)] - [%get him=ship rem=pork] + [%get him=(unit ship) rem=pork] [%js ~] [%json ~] [%try him=ship cod=cord] @@ -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] @@ -276,11 +277,12 @@ }) } + if(window.ship) ship.innerText = urb.ship urb.foreign = /^\/~\/am/.test(window.location.pathname) urb.submit = function(){ req( "/~/auth.json?PUT", - {ship:ship.innerText.toLowerCase(), code:pass.value}, + {ship: ship.innerText, code: pass.value}, function(){ if(urb.foreign) document.location = document.location.hash.match(/#[^?]+/)[0].slice(1) + @@ -321,47 +323,17 @@ ++ xml |% ++ login-page - %+ titl 'Log in :urbit' - ;= ;h1: Please log in - ;p.ship - ;div.sig: ~ - ;span#ship(contenteditable ""); - == - ;input#pass(type "password"); - ;script:''' - $(function() { - $ship = $('#ship') - $pass = $('#pass') - $ship.on('keydown', function(e) { - if(e.keyCode === 13 || e.keyCode === 9) { - $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() - } - }) - ''' + %+ titl 'Log in' + ;= ;p: Please log in. + ;p.mono: ~;{span#ship} + ;input#pass(onchange "urb.submit()"); ;pre:code#err; ;script@"/~/at/~/auth.js"; == :: ++ logout-page %+ titl 'Log out' - ;= ;h1: Goodbye ~;{span#ship}. + ;= ;p: Goodbye ~;{span#ship}. ;button#act(onclick "urb.away()"): Log out ;pre:code#err; ;script@"/~/at/~/auth.js"; @@ -384,9 +356,7 @@ |= [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}" @@ -838,8 +808,10 @@ [[%'PUT' ~] ~] %put == |- - ?: ?=([%'~~' *] q.pok) :: auth shortcut + ?: ?=([%'~~' *] q.pok) :: auth shortcuts $(q.pok ['~' %as %own t.q.pok]) + ?: ?=([%'_' *] q.pok) + $(q.pok ['~' %as %any t.q.pok]) ?. ?=([%'~' @ *] q.pok) ~ :- ~ ^- perk =* pef i.t.q.pok @@ -854,9 +826,10 @@ ~| bad-ship/?~(but ~ i.but) ?~ but !! :_ pok(q t.but) - ?+ i.but (slav %p i.but) - %anon anon - %own our + ?+ i.but `(slav %p i.but) + %anon `anon + %own `our + %any ~ == :: %on @@ -1014,18 +987,24 @@ :: %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)) - =. ..ya abet.yac(him him.ham) + ?~ him.ham + =+ him=(ship-from-cookies maf) + ?^ him $(him.ham him) + (show-ship-selection) + =* him u.him.ham + ?: |(=(anon him) (~(has in aut.yac) him)) + =. ..ya abet.yac(him him) =+ pez=process(pok rem.ham, aut &) ?: ?=(%| -.pez) pez [%| (resolve ~ p.pez)] - ?. =(our him.ham) - [%| ((teba foreign-auth.yac) him.ham hat rem.ham quy)] + ?. =(our him) + [%| ((teba foreign-auth.yac) him hat rem.ham quy)] (show-login-page ~) :: %try @@ -1035,6 +1014,7 @@ ?. =(load-secret cod.ham) ~|(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) == :: @@ -1050,7 +1030,31 @@ =. ..ya abet.yac [%| (give-html 401 cug.yac login-page:xml)] :: + ++ show-ship-selection + |= ~ + ~| %ship-selection-unimplemented + !! + :: ++ 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)) :: @@ -1070,7 +1074,6 @@ ++ new-cyst |= ses=hole =* sec p.hat - =+ pef=cookie-prefix ^- cyst :* ^- cred :* hat(p sec) @@ -1085,11 +1088,7 @@ == [anon ~] :: - :_ ~ - %^ cat 3 - (cat 3 (cat 3 pef '=') ses) - :: (cat 3 '; HttpOnly' ?.(sec '' '; Secure')) - '; Path=/; HttpOnly' + [(set-cookie cookie-prefix ses)]~ :: now ~ From 759106d25a91a0bf3d9a3ff7d6de4891e786c1a3 Mon Sep 17 00:00:00 2001 From: Philip C Monk Date: Mon, 18 May 2015 17:32:14 -0400 Subject: [PATCH 78/94] more cleanup --- base/mar/cat-args/door.hook | 11 ------ base/mar/cp-args/door.hook | 12 ------ base/mar/demo-args/door.hook | 12 ------ base/mar/grep-args/door.hook | 11 ------ base/mar/hi-args/door.hook | 12 ------ base/mar/into-args/door.hook | 12 ------ base/mar/ls-args/door.hook | 11 ------ base/mar/mv-args/door.hook | 12 ------ base/mar/reload-args/door.hook | 12 ------ base/mar/rm-args/door.hook | 12 ------ base/mar/solid-args/door.hook | 12 ------ base/mar/sync-args/door.hook | 15 ------- base/mar/term-in/door.hook | 21 ---------- base/mar/term-line/door.hook | 27 ------------- base/mar/ticket-args/door.hook | 15 ------- base/mar/unsync-args/door.hook | 15 ------- base/mar/verb-args/door.hook | 15 ------- base/mar/write-args/door.hook | 12 ------ base/mar/zing/door.hook | 12 ------ base/mar/zong/door.hook | 34 ---------------- base/mar/zongs/door.hook | 72 ---------------------------------- base/mar/zung/door.hook | 34 ---------------- 22 files changed, 401 deletions(-) delete mode 100644 base/mar/cat-args/door.hook delete mode 100644 base/mar/cp-args/door.hook delete mode 100644 base/mar/demo-args/door.hook delete mode 100644 base/mar/grep-args/door.hook delete mode 100644 base/mar/hi-args/door.hook delete mode 100644 base/mar/into-args/door.hook delete mode 100644 base/mar/ls-args/door.hook delete mode 100644 base/mar/mv-args/door.hook delete mode 100644 base/mar/reload-args/door.hook delete mode 100644 base/mar/rm-args/door.hook delete mode 100644 base/mar/solid-args/door.hook delete mode 100644 base/mar/sync-args/door.hook delete mode 100644 base/mar/term-in/door.hook delete mode 100644 base/mar/term-line/door.hook delete mode 100644 base/mar/ticket-args/door.hook delete mode 100644 base/mar/unsync-args/door.hook delete mode 100644 base/mar/verb-args/door.hook delete mode 100644 base/mar/write-args/door.hook delete mode 100644 base/mar/zing/door.hook delete mode 100644 base/mar/zong/door.hook delete mode 100644 base/mar/zongs/door.hook delete mode 100644 base/mar/zung/door.hook 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/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/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))) - == - == - -- --- - From 27c136ccc4e727466f1182600bf6b15114df5902 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 14:34:46 -0700 Subject: [PATCH 79/94] fix /~~/~/at regression --- base/arvo/eyre.hoon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 581920319..c6ccc7f2c 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -971,7 +971,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 !!) From b270089909661526dfff6f24239307cdf3c59c47 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 14:34:46 -0700 Subject: [PATCH 80/94] fix /~~/~/at regression --- base/arvo/eyre.hoon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index 5f9cbb4c1..1ac4b1956 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -967,7 +967,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 !!) From e9ce5810c5b960c13785f15dff2ae93a53390fbe Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Sun, 17 May 2015 13:27:59 -0700 Subject: [PATCH 81/94] login css, talk details Conflicts: urb/zod/base/arvo/eyre.hoon --- base/arvo/eyre.hoon | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index c6ccc7f2c..cbb45caa8 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -277,12 +277,11 @@ }) } - if(window.ship) ship.innerText = urb.ship urb.foreign = /^\/~\/am/.test(window.location.pathname) urb.submit = function(){ 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) + @@ -323,17 +322,47 @@ ++ xml |% ++ login-page - %+ titl 'Log in' - ;= ;p: Please log in. - ;p.mono: ~;{span#ship} - ;input#pass(onchange "urb.submit()"); + %+ titl 'Log in :urbit' + ;= ;h1: Please log in + ;p.ship + ;div.sig: ~ + ;span#ship; + == + ;input#pass(type "password"); + ;script:''' + $(function() { + $ship = $('#ship') + $pass = $('#pass') + $ship.on('keydown', function(e) { + if(e.keyCode === 13 || e.keyCode === 9) { + $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() + } + }) + ''' ;pre:code#err; ;script@"/~/at/~/auth.js"; == :: ++ logout-page %+ titl 'Log out' - ;= ;p: Goodbye ~;{span#ship}. + ;= ;h1: Goodbye ~;{span#ship}. ;button#act(onclick "urb.away()"): Log out ;pre:code#err; ;script@"/~/at/~/auth.js"; @@ -356,7 +385,9 @@ |= [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}" From 4ee24972621caefaa49625033f3adeb9c5ccb01a Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 17:05:31 -0700 Subject: [PATCH 82/94] /_ /~/as/any works if ship= cookie already set --- base/arvo/eyre.hoon | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index cbb45caa8..c93731e28 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -119,7 +119,7 @@ [%get him=(unit ship) rem=pork] [%js ~] [%json ~] - [%try him=ship cod=cord] + [%try him=ship paz=(unit cord)] [%xen ses=hole rem=pork] == :: @@ -278,17 +278,25 @@ } urb.foreign = /^\/~\/am/.test(window.location.pathname) + urb.redir = function(){ + 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}, + urb.redir) + } urb.submit = function(){ req( "/~/auth.json?PUT", {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() }) } @@ -387,7 +395,8 @@ ;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"); + ;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}" @@ -917,7 +926,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 @@ -1042,7 +1051,9 @@ :- %| ?. =(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))) @@ -1058,8 +1069,10 @@ ?: (~(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:(fall - *cyst)) 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)] :: ++ show-ship-selection |= ~ @@ -1109,7 +1122,8 @@ :* ^- 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])) @@ -1152,7 +1166,7 @@ %- give-thou:abet (add-cookies cug [307 [location/(crip url)]~ ~]) :: - ++ logon + ++ logon |= her=ship %_ +> him her From 4acbaa26706b56b001743dbf28948b19f4b18d7a Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Mon, 18 May 2015 17:59:40 -0700 Subject: [PATCH 83/94] SSo v1 --- base/arvo/eyre.hoon | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index c93731e28..3b3fa05c8 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -278,8 +278,10 @@ } urb.foreign = /^\/~\/am/.test(window.location.pathname) - urb.redir = function(){ - document.location = + 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\/[^/]+/, @@ -289,7 +291,7 @@ if(urb.foreign && urb.auth.indexOf(urb.ship) !== -1){ req("/~/auth.json?PUT", {ship:urb.ship,code:null}, - urb.redir) + function(){urb.redir()}) } urb.submit = function(){ req( @@ -376,6 +378,13 @@ ;script@"/~/at/~/auth.js"; == :: + ++ logside-page + %+ titl 'Verify identify' + ;= ;h1: You are ~;{span#ship(contenteditable "")} + ;button#act(onclick "urb.redir(ship.innerHTML)"): Go + ;pre:code#err; + ;script@"/~/at/~/auth.js"; + == ++ poke-test %+ titl 'Poke' ;= ;button(onclick "urb.testPoke('/~/to/hi/txt.json')"): Hi anonymous @@ -1077,7 +1086,7 @@ ++ show-ship-selection |= ~ ~| %ship-selection-unimplemented - !! + [%& %htme logside-page:xml] :: ++ cookie-prefix (rsh 3 1 (scot %p our)) ++ cookie-domain From 8d5d2f0b32e530e5e6f37f5144219ace600a827c Mon Sep 17 00:00:00 2001 From: Philip C Monk Date: Mon, 18 May 2015 21:16:32 -0400 Subject: [PATCH 84/94] fixed :+mass --- base/ape/hood/core.hook | 4 ++ base/arvo/dill.hoon | 99 +++++++++++++++++++++++++++++++---------- base/arvo/gall.hoon | 8 ++++ base/arvo/zuse.hoon | 9 +++- base/lib/helm/core.hook | 5 +++ 5 files changed, 100 insertions(+), 25 deletions(-) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index 897fb5798..f8eac35dd 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -74,6 +74,10 @@ |= [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)) +<+)) diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index e1cc7d7f2..f14fc189d 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,7 @@ %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 %veer (dump kyz) %vega (dump kyz) %verb (dump kyz) @@ -179,6 +181,19 @@ (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 ram] =+ myt=(flop (need tem)) @@ -227,6 +242,9 @@ |= sih=sign ^+ +> ?- sih + [?(%a %c %e %f %g %t) %mass *] + (wegt -.sih p.sih) + :: [%a %nice *] :: ~& [%take-nice-ames sih] +> @@ -274,6 +292,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 @@ -317,6 +367,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) @@ -342,7 +394,9 @@ ~ :: ++ load :: trivial - |= old=axle + |= old=all-axle + ?: ?=(%2 -.old) + $(old [%3 ore hey dug ~ ~ ~ ~ ~ ~]:old) ..^$(all old) :: |= old=* :: diable :: ..^$(ore.all `~zod) @@ -375,4 +429,3 @@ [moz ..^$] -- -:: good test diff --git a/base/arvo/gall.hoon b/base/arvo/gall.hoon index 9c1790dbd..801b89daa 100644 --- a/base/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -1035,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/zuse.hoon b/base/arvo/zuse.hoon index faea73c7b..dbc7e16cc 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,6 +2392,7 @@ [%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 @@ -2522,7 +2525,7 @@ ++ cush (pair term club) :: internal kiss ++ dude term :: server identity ++ scup (pair ship desk) :: autoupdate -++ well (pair desk term) +++ well (pair desk term) :: ++ suss (trel dude ,@tas ,@da) :: config report :::: :: ++ kiss-gall :: incoming request @@ -2531,9 +2534,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/lib/helm/core.hook b/base/lib/helm/core.hook index b3b9ef60d..c0af457ff 100644 --- a/base/lib/helm/core.hook +++ b/base/lib/helm/core.hook @@ -77,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) @@ -84,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)) From 7331650ae28e7dfa4aa95bad3eb65b0ab9894aa8 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 18 May 2015 21:27:39 -0700 Subject: [PATCH 85/94] Fixed starting an app with # *. --- base/ape/hood/core.hook | 4 ++++ base/ape/octo/core.hook | 31 +++++++++++++++---------------- base/ape/ucto/core.hook | 2 +- base/lib/drum/core.hook | 6 +++--- base/lib/sole/core.hook | 4 +++- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/base/ape/hood/core.hook b/base/ape/hood/core.hook index f8eac35dd..f73c83de8 100644 --- a/base/ape/hood/core.hook +++ b/base/ape/hood/core.hook @@ -122,6 +122,10 @@ |= [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 +<+)) diff --git a/base/ape/octo/core.hook b/base/ape/octo/core.hook index aae642bf5..3b4af5bb7 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 @@ -146,17 +146,16 @@ ?^ but (park %2 ~) :: [~ %& !who src] (park:(link src !who) %2 `"link by {}") :: ++ 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 ~) :: diff --git a/base/ape/ucto/core.hook b/base/ape/ucto/core.hook index b7d04845f..a22146447 100644 --- a/base/ape/ucto/core.hook +++ b/base/ape/ucto/core.hook @@ -106,7 +106,7 @@ =+ pals |- ^+ +>.^$ ?~ +< +>.^$ :: $(+< t.+<, +>.^$ (~(plow et i.+<) lev mus)) :: :: :: :: -:::: :: :: hooks +:::: :: :: events :: :: :: ++ peer-sole :: console subscribe |= [from *] =< abet :: diff --git a/base/lib/drum/core.hook b/base/lib/drum/core.hook index 7d1f71de0..506fc4e94 100644 --- a/base/lib/drum/core.hook +++ b/base/lib/drum/core.hook @@ -199,7 +199,7 @@ ++ poke-start :: |= wel=well =< se-abet =< se-view - +>(ray (~(put in ray) wel)) + (se-born wel) :: ++ reap :: |= [way=wire saw=(unit tang)] @@ -255,7 +255,7 @@ |- ^+ +> ?~ yar +> =+ hig=(~(get by fur) q.i.yar) - ?: &(?=(^ hig) ?=(^ u.hig) =(p.i.yar syd.u.u.hig)) $(yar t.yar) + ?: &(?=(^ hig) |(?=(~ u.hig) =(p.i.yar syd.u.u.hig))) $(yar t.yar) %= $ yar t.yar +> @@ -335,7 +335,7 @@ ^+ +> ?: (~(has in ray) wel) (se-text "[already running {}/{}]") - +>(ray (~(put in ray) wel)) + +>(ray (~(put in ray) wel), eel (~(put in eel) [our q.wel])) :: ++ se-dump :: print tanks |= tac=(list tank) diff --git a/base/lib/sole/core.hook b/base/lib/sole/core.hook index 0f082cf1f..a406dda21 100644 --- a/base/lib/sole/core.hook +++ b/base/lib/sole/core.hook @@ -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) From 9110f4cc3e49a23b654fb9707f2738f35b35b6d8 Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Mon, 18 May 2015 21:31:30 -0700 Subject: [PATCH 86/94] Change talk prompt. --- base/ape/talk/core.hook | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index db413874c..d7b39990a 100644 --- a/base/ape/talk/core.hook +++ b/base/ape/talk/core.hook @@ -237,8 +237,8 @@ ^- tape =+ ^= rew ^- (pair (pair ,@t ,@t) (set partner)) ?~ active.she - [['(' ')'] passive.she] - [['[' ']'] u.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 ' ' ~]) :: From 2f34a2eeff31abc4f5b7e937dd7d0409e25146c9 Mon Sep 17 00:00:00 2001 From: Philip C Monk Date: Tue, 19 May 2015 14:28:41 -0400 Subject: [PATCH 87/94] added the :+mass cat --- base/cat/hood/mass/gate.hook | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 base/cat/hood/mass/gate.hook 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 ~] From b8abf5b9d131f62d2375706d4de528a94d4d1d55 Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Tue, 19 May 2015 11:26:45 -0700 Subject: [PATCH 88/94] disenterminalize /got gram +-got --- base/arvo/eyre.hoon | 3 +++ 1 file changed, 3 insertions(+) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index a6af657b0..a0dcdefe2 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -504,6 +504,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.u.mez + +>.$ =: hen (~(got by pox) p.u.mez) pox (~(del by pox) p.u.mez) == From d5e4dcaa28e3d84a56c46f2b9fab716a833e18f3 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Tue, 19 May 2015 11:36:34 -0700 Subject: [PATCH 89/94] login redir fix --- base/arvo/eyre.hoon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/arvo/eyre.hoon b/base/arvo/eyre.hoon index a6af657b0..64e38cf00 100644 --- a/base/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -298,7 +298,7 @@ "/~/auth.json?PUT", {ship:ship.innerText.toLowerCase(), code:pass.value}, function(){ - if(!urb.foreign) urb.redir() + if(urb.foreign) urb.redir() else document.location.reload() }) } From 6843bd4e04e314c2ad327a13ace3d2f0f263605c Mon Sep 17 00:00:00 2001 From: "C. Guy Yarvin" Date: Tue, 19 May 2015 11:38:23 -0700 Subject: [PATCH 90/94] -T for autoboot. --- base/ape/talk/core.hook | 10 +++++----- base/arvo/dill.hoon | 22 ++++++++++++++++++++++ base/arvo/zuse.hoon | 1 + 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/base/ape/talk/core.hook b/base/ape/talk/core.hook index d7b39990a..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 @@ -237,8 +237,8 @@ ^- tape =+ ^= rew ^- (pair (pair ,@t ,@t) (set partner)) ?~ active.she - [[')' '('] passive.she] - [[']' '['] u.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 ' ' ~]) :: diff --git a/base/arvo/dill.hoon b/base/arvo/dill.hoon index f14fc189d..923657edb 100644 --- a/base/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -136,6 +136,28 @@ (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) diff --git a/base/arvo/zuse.hoon b/base/arvo/zuse.hoon index dbc7e16cc..b76695f44 100644 --- a/base/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -2396,6 +2396,7 @@ [%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] :: From 8d76510d5ff55a8d9171712acc2a24bf308d4788 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Tue, 19 May 2015 11:54:48 -0700 Subject: [PATCH 91/94] octo css + some extras --- base/lib/base.css | 4 ++-- base/pub/octo/fab/hymn.hook | 16 +++++++++++++++- base/pub/octo/src/main.css | 29 +++++++++++++++++++++++++++-- base/pub/octo/src/main.js | 3 +++ base/pub/talk/fab/hymn.hook | 2 +- 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/base/lib/base.css b/base/lib/base.css index 889ccb047..a9e53fe12 100644 --- a/base/lib/base.css +++ b/base/lib/base.css @@ -144,7 +144,7 @@ button { vertical-align: middle; } -#ship { +span#ship { font-family: 'bau'; font-weight: 400; font-size: 1.2rem; @@ -159,7 +159,7 @@ input { display: inline; } -#ship, +span#ship, input { border: none; padding: .3rem; diff --git a/base/pub/octo/fab/hymn.hook b/base/pub/octo/fab/hymn.hook index 89d4b9cf4..3c109c15e 100644 --- a/base/pub/octo/fab/hymn.hook +++ b/base/pub/octo/fab/hymn.hook @@ -8,10 +8,24 @@ ;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"); + ;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 :urbit == ;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 fd6b6c3c2..b38891741 100644 --- a/base/pub/octo/src/main.css +++ b/base/pub/octo/src/main.css @@ -1,3 +1,4 @@ +#what, #bord, #whom { width: 600px; @@ -7,11 +8,14 @@ margin-left: -300px; } +#what { + height: 36px; +} + #bord { - width: 600px; height: 600px; position: absolute; - top: 18px; + top: 72px; } #whom { @@ -19,6 +23,27 @@ top: 636px; } +#what { + font-family: "bau"; +} + +#what div { + display: inline-block; +} + +#what .ship { + font-weight: 400; + letter-spacing: 1px; + text-transform: uppercase; +} + +#vs { + margin: 0 1rem; + padding: .3rem; + color: #fff; + background-color: #ccc; +} + #whom, .spac { font-size: 100px; diff --git a/base/pub/octo/src/main.js b/base/pub/octo/src/main.js index c165bd53a..f34519f66 100644 --- a/base/pub/octo/src/main.js +++ b/base/pub/octo/src/main.js @@ -42,4 +42,7 @@ $(function() { function(i) { return Number(i); }) urb.send({mark:'octo-move',data:data}) }) + + $('#ship .ship').text(window.urb.ship) + $('#user .ship').text(window.urb.user) }) diff --git a/base/pub/talk/fab/hymn.hook b/base/pub/talk/fab/hymn.hook index d654d3f58..1e22a8d86 100644 --- a/base/pub/talk/fab/hymn.hook +++ b/base/pub/talk/fab/hymn.hook @@ -26,7 +26,7 @@ ;meta(name "viewport", content "width=device-width, height=device-height, ". "initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"); ;link(type "text/css", rel "stylesheet", href "/home/pub/talk/src/css/main.css"); - ;title: urbit talk + ;title: Talk :urbit == ;body ;div#c; From 93b3b919d0dc07580cd431bf32fd13baea0645f0 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Tue, 19 May 2015 12:07:37 -0700 Subject: [PATCH 92/94] talk details --- base/pub/talk/src/css/main.css | 8 +++++--- base/pub/talk/src/css/main.styl | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/base/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css index 1681a4f34..aeeeb39ec 100644 --- a/base/pub/talk/src/css/main.css +++ b/base/pub/talk/src/css/main.css @@ -115,7 +115,6 @@ input { } #length { letter-spacing: 0.1rem; - font-weight: 500; } #writing-container:focus #length { display: inline; @@ -281,6 +280,9 @@ body { #who > div { vertical-align: middle; } +#members { + margin-bottom: 1rem; +} #members > div { display: block; } @@ -479,6 +481,7 @@ a { .iden > div { max-width: 11rem; display: inline-block; + font-size: 0.9rem; } .iden > div, .audi > div { @@ -539,7 +542,6 @@ a { } .writing .iden .ship { margin-right: 0.3rem; - letter-spacing: 0; } #audi { display: inline-block; @@ -547,7 +549,7 @@ a { 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; diff --git a/base/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl index 3f84242f8..a8aaea5ff 100644 --- a/base/pub/talk/src/css/main.styl +++ b/base/pub/talk/src/css/main.styl @@ -37,7 +37,6 @@ input #length letter-spacing .1rem - font-weight 500 #writing-container:focus #length display inline @@ -221,6 +220,9 @@ body #who > div vertical-align middle +#members + margin-bottom 1rem + #members > div display block @@ -429,6 +431,7 @@ a .iden > div max-width 11rem display inline-block + font-size .9rem .iden > div .audi > div @@ -493,7 +496,6 @@ a .writing .iden .ship margin-right .3rem - letter-spacing 0 #audi display inline-block @@ -501,7 +503,7 @@ a 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 From 4ec4fb21e204550586859f716921483427742150 Mon Sep 17 00:00:00 2001 From: vere Date: Tue, 19 May 2015 20:00:59 +0000 Subject: [PATCH 93/94] fix %that handling --- base/arvo/clay.hoon | 2 -- 1 file changed, 2 deletions(-) diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon index 4861fcc5b..83c19e1ac 100644 --- a/base/arvo/clay.hoon +++ b/base/arvo/clay.hoon @@ -1699,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 From ac6195ca2ced4bc7d4cec0dcdfd08027f175e107 Mon Sep 17 00:00:00 2001 From: Galen Wolfe-Pauly Date: Tue, 19 May 2015 13:26:13 -0700 Subject: [PATCH 94/94] titles --- base/pub/octo/fab/hymn.hook | 2 +- base/pub/talk/fab/hymn.hook | 2 +- base/tree/hymn.hook | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/base/pub/octo/fab/hymn.hook b/base/pub/octo/fab/hymn.hook index 3c109c15e..fe4187196 100644 --- a/base/pub/octo/fab/hymn.hook +++ b/base/pub/octo/fab/hymn.hook @@ -10,7 +10,7 @@ ;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: octo :urbit + ;title: :octo == ;body ;div#what diff --git a/base/pub/talk/fab/hymn.hook b/base/pub/talk/fab/hymn.hook index 1e22a8d86..3b46fcd9c 100644 --- a/base/pub/talk/fab/hymn.hook +++ b/base/pub/talk/fab/hymn.hook @@ -26,7 +26,7 @@ ;meta(name "viewport", content "width=device-width, height=device-height, ". "initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"); ;link(type "text/css", rel "stylesheet", href "/home/pub/talk/src/css/main.css"); - ;title: Talk :urbit + ;title: Talk == ;body ;div#c; 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");