made with requirebin
Last active
November 9, 2016 12:02
-
-
Save vorg/7af5868ec4afbf1c5f073a6197d06ebe to your computer and use it in GitHub Desktop.
pull stream drag mouse test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const pull = require('pull-stream') | |
| const log = require('pull-stream/sinks/log') | |
| const filter = require('pull-stream/throughs/filter') | |
| const take = require('pull-stream/throughs/take') | |
| const containsPoint = require('pex-geom/Rect').containsPoint | |
| const pushableStream = require('pull-pushable') | |
| // Draw a red canvas with yellow "button" on the left | |
| const btnRect = [[10, 10], [100, 100]] | |
| const smallBtnRect = [[20, 20], [50, 50]] | |
| function inRect (rect) { | |
| return function (e) { | |
| // TODO: curry this! | |
| return containsPoint(rect, [e.clientX, e.clientY]) | |
| } | |
| } | |
| const canvas = document.createElement('canvas') | |
| canvas.style.background = 'red' | |
| document.body.appendChild(canvas) | |
| const ctx = canvas.getContext('2d') | |
| ctx.fillStyle = '#FFFF00' | |
| ctx.fillRect(btnRect[0][0], btnRect[0][1], btnRect[1][0] - btnRect[0][0], btnRect[1][1] - btnRect[0][1]) | |
| ctx.fillStyle = '#00FF00' | |
| ctx.fillRect(smallBtnRect[0][0], smallBtnRect[0][1], smallBtnRect[1][0] - smallBtnRect[0][0], smallBtnRect[1][1] - smallBtnRect[0][1]) | |
| function createEventStream(element, event) { | |
| const events = pushableStream() | |
| element.addEventListener(event, (e) => { | |
| events.push(e) | |
| }) | |
| return events | |
| } | |
| //read source and log it. | |
| function logger (msg) { | |
| return function (read) { | |
| read(null, function next(end, data) { | |
| if(end === true) return | |
| if(end) throw end | |
| console.log(msg, data) | |
| read(null, next) | |
| }) | |
| } | |
| } | |
| var mousedown = createEventStream(canvas, 'mousedown') | |
| var mousemove = createEventStream(canvas, 'mousemove') | |
| var mouseup = createEventStream(canvas, 'mouseup') | |
| function makeDragStream(mousedown) { | |
| const events = pushableStream() | |
| pull(mousedown, pull.take(() => {}), pull.drain((e) => { | |
| events.push(e) | |
| })) | |
| return events | |
| } | |
| //pull(mousedown, filter(inRect(btnRect)), logger('stream down')) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| setTimeout(function(){ | |
| ;require=(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = function pull (a) { | |
| var length = arguments.length | |
| if (typeof a === 'function' && a.length === 1) { | |
| var args = new Array(length) | |
| for(var i = 0; i < length; i++) | |
| args[i] = arguments[i] | |
| return function (read) { | |
| if (args == null) { | |
| throw new TypeError("partial sink should only be called once!") | |
| } | |
| // Grab the reference after the check, because it's always an array now | |
| // (engines like that kind of consistency). | |
| var ref = args | |
| args = null | |
| // Prioritize common case of small number of pulls. | |
| switch (length) { | |
| case 1: return pull(read, ref[0]) | |
| case 2: return pull(read, ref[0], ref[1]) | |
| case 3: return pull(read, ref[0], ref[1], ref[2]) | |
| case 4: return pull(read, ref[0], ref[1], ref[2], ref[3]) | |
| default: | |
| ref.unshift(read) | |
| return pull.apply(null, ref) | |
| } | |
| } | |
| } | |
| var read = a | |
| if (read && typeof read.source === 'function') { | |
| read = read.source | |
| } | |
| for (var i = 1; i < length; i++) { | |
| var s = arguments[i] | |
| if (typeof s === 'function') { | |
| read = s(read) | |
| } else if (s && typeof s === 'object') { | |
| s.sink(read) | |
| read = s.source | |
| } | |
| } | |
| return read | |
| } | |
| },{}],2:[function(require,module,exports){ | |
| 'use strict' | |
| var reduce = require('./reduce') | |
| module.exports = function collect (cb) { | |
| return reduce(function (arr, item) { | |
| arr.push(item) | |
| return arr | |
| }, [], cb) | |
| } | |
| },{"./reduce":9}],3:[function(require,module,exports){ | |
| 'use strict' | |
| var reduce = require('./reduce') | |
| module.exports = function concat (cb) { | |
| return reduce(function (a, b) { | |
| return a + b | |
| }, '', cb) | |
| } | |
| },{"./reduce":9}],4:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = function drain (op, done) { | |
| var read, abort | |
| function sink (_read) { | |
| read = _read | |
| if(abort) return sink.abort() | |
| //this function is much simpler to write if you | |
| //just use recursion, but by using a while loop | |
| //we do not blow the stack if the stream happens to be sync. | |
| ;(function next() { | |
| var loop = true, cbed = false | |
| while(loop) { | |
| cbed = false | |
| read(null, function (end, data) { | |
| cbed = true | |
| if(end = end || abort) { | |
| loop = false | |
| if(done) done(end === true ? null : end) | |
| else if(end && end !== true) | |
| throw end | |
| } | |
| else if(op && false === op(data) || abort) { | |
| loop = false | |
| read(abort || true, done || function () {}) | |
| } | |
| else if(!loop){ | |
| next() | |
| } | |
| }) | |
| if(!cbed) { | |
| loop = false | |
| return | |
| } | |
| } | |
| })() | |
| } | |
| sink.abort = function (err, cb) { | |
| if('function' == typeof err) | |
| cb = err, err = true | |
| abort = err || true | |
| if(read) return read(abort, cb || function () {}) | |
| } | |
| return sink | |
| } | |
| },{}],5:[function(require,module,exports){ | |
| 'use strict' | |
| function id (e) { return e } | |
| var prop = require('../util/prop') | |
| var drain = require('./drain') | |
| module.exports = function find (test, cb) { | |
| var ended = false | |
| if(!cb) | |
| cb = test, test = id | |
| else | |
| test = prop(test) || id | |
| return drain(function (data) { | |
| if(test(data)) { | |
| ended = true | |
| cb(null, data) | |
| return false | |
| } | |
| }, function (err) { | |
| if(ended) return //already called back | |
| cb(err === true ? null : err, null) | |
| }) | |
| } | |
| },{"../util/prop":29,"./drain":4}],6:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = { | |
| drain: require('./drain'), | |
| onEnd: require('./on-end'), | |
| log: require('./log'), | |
| find: require('./find'), | |
| reduce: require('./reduce'), | |
| collect: require('./collect'), | |
| concat: require('./concat') | |
| } | |
| },{"./collect":2,"./concat":3,"./drain":4,"./find":5,"./log":7,"./on-end":8,"./reduce":9}],7:[function(require,module,exports){ | |
| 'use strict' | |
| var drain = require('./drain') | |
| module.exports = function log (done) { | |
| return drain(function (data) { | |
| console.log(data) | |
| }, done) | |
| } | |
| },{"./drain":4}],8:[function(require,module,exports){ | |
| 'use strict' | |
| var drain = require('./drain') | |
| module.exports = function onEnd (done) { | |
| return drain(null, done) | |
| } | |
| },{"./drain":4}],9:[function(require,module,exports){ | |
| 'use strict' | |
| var drain = require('./drain') | |
| module.exports = function reduce (reducer, acc, cb ) { | |
| if(!cb) cb = acc, acc = null | |
| var sink = drain(function (data) { | |
| acc = reducer(acc, data) | |
| }, function (err) { | |
| cb(err, acc) | |
| }) | |
| if (arguments.length === 2) | |
| return function (source) { | |
| source(null, function (end, data) { | |
| //if ended immediately, and no initial... | |
| if(end) return cb(end === true ? null : end) | |
| acc = data; sink(source) | |
| }) | |
| } | |
| else | |
| return sink | |
| } | |
| },{"./drain":4}],10:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = function count (max) { | |
| var i = 0; max = max || Infinity | |
| return function (end, cb) { | |
| if(end) return cb && cb(end) | |
| if(i > max) | |
| return cb(true) | |
| cb(null, i++) | |
| } | |
| } | |
| },{}],11:[function(require,module,exports){ | |
| 'use strict' | |
| //a stream that ends immediately. | |
| module.exports = function empty () { | |
| return function (abort, cb) { | |
| cb(true) | |
| } | |
| } | |
| },{}],12:[function(require,module,exports){ | |
| 'use strict' | |
| //a stream that errors immediately. | |
| module.exports = function error (err) { | |
| return function (abort, cb) { | |
| cb(err) | |
| } | |
| } | |
| },{}],13:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = { | |
| keys: require('./keys'), | |
| once: require('./once'), | |
| values: require('./values'), | |
| count: require('./count'), | |
| infinite: require('./infinite'), | |
| empty: require('./empty'), | |
| error: require('./error') | |
| } | |
| },{"./count":10,"./empty":11,"./error":12,"./infinite":14,"./keys":15,"./once":16,"./values":17}],14:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = function infinite (generate) { | |
| generate = generate || Math.random | |
| return function (end, cb) { | |
| if(end) return cb && cb(end) | |
| return cb(null, generate()) | |
| } | |
| } | |
| },{}],15:[function(require,module,exports){ | |
| 'use strict' | |
| var values = require('./values') | |
| module.exports = function (object) { | |
| return values(Object.keys(object)) | |
| } | |
| },{"./values":17}],16:[function(require,module,exports){ | |
| 'use strict' | |
| var abortCb = require('../util/abort-cb') | |
| module.exports = function once (value, onAbort) { | |
| return function (abort, cb) { | |
| if(abort) | |
| return abortCb(cb, abort, onAbort) | |
| if(value != null) { | |
| var _value = value; value = null | |
| cb(null, _value) | |
| } else | |
| cb(true) | |
| } | |
| } | |
| },{"../util/abort-cb":28}],17:[function(require,module,exports){ | |
| 'use strict' | |
| var abortCb = require('../util/abort-cb') | |
| module.exports = function values (array, onAbort) { | |
| if(!array) | |
| return function (abort, cb) { | |
| if(abort) return abortCb(cb, abort, onAbort) | |
| return cb(true) | |
| } | |
| if(!Array.isArray(array)) | |
| array = Object.keys(array).map(function (k) { | |
| return array[k] | |
| }) | |
| var i = 0 | |
| return function (abort, cb) { | |
| if(abort) | |
| return abortCb(cb, abort, onAbort) | |
| if(i >= array.length) | |
| cb(true) | |
| else | |
| cb(null, array[i++]) | |
| } | |
| } | |
| },{"../util/abort-cb":28}],18:[function(require,module,exports){ | |
| 'use strict' | |
| function id (e) { return e } | |
| var prop = require('../util/prop') | |
| module.exports = function asyncMap (map) { | |
| if(!map) return id | |
| map = prop(map) | |
| var busy = false, abortCb, aborted | |
| return function (read) { | |
| return function next (abort, cb) { | |
| if(aborted) return cb(aborted) | |
| if(abort) { | |
| aborted = abort | |
| if(!busy) read(abort, cb) | |
| else read(abort, function () { | |
| //if we are still busy, wait for the mapper to complete. | |
| if(busy) abortCb = cb | |
| else cb(abort) | |
| }) | |
| } | |
| else | |
| read(null, function (end, data) { | |
| if(end) cb(end) | |
| else if(aborted) cb(aborted) | |
| else { | |
| busy = true | |
| map(data, function (err, data) { | |
| busy = false | |
| if(aborted) { | |
| cb(aborted) | |
| abortCb(aborted) | |
| } | |
| else if(err) next (err, cb) | |
| else cb(null, data) | |
| }) | |
| } | |
| }) | |
| } | |
| } | |
| } | |
| },{"../util/prop":29}],19:[function(require,module,exports){ | |
| 'use strict' | |
| var tester = require('../util/tester') | |
| var filter = require('./filter') | |
| module.exports = function filterNot (test) { | |
| test = tester(test) | |
| return filter(function (data) { return !test(data) }) | |
| } | |
| },{"../util/tester":30,"./filter":20}],20:[function(require,module,exports){ | |
| 'use strict' | |
| var tester = require('../util/tester') | |
| module.exports = function filter (test) { | |
| //regexp | |
| test = tester(test) | |
| return function (read) { | |
| return function next (end, cb) { | |
| var sync, loop = true | |
| while(loop) { | |
| loop = false | |
| sync = true | |
| read(end, function (end, data) { | |
| if(!end && !test(data)) | |
| return sync ? loop = true : next(end, cb) | |
| cb(end, data) | |
| }) | |
| sync = false | |
| } | |
| } | |
| } | |
| } | |
| },{"../util/tester":30}],21:[function(require,module,exports){ | |
| 'use strict' | |
| var values = require('../sources/values') | |
| var once = require('../sources/once') | |
| //convert a stream of arrays or streams into just a stream. | |
| module.exports = function flatten () { | |
| return function (read) { | |
| var _read | |
| return function (abort, cb) { | |
| if (abort) { //abort the current stream, and then stream of streams. | |
| _read ? _read(abort, function(err) { | |
| read(err || abort, cb) | |
| }) : read(abort, cb) | |
| } | |
| else if(_read) nextChunk() | |
| else nextStream() | |
| function nextChunk () { | |
| _read(null, function (err, data) { | |
| if (err === true) nextStream() | |
| else if (err) { | |
| read(true, function(abortErr) { | |
| // TODO: what do we do with the abortErr? | |
| cb(err) | |
| }) | |
| } | |
| else cb(null, data) | |
| }) | |
| } | |
| function nextStream () { | |
| _read = null | |
| read(null, function (end, stream) { | |
| if(end) | |
| return cb(end) | |
| if(Array.isArray(stream) || stream && 'object' === typeof stream) | |
| stream = values(stream) | |
| else if('function' != typeof stream) | |
| stream = once(stream) | |
| _read = stream | |
| nextChunk() | |
| }) | |
| } | |
| } | |
| } | |
| } | |
| },{"../sources/once":16,"../sources/values":17}],22:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = { | |
| map: require('./map'), | |
| asyncMap: require('./async-map'), | |
| filter: require('./filter'), | |
| filterNot: require('./filter-not'), | |
| through: require('./through'), | |
| take: require('./take'), | |
| unique: require('./unique'), | |
| nonUnique: require('./non-unique'), | |
| flatten: require('./flatten') | |
| } | |
| },{"./async-map":18,"./filter":20,"./filter-not":19,"./flatten":21,"./map":23,"./non-unique":24,"./take":25,"./through":26,"./unique":27}],23:[function(require,module,exports){ | |
| 'use strict' | |
| function id (e) { return e } | |
| var prop = require('../util/prop') | |
| module.exports = function map (mapper) { | |
| if(!mapper) return id | |
| mapper = prop(mapper) | |
| return function (read) { | |
| return function (abort, cb) { | |
| read(abort, function (end, data) { | |
| try { | |
| data = !end ? mapper(data) : null | |
| } catch (err) { | |
| return read(err, function () { | |
| return cb(err) | |
| }) | |
| } | |
| cb(end, data) | |
| }) | |
| } | |
| } | |
| } | |
| },{"../util/prop":29}],24:[function(require,module,exports){ | |
| 'use strict' | |
| var unique = require('./unique') | |
| //passes an item through when you see it for the second time. | |
| module.exports = function nonUnique (field) { | |
| return unique(field, true) | |
| } | |
| },{"./unique":27}],25:[function(require,module,exports){ | |
| 'use strict' | |
| //read a number of items and then stop. | |
| module.exports = function take (test, opts) { | |
| opts = opts || {} | |
| var last = opts.last || false // whether the first item for which !test(item) should still pass | |
| var ended = false | |
| if('number' === typeof test) { | |
| last = true | |
| var n = test; test = function () { | |
| return --n | |
| } | |
| } | |
| return function (read) { | |
| function terminate (cb) { | |
| read(true, function (err) { | |
| last = false; cb(err || true) | |
| }) | |
| } | |
| return function (end, cb) { | |
| if(ended) last ? terminate(cb) : cb(ended) | |
| else if(ended = end) read(ended, cb) | |
| else | |
| read(null, function (end, data) { | |
| if(ended = ended || end) { | |
| //last ? terminate(cb) : | |
| cb(ended) | |
| } | |
| else if(!test(data)) { | |
| ended = true | |
| last ? cb(null, data) : terminate(cb) | |
| } | |
| else | |
| cb(null, data) | |
| }) | |
| } | |
| } | |
| } | |
| },{}],26:[function(require,module,exports){ | |
| 'use strict' | |
| //a pass through stream that doesn't change the value. | |
| module.exports = function through (op, onEnd) { | |
| var a = false | |
| function once (abort) { | |
| if(a || !onEnd) return | |
| a = true | |
| onEnd(abort === true ? null : abort) | |
| } | |
| return function (read) { | |
| return function (end, cb) { | |
| if(end) once(end) | |
| return read(end, function (end, data) { | |
| if(!end) op && op(data) | |
| else once(end) | |
| cb(end, data) | |
| }) | |
| } | |
| } | |
| } | |
| },{}],27:[function(require,module,exports){ | |
| 'use strict' | |
| function id (e) { return e } | |
| var prop = require('../util/prop') | |
| var filter = require('./filter') | |
| //drop items you have already seen. | |
| module.exports = function unique (field, invert) { | |
| field = prop(field) || id | |
| var seen = {} | |
| return filter(function (data) { | |
| var key = field(data) | |
| if(seen[key]) return !!invert //false, by default | |
| else seen[key] = true | |
| return !invert //true by default | |
| }) | |
| } | |
| },{"../util/prop":29,"./filter":20}],28:[function(require,module,exports){ | |
| module.exports = function abortCb(cb, abort, onAbort) { | |
| cb(abort) | |
| onAbort && onAbort(abort === true ? null: abort) | |
| return | |
| } | |
| },{}],29:[function(require,module,exports){ | |
| module.exports = function prop (key) { | |
| return key && ( | |
| 'string' == typeof key | |
| ? function (data) { return data[key] } | |
| : 'object' === typeof key && 'function' === typeof key.exec //regexp | |
| ? function (data) { var v = key.exec(data); return v && v[0] } | |
| : key | |
| ) | |
| } | |
| },{}],30:[function(require,module,exports){ | |
| var prop = require('./prop') | |
| function id (e) { return e } | |
| module.exports = function tester (test) { | |
| return ( | |
| 'object' === typeof test && 'function' === typeof test.test //regexp | |
| ? function (data) { return test.test(data) } | |
| : prop (test) || id | |
| ) | |
| } | |
| },{"./prop":29}],"pull-stream":[function(require,module,exports){ | |
| 'use strict' | |
| var sources = require('./sources') | |
| var sinks = require('./sinks') | |
| var throughs = require('./throughs') | |
| exports = module.exports = require('./pull') | |
| for(var k in sources) | |
| exports[k] = sources[k] | |
| for(var k in throughs) | |
| exports[k] = throughs[k] | |
| for(var k in sinks) | |
| exports[k] = sinks[k] | |
| },{"./pull":1,"./sinks":6,"./sources":13,"./throughs":22}]},{},[]) | |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsInB1bGwuanMiLCJzaW5rcy9jb2xsZWN0LmpzIiwic2lua3MvY29uY2F0LmpzIiwic2lua3MvZHJhaW4uanMiLCJzaW5rcy9maW5kLmpzIiwic2lua3MvaW5kZXguanMiLCJzaW5rcy9sb2cuanMiLCJzaW5rcy9vbi1lbmQuanMiLCJzaW5rcy9yZWR1Y2UuanMiLCJzb3VyY2VzL2NvdW50LmpzIiwic291cmNlcy9lbXB0eS5qcyIsInNvdXJjZXMvZXJyb3IuanMiLCJzb3VyY2VzL2luZGV4LmpzIiwic291cmNlcy9pbmZpbml0ZS5qcyIsInNvdXJjZXMva2V5cy5qcyIsInNvdXJjZXMvb25jZS5qcyIsInNvdXJjZXMvdmFsdWVzLmpzIiwidGhyb3VnaHMvYXN5bmMtbWFwLmpzIiwidGhyb3VnaHMvZmlsdGVyLW5vdC5qcyIsInRocm91Z2hzL2ZpbHRlci5qcyIsInRocm91Z2hzL2ZsYXR0ZW4uanMiLCJ0aHJvdWdocy9pbmRleC5qcyIsInRocm91Z2hzL21hcC5qcyIsInRocm91Z2hzL25vbi11bmlxdWUuanMiLCJ0aHJvdWdocy90YWtlLmpzIiwidGhyb3VnaHMvdGhyb3VnaC5qcyIsInRocm91Z2hzL3VuaXF1ZS5qcyIsInV0aWwvYWJvcnQtY2IuanMiLCJ1dGlsL3Byb3AuanMiLCJ1dGlsL3Rlc3Rlci5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHB1bGwgKGEpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nICYmIGEubGVuZ3RoID09PSAxKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlYWQpIHtcbiAgICAgIGlmIChhcmdzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcnRpYWwgc2luayBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSFcIilcbiAgICAgIH1cblxuICAgICAgLy8gR3JhYiB0aGUgcmVmZXJlbmNlIGFmdGVyIHRoZSBjaGVjaywgYmVjYXVzZSBpdCdzIGFsd2F5cyBhbiBhcnJheSBub3dcbiAgICAgIC8vIChlbmdpbmVzIGxpa2UgdGhhdCBraW5kIG9mIGNvbnNpc3RlbmN5KS5cbiAgICAgIHZhciByZWYgPSBhcmdzXG4gICAgICBhcmdzID0gbnVsbFxuXG4gICAgICAvLyBQcmlvcml0aXplIGNvbW1vbiBjYXNlIG9mIHNtYWxsIG51bWJlciBvZiBwdWxscy5cbiAgICAgIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSlcbiAgICAgIGNhc2UgMjogcmV0dXJuIHB1bGwocmVhZCwgcmVmWzBdLCByZWZbMV0pXG4gICAgICBjYXNlIDM6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSwgcmVmWzFdLCByZWZbMl0pXG4gICAgICBjYXNlIDQ6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSwgcmVmWzFdLCByZWZbMl0sIHJlZlszXSlcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlZi51bnNoaWZ0KHJlYWQpXG4gICAgICAgIHJldHVybiBwdWxsLmFwcGx5KG51bGwsIHJlZilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVhZCA9IGFcblxuICBpZiAocmVhZCAmJiB0eXBlb2YgcmVhZC5zb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWFkID0gcmVhZC5zb3VyY2VcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IGFyZ3VtZW50c1tpXVxuICAgIGlmICh0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVhZCA9IHMocmVhZClcbiAgICB9IGVsc2UgaWYgKHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnKSB7XG4gICAgICBzLnNpbmsocmVhZClcbiAgICAgIHJlYWQgPSBzLnNvdXJjZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4vcmVkdWNlJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb2xsZWN0IChjYikge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uIChhcnIsIGl0ZW0pIHtcbiAgICBhcnIucHVzaChpdGVtKVxuICAgIHJldHVybiBhcnJcbiAgfSwgW10sIGNiKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciByZWR1Y2UgPSByZXF1aXJlKCcuL3JlZHVjZScpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29uY2F0IChjYikge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgKyBiXG4gIH0sICcnLCBjYilcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRyYWluIChvcCwgZG9uZSkge1xuICB2YXIgcmVhZCwgYWJvcnRcblxuICBmdW5jdGlvbiBzaW5rIChfcmVhZCkge1xuICAgIHJlYWQgPSBfcmVhZFxuICAgIGlmKGFib3J0KSByZXR1cm4gc2luay5hYm9ydCgpXG4gICAgLy90aGlzIGZ1bmN0aW9uIGlzIG11Y2ggc2ltcGxlciB0byB3cml0ZSBpZiB5b3VcbiAgICAvL2p1c3QgdXNlIHJlY3Vyc2lvbiwgYnV0IGJ5IHVzaW5nIGEgd2hpbGUgbG9vcFxuICAgIC8vd2UgZG8gbm90IGJsb3cgdGhlIHN0YWNrIGlmIHRoZSBzdHJlYW0gaGFwcGVucyB0byBiZSBzeW5jLlxuICAgIDsoZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgdmFyIGxvb3AgPSB0cnVlLCBjYmVkID0gZmFsc2VcbiAgICAgICAgd2hpbGUobG9vcCkge1xuICAgICAgICAgIGNiZWQgPSBmYWxzZVxuICAgICAgICAgIHJlYWQobnVsbCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgICAgY2JlZCA9IHRydWVcbiAgICAgICAgICAgIGlmKGVuZCA9IGVuZCB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgaWYoZG9uZSkgZG9uZShlbmQgPT09IHRydWUgPyBudWxsIDogZW5kKVxuICAgICAgICAgICAgICBlbHNlIGlmKGVuZCAmJiBlbmQgIT09IHRydWUpXG4gICAgICAgICAgICAgICAgdGhyb3cgZW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKG9wICYmIGZhbHNlID09PSBvcChkYXRhKSB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgcmVhZChhYm9ydCB8fCB0cnVlLCBkb25lIHx8IGZ1bmN0aW9uICgpIHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZighbG9vcCl7XG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYoIWNiZWQpIHtcbiAgICAgICAgICAgIGxvb3AgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpXG4gIH1cblxuICBzaW5rLmFib3J0ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgICBpZignZnVuY3Rpb24nID09IHR5cGVvZiBlcnIpXG4gICAgICBjYiA9IGVyciwgZXJyID0gdHJ1ZVxuICAgIGFib3J0ID0gZXJyIHx8IHRydWVcbiAgICBpZihyZWFkKSByZXR1cm4gcmVhZChhYm9ydCwgY2IgfHwgZnVuY3Rpb24gKCkge30pXG4gIH1cblxuICByZXR1cm4gc2lua1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cbnZhciBwcm9wID0gcmVxdWlyZSgnLi4vdXRpbC9wcm9wJylcbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbmQgKHRlc3QsIGNiKSB7XG4gIHZhciBlbmRlZCA9IGZhbHNlXG4gIGlmKCFjYilcbiAgICBjYiA9IHRlc3QsIHRlc3QgPSBpZFxuICBlbHNlXG4gICAgdGVzdCA9IHByb3AodGVzdCkgfHwgaWRcblxuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZih0ZXN0KGRhdGEpKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGNiKG51bGwsIGRhdGEpXG4gICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYoZW5kZWQpIHJldHVybiAvL2FscmVhZHkgY2FsbGVkIGJhY2tcbiAgICBjYihlcnIgPT09IHRydWUgPyBudWxsIDogZXJyLCBudWxsKVxuICB9KVxufVxuXG5cblxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRyYWluOiByZXF1aXJlKCcuL2RyYWluJyksXG4gIG9uRW5kOiByZXF1aXJlKCcuL29uLWVuZCcpLFxuICBsb2c6IHJlcXVpcmUoJy4vbG9nJyksXG4gIGZpbmQ6IHJlcXVpcmUoJy4vZmluZCcpLFxuICByZWR1Y2U6IHJlcXVpcmUoJy4vcmVkdWNlJyksXG4gIGNvbGxlY3Q6IHJlcXVpcmUoJy4vY29sbGVjdCcpLFxuICBjb25jYXQ6IHJlcXVpcmUoJy4vY29uY2F0Jylcbn1cblxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGxvZyAoZG9uZSkge1xuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBjb25zb2xlLmxvZyhkYXRhKVxuICB9LCBkb25lKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9uRW5kIChkb25lKSB7XG4gIHJldHVybiBkcmFpbihudWxsLCBkb25lKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZHVjZSAocmVkdWNlciwgYWNjLCBjYiApIHtcbiAgaWYoIWNiKSBjYiA9IGFjYywgYWNjID0gbnVsbFxuICB2YXIgc2luayA9IGRyYWluKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgYWNjID0gcmVkdWNlcihhY2MsIGRhdGEpXG4gIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBjYihlcnIsIGFjYylcbiAgfSlcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHNvdXJjZShudWxsLCBmdW5jdGlvbiAoZW5kLCBkYXRhKSB7XG4gICAgICAgIC8vaWYgZW5kZWQgaW1tZWRpYXRlbHksIGFuZCBubyBpbml0aWFsLi4uXG4gICAgICAgIGlmKGVuZCkgcmV0dXJuIGNiKGVuZCA9PT0gdHJ1ZSA/IG51bGwgOiBlbmQpXG4gICAgICAgIGFjYyA9IGRhdGE7IHNpbmsoc291cmNlKVxuICAgICAgfSlcbiAgICB9XG4gIGVsc2VcbiAgICByZXR1cm4gc2lua1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY291bnQgKG1heCkge1xuICB2YXIgaSA9IDA7IG1heCA9IG1heCB8fCBJbmZpbml0eVxuICByZXR1cm4gZnVuY3Rpb24gKGVuZCwgY2IpIHtcbiAgICBpZihlbmQpIHJldHVybiBjYiAmJiBjYihlbmQpXG4gICAgaWYoaSA+IG1heClcbiAgICAgIHJldHVybiBjYih0cnVlKVxuICAgIGNiKG51bGwsIGkrKylcbiAgfVxufVxuXG5cbiIsIid1c2Ugc3RyaWN0J1xuLy9hIHN0cmVhbSB0aGF0IGVuZHMgaW1tZWRpYXRlbHkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVtcHR5ICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICBjYih0cnVlKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbi8vYSBzdHJlYW0gdGhhdCBlcnJvcnMgaW1tZWRpYXRlbHkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVycm9yIChlcnIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICBjYihlcnIpXG4gIH1cbn1cblxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga2V5czogcmVxdWlyZSgnLi9rZXlzJyksXG4gIG9uY2U6IHJlcXVpcmUoJy4vb25jZScpLFxuICB2YWx1ZXM6IHJlcXVpcmUoJy4vdmFsdWVzJyksXG4gIGNvdW50OiByZXF1aXJlKCcuL2NvdW50JyksXG4gIGluZmluaXRlOiByZXF1aXJlKCcuL2luZmluaXRlJyksXG4gIGVtcHR5OiByZXF1aXJlKCcuL2VtcHR5JyksXG4gIGVycm9yOiByZXF1aXJlKCcuL2Vycm9yJylcbn1cbiIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZpbml0ZSAoZ2VuZXJhdGUpIHtcbiAgZ2VuZXJhdGUgPSBnZW5lcmF0ZSB8fCBNYXRoLnJhbmRvbVxuICByZXR1cm4gZnVuY3Rpb24gKGVuZCwgY2IpIHtcbiAgICBpZihlbmQpIHJldHVybiBjYiAmJiBjYihlbmQpXG4gICAgcmV0dXJuIGNiKG51bGwsIGdlbmVyYXRlKCkpXG4gIH1cbn1cblxuXG4iLCIndXNlIHN0cmljdCdcbnZhciB2YWx1ZXMgPSByZXF1aXJlKCcuL3ZhbHVlcycpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHZhbHVlcyhPYmplY3Qua2V5cyhvYmplY3QpKVxufVxuXG5cbiIsIid1c2Ugc3RyaWN0J1xudmFyIGFib3J0Q2IgPSByZXF1aXJlKCcuLi91dGlsL2Fib3J0LWNiJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvbmNlICh2YWx1ZSwgb25BYm9ydCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGFib3J0LCBjYikge1xuICAgIGlmKGFib3J0KVxuICAgICAgcmV0dXJuIGFib3J0Q2IoY2IsIGFib3J0LCBvbkFib3J0KVxuICAgIGlmKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHZhciBfdmFsdWUgPSB2YWx1ZTsgdmFsdWUgPSBudWxsXG4gICAgICBjYihudWxsLCBfdmFsdWUpXG4gICAgfSBlbHNlXG4gICAgICBjYih0cnVlKVxuICB9XG59XG5cblxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgYWJvcnRDYiA9IHJlcXVpcmUoJy4uL3V0aWwvYWJvcnQtY2InKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHZhbHVlcyAoYXJyYXksIG9uQWJvcnQpIHtcbiAgaWYoIWFycmF5KVxuICAgIHJldHVybiBmdW5jdGlvbiAoYWJvcnQsIGNiKSB7XG4gICAgICBpZihhYm9ydCkgcmV0dXJuIGFib3J0Q2IoY2IsIGFib3J0LCBvbkFib3J0KVxuICAgICAgcmV0dXJuIGNiKHRydWUpXG4gICAgfVxuICBpZighQXJyYXkuaXNBcnJheShhcnJheSkpXG4gICAgYXJyYXkgPSBPYmplY3Qua2V5cyhhcnJheSkubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgICByZXR1cm4gYXJyYXlba11cbiAgICB9KVxuICB2YXIgaSA9IDBcbiAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICBpZihhYm9ydClcbiAgICAgIHJldHVybiBhYm9ydENiKGNiLCBhYm9ydCwgb25BYm9ydClcbiAgICBpZihpID49IGFycmF5Lmxlbmd0aClcbiAgICAgIGNiKHRydWUpXG4gICAgZWxzZVxuICAgICAgY2IobnVsbCwgYXJyYXlbaSsrXSlcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cbnZhciBwcm9wID0gcmVxdWlyZSgnLi4vdXRpbC9wcm9wJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3luY01hcCAobWFwKSB7XG4gIGlmKCFtYXApIHJldHVybiBpZFxuICBtYXAgPSBwcm9wKG1hcClcbiAgdmFyIGJ1c3kgPSBmYWxzZSwgYWJvcnRDYiwgYWJvcnRlZFxuICByZXR1cm4gZnVuY3Rpb24gKHJlYWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCAoYWJvcnQsIGNiKSB7XG4gICAgICBpZihhYm9ydGVkKSByZXR1cm4gY2IoYWJvcnRlZClcbiAgICAgIGlmKGFib3J0KSB7XG4gICAgICAgIGFib3J0ZWQgPSBhYm9ydFxuICAgICAgICBpZighYnVzeSkgcmVhZChhYm9ydCwgY2IpXG4gICAgICAgIGVsc2UgcmVhZChhYm9ydCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vaWYgd2UgYXJlIHN0aWxsIGJ1c3ksIHdhaXQgZm9yIHRoZSBtYXBwZXIgdG8gY29tcGxldGUuXG4gICAgICAgICAgaWYoYnVzeSkgYWJvcnRDYiA9IGNiXG4gICAgICAgICAgZWxzZSBjYihhYm9ydClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgcmVhZChudWxsLCBmdW5jdGlvbiAoZW5kLCBkYXRhKSB7XG4gICAgICAgICAgaWYoZW5kKSBjYihlbmQpXG4gICAgICAgICAgZWxzZSBpZihhYm9ydGVkKSBjYihhYm9ydGVkKVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnVzeSA9IHRydWVcbiAgICAgICAgICAgIG1hcChkYXRhLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICAgIGJ1c3kgPSBmYWxzZVxuICAgICAgICAgICAgICBpZihhYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgY2IoYWJvcnRlZClcbiAgICAgICAgICAgICAgICBhYm9ydENiKGFib3J0ZWQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZihlcnIpIG5leHQgKGVyciwgY2IpXG4gICAgICAgICAgICAgIGVsc2UgY2IobnVsbCwgZGF0YSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5cbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgdGVzdGVyID0gcmVxdWlyZSgnLi4vdXRpbC90ZXN0ZXInKVxudmFyIGZpbHRlciA9IHJlcXVpcmUoJy4vZmlsdGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWx0ZXJOb3QgKHRlc3QpIHtcbiAgdGVzdCA9IHRlc3Rlcih0ZXN0KVxuICByZXR1cm4gZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhdGVzdChkYXRhKSB9KVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciB0ZXN0ZXIgPSByZXF1aXJlKCcuLi91dGlsL3Rlc3RlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsdGVyICh0ZXN0KSB7XG4gIC8vcmVnZXhwXG4gIHRlc3QgPSB0ZXN0ZXIodGVzdClcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQgKGVuZCwgY2IpIHtcbiAgICAgIHZhciBzeW5jLCBsb29wID0gdHJ1ZVxuICAgICAgd2hpbGUobG9vcCkge1xuICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgc3luYyA9IHRydWVcbiAgICAgICAgcmVhZChlbmQsIGZ1bmN0aW9uIChlbmQsIGRhdGEpIHtcbiAgICAgICAgICBpZighZW5kICYmICF0ZXN0KGRhdGEpKVxuICAgICAgICAgICAgcmV0dXJuIHN5bmMgPyBsb29wID0gdHJ1ZSA6IG5leHQoZW5kLCBjYilcbiAgICAgICAgICBjYihlbmQsIGRhdGEpXG4gICAgICAgIH0pXG4gICAgICAgIHN5bmMgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4iLCIndXNlIHN0cmljdCdcblxudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4uL3NvdXJjZXMvdmFsdWVzJylcbnZhciBvbmNlID0gcmVxdWlyZSgnLi4vc291cmNlcy9vbmNlJylcblxuLy9jb252ZXJ0IGEgc3RyZWFtIG9mIGFycmF5cyBvciBzdHJlYW1zIGludG8ganVzdCBhIHN0cmVhbS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxhdHRlbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVhZCkge1xuICAgIHZhciBfcmVhZFxuICAgIHJldHVybiBmdW5jdGlvbiAoYWJvcnQsIGNiKSB7XG4gICAgICBpZiAoYWJvcnQpIHsgLy9hYm9ydCB0aGUgY3VycmVudCBzdHJlYW0sIGFuZCB0aGVuIHN0cmVhbSBvZiBzdHJlYW1zLlxuICAgICAgICBfcmVhZCA/IF9yZWFkKGFib3J0LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICByZWFkKGVyciB8fCBhYm9ydCwgY2IpXG4gICAgICAgIH0pIDogcmVhZChhYm9ydCwgY2IpXG4gICAgICB9XG4gICAgICBlbHNlIGlmKF9yZWFkKSBuZXh0Q2h1bmsoKVxuICAgICAgZWxzZSBuZXh0U3RyZWFtKClcblxuICAgICAgZnVuY3Rpb24gbmV4dENodW5rICgpIHtcbiAgICAgICAgX3JlYWQobnVsbCwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgICAgIGlmIChlcnIgPT09IHRydWUpIG5leHRTdHJlYW0oKVxuICAgICAgICAgIGVsc2UgaWYgKGVycikge1xuICAgICAgICAgICAgcmVhZCh0cnVlLCBmdW5jdGlvbihhYm9ydEVycikge1xuICAgICAgICAgICAgICAvLyBUT0RPOiB3aGF0IGRvIHdlIGRvIHdpdGggdGhlIGFib3J0RXJyP1xuICAgICAgICAgICAgICBjYihlcnIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGNiKG51bGwsIGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBuZXh0U3RyZWFtICgpIHtcbiAgICAgICAgX3JlYWQgPSBudWxsXG4gICAgICAgIHJlYWQobnVsbCwgZnVuY3Rpb24gKGVuZCwgc3RyZWFtKSB7XG4gICAgICAgICAgaWYoZW5kKVxuICAgICAgICAgICAgcmV0dXJuIGNiKGVuZClcbiAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHN0cmVhbSkgfHwgc3RyZWFtICYmICdvYmplY3QnID09PSB0eXBlb2Ygc3RyZWFtKVxuICAgICAgICAgICAgc3RyZWFtID0gdmFsdWVzKHN0cmVhbSlcbiAgICAgICAgICBlbHNlIGlmKCdmdW5jdGlvbicgIT0gdHlwZW9mIHN0cmVhbSlcbiAgICAgICAgICAgIHN0cmVhbSA9IG9uY2Uoc3RyZWFtKVxuICAgICAgICAgIF9yZWFkID0gc3RyZWFtXG4gICAgICAgICAgbmV4dENodW5rKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXA6IHJlcXVpcmUoJy4vbWFwJyksXG4gIGFzeW5jTWFwOiByZXF1aXJlKCcuL2FzeW5jLW1hcCcpLFxuICBmaWx0ZXI6IHJlcXVpcmUoJy4vZmlsdGVyJyksXG4gIGZpbHRlck5vdDogcmVxdWlyZSgnLi9maWx0ZXItbm90JyksXG4gIHRocm91Z2g6IHJlcXVpcmUoJy4vdGhyb3VnaCcpLFxuICB0YWtlOiByZXF1aXJlKCcuL3Rha2UnKSxcbiAgdW5pcXVlOiByZXF1aXJlKCcuL3VuaXF1ZScpLFxuICBub25VbmlxdWU6IHJlcXVpcmUoJy4vbm9uLXVuaXF1ZScpLFxuICBmbGF0dGVuOiByZXF1aXJlKCcuL2ZsYXR0ZW4nKVxufVxuXG5cblxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cbnZhciBwcm9wID0gcmVxdWlyZSgnLi4vdXRpbC9wcm9wJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXAgKG1hcHBlcikge1xuICBpZighbWFwcGVyKSByZXR1cm4gaWRcbiAgbWFwcGVyID0gcHJvcChtYXBwZXIpXG4gIHJldHVybiBmdW5jdGlvbiAocmVhZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYWJvcnQsIGNiKSB7XG4gICAgICByZWFkKGFib3J0LCBmdW5jdGlvbiAoZW5kLCBkYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSAhZW5kID8gbWFwcGVyKGRhdGEpIDogbnVsbFxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZChlcnIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBjYihlbmQsIGRhdGEpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciB1bmlxdWUgPSByZXF1aXJlKCcuL3VuaXF1ZScpXG5cbi8vcGFzc2VzIGFuIGl0ZW0gdGhyb3VnaCB3aGVuIHlvdSBzZWUgaXQgZm9yIHRoZSBzZWNvbmQgdGltZS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9uVW5pcXVlIChmaWVsZCkge1xuICByZXR1cm4gdW5pcXVlKGZpZWxkLCB0cnVlKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbi8vcmVhZCBhIG51bWJlciBvZiBpdGVtcyBhbmQgdGhlbiBzdG9wLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0YWtlICh0ZXN0LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIHZhciBsYXN0ID0gb3B0cy5sYXN0IHx8IGZhbHNlIC8vIHdoZXRoZXIgdGhlIGZpcnN0IGl0ZW0gZm9yIHdoaWNoICF0ZXN0KGl0ZW0pIHNob3VsZCBzdGlsbCBwYXNzXG4gIHZhciBlbmRlZCA9IGZhbHNlXG4gIGlmKCdudW1iZXInID09PSB0eXBlb2YgdGVzdCkge1xuICAgIGxhc3QgPSB0cnVlXG4gICAgdmFyIG4gPSB0ZXN0OyB0ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIC0tblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAocmVhZCkge1xuXG4gICAgZnVuY3Rpb24gdGVybWluYXRlIChjYikge1xuICAgICAgcmVhZCh0cnVlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGxhc3QgPSBmYWxzZTsgY2IoZXJyIHx8IHRydWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoZW5kLCBjYikge1xuICAgICAgaWYoZW5kZWQpICAgICAgICAgICAgbGFzdCA/IHRlcm1pbmF0ZShjYikgOiBjYihlbmRlZClcbiAgICAgIGVsc2UgaWYoZW5kZWQgPSBlbmQpIHJlYWQoZW5kZWQsIGNiKVxuICAgICAgZWxzZVxuICAgICAgICByZWFkKG51bGwsIGZ1bmN0aW9uIChlbmQsIGRhdGEpIHtcbiAgICAgICAgICBpZihlbmRlZCA9IGVuZGVkIHx8IGVuZCkge1xuICAgICAgICAgICAgLy9sYXN0ID8gdGVybWluYXRlKGNiKSA6XG4gICAgICAgICAgICBjYihlbmRlZClcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighdGVzdChkYXRhKSkge1xuICAgICAgICAgICAgZW5kZWQgPSB0cnVlXG4gICAgICAgICAgICBsYXN0ID8gY2IobnVsbCwgZGF0YSkgOiB0ZXJtaW5hdGUoY2IpXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNiKG51bGwsIGRhdGEpXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuLy9hIHBhc3MgdGhyb3VnaCBzdHJlYW0gdGhhdCBkb2Vzbid0IGNoYW5nZSB0aGUgdmFsdWUuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRocm91Z2ggKG9wLCBvbkVuZCkge1xuICB2YXIgYSA9IGZhbHNlXG5cbiAgZnVuY3Rpb24gb25jZSAoYWJvcnQpIHtcbiAgICBpZihhIHx8ICFvbkVuZCkgcmV0dXJuXG4gICAgYSA9IHRydWVcbiAgICBvbkVuZChhYm9ydCA9PT0gdHJ1ZSA/IG51bGwgOiBhYm9ydClcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAocmVhZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZW5kLCBjYikge1xuICAgICAgaWYoZW5kKSBvbmNlKGVuZClcbiAgICAgIHJldHVybiByZWFkKGVuZCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICBpZighZW5kKSBvcCAmJiBvcChkYXRhKVxuICAgICAgICBlbHNlIG9uY2UoZW5kKVxuICAgICAgICBjYihlbmQsIGRhdGEpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cbnZhciBwcm9wID0gcmVxdWlyZSgnLi4vdXRpbC9wcm9wJylcbnZhciBmaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcicpXG5cbi8vZHJvcCBpdGVtcyB5b3UgaGF2ZSBhbHJlYWR5IHNlZW4uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaXF1ZSAoZmllbGQsIGludmVydCkge1xuICBmaWVsZCA9IHByb3AoZmllbGQpIHx8IGlkXG4gIHZhciBzZWVuID0ge31cbiAgcmV0dXJuIGZpbHRlcihmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBrZXkgPSBmaWVsZChkYXRhKVxuICAgIGlmKHNlZW5ba2V5XSkgcmV0dXJuICEhaW52ZXJ0IC8vZmFsc2UsIGJ5IGRlZmF1bHRcbiAgICBlbHNlIHNlZW5ba2V5XSA9IHRydWVcbiAgICByZXR1cm4gIWludmVydCAvL3RydWUgYnkgZGVmYXVsdFxuICB9KVxufVxuXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFib3J0Q2IoY2IsIGFib3J0LCBvbkFib3J0KSB7XG4gIGNiKGFib3J0KVxuICBvbkFib3J0ICYmIG9uQWJvcnQoYWJvcnQgPT09IHRydWUgPyBudWxsOiBhYm9ydClcbiAgcmV0dXJuXG59XG5cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHJvcCAoa2V5KSB7XG4gIHJldHVybiBrZXkgJiYgKFxuICAgICdzdHJpbmcnID09IHR5cGVvZiBrZXlcbiAgICA/IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhW2tleV0gfVxuICAgIDogJ29iamVjdCcgPT09IHR5cGVvZiBrZXkgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGtleS5leGVjIC8vcmVnZXhwXG4gICAgPyBmdW5jdGlvbiAoZGF0YSkgeyB2YXIgdiA9IGtleS5leGVjKGRhdGEpOyByZXR1cm4gdiAmJiB2WzBdIH1cbiAgICA6IGtleVxuICApXG59XG4iLCJ2YXIgcHJvcCA9IHJlcXVpcmUoJy4vcHJvcCcpXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZXN0ZXIgKHRlc3QpIHtcbiAgcmV0dXJuIChcbiAgICAnb2JqZWN0JyA9PT0gdHlwZW9mIHRlc3QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRlc3QudGVzdCAvL3JlZ2V4cFxuICAgID8gZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIHRlc3QudGVzdChkYXRhKSB9XG4gICAgOiBwcm9wICh0ZXN0KSB8fCBpZFxuICApXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHNvdXJjZXMgID0gcmVxdWlyZSgnLi9zb3VyY2VzJylcbnZhciBzaW5rcyAgICA9IHJlcXVpcmUoJy4vc2lua3MnKVxudmFyIHRocm91Z2hzID0gcmVxdWlyZSgnLi90aHJvdWdocycpXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcHVsbCcpXG5cbmZvcih2YXIgayBpbiBzb3VyY2VzKVxuICBleHBvcnRzW2tdID0gc291cmNlc1trXVxuXG5mb3IodmFyIGsgaW4gdGhyb3VnaHMpXG4gIGV4cG9ydHNba10gPSB0aHJvdWdoc1trXVxuXG5mb3IodmFyIGsgaW4gc2lua3MpXG4gIGV4cG9ydHNba10gPSBzaW5rc1trXVxuXG4iXX0= | |
| require=(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<r.length;o++)s(r[o]);return s})({"pull-pushable":[function(require,module,exports){ | |
| module.exports = pullPushable | |
| function pullPushable (onClose) { | |
| // create a buffer for data | |
| // that have been pushed | |
| // but not yet pulled. | |
| var buffer = [] | |
| // a pushable is a source stream | |
| // (abort, cb) => cb(end, data) | |
| // | |
| // when pushable is pulled, | |
| // keep references to abort and cb | |
| // so we can call back after | |
| // .end(end) or .push(data) | |
| var abort, cb | |
| function read (_abort, _cb) { | |
| if (_abort) { | |
| abort = _abort | |
| // if there is already a cb waiting, abort it. | |
| if (cb) callback(abort) | |
| } | |
| cb = _cb | |
| drain() | |
| } | |
| var ended | |
| read.end = function (end) { | |
| ended = ended || end || true | |
| // attempt to drain | |
| drain() | |
| } | |
| read.push = function (data) { | |
| if (ended) return | |
| // if sink already waiting, | |
| // we can call back directly. | |
| if (cb) { | |
| callback(abort, data) | |
| return | |
| } | |
| // otherwise push data and | |
| // attempt to drain | |
| buffer.push(data) | |
| drain() | |
| } | |
| return read | |
| // `drain` calls back to (if any) waiting | |
| // sink with abort, end, or next data. | |
| function drain () { | |
| if (!cb) return | |
| if (abort) callback(abort) | |
| else if (!buffer.length && ended) callback(ended) | |
| else if (buffer.length) callback(null, buffer.shift()) | |
| } | |
| // `callback` calls back to waiting sink, | |
| // and removes references to sink cb. | |
| function callback (err, val) { | |
| var _cb = cb | |
| // if error and pushable passed onClose, call it | |
| // the first time this stream ends or errors. | |
| if (err && onClose) { | |
| var c = onClose | |
| onClose = null | |
| c(err === true ? null : err) | |
| } | |
| cb = null | |
| _cb(err, val) | |
| } | |
| } | |
| },{}]},{},[]) | |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIm1vZHVsZS5leHBvcnRzID0gcHVsbFB1c2hhYmxlXG5cbmZ1bmN0aW9uIHB1bGxQdXNoYWJsZSAob25DbG9zZSkge1xuICAvLyBjcmVhdGUgYSBidWZmZXIgZm9yIGRhdGFcbiAgLy8gdGhhdCBoYXZlIGJlZW4gcHVzaGVkXG4gIC8vIGJ1dCBub3QgeWV0IHB1bGxlZC5cbiAgdmFyIGJ1ZmZlciA9IFtdXG5cbiAgLy8gYSBwdXNoYWJsZSBpcyBhIHNvdXJjZSBzdHJlYW1cbiAgLy8gKGFib3J0LCBjYikgPT4gY2IoZW5kLCBkYXRhKVxuICAvL1xuICAvLyB3aGVuIHB1c2hhYmxlIGlzIHB1bGxlZCxcbiAgLy8ga2VlcCByZWZlcmVuY2VzIHRvIGFib3J0IGFuZCBjYlxuICAvLyBzbyB3ZSBjYW4gY2FsbCBiYWNrIGFmdGVyXG4gIC8vIC5lbmQoZW5kKSBvciAucHVzaChkYXRhKVxuICB2YXIgYWJvcnQsIGNiXG4gIGZ1bmN0aW9uIHJlYWQgKF9hYm9ydCwgX2NiKSB7XG4gICAgaWYgKF9hYm9ydCkge1xuICAgICAgYWJvcnQgPSBfYWJvcnRcbiAgICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBjYiB3YWl0aW5nLCBhYm9ydCBpdC5cbiAgICAgIGlmIChjYikgY2FsbGJhY2soYWJvcnQpXG4gICAgfVxuICAgIGNiID0gX2NiXG4gICAgZHJhaW4oKVxuICB9XG5cbiAgdmFyIGVuZGVkXG4gIHJlYWQuZW5kID0gZnVuY3Rpb24gKGVuZCkge1xuICAgIGVuZGVkID0gZW5kZWQgfHwgZW5kIHx8IHRydWVcbiAgICAvLyBhdHRlbXB0IHRvIGRyYWluXG4gICAgZHJhaW4oKVxuICB9XG5cbiAgcmVhZC5wdXNoID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoZW5kZWQpIHJldHVyblxuICAgIC8vIGlmIHNpbmsgYWxyZWFkeSB3YWl0aW5nLFxuICAgIC8vIHdlIGNhbiBjYWxsIGJhY2sgZGlyZWN0bHkuXG4gICAgaWYgKGNiKSB7XG4gICAgICBjYWxsYmFjayhhYm9ydCwgZGF0YSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgcHVzaCBkYXRhIGFuZFxuICAgIC8vIGF0dGVtcHQgdG8gZHJhaW5cbiAgICBidWZmZXIucHVzaChkYXRhKVxuICAgIGRyYWluKClcbiAgfVxuXG4gIHJldHVybiByZWFkXG5cbiAgLy8gYGRyYWluYCBjYWxscyBiYWNrIHRvIChpZiBhbnkpIHdhaXRpbmdcbiAgLy8gc2luayB3aXRoIGFib3J0LCBlbmQsIG9yIG5leHQgZGF0YS5cbiAgZnVuY3Rpb24gZHJhaW4gKCkge1xuICAgIGlmICghY2IpIHJldHVyblxuXG4gICAgaWYgKGFib3J0KSBjYWxsYmFjayhhYm9ydClcbiAgICBlbHNlIGlmICghYnVmZmVyLmxlbmd0aCAmJiBlbmRlZCkgY2FsbGJhY2soZW5kZWQpXG4gICAgZWxzZSBpZiAoYnVmZmVyLmxlbmd0aCkgY2FsbGJhY2sobnVsbCwgYnVmZmVyLnNoaWZ0KCkpXG4gIH1cblxuICAvLyBgY2FsbGJhY2tgIGNhbGxzIGJhY2sgdG8gd2FpdGluZyBzaW5rLFxuICAvLyBhbmQgcmVtb3ZlcyByZWZlcmVuY2VzIHRvIHNpbmsgY2IuXG4gIGZ1bmN0aW9uIGNhbGxiYWNrIChlcnIsIHZhbCkge1xuICAgIHZhciBfY2IgPSBjYlxuICAgIC8vIGlmIGVycm9yIGFuZCBwdXNoYWJsZSBwYXNzZWQgb25DbG9zZSwgY2FsbCBpdFxuICAgIC8vIHRoZSBmaXJzdCB0aW1lIHRoaXMgc3RyZWFtIGVuZHMgb3IgZXJyb3JzLlxuICAgIGlmIChlcnIgJiYgb25DbG9zZSkge1xuICAgICAgdmFyIGMgPSBvbkNsb3NlXG4gICAgICBvbkNsb3NlID0gbnVsbFxuICAgICAgYyhlcnIgPT09IHRydWUgPyBudWxsIDogZXJyKVxuICAgIH1cbiAgICBjYiA9IG51bGxcbiAgICBfY2IoZXJyLCB2YWwpXG4gIH1cbn1cbiJdfQ== | |
| require=(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
| 'use strict' | |
| module.exports = function drain (op, done) { | |
| var read, abort | |
| function sink (_read) { | |
| read = _read | |
| if(abort) return sink.abort() | |
| //this function is much simpler to write if you | |
| //just use recursion, but by using a while loop | |
| //we do not blow the stack if the stream happens to be sync. | |
| ;(function next() { | |
| var loop = true, cbed = false | |
| while(loop) { | |
| cbed = false | |
| read(null, function (end, data) { | |
| cbed = true | |
| if(end = end || abort) { | |
| loop = false | |
| if(done) done(end === true ? null : end) | |
| else if(end && end !== true) | |
| throw end | |
| } | |
| else if(op && false === op(data) || abort) { | |
| loop = false | |
| read(abort || true, done || function () {}) | |
| } | |
| else if(!loop){ | |
| next() | |
| } | |
| }) | |
| if(!cbed) { | |
| loop = false | |
| return | |
| } | |
| } | |
| })() | |
| } | |
| sink.abort = function (err, cb) { | |
| if('function' == typeof err) | |
| cb = err, err = true | |
| abort = err || true | |
| if(read) return read(abort, cb || function () {}) | |
| } | |
| return sink | |
| } | |
| },{}],"pull-stream/sinks/log":[function(require,module,exports){ | |
| 'use strict' | |
| var drain = require('./drain') | |
| module.exports = function log (done) { | |
| return drain(function (data) { | |
| console.log(data) | |
| }, done) | |
| } | |
| },{"./drain":1}]},{},[]) | |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsInNpbmtzL2RyYWluLmpzIiwic2lua3MvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRyYWluIChvcCwgZG9uZSkge1xuICB2YXIgcmVhZCwgYWJvcnRcblxuICBmdW5jdGlvbiBzaW5rIChfcmVhZCkge1xuICAgIHJlYWQgPSBfcmVhZFxuICAgIGlmKGFib3J0KSByZXR1cm4gc2luay5hYm9ydCgpXG4gICAgLy90aGlzIGZ1bmN0aW9uIGlzIG11Y2ggc2ltcGxlciB0byB3cml0ZSBpZiB5b3VcbiAgICAvL2p1c3QgdXNlIHJlY3Vyc2lvbiwgYnV0IGJ5IHVzaW5nIGEgd2hpbGUgbG9vcFxuICAgIC8vd2UgZG8gbm90IGJsb3cgdGhlIHN0YWNrIGlmIHRoZSBzdHJlYW0gaGFwcGVucyB0byBiZSBzeW5jLlxuICAgIDsoZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgdmFyIGxvb3AgPSB0cnVlLCBjYmVkID0gZmFsc2VcbiAgICAgICAgd2hpbGUobG9vcCkge1xuICAgICAgICAgIGNiZWQgPSBmYWxzZVxuICAgICAgICAgIHJlYWQobnVsbCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgICAgY2JlZCA9IHRydWVcbiAgICAgICAgICAgIGlmKGVuZCA9IGVuZCB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgaWYoZG9uZSkgZG9uZShlbmQgPT09IHRydWUgPyBudWxsIDogZW5kKVxuICAgICAgICAgICAgICBlbHNlIGlmKGVuZCAmJiBlbmQgIT09IHRydWUpXG4gICAgICAgICAgICAgICAgdGhyb3cgZW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKG9wICYmIGZhbHNlID09PSBvcChkYXRhKSB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgcmVhZChhYm9ydCB8fCB0cnVlLCBkb25lIHx8IGZ1bmN0aW9uICgpIHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZighbG9vcCl7XG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYoIWNiZWQpIHtcbiAgICAgICAgICAgIGxvb3AgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpXG4gIH1cblxuICBzaW5rLmFib3J0ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgICBpZignZnVuY3Rpb24nID09IHR5cGVvZiBlcnIpXG4gICAgICBjYiA9IGVyciwgZXJyID0gdHJ1ZVxuICAgIGFib3J0ID0gZXJyIHx8IHRydWVcbiAgICBpZihyZWFkKSByZXR1cm4gcmVhZChhYm9ydCwgY2IgfHwgZnVuY3Rpb24gKCkge30pXG4gIH1cblxuICByZXR1cm4gc2lua1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGxvZyAoZG9uZSkge1xuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBjb25zb2xlLmxvZyhkYXRhKVxuICB9LCBkb25lKVxufVxuIl19 | |
| require=(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
| module.exports = function prop (key) { | |
| return key && ( | |
| 'string' == typeof key | |
| ? function (data) { return data[key] } | |
| : 'object' === typeof key && 'function' === typeof key.exec //regexp | |
| ? function (data) { var v = key.exec(data); return v && v[0] } | |
| : key | |
| ) | |
| } | |
| },{}],2:[function(require,module,exports){ | |
| var prop = require('./prop') | |
| function id (e) { return e } | |
| module.exports = function tester (test) { | |
| return ( | |
| 'object' === typeof test && 'function' === typeof test.test //regexp | |
| ? function (data) { return test.test(data) } | |
| : prop (test) || id | |
| ) | |
| } | |
| },{"./prop":1}],"pull-stream/throughs/filter":[function(require,module,exports){ | |
| 'use strict' | |
| var tester = require('../util/tester') | |
| module.exports = function filter (test) { | |
| //regexp | |
| test = tester(test) | |
| return function (read) { | |
| return function next (end, cb) { | |
| var sync, loop = true | |
| while(loop) { | |
| loop = false | |
| sync = true | |
| read(end, function (end, data) { | |
| if(!end && !test(data)) | |
| return sync ? loop = true : next(end, cb) | |
| cb(end, data) | |
| }) | |
| sync = false | |
| } | |
| } | |
| } | |
| } | |
| },{"../util/tester":2}]},{},[]) | |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsInV0aWwvcHJvcC5qcyIsInV0aWwvdGVzdGVyLmpzIiwidGhyb3VnaHMvZmlsdGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHJvcCAoa2V5KSB7XG4gIHJldHVybiBrZXkgJiYgKFxuICAgICdzdHJpbmcnID09IHR5cGVvZiBrZXlcbiAgICA/IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhW2tleV0gfVxuICAgIDogJ29iamVjdCcgPT09IHR5cGVvZiBrZXkgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGtleS5leGVjIC8vcmVnZXhwXG4gICAgPyBmdW5jdGlvbiAoZGF0YSkgeyB2YXIgdiA9IGtleS5leGVjKGRhdGEpOyByZXR1cm4gdiAmJiB2WzBdIH1cbiAgICA6IGtleVxuICApXG59XG4iLCJ2YXIgcHJvcCA9IHJlcXVpcmUoJy4vcHJvcCcpXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZXN0ZXIgKHRlc3QpIHtcbiAgcmV0dXJuIChcbiAgICAnb2JqZWN0JyA9PT0gdHlwZW9mIHRlc3QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRlc3QudGVzdCAvL3JlZ2V4cFxuICAgID8gZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIHRlc3QudGVzdChkYXRhKSB9XG4gICAgOiBwcm9wICh0ZXN0KSB8fCBpZFxuICApXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHRlc3RlciA9IHJlcXVpcmUoJy4uL3V0aWwvdGVzdGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWx0ZXIgKHRlc3QpIHtcbiAgLy9yZWdleHBcbiAgdGVzdCA9IHRlc3Rlcih0ZXN0KVxuICByZXR1cm4gZnVuY3Rpb24gKHJlYWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCAoZW5kLCBjYikge1xuICAgICAgdmFyIHN5bmMsIGxvb3AgPSB0cnVlXG4gICAgICB3aGlsZShsb29wKSB7XG4gICAgICAgIGxvb3AgPSBmYWxzZVxuICAgICAgICBzeW5jID0gdHJ1ZVxuICAgICAgICByZWFkKGVuZCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgIGlmKCFlbmQgJiYgIXRlc3QoZGF0YSkpXG4gICAgICAgICAgICByZXR1cm4gc3luYyA/IGxvb3AgPSB0cnVlIDogbmV4dChlbmQsIGNiKVxuICAgICAgICAgIGNiKGVuZCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICAgICAgc3luYyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiJdfQ== | |
| require=(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<r.length;o++)s(r[o]);return s})({"pull-stream/throughs/take":[function(require,module,exports){ | |
| 'use strict' | |
| //read a number of items and then stop. | |
| module.exports = function take (test, opts) { | |
| opts = opts || {} | |
| var last = opts.last || false // whether the first item for which !test(item) should still pass | |
| var ended = false | |
| if('number' === typeof test) { | |
| last = true | |
| var n = test; test = function () { | |
| return --n | |
| } | |
| } | |
| return function (read) { | |
| function terminate (cb) { | |
| read(true, function (err) { | |
| last = false; cb(err || true) | |
| }) | |
| } | |
| return function (end, cb) { | |
| if(ended) last ? terminate(cb) : cb(ended) | |
| else if(ended = end) read(ended, cb) | |
| else | |
| read(null, function (end, data) { | |
| if(ended = ended || end) { | |
| //last ? terminate(cb) : | |
| cb(ended) | |
| } | |
| else if(!test(data)) { | |
| ended = true | |
| last ? cb(null, data) : terminate(cb) | |
| } | |
| else | |
| cb(null, data) | |
| }) | |
| } | |
| } | |
| } | |
| },{}]},{},[]) | |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsInRocm91Z2hzL3Rha2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnXG5cbi8vcmVhZCBhIG51bWJlciBvZiBpdGVtcyBhbmQgdGhlbiBzdG9wLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0YWtlICh0ZXN0LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIHZhciBsYXN0ID0gb3B0cy5sYXN0IHx8IGZhbHNlIC8vIHdoZXRoZXIgdGhlIGZpcnN0IGl0ZW0gZm9yIHdoaWNoICF0ZXN0KGl0ZW0pIHNob3VsZCBzdGlsbCBwYXNzXG4gIHZhciBlbmRlZCA9IGZhbHNlXG4gIGlmKCdudW1iZXInID09PSB0eXBlb2YgdGVzdCkge1xuICAgIGxhc3QgPSB0cnVlXG4gICAgdmFyIG4gPSB0ZXN0OyB0ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIC0tblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAocmVhZCkge1xuXG4gICAgZnVuY3Rpb24gdGVybWluYXRlIChjYikge1xuICAgICAgcmVhZCh0cnVlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGxhc3QgPSBmYWxzZTsgY2IoZXJyIHx8IHRydWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoZW5kLCBjYikge1xuICAgICAgaWYoZW5kZWQpICAgICAgICAgICAgbGFzdCA/IHRlcm1pbmF0ZShjYikgOiBjYihlbmRlZClcbiAgICAgIGVsc2UgaWYoZW5kZWQgPSBlbmQpIHJlYWQoZW5kZWQsIGNiKVxuICAgICAgZWxzZVxuICAgICAgICByZWFkKG51bGwsIGZ1bmN0aW9uIChlbmQsIGRhdGEpIHtcbiAgICAgICAgICBpZihlbmRlZCA9IGVuZGVkIHx8IGVuZCkge1xuICAgICAgICAgICAgLy9sYXN0ID8gdGVybWluYXRlKGNiKSA6XG4gICAgICAgICAgICBjYihlbmRlZClcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighdGVzdChkYXRhKSkge1xuICAgICAgICAgICAgZW5kZWQgPSB0cnVlXG4gICAgICAgICAgICBsYXN0ID8gY2IobnVsbCwgZGF0YSkgOiB0ZXJtaW5hdGUoY2IpXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNiKG51bGwsIGRhdGEpXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iXX0= | |
| require=(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<r.length;o++)s(r[o]);return s})({"pex-geom/Rect":[function(require,module,exports){ | |
| function create(){ | |
| return [[Infinity,Infinity],[-Infinity,-Infinity]]; | |
| } | |
| function zero(){ | |
| return [[0,0],[0,0]]; | |
| } | |
| function copy(a){ | |
| return [a[0].slice(0),a[1].slice()]; | |
| } | |
| function set(a,b){ | |
| a[0][0] = b[0][0]; | |
| a[0][1] = b[0][1]; | |
| a[1][0] = b[1][0]; | |
| a[1][1] = b[1][1]; | |
| return a; | |
| } | |
| function set4(a,x,y,w,h){ | |
| a[0][0] = x; | |
| a[0][1] = y; | |
| a[1][0] = x + w; | |
| a[1][1] = y + h; | |
| return a; | |
| } | |
| function scale(a,n){ | |
| a[0][0] *= n; | |
| a[0][1] *= n; | |
| a[1][0] *= n; | |
| a[1][1] *= n; | |
| return a; | |
| } | |
| function setMinMax(a,min,max){ | |
| a[0][0] = min[0]; | |
| a[0][1] = min[1]; | |
| a[1][0] = max[0]; | |
| a[1][1] = max[1]; | |
| return a; | |
| } | |
| function setMinMax4(a,minx,miny,maxx,maxy){ | |
| a[0][0] = minx; | |
| a[0][1] = miny; | |
| a[1][0] = maxx; | |
| a[1][1] = maxy; | |
| return a; | |
| } | |
| function getMin(a,out){ | |
| if(out === undefined){ | |
| return [a[0][0],a[0][1]]; | |
| } | |
| out[0] = a[0][0]; | |
| out[1] = a[0][1]; | |
| return out; | |
| } | |
| function getMax(a,out){ | |
| if(out === undefined){ | |
| return [a[1][0],a[1][1]]; | |
| } | |
| out[0] = a[1][0]; | |
| out[1] = a[1][1]; | |
| return out; | |
| } | |
| function setSize2(a,width,height){ | |
| a[1][0] = a[0][0] + width; | |
| a[1][1] = a[0][1] + height; | |
| return a; | |
| } | |
| function setSize(a,size){ | |
| a[1][0] = a[0][0] + size[0]; | |
| a[1][1] = a[0][1] + size[1]; | |
| return a; | |
| } | |
| function getSize(a,out){ | |
| var width = getWidth(a); | |
| var height = getHeight(a); | |
| if(out === undefined){ | |
| return [width,height]; | |
| } | |
| out[0] = width; | |
| out[1] = height; | |
| return out; | |
| } | |
| function setWidth(a,width){ | |
| a[1][0] = a[0][0] + width; | |
| return a; | |
| } | |
| function setHeight(a,height){ | |
| a[1][1] = a[0][1] + height; | |
| return a; | |
| } | |
| function getWidth(a){ | |
| return a[1][0] - a[0][0]; | |
| } | |
| function getHeight(a){ | |
| return a[1][1] - a[0][1]; | |
| } | |
| function getAspectRatio(a){ | |
| return getWidth(a) / getHeight(a); | |
| } | |
| function setPosition(a,position){ | |
| return setPosition2(a,position[0],position[1]); | |
| } | |
| function setPosition2(a,x,y){ | |
| a[0][0] = x; | |
| a[0][1] = y; | |
| a[1][0] = x + getWidth(a); | |
| a[1][1] = y + getHeight(a); | |
| return a; | |
| } | |
| function getTR(a,out){ | |
| if(out === undefined){ | |
| return [a[1][0],a[1]]; | |
| } | |
| out[0] = a[1][0]; | |
| out[1] = a[0][1]; | |
| return out; | |
| } | |
| function getBL(a,out){ | |
| if(out === undefined){ | |
| return [a[0][0],a[1][1]]; | |
| } | |
| out[0] = a[0][0]; | |
| out[1] = a[1][1]; | |
| return out; | |
| } | |
| function getCenter(a,out){ | |
| var x = getWidth(a) * 0.5; | |
| var y = getHeight(a) * 0.5; | |
| if(out === undefined){ | |
| return [x,y]; | |
| } | |
| out[0] = x; | |
| out[1] = y; | |
| return out; | |
| } | |
| function containsPoint(a,point){ | |
| return containsPoint2(a,point[0],point[1]); | |
| } | |
| function containsPoint2(a,x,y){ | |
| return x >= a[0][0] && x <= a[1][0] && y >= a[0][1] && y <= a[1][1]; | |
| } | |
| function containsRect(a,b){ | |
| return containsPoint2(a,b[0][0],b[0][1]) && containsPoint2(a,b[1][0],b[1][1]); | |
| } | |
| function includePoint(a,point){ | |
| return includePoint2(a,point[0],point[1]); | |
| } | |
| function includePoint2(a,x,y){ | |
| var minx = a[0][0]; | |
| var miny = a[0][1]; | |
| var maxx = a[1][0]; | |
| var maxy = a[1][1]; | |
| a[0][0] = minx > x ? x : minx; | |
| a[0][1] = miny > y ? y : miny; | |
| a[1][0] = maxx < x ? x : maxx; | |
| a[1][1] = maxy < y ? y : maxy; | |
| return a; | |
| } | |
| function includePoints(a,points){ | |
| var minx = a[0][0]; | |
| var miny = a[0][1]; | |
| var maxx = a[1][0]; | |
| var maxy = a[1][1]; | |
| for(var i = 0, l = points.length, x, y; i < l; ++i){ | |
| x = points[i][0]; | |
| y = points[i][1]; | |
| minx = minx > x ? x : minx; | |
| miny = miny > y ? y : miny; | |
| maxx = maxx < x ? x : maxx; | |
| maxy = maxy < y ? y : maxy; | |
| } | |
| a[0][0] = minx; | |
| a[0][1] = miny; | |
| a[1][0] = maxx; | |
| a[1][1] = maxy; | |
| return a; | |
| } | |
| function includePointsFlat(a,points){ | |
| var minx = a[0][0]; | |
| var miny = a[0][1]; | |
| var maxx = a[1][0]; | |
| var maxy = a[1][1]; | |
| for(var i = 0, l = points.length, x, y; i < l; i+=2){ | |
| x = points[i ]; | |
| y = points[i+1]; | |
| minx = minx > x ? x : minx; | |
| miny = miny > y ? y : miny; | |
| maxx = maxx < x ? x : maxx; | |
| maxy = maxy < y ? y : maxy; | |
| } | |
| a[0][0] = minx; | |
| a[0][1] = miny; | |
| a[1][0] = maxx; | |
| a[1][1] = maxy; | |
| return a; | |
| } | |
| function includeRect(a,rect){ | |
| includePoint(a,rect[0]); | |
| includePoint(a,rect[1]); | |
| return a; | |
| } | |
| function includeRects(a,rects){ | |
| for(var i = 0, l = rects.length; i < l; ++i){ | |
| includeRect(a,rects[i]); | |
| } | |
| return a; | |
| } | |
| function mapPoint(a,point){ | |
| var minx = a[0][0]; | |
| var miny = a[0][1]; | |
| var maxx = a[1][0]; | |
| var maxy = a[1][1]; | |
| var x = point[0]; | |
| var y = point[1]; | |
| point[0] = Math.max(minx,Math.min(x,maxx)) - minx; | |
| point[1] = Math.max(miny,Math.min(y,maxy)) - miny; | |
| return point; | |
| } | |
| function clampPoint(a,point){ | |
| var minx = a[0][0]; | |
| var miny = a[0][1]; | |
| var maxx = a[1][0]; | |
| var maxy = a[1][1]; | |
| point[0] = Math.max(minx,Math.min(point[0],maxx)); | |
| point[1] = Math.max(miny,Math.min(point[1],maxy)); | |
| return point; | |
| } | |
| function toMax(a){ | |
| a[0][0] = a[1][0] = -Number.MAX_VALUE; | |
| a[0][1] = a[1][1] = Number.MAX_VALUE; | |
| } | |
| function setEmpty(a){ | |
| a[0][0] = a[0][1] = Infinity; | |
| a[1][0] = a[1][1] = -Infinity; | |
| return a; | |
| } | |
| function isEmpty(a){ | |
| return (a[0][0] > a[1][0]) || (a[0][1] > a[1][1]); | |
| } | |
| function isZero(a){ | |
| return a[0][0] == 0 && a[0][1] == 0 && a[1][0] == 0 && a[1][1] == 0; | |
| } | |
| function setZero(a){ | |
| a[0][0] = a[0][1] = a[1][0] = a[1][1] = 0; | |
| return a; | |
| } | |
| function createFromPoints(points){ | |
| return includePoints(create(),points); | |
| } | |
| function createFromPointsFlat(points){ | |
| return includePointsFlat(create(),points); | |
| } | |
| function createFromRects(rects){ | |
| return includeRects(create(),rects); | |
| } | |
| /** | |
| * [Rect description] | |
| * @type {Object} | |
| */ | |
| var Rect = { | |
| /** | |
| * [create description] | |
| * @type {[type]} | |
| */ | |
| create : create, | |
| /** | |
| * [zero description] | |
| * @type {[type]} | |
| */ | |
| zero : zero, | |
| /** | |
| * [copy description] | |
| * @type {[type]} | |
| */ | |
| copy : copy, | |
| /** | |
| * [set description] | |
| * @type {[type]} | |
| */ | |
| set : set, | |
| /** | |
| * [set4 description] | |
| * @type {[type]} | |
| */ | |
| set4 : set4, | |
| /** | |
| * [scale description] | |
| * @type {[type]} | |
| */ | |
| scale : scale, | |
| /** | |
| * [setMinMax description] | |
| * @type {[type]} | |
| */ | |
| setMinMax : setMinMax, | |
| /** | |
| * [setMinMax4 description] | |
| * @type {[type]} | |
| */ | |
| setMinMax4 : setMinMax4, | |
| /** | |
| * [getMin description] | |
| * @type {[type]} | |
| */ | |
| getMin : getMin, | |
| /** | |
| * [getMax description] | |
| * @type {[type]} | |
| */ | |
| getMax : getMax, | |
| /** | |
| * [setSize2 description] | |
| * @type {[type]} | |
| */ | |
| setSize2 : setSize2, | |
| /** | |
| * [setSize description] | |
| * @type {[type]} | |
| */ | |
| setSize : setSize, | |
| /** | |
| * [getSize description] | |
| * @type {[type]} | |
| */ | |
| getSize : getSize, | |
| /** | |
| * [setWidth description] | |
| * @type {[type]} | |
| */ | |
| setWidth : setWidth, | |
| /** | |
| * [getWidth description] | |
| * @type {[type]} | |
| */ | |
| getWidth : getWidth, | |
| /** | |
| * [setHeight description] | |
| * @type {[type]} | |
| */ | |
| setHeight : setHeight, | |
| /** | |
| * [getHeight description] | |
| * @type {[type]} | |
| */ | |
| getHeight : getHeight, | |
| /** | |
| * [getAspectRatio description] | |
| * @type {[type]} | |
| */ | |
| getAspectRatio : getAspectRatio, | |
| /** | |
| * [setPosition description] | |
| * @type {[type]} | |
| */ | |
| setPosition : setPosition, | |
| /** | |
| * [setPosition2 description] | |
| * @type {[type]} | |
| */ | |
| setPosition2 : setPosition2, | |
| /** | |
| * [getPosition description] | |
| * @type {[type]} | |
| */ | |
| getPosition : getMin, | |
| /** | |
| * [getTL description] | |
| * @type {[type]} | |
| */ | |
| getTL : getMin, | |
| /** | |
| * [getTR description] | |
| * @type {[type]} | |
| */ | |
| getTR : getTR, | |
| /** | |
| * [getBL description] | |
| * @type {[type]} | |
| */ | |
| getBL : getBL, | |
| /** | |
| * [getBR description] | |
| * @type {[type]} | |
| */ | |
| getBR : getMax, | |
| /** | |
| * [getCenter description] | |
| * @type {[type]} | |
| */ | |
| getCenter : getCenter, | |
| /** | |
| * [containsPoint description] | |
| * @type {[type]} | |
| */ | |
| containsPoint : containsPoint, | |
| /** | |
| * [containsPoint2 description] | |
| * @type {[type]} | |
| */ | |
| containsPoint2 : containsPoint2, | |
| /** | |
| * [containsRect description] | |
| * @type {[type]} | |
| */ | |
| containsRect : containsRect, | |
| /** | |
| * [includePoint description] | |
| * @type {[type]} | |
| */ | |
| includePoint : includePoint, | |
| /** | |
| * [includePoint2 description] | |
| * @type {[type]} | |
| */ | |
| includePoint2 : includePoint2, | |
| /** | |
| * [includePoints description] | |
| * @type {[type]} | |
| */ | |
| includePoints : includePoints, | |
| /** | |
| * [includePointsFlat description] | |
| * @type {[type]} | |
| */ | |
| includePointsFlat : includePointsFlat, | |
| /** | |
| * [includeRect description] | |
| * @type {[type]} | |
| */ | |
| includeRect : includeRect, | |
| /** | |
| * [includeRects description] | |
| * @type {[type]} | |
| */ | |
| includeRects : includeRects, | |
| /** | |
| * [mapPoint description] | |
| * @type {[type]} | |
| */ | |
| mapPoint : mapPoint, | |
| /** | |
| * [clampPoint description] | |
| * @type {[type]} | |
| */ | |
| clampPoint : clampPoint, | |
| /** | |
| * [isZero description] | |
| * @type {Boolean} | |
| */ | |
| isZero : isZero, | |
| /** | |
| * [isEmpty description] | |
| * @type {Boolean} | |
| */ | |
| isEmpty : isEmpty, | |
| /** | |
| * [setEmpty description] | |
| * @type {[type]} | |
| */ | |
| setEmpty : setEmpty, | |
| /** | |
| * [toMax description] | |
| * @type {[type]} | |
| */ | |
| toMax : toMax, | |
| /** | |
| * [setZero description] | |
| * @type {[type]} | |
| */ | |
| setZero : setZero, | |
| /** | |
| * [createFromPoints description] | |
| * @type {[type]} | |
| */ | |
| createFromPoints : createFromPoints, | |
| /** | |
| * [createFromPointsFlat description] | |
| * @type {[type]} | |
| */ | |
| createFromPointsFlat : createFromPointsFlat, | |
| /** | |
| * [createFromRects description] | |
| * @type {[type]} | |
| */ | |
| createFromRects : createFromRects | |
| }; | |
| module.exports = Rect; | |
| },{}]},{},[]) | |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsIlJlY3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImZ1bmN0aW9uIGNyZWF0ZSgpe1xuICAgIHJldHVybiBbW0luZmluaXR5LEluZmluaXR5XSxbLUluZmluaXR5LC1JbmZpbml0eV1dO1xufVxuXG5mdW5jdGlvbiB6ZXJvKCl7XG4gICAgcmV0dXJuIFtbMCwwXSxbMCwwXV07XG59XG5cbmZ1bmN0aW9uIGNvcHkoYSl7XG4gICAgcmV0dXJuIFthWzBdLnNsaWNlKDApLGFbMV0uc2xpY2UoKV07XG59XG5cbmZ1bmN0aW9uIHNldChhLGIpe1xuICAgIGFbMF1bMF0gPSBiWzBdWzBdO1xuICAgIGFbMF1bMV0gPSBiWzBdWzFdO1xuICAgIGFbMV1bMF0gPSBiWzFdWzBdO1xuICAgIGFbMV1bMV0gPSBiWzFdWzFdO1xuICAgIHJldHVybiBhO1xufVxuXG5mdW5jdGlvbiBzZXQ0KGEseCx5LHcsaCl7XG4gICAgYVswXVswXSA9IHg7XG4gICAgYVswXVsxXSA9IHk7XG4gICAgYVsxXVswXSA9IHggKyB3O1xuICAgIGFbMV1bMV0gPSB5ICsgaDtcbiAgICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gc2NhbGUoYSxuKXtcbiAgICBhWzBdWzBdICo9IG47XG4gICAgYVswXVsxXSAqPSBuO1xuICAgIGFbMV1bMF0gKj0gbjtcbiAgICBhWzFdWzFdICo9IG47XG4gICAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIHNldE1pbk1heChhLG1pbixtYXgpe1xuICAgIGFbMF1bMF0gPSBtaW5bMF07XG4gICAgYVswXVsxXSA9IG1pblsxXTtcbiAgICBhWzFdWzBdID0gbWF4WzBdO1xuICAgIGFbMV1bMV0gPSBtYXhbMV07XG4gICAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIHNldE1pbk1heDQoYSxtaW54LG1pbnksbWF4eCxtYXh5KXtcbiAgICBhWzBdWzBdID0gbWlueDtcbiAgICBhWzBdWzFdID0gbWlueTtcbiAgICBhWzFdWzBdID0gbWF4eDtcbiAgICBhWzFdWzFdID0gbWF4eTtcbiAgICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gZ2V0TWluKGEsb3V0KXtcbiAgICBpZihvdXQgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgIHJldHVybiBbYVswXVswXSxhWzBdWzFdXTtcbiAgICB9XG4gICAgb3V0WzBdID0gYVswXVswXTtcbiAgICBvdXRbMV0gPSBhWzBdWzFdO1xuICAgIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGdldE1heChhLG91dCl7XG4gICAgaWYob3V0ID09PSB1bmRlZmluZWQpe1xuICAgICAgICByZXR1cm4gW2FbMV1bMF0sYVsxXVsxXV07XG4gICAgfVxuICAgIG91dFswXSA9IGFbMV1bMF07XG4gICAgb3V0WzFdID0gYVsxXVsxXTtcbiAgICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBzZXRTaXplMihhLHdpZHRoLGhlaWdodCl7XG4gICAgYVsxXVswXSA9IGFbMF1bMF0gKyB3aWR0aDtcbiAgICBhWzFdWzFdID0gYVswXVsxXSArIGhlaWdodDtcbiAgICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gc2V0U2l6ZShhLHNpemUpe1xuICAgIGFbMV1bMF0gPSBhWzBdWzBdICsgc2l6ZVswXTtcbiAgICBhWzFdWzFdID0gYVswXVsxXSArIHNpemVbMV07XG4gICAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIGdldFNpemUoYSxvdXQpe1xuICAgIHZhciB3aWR0aCAgPSBnZXRXaWR0aChhKTtcbiAgICB2YXIgaGVpZ2h0ID0gZ2V0SGVpZ2h0KGEpO1xuICAgIGlmKG91dCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgcmV0dXJuIFt3aWR0aCxoZWlnaHRdO1xuICAgIH1cbiAgICBvdXRbMF0gPSB3aWR0aDtcbiAgICBvdXRbMV0gPSBoZWlnaHQ7XG4gICAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gc2V0V2lkdGgoYSx3aWR0aCl7XG4gICAgYVsxXVswXSA9IGFbMF1bMF0gKyB3aWR0aDtcbiAgICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gc2V0SGVpZ2h0KGEsaGVpZ2h0KXtcbiAgICBhWzFdWzFdID0gYVswXVsxXSArIGhlaWdodDtcbiAgICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGgoYSl7XG4gICAgcmV0dXJuIGFbMV1bMF0gLSBhWzBdWzBdO1xufVxuXG5mdW5jdGlvbiBnZXRIZWlnaHQoYSl7XG4gICAgcmV0dXJuIGFbMV1bMV0gLSBhWzBdWzFdO1xufVxuXG5mdW5jdGlvbiBnZXRBc3BlY3RSYXRpbyhhKXtcbiAgICByZXR1cm4gZ2V0V2lkdGgoYSkgLyBnZXRIZWlnaHQoYSk7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aW9uKGEscG9zaXRpb24pe1xuICAgIHJldHVybiBzZXRQb3NpdGlvbjIoYSxwb3NpdGlvblswXSxwb3NpdGlvblsxXSk7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aW9uMihhLHgseSl7XG4gICAgYVswXVswXSA9IHg7XG4gICAgYVswXVsxXSA9IHk7XG4gICAgYVsxXVswXSA9IHggKyBnZXRXaWR0aChhKTtcbiAgICBhWzFdWzFdID0geSArIGdldEhlaWdodChhKTtcbiAgICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gZ2V0VFIoYSxvdXQpe1xuICAgIGlmKG91dCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgcmV0dXJuIFthWzFdWzBdLGFbMV1dO1xuICAgIH1cbiAgICBvdXRbMF0gPSBhWzFdWzBdO1xuICAgIG91dFsxXSA9IGFbMF1bMV07XG4gICAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZ2V0QkwoYSxvdXQpe1xuICAgIGlmKG91dCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgcmV0dXJuIFthWzBdWzBdLGFbMV1bMV1dO1xuICAgIH1cbiAgICBvdXRbMF0gPSBhWzBdWzBdO1xuICAgIG91dFsxXSA9IGFbMV1bMV07XG4gICAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2VudGVyKGEsb3V0KXtcbiAgICB2YXIgeCA9IGdldFdpZHRoKGEpICogMC41O1xuICAgIHZhciB5ID0gZ2V0SGVpZ2h0KGEpICogMC41O1xuICAgIGlmKG91dCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgcmV0dXJuIFt4LHldO1xuICAgIH1cbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNQb2ludChhLHBvaW50KXtcbiAgICByZXR1cm4gY29udGFpbnNQb2ludDIoYSxwb2ludFswXSxwb2ludFsxXSk7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUG9pbnQyKGEseCx5KXtcbiAgICByZXR1cm4geCA+PSBhWzBdWzBdICYmIHggPD0gYVsxXVswXSAmJiB5ID49IGFbMF1bMV0gJiYgeSA8PSBhWzFdWzFdO1xufVxuXG5mdW5jdGlvbiBjb250YWluc1JlY3QoYSxiKXtcbiAgICByZXR1cm4gY29udGFpbnNQb2ludDIoYSxiWzBdWzBdLGJbMF1bMV0pICYmIGNvbnRhaW5zUG9pbnQyKGEsYlsxXVswXSxiWzFdWzFdKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZVBvaW50KGEscG9pbnQpe1xuICAgIHJldHVybiBpbmNsdWRlUG9pbnQyKGEscG9pbnRbMF0scG9pbnRbMV0pO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlUG9pbnQyKGEseCx5KXtcbiAgICB2YXIgbWlueCA9IGFbMF1bMF07XG4gICAgdmFyIG1pbnkgPSBhWzBdWzFdO1xuICAgIHZhciBtYXh4ID0gYVsxXVswXTtcbiAgICB2YXIgbWF4eSA9IGFbMV1bMV07XG5cbiAgICBhWzBdWzBdID0gbWlueCA+IHggPyB4IDogbWlueDtcbiAgICBhWzBdWzFdID0gbWlueSA+IHkgPyB5IDogbWlueTtcbiAgICBhWzFdWzBdID0gbWF4eCA8IHggPyB4IDogbWF4eDtcbiAgICBhWzFdWzFdID0gbWF4eSA8IHkgPyB5IDogbWF4eTtcblxuICAgIHJldHVybiBhO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlUG9pbnRzKGEscG9pbnRzKXtcbiAgICB2YXIgbWlueCA9IGFbMF1bMF07XG4gICAgdmFyIG1pbnkgPSBhWzBdWzFdO1xuICAgIHZhciBtYXh4ID0gYVsxXVswXTtcbiAgICB2YXIgbWF4eSA9IGFbMV1bMV07XG5cbiAgICBmb3IodmFyIGkgPSAwLCBsID0gcG9pbnRzLmxlbmd0aCwgeCwgeTsgaSA8IGw7ICsraSl7XG4gICAgICAgIHggPSBwb2ludHNbaV1bMF07XG4gICAgICAgIHkgPSBwb2ludHNbaV1bMV07XG5cbiAgICAgICAgbWlueCA9IG1pbnggPiB4ID8geCA6IG1pbng7XG4gICAgICAgIG1pbnkgPSBtaW55ID4geSA/IHkgOiBtaW55O1xuICAgICAgICBtYXh4ID0gbWF4eCA8IHggPyB4IDogbWF4eDtcbiAgICAgICAgbWF4eSA9IG1heHkgPCB5ID8geSA6IG1heHk7XG4gICAgfVxuXG4gICAgYVswXVswXSA9IG1pbng7XG4gICAgYVswXVsxXSA9IG1pbnk7XG4gICAgYVsxXVswXSA9IG1heHg7XG4gICAgYVsxXVsxXSA9IG1heHk7XG5cbiAgICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZVBvaW50c0ZsYXQoYSxwb2ludHMpe1xuICAgIHZhciBtaW54ID0gYVswXVswXTtcbiAgICB2YXIgbWlueSA9IGFbMF1bMV07XG4gICAgdmFyIG1heHggPSBhWzFdWzBdO1xuICAgIHZhciBtYXh5ID0gYVsxXVsxXTtcblxuICAgIGZvcih2YXIgaSA9IDAsIGwgPSBwb2ludHMubGVuZ3RoLCB4LCB5OyBpIDwgbDsgaSs9Mil7XG4gICAgICAgIHggPSBwb2ludHNbaSAgXTtcbiAgICAgICAgeSA9IHBvaW50c1tpKzFdO1xuXG4gICAgICAgIG1pbnggPSBtaW54ID4geCA/IHggOiBtaW54O1xuICAgICAgICBtaW55ID0gbWlueSA+IHkgPyB5IDogbWlueTtcbiAgICAgICAgbWF4eCA9IG1heHggPCB4ID8geCA6IG1heHg7XG4gICAgICAgIG1heHkgPSBtYXh5IDwgeSA/IHkgOiBtYXh5O1xuICAgIH1cblxuICAgIGFbMF1bMF0gPSBtaW54O1xuICAgIGFbMF1bMV0gPSBtaW55O1xuICAgIGFbMV1bMF0gPSBtYXh4O1xuICAgIGFbMV1bMV0gPSBtYXh5O1xuXG4gICAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVSZWN0KGEscmVjdCl7XG4gICAgaW5jbHVkZVBvaW50KGEscmVjdFswXSk7XG4gICAgaW5jbHVkZVBvaW50KGEscmVjdFsxXSk7XG4gICAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVSZWN0cyhhLHJlY3RzKXtcbiAgICBmb3IodmFyIGkgPSAwLCBsID0gcmVjdHMubGVuZ3RoOyBpIDwgbDsgKytpKXtcbiAgICAgICAgaW5jbHVkZVJlY3QoYSxyZWN0c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBhO1xufVxuXG5mdW5jdGlvbiBtYXBQb2ludChhLHBvaW50KXtcbiAgICB2YXIgbWlueCA9IGFbMF1bMF07XG4gICAgdmFyIG1pbnkgPSBhWzBdWzFdO1xuICAgIHZhciBtYXh4ID0gYVsxXVswXTtcbiAgICB2YXIgbWF4eSA9IGFbMV1bMV07XG4gICAgdmFyIHggPSBwb2ludFswXTtcbiAgICB2YXIgeSA9IHBvaW50WzFdO1xuXG4gICAgcG9pbnRbMF0gPSBNYXRoLm1heChtaW54LE1hdGgubWluKHgsbWF4eCkpIC0gbWlueDtcbiAgICBwb2ludFsxXSA9IE1hdGgubWF4KG1pbnksTWF0aC5taW4oeSxtYXh5KSkgLSBtaW55O1xuICAgIHJldHVybiBwb2ludDtcbn1cblxuZnVuY3Rpb24gY2xhbXBQb2ludChhLHBvaW50KXtcblxuICAgIHZhciBtaW54ID0gYVswXVswXTtcbiAgICB2YXIgbWlueSA9IGFbMF1bMV07XG4gICAgdmFyIG1heHggPSBhWzFdWzBdO1xuICAgIHZhciBtYXh5ID0gYVsxXVsxXTtcblxuICAgIHBvaW50WzBdID0gTWF0aC5tYXgobWlueCxNYXRoLm1pbihwb2ludFswXSxtYXh4KSk7XG4gICAgcG9pbnRbMV0gPSBNYXRoLm1heChtaW55LE1hdGgubWluKHBvaW50WzFdLG1heHkpKTtcbiAgICByZXR1cm4gcG9pbnQ7XG59XG5cbmZ1bmN0aW9uIHRvTWF4KGEpe1xuICAgIGFbMF1bMF0gPSBhWzFdWzBdID0gLU51bWJlci5NQVhfVkFMVUU7XG4gICAgYVswXVsxXSA9IGFbMV1bMV0gPSAgTnVtYmVyLk1BWF9WQUxVRTtcbn1cblxuZnVuY3Rpb24gc2V0RW1wdHkoYSl7XG4gICAgYVswXVswXSA9IGFbMF1bMV0gPSAgSW5maW5pdHk7XG4gICAgYVsxXVswXSA9IGFbMV1bMV0gPSAtSW5maW5pdHk7XG4gICAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkoYSl7XG4gICAgcmV0dXJuIChhWzBdWzBdID4gYVsxXVswXSkgfHwgKGFbMF1bMV0gPiBhWzFdWzFdKTtcbn1cblxuZnVuY3Rpb24gaXNaZXJvKGEpe1xuICAgIHJldHVybiBhWzBdWzBdID09IDAgJiYgYVswXVsxXSA9PSAwICYmIGFbMV1bMF0gPT0gMCAmJiBhWzFdWzFdID09IDA7XG59XG5cbmZ1bmN0aW9uIHNldFplcm8oYSl7XG4gICAgYVswXVswXSA9IGFbMF1bMV0gPSBhWzFdWzBdID0gYVsxXVsxXSA9IDA7XG4gICAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyb21Qb2ludHMocG9pbnRzKXtcbiAgICByZXR1cm4gaW5jbHVkZVBvaW50cyhjcmVhdGUoKSxwb2ludHMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGcm9tUG9pbnRzRmxhdChwb2ludHMpe1xuICAgIHJldHVybiBpbmNsdWRlUG9pbnRzRmxhdChjcmVhdGUoKSxwb2ludHMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGcm9tUmVjdHMocmVjdHMpe1xuICAgIHJldHVybiBpbmNsdWRlUmVjdHMoY3JlYXRlKCkscmVjdHMpO1xufVxuXG4vKipcbiAqIFtSZWN0IGRlc2NyaXB0aW9uXVxuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIFJlY3QgPSB7XG4gICAgLyoqXG4gICAgICogW2NyZWF0ZSBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGNyZWF0ZSA6IGNyZWF0ZSxcbiAgICAvKipcbiAgICAgKiBbemVybyBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIHplcm8gICA6IHplcm8sXG4gICAgLyoqXG4gICAgICogW2NvcHkgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBjb3B5ICAgOiBjb3B5LFxuICAgIC8qKlxuICAgICAqIFtzZXQgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBzZXQgIDogc2V0LFxuICAgIC8qKlxuICAgICAqIFtzZXQ0IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2V0NCA6IHNldDQsXG4gICAgLyoqXG4gICAgICogW3NjYWxlIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2NhbGUgOiBzY2FsZSxcbiAgICAvKipcbiAgICAgKiBbc2V0TWluTWF4IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2V0TWluTWF4IDogc2V0TWluTWF4LFxuICAgIC8qKlxuICAgICAqIFtzZXRNaW5NYXg0IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2V0TWluTWF4NCA6IHNldE1pbk1heDQsXG4gICAgLyoqXG4gICAgICogW2dldE1pbiBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGdldE1pbiA6IGdldE1pbixcbiAgICAvKipcbiAgICAgKiBbZ2V0TWF4IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgZ2V0TWF4IDogZ2V0TWF4LFxuICAgIC8qKlxuICAgICAqIFtzZXRTaXplMiBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIHNldFNpemUyICA6IHNldFNpemUyLFxuICAgIC8qKlxuICAgICAqIFtzZXRTaXplIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2V0U2l6ZSAgIDogc2V0U2l6ZSxcbiAgICAvKipcbiAgICAgKiBbZ2V0U2l6ZSBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGdldFNpemUgICA6IGdldFNpemUsXG4gICAgLyoqXG4gICAgICogW3NldFdpZHRoIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2V0V2lkdGggIDogc2V0V2lkdGgsXG4gICAgLyoqXG4gICAgICogW2dldFdpZHRoIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgZ2V0V2lkdGggIDogZ2V0V2lkdGgsXG4gICAgLyoqXG4gICAgICogW3NldEhlaWdodCBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIHNldEhlaWdodCA6IHNldEhlaWdodCxcbiAgICAvKipcbiAgICAgKiBbZ2V0SGVpZ2h0IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgZ2V0SGVpZ2h0IDogZ2V0SGVpZ2h0LFxuICAgIC8qKlxuICAgICAqIFtnZXRBc3BlY3RSYXRpbyBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGdldEFzcGVjdFJhdGlvIDogZ2V0QXNwZWN0UmF0aW8sXG4gICAgLyoqXG4gICAgICogW3NldFBvc2l0aW9uIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2V0UG9zaXRpb24gIDogc2V0UG9zaXRpb24sXG4gICAgLyoqXG4gICAgICogW3NldFBvc2l0aW9uMiBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIHNldFBvc2l0aW9uMiA6IHNldFBvc2l0aW9uMixcbiAgICAvKipcbiAgICAgKiBbZ2V0UG9zaXRpb24gZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBnZXRQb3NpdGlvbiAgOiBnZXRNaW4sXG4gICAgLyoqXG4gICAgICogW2dldFRMIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgZ2V0VEwgOiBnZXRNaW4sXG4gICAgLyoqXG4gICAgICogW2dldFRSIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgZ2V0VFIgOiBnZXRUUixcbiAgICAvKipcbiAgICAgKiBbZ2V0QkwgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBnZXRCTCA6IGdldEJMLFxuICAgIC8qKlxuICAgICAqIFtnZXRCUiBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGdldEJSIDogZ2V0TWF4LFxuICAgIC8qKlxuICAgICAqIFtnZXRDZW50ZXIgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBnZXRDZW50ZXIgOiBnZXRDZW50ZXIsXG4gICAgLyoqXG4gICAgICogW2NvbnRhaW5zUG9pbnQgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBjb250YWluc1BvaW50IDogY29udGFpbnNQb2ludCxcbiAgICAvKipcbiAgICAgKiBbY29udGFpbnNQb2ludDIgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBjb250YWluc1BvaW50MiA6IGNvbnRhaW5zUG9pbnQyLFxuICAgIC8qKlxuICAgICAqIFtjb250YWluc1JlY3QgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBjb250YWluc1JlY3QgICA6IGNvbnRhaW5zUmVjdCxcbiAgICAvKipcbiAgICAgKiBbaW5jbHVkZVBvaW50IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgaW5jbHVkZVBvaW50ICAgICAgOiBpbmNsdWRlUG9pbnQsXG4gICAgLyoqXG4gICAgICogW2luY2x1ZGVQb2ludDIgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBpbmNsdWRlUG9pbnQyICAgICA6IGluY2x1ZGVQb2ludDIsXG4gICAgLyoqXG4gICAgICogW2luY2x1ZGVQb2ludHMgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBpbmNsdWRlUG9pbnRzICAgICA6IGluY2x1ZGVQb2ludHMsXG4gICAgLyoqXG4gICAgICogW2luY2x1ZGVQb2ludHNGbGF0IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgaW5jbHVkZVBvaW50c0ZsYXQgOiBpbmNsdWRlUG9pbnRzRmxhdCxcbiAgICAvKipcbiAgICAgKiBbaW5jbHVkZVJlY3QgZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICBpbmNsdWRlUmVjdCAgIDogaW5jbHVkZVJlY3QsXG4gICAgLyoqXG4gICAgICogW2luY2x1ZGVSZWN0cyBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGluY2x1ZGVSZWN0cyAgOiBpbmNsdWRlUmVjdHMsXG4gICAgLyoqXG4gICAgICogW21hcFBvaW50IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgbWFwUG9pbnQgICA6IG1hcFBvaW50LFxuICAgIC8qKlxuICAgICAqIFtjbGFtcFBvaW50IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgY2xhbXBQb2ludCA6IGNsYW1wUG9pbnQsXG4gICAgLyoqXG4gICAgICogW2lzWmVybyBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1plcm8gICA6IGlzWmVybyxcbiAgICAvKipcbiAgICAgKiBbaXNFbXB0eSBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBpc0VtcHR5ICA6IGlzRW1wdHksXG4gICAgLyoqXG4gICAgICogW3NldEVtcHR5IGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgc2V0RW1wdHkgOiBzZXRFbXB0eSxcbiAgICAvKipcbiAgICAgKiBbdG9NYXggZGVzY3JpcHRpb25dXG4gICAgICogQHR5cGUge1t0eXBlXX1cbiAgICAgKi9cbiAgICB0b01heCAgOiB0b01heCxcbiAgICAvKipcbiAgICAgKiBbc2V0WmVybyBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIHNldFplcm8gOiBzZXRaZXJvLFxuICAgIC8qKlxuICAgICAqIFtjcmVhdGVGcm9tUG9pbnRzIGRlc2NyaXB0aW9uXVxuICAgICAqIEB0eXBlIHtbdHlwZV19XG4gICAgICovXG4gICAgY3JlYXRlRnJvbVBvaW50cyAgICAgOiBjcmVhdGVGcm9tUG9pbnRzLFxuICAgIC8qKlxuICAgICAqIFtjcmVhdGVGcm9tUG9pbnRzRmxhdCBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGNyZWF0ZUZyb21Qb2ludHNGbGF0IDogY3JlYXRlRnJvbVBvaW50c0ZsYXQsXG4gICAgLyoqXG4gICAgICogW2NyZWF0ZUZyb21SZWN0cyBkZXNjcmlwdGlvbl1cbiAgICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgICAqL1xuICAgIGNyZWF0ZUZyb21SZWN0cyAgICAgIDogY3JlYXRlRnJvbVJlY3RzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlY3Q7XG4iXX0= | |
| const pull = require('pull-stream') | |
| const log = require('pull-stream/sinks/log') | |
| const filter = require('pull-stream/throughs/filter') | |
| const take = require('pull-stream/throughs/take') | |
| const containsPoint = require('pex-geom/Rect').containsPoint | |
| const pushableStream = require('pull-pushable') | |
| // Draw a red canvas with yellow "button" on the left | |
| const btnRect = [[10, 10], [100, 100]] | |
| const smallBtnRect = [[20, 20], [50, 50]] | |
| function inRect (rect) { | |
| return function (e) { | |
| // TODO: curry this! | |
| return containsPoint(rect, [e.clientX, e.clientY]) | |
| } | |
| } | |
| const canvas = document.createElement('canvas') | |
| canvas.style.background = 'red' | |
| document.body.appendChild(canvas) | |
| const ctx = canvas.getContext('2d') | |
| ctx.fillStyle = '#FFFF00' | |
| ctx.fillRect(btnRect[0][0], btnRect[0][1], btnRect[1][0] - btnRect[0][0], btnRect[1][1] - btnRect[0][1]) | |
| ctx.fillStyle = '#00FF00' | |
| ctx.fillRect(smallBtnRect[0][0], smallBtnRect[0][1], smallBtnRect[1][0] - smallBtnRect[0][0], smallBtnRect[1][1] - smallBtnRect[0][1]) | |
| function createEventStream(element, event) { | |
| const events = pushableStream() | |
| element.addEventListener(event, (e) => { | |
| events.push(e) | |
| }) | |
| return events | |
| } | |
| //read source and log it. | |
| function logger (msg) { | |
| return function (read) { | |
| read(null, function next(end, data) { | |
| if(end === true) return | |
| if(end) throw end | |
| console.log(msg, data) | |
| read(null, next) | |
| }) | |
| } | |
| } | |
| var mousedown = createEventStream(canvas, 'mousedown') | |
| var mousemove = createEventStream(canvas, 'mousemove') | |
| var mouseup = createEventStream(canvas, 'mouseup') | |
| function makeDragStream(mousedown) { | |
| const events = pushableStream() | |
| pull(mousedown, pull.take(() => {}), pull.drain((e) => { | |
| events.push(e) | |
| })) | |
| return events | |
| } | |
| //pull(mousedown, filter(inRect(btnRect)), logger('stream down')) | |
| ;}, 0) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "name": "requirebin-sketch", | |
| "version": "1.0.0", | |
| "dependencies": { | |
| "pull-stream": "3.5.0", | |
| "pull-pushable": "2.0.1", | |
| "pex-geom": "1.0.0-beta.2" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- contents of this file will be placed inside the <body> --> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- contents of this file will be placed inside the <head> --> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment