/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to js/ace/worker-coffee.js

  • Committer: elof.bigestans at gmail
  • Date: 2013-04-03 08:06:30 UTC
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: elof.bigestans@gmail.com-20130403080630-r721wlstq15mdjby
Added new folders to match new folder structure

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
"no use strict";
2
 
;(function(window) {
3
 
if (typeof window.window != "undefined" && window.document) {
4
 
    return;
5
 
}
6
 
 
7
 
window.console = {
8
 
    log: function() {
9
 
        var msgs = Array.prototype.slice.call(arguments, 0);
10
 
        postMessage({type: "log", data: msgs});
11
 
    },
12
 
    error: function() {
13
 
        var msgs = Array.prototype.slice.call(arguments, 0);
14
 
        postMessage({type: "log", data: msgs});
15
 
    }
16
 
};
17
 
window.window = window;
18
 
window.ace = window;
19
 
 
20
 
window.normalizeModule = function(parentId, moduleName) {
21
 
    // normalize plugin requires
22
 
    if (moduleName.indexOf("!") !== -1) {
23
 
        var chunks = moduleName.split("!");
24
 
        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
25
 
    }
26
 
    // normalize relative requires
27
 
    if (moduleName.charAt(0) == ".") {
28
 
        var base = parentId.split("/").slice(0, -1).join("/");
29
 
        moduleName = base + "/" + moduleName;
30
 
        
31
 
        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
32
 
            var previous = moduleName;
33
 
            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
34
 
        }
35
 
    }
36
 
    
37
 
    return moduleName;
38
 
};
39
 
 
40
 
window.require = function(parentId, id) {
41
 
    if (!id.charAt)
42
 
        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
43
 
 
44
 
    id = normalizeModule(parentId, id);
45
 
 
46
 
    var module = require.modules[id];
47
 
    if (module) {
48
 
        if (!module.initialized) {
49
 
            module.initialized = true;
50
 
            module.exports = module.factory().exports;
51
 
        }
52
 
        return module.exports;
53
 
    }
54
 
    
55
 
    var chunks = id.split("/");
56
 
    chunks[0] = require.tlns[chunks[0]] || chunks[0];
57
 
    var path = chunks.join("/") + ".js";
58
 
    
59
 
    require.id = id;
60
 
    importScripts(path);
61
 
    return require(parentId, id);    
62
 
};
63
 
 
64
 
require.modules = {};
65
 
require.tlns = {};
66
 
 
67
 
window.define = function(id, deps, factory) {
68
 
    if (arguments.length == 2) {
69
 
        factory = deps;
70
 
        if (typeof id != "string") {
71
 
            deps = id;
72
 
            id = require.id;
73
 
        }
74
 
    } else if (arguments.length == 1) {
75
 
        factory = id;
76
 
        id = require.id;
77
 
    }
78
 
 
79
 
    if (id.indexOf("text!") === 0) 
80
 
        return;
81
 
    
82
 
    var req = function(deps, factory) {
83
 
        return require(id, deps, factory);
84
 
    };
85
 
 
86
 
    require.modules[id] = {
87
 
        factory: function() {
88
 
            var module = {
89
 
                exports: {}
90
 
            };
91
 
            var returnExports = factory(req, module.exports, module);
92
 
            if (returnExports)
93
 
                module.exports = returnExports;
94
 
            return module;
95
 
        }
96
 
    };
97
 
};
98
 
 
99
 
window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
100
 
    require.tlns = topLevelNamespaces;
101
 
}
102
 
 
103
 
window.initSender = function initSender() {
104
 
 
105
 
    var EventEmitter = require(null, "ace/lib/event_emitter").EventEmitter;
106
 
    var oop = require(null, "ace/lib/oop");
107
 
    
108
 
    var Sender = function() {};
109
 
    
110
 
    (function() {
111
 
        
112
 
        oop.implement(this, EventEmitter);
113
 
                
114
 
        this.callback = function(data, callbackId) {
115
 
            postMessage({
116
 
                type: "call",
117
 
                id: callbackId,
118
 
                data: data
119
 
            });
120
 
        };
121
 
    
122
 
        this.emit = function(name, data) {
123
 
            postMessage({
124
 
                type: "event",
125
 
                name: name,
126
 
                data: data
127
 
            });
128
 
        };
129
 
        
130
 
    }).call(Sender.prototype);
131
 
    
132
 
    return new Sender();
133
 
}
134
 
 
135
 
window.main = null;
136
 
window.sender = null;
137
 
 
138
 
window.onmessage = function(e) {
139
 
    var msg = e.data;
140
 
    if (msg.command) {
141
 
        if (main[msg.command])
142
 
            main[msg.command].apply(main, msg.args);
143
 
        else
144
 
            throw new Error("Unknown command:" + msg.command);
145
 
    }
146
 
    else if (msg.init) {        
147
 
        initBaseUrls(msg.tlns);
148
 
        require(null, "ace/lib/fixoldbrowsers");
149
 
        sender = initSender();
150
 
        var clazz = require(null, msg.module)[msg.classname];
151
 
        main = new clazz(sender);
152
 
    } 
153
 
    else if (msg.event && sender) {
154
 
        sender._emit(msg.event, msg.data);
155
 
    }
156
 
};
157
 
})(this);// vim:set ts=4 sts=4 sw=4 st:
158
 
 
159
 
define('ace/lib/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/regexp', 'ace/lib/es5-shim'], function(require, exports, module) {
160
 
 
161
 
 
162
 
require("./regexp");
163
 
require("./es5-shim");
164
 
 
165
 
});
166
 
 
167
 
define('ace/lib/regexp', ['require', 'exports', 'module' ], function(require, exports, module) {
168
 
 
169
 
    var real = {
170
 
            exec: RegExp.prototype.exec,
171
 
            test: RegExp.prototype.test,
172
 
            match: String.prototype.match,
173
 
            replace: String.prototype.replace,
174
 
            split: String.prototype.split
175
 
        },
176
 
        compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
177
 
        compliantLastIndexIncrement = function () {
178
 
            var x = /^/g;
179
 
            real.test.call(x, "");
180
 
            return !x.lastIndex;
181
 
        }();
182
 
 
183
 
    if (compliantLastIndexIncrement && compliantExecNpcg)
184
 
        return;
185
 
    RegExp.prototype.exec = function (str) {
186
 
        var match = real.exec.apply(this, arguments),
187
 
            name, r2;
188
 
        if ( typeof(str) == 'string' && match) {
189
 
            if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
190
 
                r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", ""));
191
 
                real.replace.call(str.slice(match.index), r2, function () {
192
 
                    for (var i = 1; i < arguments.length - 2; i++) {
193
 
                        if (arguments[i] === undefined)
194
 
                            match[i] = undefined;
195
 
                    }
196
 
                });
197
 
            }
198
 
            if (this._xregexp && this._xregexp.captureNames) {
199
 
                for (var i = 1; i < match.length; i++) {
200
 
                    name = this._xregexp.captureNames[i - 1];
201
 
                    if (name)
202
 
                       match[name] = match[i];
203
 
                }
204
 
            }
205
 
            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
206
 
                this.lastIndex--;
207
 
        }
208
 
        return match;
209
 
    };
210
 
    if (!compliantLastIndexIncrement) {
211
 
        RegExp.prototype.test = function (str) {
212
 
            var match = real.exec.call(this, str);
213
 
            if (match && this.global && !match[0].length && (this.lastIndex > match.index))
214
 
                this.lastIndex--;
215
 
            return !!match;
216
 
        };
217
 
    }
218
 
 
219
 
    function getNativeFlags (regex) {
220
 
        return (regex.global     ? "g" : "") +
221
 
               (regex.ignoreCase ? "i" : "") +
222
 
               (regex.multiline  ? "m" : "") +
223
 
               (regex.extended   ? "x" : "") + // Proposed for ES4; included in AS3
224
 
               (regex.sticky     ? "y" : "");
225
 
    }
226
 
 
227
 
    function indexOf (array, item, from) {
228
 
        if (Array.prototype.indexOf) // Use the native array method if available
229
 
            return array.indexOf(item, from);
230
 
        for (var i = from || 0; i < array.length; i++) {
231
 
            if (array[i] === item)
232
 
                return i;
233
 
        }
234
 
        return -1;
235
 
    }
236
 
 
237
 
});
238
 
 
239
 
define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
240
 
 
241
 
function Empty() {}
242
 
 
243
 
if (!Function.prototype.bind) {
244
 
    Function.prototype.bind = function bind(that) { // .length is 1
245
 
        var target = this;
246
 
        if (typeof target != "function") {
247
 
            throw new TypeError("Function.prototype.bind called on incompatible " + target);
248
 
        }
249
 
        var args = slice.call(arguments, 1); // for normal call
250
 
        var bound = function () {
251
 
 
252
 
            if (this instanceof bound) {
253
 
 
254
 
                var result = target.apply(
255
 
                    this,
256
 
                    args.concat(slice.call(arguments))
257
 
                );
258
 
                if (Object(result) === result) {
259
 
                    return result;
260
 
                }
261
 
                return this;
262
 
 
263
 
            } else {
264
 
                return target.apply(
265
 
                    that,
266
 
                    args.concat(slice.call(arguments))
267
 
                );
268
 
 
269
 
            }
270
 
 
271
 
        };
272
 
        if(target.prototype) {
273
 
            Empty.prototype = target.prototype;
274
 
            bound.prototype = new Empty();
275
 
            Empty.prototype = null;
276
 
        }
277
 
        return bound;
278
 
    };
279
 
}
280
 
var call = Function.prototype.call;
281
 
var prototypeOfArray = Array.prototype;
282
 
var prototypeOfObject = Object.prototype;
283
 
var slice = prototypeOfArray.slice;
284
 
var _toString = call.bind(prototypeOfObject.toString);
285
 
var owns = call.bind(prototypeOfObject.hasOwnProperty);
286
 
var defineGetter;
287
 
var defineSetter;
288
 
var lookupGetter;
289
 
var lookupSetter;
290
 
var supportsAccessors;
291
 
if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
292
 
    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
293
 
    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
294
 
    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
295
 
    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
296
 
}
297
 
if ([1,2].splice(0).length != 2) {
298
 
    if(function() { // test IE < 9 to splice bug - see issue #138
299
 
        function makeArray(l) {
300
 
            var a = new Array(l+2);
301
 
            a[0] = a[1] = 0;
302
 
            return a;
303
 
        }
304
 
        var array = [], lengthBefore;
305
 
        
306
 
        array.splice.apply(array, makeArray(20));
307
 
        array.splice.apply(array, makeArray(26));
308
 
 
309
 
        lengthBefore = array.length; //46
310
 
        array.splice(5, 0, "XXX"); // add one element
311
 
 
312
 
        lengthBefore + 1 == array.length
313
 
 
314
 
        if (lengthBefore + 1 == array.length) {
315
 
            return true;// has right splice implementation without bugs
316
 
        }
317
 
    }()) {//IE 6/7
318
 
        var array_splice = Array.prototype.splice;
319
 
        Array.prototype.splice = function(start, deleteCount) {
320
 
            if (!arguments.length) {
321
 
                return [];
322
 
            } else {
323
 
                return array_splice.apply(this, [
324
 
                    start === void 0 ? 0 : start,
325
 
                    deleteCount === void 0 ? (this.length - start) : deleteCount
326
 
                ].concat(slice.call(arguments, 2)))
327
 
            }
328
 
        };
329
 
    } else {//IE8
330
 
        Array.prototype.splice = function(pos, removeCount){
331
 
            var length = this.length;
332
 
            if (pos > 0) {
333
 
                if (pos > length)
334
 
                    pos = length;
335
 
            } else if (pos == void 0) {
336
 
                pos = 0;
337
 
            } else if (pos < 0) {
338
 
                pos = Math.max(length + pos, 0);
339
 
            }
340
 
 
341
 
            if (!(pos+removeCount < length))
342
 
                removeCount = length - pos;
343
 
 
344
 
            var removed = this.slice(pos, pos+removeCount);
345
 
            var insert = slice.call(arguments, 2);
346
 
            var add = insert.length;            
347
 
            if (pos === length) {
348
 
                if (add) {
349
 
                    this.push.apply(this, insert);
350
 
                }
351
 
            } else {
352
 
                var remove = Math.min(removeCount, length - pos);
353
 
                var tailOldPos = pos + remove;
354
 
                var tailNewPos = tailOldPos + add - remove;
355
 
                var tailCount = length - tailOldPos;
356
 
                var lengthAfterRemove = length - remove;
357
 
 
358
 
                if (tailNewPos < tailOldPos) { // case A
359
 
                    for (var i = 0; i < tailCount; ++i) {
360
 
                        this[tailNewPos+i] = this[tailOldPos+i];
361
 
                    }
362
 
                } else if (tailNewPos > tailOldPos) { // case B
363
 
                    for (i = tailCount; i--; ) {
364
 
                        this[tailNewPos+i] = this[tailOldPos+i];
365
 
                    }
366
 
                } // else, add == remove (nothing to do)
367
 
 
368
 
                if (add && pos === lengthAfterRemove) {
369
 
                    this.length = lengthAfterRemove; // truncate array
370
 
                    this.push.apply(this, insert);
371
 
                } else {
372
 
                    this.length = lengthAfterRemove + add; // reserves space
373
 
                    for (i = 0; i < add; ++i) {
374
 
                        this[pos+i] = insert[i];
375
 
                    }
376
 
                }
377
 
            }
378
 
            return removed;
379
 
        };
380
 
    }
381
 
}
382
 
if (!Array.isArray) {
383
 
    Array.isArray = function isArray(obj) {
384
 
        return _toString(obj) == "[object Array]";
385
 
    };
386
 
}
387
 
var boxedString = Object("a"),
388
 
    splitString = boxedString[0] != "a" || !(0 in boxedString);
389
 
 
390
 
if (!Array.prototype.forEach) {
391
 
    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
392
 
        var object = toObject(this),
393
 
            self = splitString && _toString(this) == "[object String]" ?
394
 
                this.split("") :
395
 
                object,
396
 
            thisp = arguments[1],
397
 
            i = -1,
398
 
            length = self.length >>> 0;
399
 
        if (_toString(fun) != "[object Function]") {
400
 
            throw new TypeError(); // TODO message
401
 
        }
402
 
 
403
 
        while (++i < length) {
404
 
            if (i in self) {
405
 
                fun.call(thisp, self[i], i, object);
406
 
            }
407
 
        }
408
 
    };
409
 
}
410
 
if (!Array.prototype.map) {
411
 
    Array.prototype.map = function map(fun /*, thisp*/) {
412
 
        var object = toObject(this),
413
 
            self = splitString && _toString(this) == "[object String]" ?
414
 
                this.split("") :
415
 
                object,
416
 
            length = self.length >>> 0,
417
 
            result = Array(length),
418
 
            thisp = arguments[1];
419
 
        if (_toString(fun) != "[object Function]") {
420
 
            throw new TypeError(fun + " is not a function");
421
 
        }
422
 
 
423
 
        for (var i = 0; i < length; i++) {
424
 
            if (i in self)
425
 
                result[i] = fun.call(thisp, self[i], i, object);
426
 
        }
427
 
        return result;
428
 
    };
429
 
}
430
 
if (!Array.prototype.filter) {
431
 
    Array.prototype.filter = function filter(fun /*, thisp */) {
432
 
        var object = toObject(this),
433
 
            self = splitString && _toString(this) == "[object String]" ?
434
 
                this.split("") :
435
 
                    object,
436
 
            length = self.length >>> 0,
437
 
            result = [],
438
 
            value,
439
 
            thisp = arguments[1];
440
 
        if (_toString(fun) != "[object Function]") {
441
 
            throw new TypeError(fun + " is not a function");
442
 
        }
443
 
 
444
 
        for (var i = 0; i < length; i++) {
445
 
            if (i in self) {
446
 
                value = self[i];
447
 
                if (fun.call(thisp, value, i, object)) {
448
 
                    result.push(value);
449
 
                }
450
 
            }
451
 
        }
452
 
        return result;
453
 
    };
454
 
}
455
 
if (!Array.prototype.every) {
456
 
    Array.prototype.every = function every(fun /*, thisp */) {
457
 
        var object = toObject(this),
458
 
            self = splitString && _toString(this) == "[object String]" ?
459
 
                this.split("") :
460
 
                object,
461
 
            length = self.length >>> 0,
462
 
            thisp = arguments[1];
463
 
        if (_toString(fun) != "[object Function]") {
464
 
            throw new TypeError(fun + " is not a function");
465
 
        }
466
 
 
467
 
        for (var i = 0; i < length; i++) {
468
 
            if (i in self && !fun.call(thisp, self[i], i, object)) {
469
 
                return false;
470
 
            }
471
 
        }
472
 
        return true;
473
 
    };
474
 
}
475
 
if (!Array.prototype.some) {
476
 
    Array.prototype.some = function some(fun /*, thisp */) {
477
 
        var object = toObject(this),
478
 
            self = splitString && _toString(this) == "[object String]" ?
479
 
                this.split("") :
480
 
                object,
481
 
            length = self.length >>> 0,
482
 
            thisp = arguments[1];
483
 
        if (_toString(fun) != "[object Function]") {
484
 
            throw new TypeError(fun + " is not a function");
485
 
        }
486
 
 
487
 
        for (var i = 0; i < length; i++) {
488
 
            if (i in self && fun.call(thisp, self[i], i, object)) {
489
 
                return true;
490
 
            }
491
 
        }
492
 
        return false;
493
 
    };
494
 
}
495
 
if (!Array.prototype.reduce) {
496
 
    Array.prototype.reduce = function reduce(fun /*, initial*/) {
497
 
        var object = toObject(this),
498
 
            self = splitString && _toString(this) == "[object String]" ?
499
 
                this.split("") :
500
 
                object,
501
 
            length = self.length >>> 0;
502
 
        if (_toString(fun) != "[object Function]") {
503
 
            throw new TypeError(fun + " is not a function");
504
 
        }
505
 
        if (!length && arguments.length == 1) {
506
 
            throw new TypeError("reduce of empty array with no initial value");
507
 
        }
508
 
 
509
 
        var i = 0;
510
 
        var result;
511
 
        if (arguments.length >= 2) {
512
 
            result = arguments[1];
513
 
        } else {
514
 
            do {
515
 
                if (i in self) {
516
 
                    result = self[i++];
517
 
                    break;
518
 
                }
519
 
                if (++i >= length) {
520
 
                    throw new TypeError("reduce of empty array with no initial value");
521
 
                }
522
 
            } while (true);
523
 
        }
524
 
 
525
 
        for (; i < length; i++) {
526
 
            if (i in self) {
527
 
                result = fun.call(void 0, result, self[i], i, object);
528
 
            }
529
 
        }
530
 
 
531
 
        return result;
532
 
    };
533
 
}
534
 
if (!Array.prototype.reduceRight) {
535
 
    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
536
 
        var object = toObject(this),
537
 
            self = splitString && _toString(this) == "[object String]" ?
538
 
                this.split("") :
539
 
                object,
540
 
            length = self.length >>> 0;
541
 
        if (_toString(fun) != "[object Function]") {
542
 
            throw new TypeError(fun + " is not a function");
543
 
        }
544
 
        if (!length && arguments.length == 1) {
545
 
            throw new TypeError("reduceRight of empty array with no initial value");
546
 
        }
547
 
 
548
 
        var result, i = length - 1;
549
 
        if (arguments.length >= 2) {
550
 
            result = arguments[1];
551
 
        } else {
552
 
            do {
553
 
                if (i in self) {
554
 
                    result = self[i--];
555
 
                    break;
556
 
                }
557
 
                if (--i < 0) {
558
 
                    throw new TypeError("reduceRight of empty array with no initial value");
559
 
                }
560
 
            } while (true);
561
 
        }
562
 
 
563
 
        do {
564
 
            if (i in this) {
565
 
                result = fun.call(void 0, result, self[i], i, object);
566
 
            }
567
 
        } while (i--);
568
 
 
569
 
        return result;
570
 
    };
571
 
}
572
 
if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
573
 
    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
574
 
        var self = splitString && _toString(this) == "[object String]" ?
575
 
                this.split("") :
576
 
                toObject(this),
577
 
            length = self.length >>> 0;
578
 
 
579
 
        if (!length) {
580
 
            return -1;
581
 
        }
582
 
 
583
 
        var i = 0;
584
 
        if (arguments.length > 1) {
585
 
            i = toInteger(arguments[1]);
586
 
        }
587
 
        i = i >= 0 ? i : Math.max(0, length + i);
588
 
        for (; i < length; i++) {
589
 
            if (i in self && self[i] === sought) {
590
 
                return i;
591
 
            }
592
 
        }
593
 
        return -1;
594
 
    };
595
 
}
596
 
if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
597
 
    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
598
 
        var self = splitString && _toString(this) == "[object String]" ?
599
 
                this.split("") :
600
 
                toObject(this),
601
 
            length = self.length >>> 0;
602
 
 
603
 
        if (!length) {
604
 
            return -1;
605
 
        }
606
 
        var i = length - 1;
607
 
        if (arguments.length > 1) {
608
 
            i = Math.min(i, toInteger(arguments[1]));
609
 
        }
610
 
        i = i >= 0 ? i : length - Math.abs(i);
611
 
        for (; i >= 0; i--) {
612
 
            if (i in self && sought === self[i]) {
613
 
                return i;
614
 
            }
615
 
        }
616
 
        return -1;
617
 
    };
618
 
}
619
 
if (!Object.getPrototypeOf) {
620
 
    Object.getPrototypeOf = function getPrototypeOf(object) {
621
 
        return object.__proto__ || (
622
 
            object.constructor ?
623
 
            object.constructor.prototype :
624
 
            prototypeOfObject
625
 
        );
626
 
    };
627
 
}
628
 
if (!Object.getOwnPropertyDescriptor) {
629
 
    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
630
 
                         "non-object: ";
631
 
    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
632
 
        if ((typeof object != "object" && typeof object != "function") || object === null)
633
 
            throw new TypeError(ERR_NON_OBJECT + object);
634
 
        if (!owns(object, property))
635
 
            return;
636
 
 
637
 
        var descriptor, getter, setter;
638
 
        descriptor =  { enumerable: true, configurable: true };
639
 
        if (supportsAccessors) {
640
 
            var prototype = object.__proto__;
641
 
            object.__proto__ = prototypeOfObject;
642
 
 
643
 
            var getter = lookupGetter(object, property);
644
 
            var setter = lookupSetter(object, property);
645
 
            object.__proto__ = prototype;
646
 
 
647
 
            if (getter || setter) {
648
 
                if (getter) descriptor.get = getter;
649
 
                if (setter) descriptor.set = setter;
650
 
                return descriptor;
651
 
            }
652
 
        }
653
 
        descriptor.value = object[property];
654
 
        return descriptor;
655
 
    };
656
 
}
657
 
if (!Object.getOwnPropertyNames) {
658
 
    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
659
 
        return Object.keys(object);
660
 
    };
661
 
}
662
 
if (!Object.create) {
663
 
    var createEmpty;
664
 
    if (Object.prototype.__proto__ === null) {
665
 
        createEmpty = function () {
666
 
            return { "__proto__": null };
667
 
        };
668
 
    } else {
669
 
        createEmpty = function () {
670
 
            var empty = {};
671
 
            for (var i in empty)
672
 
                empty[i] = null;
673
 
            empty.constructor =
674
 
            empty.hasOwnProperty =
675
 
            empty.propertyIsEnumerable =
676
 
            empty.isPrototypeOf =
677
 
            empty.toLocaleString =
678
 
            empty.toString =
679
 
            empty.valueOf =
680
 
            empty.__proto__ = null;
681
 
            return empty;
682
 
        }
683
 
    }
684
 
 
685
 
    Object.create = function create(prototype, properties) {
686
 
        var object;
687
 
        if (prototype === null) {
688
 
            object = createEmpty();
689
 
        } else {
690
 
            if (typeof prototype != "object")
691
 
                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
692
 
            var Type = function () {};
693
 
            Type.prototype = prototype;
694
 
            object = new Type();
695
 
            object.__proto__ = prototype;
696
 
        }
697
 
        if (properties !== void 0)
698
 
            Object.defineProperties(object, properties);
699
 
        return object;
700
 
    };
701
 
}
702
 
 
703
 
function doesDefinePropertyWork(object) {
704
 
    try {
705
 
        Object.defineProperty(object, "sentinel", {});
706
 
        return "sentinel" in object;
707
 
    } catch (exception) {
708
 
    }
709
 
}
710
 
if (Object.defineProperty) {
711
 
    var definePropertyWorksOnObject = doesDefinePropertyWork({});
712
 
    var definePropertyWorksOnDom = typeof document == "undefined" ||
713
 
        doesDefinePropertyWork(document.createElement("div"));
714
 
    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
715
 
        var definePropertyFallback = Object.defineProperty;
716
 
    }
717
 
}
718
 
 
719
 
if (!Object.defineProperty || definePropertyFallback) {
720
 
    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
721
 
    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
722
 
    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
723
 
                                      "on this javascript engine";
724
 
 
725
 
    Object.defineProperty = function defineProperty(object, property, descriptor) {
726
 
        if ((typeof object != "object" && typeof object != "function") || object === null)
727
 
            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
728
 
        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
729
 
            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
730
 
        if (definePropertyFallback) {
731
 
            try {
732
 
                return definePropertyFallback.call(Object, object, property, descriptor);
733
 
            } catch (exception) {
734
 
            }
735
 
        }
736
 
        if (owns(descriptor, "value")) {
737
 
 
738
 
            if (supportsAccessors && (lookupGetter(object, property) ||
739
 
                                      lookupSetter(object, property)))
740
 
            {
741
 
                var prototype = object.__proto__;
742
 
                object.__proto__ = prototypeOfObject;
743
 
                delete object[property];
744
 
                object[property] = descriptor.value;
745
 
                object.__proto__ = prototype;
746
 
            } else {
747
 
                object[property] = descriptor.value;
748
 
            }
749
 
        } else {
750
 
            if (!supportsAccessors)
751
 
                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
752
 
            if (owns(descriptor, "get"))
753
 
                defineGetter(object, property, descriptor.get);
754
 
            if (owns(descriptor, "set"))
755
 
                defineSetter(object, property, descriptor.set);
756
 
        }
757
 
 
758
 
        return object;
759
 
    };
760
 
}
761
 
if (!Object.defineProperties) {
762
 
    Object.defineProperties = function defineProperties(object, properties) {
763
 
        for (var property in properties) {
764
 
            if (owns(properties, property))
765
 
                Object.defineProperty(object, property, properties[property]);
766
 
        }
767
 
        return object;
768
 
    };
769
 
}
770
 
if (!Object.seal) {
771
 
    Object.seal = function seal(object) {
772
 
        return object;
773
 
    };
774
 
}
775
 
if (!Object.freeze) {
776
 
    Object.freeze = function freeze(object) {
777
 
        return object;
778
 
    };
779
 
}
780
 
try {
781
 
    Object.freeze(function () {});
782
 
} catch (exception) {
783
 
    Object.freeze = (function freeze(freezeObject) {
784
 
        return function freeze(object) {
785
 
            if (typeof object == "function") {
786
 
                return object;
787
 
            } else {
788
 
                return freezeObject(object);
789
 
            }
790
 
        };
791
 
    })(Object.freeze);
792
 
}
793
 
if (!Object.preventExtensions) {
794
 
    Object.preventExtensions = function preventExtensions(object) {
795
 
        return object;
796
 
    };
797
 
}
798
 
if (!Object.isSealed) {
799
 
    Object.isSealed = function isSealed(object) {
800
 
        return false;
801
 
    };
802
 
}
803
 
if (!Object.isFrozen) {
804
 
    Object.isFrozen = function isFrozen(object) {
805
 
        return false;
806
 
    };
807
 
}
808
 
if (!Object.isExtensible) {
809
 
    Object.isExtensible = function isExtensible(object) {
810
 
        if (Object(object) === object) {
811
 
            throw new TypeError(); // TODO message
812
 
        }
813
 
        var name = '';
814
 
        while (owns(object, name)) {
815
 
            name += '?';
816
 
        }
817
 
        object[name] = true;
818
 
        var returnValue = owns(object, name);
819
 
        delete object[name];
820
 
        return returnValue;
821
 
    };
822
 
}
823
 
if (!Object.keys) {
824
 
    var hasDontEnumBug = true,
825
 
        dontEnums = [
826
 
            "toString",
827
 
            "toLocaleString",
828
 
            "valueOf",
829
 
            "hasOwnProperty",
830
 
            "isPrototypeOf",
831
 
            "propertyIsEnumerable",
832
 
            "constructor"
833
 
        ],
834
 
        dontEnumsLength = dontEnums.length;
835
 
 
836
 
    for (var key in {"toString": null}) {
837
 
        hasDontEnumBug = false;
838
 
    }
839
 
 
840
 
    Object.keys = function keys(object) {
841
 
 
842
 
        if (
843
 
            (typeof object != "object" && typeof object != "function") ||
844
 
            object === null
845
 
        ) {
846
 
            throw new TypeError("Object.keys called on a non-object");
847
 
        }
848
 
 
849
 
        var keys = [];
850
 
        for (var name in object) {
851
 
            if (owns(object, name)) {
852
 
                keys.push(name);
853
 
            }
854
 
        }
855
 
 
856
 
        if (hasDontEnumBug) {
857
 
            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
858
 
                var dontEnum = dontEnums[i];
859
 
                if (owns(object, dontEnum)) {
860
 
                    keys.push(dontEnum);
861
 
                }
862
 
            }
863
 
        }
864
 
        return keys;
865
 
    };
866
 
 
867
 
}
868
 
if (!Date.now) {
869
 
    Date.now = function now() {
870
 
        return new Date().getTime();
871
 
    };
872
 
}
873
 
var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
874
 
    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
875
 
    "\u2029\uFEFF";
876
 
if (!String.prototype.trim || ws.trim()) {
877
 
    ws = "[" + ws + "]";
878
 
    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
879
 
        trimEndRegexp = new RegExp(ws + ws + "*$");
880
 
    String.prototype.trim = function trim() {
881
 
        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
882
 
    };
883
 
}
884
 
 
885
 
function toInteger(n) {
886
 
    n = +n;
887
 
    if (n !== n) { // isNaN
888
 
        n = 0;
889
 
    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
890
 
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
891
 
    }
892
 
    return n;
893
 
}
894
 
 
895
 
function isPrimitive(input) {
896
 
    var type = typeof input;
897
 
    return (
898
 
        input === null ||
899
 
        type === "undefined" ||
900
 
        type === "boolean" ||
901
 
        type === "number" ||
902
 
        type === "string"
903
 
    );
904
 
}
905
 
 
906
 
function toPrimitive(input) {
907
 
    var val, valueOf, toString;
908
 
    if (isPrimitive(input)) {
909
 
        return input;
910
 
    }
911
 
    valueOf = input.valueOf;
912
 
    if (typeof valueOf === "function") {
913
 
        val = valueOf.call(input);
914
 
        if (isPrimitive(val)) {
915
 
            return val;
916
 
        }
917
 
    }
918
 
    toString = input.toString;
919
 
    if (typeof toString === "function") {
920
 
        val = toString.call(input);
921
 
        if (isPrimitive(val)) {
922
 
            return val;
923
 
        }
924
 
    }
925
 
    throw new TypeError();
926
 
}
927
 
var toObject = function (o) {
928
 
    if (o == null) { // this matches both null and undefined
929
 
        throw new TypeError("can't convert "+o+" to object");
930
 
    }
931
 
    return Object(o);
932
 
};
933
 
 
934
 
});
935
 
 
936
 
define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
937
 
 
938
 
 
939
 
var EventEmitter = {};
940
 
var stopPropagation = function() { this.propagationStopped = true; };
941
 
var preventDefault = function() { this.defaultPrevented = true; };
942
 
 
943
 
EventEmitter._emit =
944
 
EventEmitter._dispatchEvent = function(eventName, e) {
945
 
    this._eventRegistry || (this._eventRegistry = {});
946
 
    this._defaultHandlers || (this._defaultHandlers = {});
947
 
 
948
 
    var listeners = this._eventRegistry[eventName] || [];
949
 
    var defaultHandler = this._defaultHandlers[eventName];
950
 
    if (!listeners.length && !defaultHandler)
951
 
        return;
952
 
 
953
 
    if (typeof e != "object" || !e)
954
 
        e = {};
955
 
 
956
 
    if (!e.type)
957
 
        e.type = eventName;
958
 
    if (!e.stopPropagation)
959
 
        e.stopPropagation = stopPropagation;
960
 
    if (!e.preventDefault)
961
 
        e.preventDefault = preventDefault;
962
 
    if (!e.target)
963
 
        e.target = this;
964
 
 
965
 
    for (var i=0; i<listeners.length; i++) {
966
 
        listeners[i](e);
967
 
        if (e.propagationStopped)
968
 
            break;
969
 
    }
970
 
    
971
 
    if (defaultHandler && !e.defaultPrevented)
972
 
        return defaultHandler(e);
973
 
};
974
 
 
975
 
 
976
 
EventEmitter._signal = function(eventName, e) {
977
 
    var listeners = (this._eventRegistry || {})[eventName];
978
 
    if (!listeners)
979
 
        return;
980
 
 
981
 
    for (var i=0; i<listeners.length; i++)
982
 
        listeners[i](e);
983
 
};
984
 
 
985
 
EventEmitter.once = function(eventName, callback) {
986
 
    var _self = this;
987
 
    var newCallback = function() {
988
 
        fun && fun.apply(null, arguments);
989
 
        _self.removeEventListener(event, newCallback);
990
 
    };
991
 
    this.addEventListener(event, newCallback);
992
 
};
993
 
 
994
 
 
995
 
EventEmitter.setDefaultHandler = function(eventName, callback) {
996
 
    this._defaultHandlers = this._defaultHandlers || {};
997
 
    
998
 
    if (this._defaultHandlers[eventName])
999
 
        throw new Error("The default handler for '" + eventName + "' is already set");
1000
 
        
1001
 
    this._defaultHandlers[eventName] = callback;
1002
 
};
1003
 
 
1004
 
EventEmitter.on =
1005
 
EventEmitter.addEventListener = function(eventName, callback, capturing) {
1006
 
    this._eventRegistry = this._eventRegistry || {};
1007
 
 
1008
 
    var listeners = this._eventRegistry[eventName];
1009
 
    if (!listeners)
1010
 
        listeners = this._eventRegistry[eventName] = [];
1011
 
 
1012
 
    if (listeners.indexOf(callback) == -1)
1013
 
        listeners[capturing ? "unshift" : "push"](callback);
1014
 
    return callback;
1015
 
};
1016
 
 
1017
 
EventEmitter.removeListener =
1018
 
EventEmitter.removeEventListener = function(eventName, callback) {
1019
 
    this._eventRegistry = this._eventRegistry || {};
1020
 
 
1021
 
    var listeners = this._eventRegistry[eventName];
1022
 
    if (!listeners)
1023
 
        return;
1024
 
 
1025
 
    var index = listeners.indexOf(callback);
1026
 
    if (index !== -1)
1027
 
        listeners.splice(index, 1);
1028
 
};
1029
 
 
1030
 
EventEmitter.removeAllListeners = function(eventName) {
1031
 
    if (this._eventRegistry) this._eventRegistry[eventName] = [];
1032
 
};
1033
 
 
1034
 
exports.EventEmitter = EventEmitter;
1035
 
 
1036
 
});
1037
 
 
1038
 
define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
1039
 
 
1040
 
 
1041
 
exports.inherits = (function() {
1042
 
    var tempCtor = function() {};
1043
 
    return function(ctor, superCtor) {
1044
 
        tempCtor.prototype = superCtor.prototype;
1045
 
        ctor.super_ = superCtor.prototype;
1046
 
        ctor.prototype = new tempCtor();
1047
 
        ctor.prototype.constructor = ctor;
1048
 
    };
1049
 
}());
1050
 
 
1051
 
exports.mixin = function(obj, mixin) {
1052
 
    for (var key in mixin) {
1053
 
        obj[key] = mixin[key];
1054
 
    }
1055
 
};
1056
 
 
1057
 
exports.implement = function(proto, mixin) {
1058
 
    exports.mixin(proto, mixin);
1059
 
};
1060
 
 
1061
 
});
1062
 
 
1063
 
define('ace/mode/coffee_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/coffee/coffee-script'], function(require, exports, module) {
1064
 
 
1065
 
 
1066
 
var oop = require("../lib/oop");
1067
 
var Mirror = require("../worker/mirror").Mirror;
1068
 
var coffee = require("../mode/coffee/coffee-script");
1069
 
 
1070
 
window.addEventListener = function() {};
1071
 
 
1072
 
 
1073
 
var Worker = exports.Worker = function(sender) {
1074
 
    Mirror.call(this, sender);
1075
 
    this.setTimeout(200);
1076
 
};
1077
 
 
1078
 
oop.inherits(Worker, Mirror);
1079
 
 
1080
 
(function() {
1081
 
 
1082
 
    this.onUpdate = function() {
1083
 
        var value = this.doc.getValue();
1084
 
 
1085
 
        try {
1086
 
            coffee.parse(value);
1087
 
        } catch(e) {
1088
 
            var m = e.message.match(/Parse error on line (\d+): (.*)/);
1089
 
            if (m) {
1090
 
                this.sender.emit("error", {
1091
 
                    row: parseInt(m[1], 10) - 1,
1092
 
                    column: null,
1093
 
                    text: m[2],
1094
 
                    type: "error"
1095
 
                });
1096
 
                return;
1097
 
            }
1098
 
 
1099
 
            if (e instanceof SyntaxError) {
1100
 
                var m = e.message.match(/ on line (\d+)/);
1101
 
                if (m) {
1102
 
                    this.sender.emit("error", {
1103
 
                        row: parseInt(m[1], 10) - 1,
1104
 
                        column: null,
1105
 
                        text: e.message.replace(m[0], ""),
1106
 
                        type: "error"
1107
 
                    });
1108
 
                }
1109
 
            }
1110
 
            return;
1111
 
        }
1112
 
        this.sender.emit("ok");
1113
 
    };
1114
 
 
1115
 
}).call(Worker.prototype);
1116
 
 
1117
 
});
1118
 
define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
1119
 
 
1120
 
 
1121
 
var Document = require("../document").Document;
1122
 
var lang = require("../lib/lang");
1123
 
    
1124
 
var Mirror = exports.Mirror = function(sender) {
1125
 
    this.sender = sender;
1126
 
    var doc = this.doc = new Document("");
1127
 
    
1128
 
    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
1129
 
    
1130
 
    var _self = this;
1131
 
    sender.on("change", function(e) {
1132
 
        doc.applyDeltas([e.data]);        
1133
 
        deferredUpdate.schedule(_self.$timeout);
1134
 
    });
1135
 
};
1136
 
 
1137
 
(function() {
1138
 
    
1139
 
    this.$timeout = 500;
1140
 
    
1141
 
    this.setTimeout = function(timeout) {
1142
 
        this.$timeout = timeout;
1143
 
    };
1144
 
    
1145
 
    this.setValue = function(value) {
1146
 
        this.doc.setValue(value);
1147
 
        this.deferredUpdate.schedule(this.$timeout);
1148
 
    };
1149
 
    
1150
 
    this.getValue = function(callbackId) {
1151
 
        this.sender.callback(this.doc.getValue(), callbackId);
1152
 
    };
1153
 
    
1154
 
    this.onUpdate = function() {
1155
 
    };
1156
 
    
1157
 
}).call(Mirror.prototype);
1158
 
 
1159
 
});
1160
 
 
1161
 
define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
1162
 
 
1163
 
 
1164
 
var oop = require("./lib/oop");
1165
 
var EventEmitter = require("./lib/event_emitter").EventEmitter;
1166
 
var Range = require("./range").Range;
1167
 
var Anchor = require("./anchor").Anchor;
1168
 
 
1169
 
var Document = function(text) {
1170
 
    this.$lines = [];
1171
 
    if (text.length == 0) {
1172
 
        this.$lines = [""];
1173
 
    } else if (Array.isArray(text)) {
1174
 
        this.insertLines(0, text);
1175
 
    } else {
1176
 
        this.insert({row: 0, column:0}, text);
1177
 
    }
1178
 
};
1179
 
 
1180
 
(function() {
1181
 
 
1182
 
    oop.implement(this, EventEmitter);
1183
 
    this.setValue = function(text) {
1184
 
        var len = this.getLength();
1185
 
        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
1186
 
        this.insert({row: 0, column:0}, text);
1187
 
    };
1188
 
    this.getValue = function() {
1189
 
        return this.getAllLines().join(this.getNewLineCharacter());
1190
 
    };
1191
 
    this.createAnchor = function(row, column) {
1192
 
        return new Anchor(this, row, column);
1193
 
    };
1194
 
    if ("aaa".split(/a/).length == 0)
1195
 
        this.$split = function(text) {
1196
 
            return text.replace(/\r\n|\r/g, "\n").split("\n");
1197
 
        }
1198
 
    else
1199
 
        this.$split = function(text) {
1200
 
            return text.split(/\r\n|\r|\n/);
1201
 
        };
1202
 
 
1203
 
 
1204
 
 
1205
 
    this.$detectNewLine = function(text) {
1206
 
        var match = text.match(/^.*?(\r\n|\r|\n)/m);
1207
 
        if (match) {
1208
 
            this.$autoNewLine = match[1];
1209
 
        } else {
1210
 
            this.$autoNewLine = "\n";
1211
 
        }
1212
 
    };
1213
 
    this.getNewLineCharacter = function() {
1214
 
        switch (this.$newLineMode) {
1215
 
          case "windows":
1216
 
            return "\r\n";
1217
 
 
1218
 
          case "unix":
1219
 
            return "\n";
1220
 
 
1221
 
          default:
1222
 
            return this.$autoNewLine;
1223
 
        }
1224
 
    };
1225
 
 
1226
 
    this.$autoNewLine = "\n";
1227
 
    this.$newLineMode = "auto";
1228
 
    this.setNewLineMode = function(newLineMode) {
1229
 
        if (this.$newLineMode === newLineMode)
1230
 
            return;
1231
 
 
1232
 
        this.$newLineMode = newLineMode;
1233
 
    };
1234
 
    this.getNewLineMode = function() {
1235
 
        return this.$newLineMode;
1236
 
    };
1237
 
    this.isNewLine = function(text) {
1238
 
        return (text == "\r\n" || text == "\r" || text == "\n");
1239
 
    };
1240
 
    this.getLine = function(row) {
1241
 
        return this.$lines[row] || "";
1242
 
    };
1243
 
    this.getLines = function(firstRow, lastRow) {
1244
 
        return this.$lines.slice(firstRow, lastRow + 1);
1245
 
    };
1246
 
    this.getAllLines = function() {
1247
 
        return this.getLines(0, this.getLength());
1248
 
    };
1249
 
    this.getLength = function() {
1250
 
        return this.$lines.length;
1251
 
    };
1252
 
    this.getTextRange = function(range) {
1253
 
        if (range.start.row == range.end.row) {
1254
 
            return this.$lines[range.start.row].substring(range.start.column,
1255
 
                                                         range.end.column);
1256
 
        }
1257
 
        else {
1258
 
            var lines = this.getLines(range.start.row+1, range.end.row-1);
1259
 
            lines.unshift((this.$lines[range.start.row] || "").substring(range.start.column));
1260
 
            lines.push((this.$lines[range.end.row] || "").substring(0, range.end.column));
1261
 
            return lines.join(this.getNewLineCharacter());
1262
 
        }
1263
 
    };
1264
 
 
1265
 
    this.$clipPosition = function(position) {
1266
 
        var length = this.getLength();
1267
 
        if (position.row >= length) {
1268
 
            position.row = Math.max(0, length - 1);
1269
 
            position.column = this.getLine(length-1).length;
1270
 
        }
1271
 
        return position;
1272
 
    };
1273
 
    this.insert = function(position, text) {
1274
 
        if (!text || text.length === 0)
1275
 
            return position;
1276
 
 
1277
 
        position = this.$clipPosition(position);
1278
 
        if (this.getLength() <= 1)
1279
 
            this.$detectNewLine(text);
1280
 
 
1281
 
        var lines = this.$split(text);
1282
 
        var firstLine = lines.splice(0, 1)[0];
1283
 
        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
1284
 
 
1285
 
        position = this.insertInLine(position, firstLine);
1286
 
        if (lastLine !== null) {
1287
 
            position = this.insertNewLine(position); // terminate first line
1288
 
            position = this.insertLines(position.row, lines);
1289
 
            position = this.insertInLine(position, lastLine || "");
1290
 
        }
1291
 
        return position;
1292
 
    };
1293
 
    this.insertLines = function(row, lines) {
1294
 
        if (lines.length == 0)
1295
 
            return {row: row, column: 0};
1296
 
        if (lines.length > 0xFFFF) {
1297
 
            var end = this.insertLines(row, lines.slice(0xFFFF));
1298
 
            lines = lines.slice(0, 0xFFFF);
1299
 
        }
1300
 
 
1301
 
        var args = [row, 0];
1302
 
        args.push.apply(args, lines);
1303
 
        this.$lines.splice.apply(this.$lines, args);
1304
 
 
1305
 
        var range = new Range(row, 0, row + lines.length, 0);
1306
 
        var delta = {
1307
 
            action: "insertLines",
1308
 
            range: range,
1309
 
            lines: lines
1310
 
        };
1311
 
        this._emit("change", { data: delta });
1312
 
        return end || range.end;
1313
 
    };
1314
 
    this.insertNewLine = function(position) {
1315
 
        position = this.$clipPosition(position);
1316
 
        var line = this.$lines[position.row] || "";
1317
 
 
1318
 
        this.$lines[position.row] = line.substring(0, position.column);
1319
 
        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
1320
 
 
1321
 
        var end = {
1322
 
            row : position.row + 1,
1323
 
            column : 0
1324
 
        };
1325
 
 
1326
 
        var delta = {
1327
 
            action: "insertText",
1328
 
            range: Range.fromPoints(position, end),
1329
 
            text: this.getNewLineCharacter()
1330
 
        };
1331
 
        this._emit("change", { data: delta });
1332
 
 
1333
 
        return end;
1334
 
    };
1335
 
    this.insertInLine = function(position, text) {
1336
 
        if (text.length == 0)
1337
 
            return position;
1338
 
 
1339
 
        var line = this.$lines[position.row] || "";
1340
 
 
1341
 
        this.$lines[position.row] = line.substring(0, position.column) + text
1342
 
                + line.substring(position.column);
1343
 
 
1344
 
        var end = {
1345
 
            row : position.row,
1346
 
            column : position.column + text.length
1347
 
        };
1348
 
 
1349
 
        var delta = {
1350
 
            action: "insertText",
1351
 
            range: Range.fromPoints(position, end),
1352
 
            text: text
1353
 
        };
1354
 
        this._emit("change", { data: delta });
1355
 
 
1356
 
        return end;
1357
 
    };
1358
 
    this.remove = function(range) {
1359
 
        range.start = this.$clipPosition(range.start);
1360
 
        range.end = this.$clipPosition(range.end);
1361
 
 
1362
 
        if (range.isEmpty())
1363
 
            return range.start;
1364
 
 
1365
 
        var firstRow = range.start.row;
1366
 
        var lastRow = range.end.row;
1367
 
 
1368
 
        if (range.isMultiLine()) {
1369
 
            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
1370
 
            var lastFullRow = lastRow - 1;
1371
 
 
1372
 
            if (range.end.column > 0)
1373
 
                this.removeInLine(lastRow, 0, range.end.column);
1374
 
 
1375
 
            if (lastFullRow >= firstFullRow)
1376
 
                this.removeLines(firstFullRow, lastFullRow);
1377
 
 
1378
 
            if (firstFullRow != firstRow) {
1379
 
                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
1380
 
                this.removeNewLine(range.start.row);
1381
 
            }
1382
 
        }
1383
 
        else {
1384
 
            this.removeInLine(firstRow, range.start.column, range.end.column);
1385
 
        }
1386
 
        return range.start;
1387
 
    };
1388
 
    this.removeInLine = function(row, startColumn, endColumn) {
1389
 
        if (startColumn == endColumn)
1390
 
            return;
1391
 
 
1392
 
        var range = new Range(row, startColumn, row, endColumn);
1393
 
        var line = this.getLine(row);
1394
 
        var removed = line.substring(startColumn, endColumn);
1395
 
        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
1396
 
        this.$lines.splice(row, 1, newLine);
1397
 
 
1398
 
        var delta = {
1399
 
            action: "removeText",
1400
 
            range: range,
1401
 
            text: removed
1402
 
        };
1403
 
        this._emit("change", { data: delta });
1404
 
        return range.start;
1405
 
    };
1406
 
    this.removeLines = function(firstRow, lastRow) {
1407
 
        var range = new Range(firstRow, 0, lastRow + 1, 0);
1408
 
        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
1409
 
 
1410
 
        var delta = {
1411
 
            action: "removeLines",
1412
 
            range: range,
1413
 
            nl: this.getNewLineCharacter(),
1414
 
            lines: removed
1415
 
        };
1416
 
        this._emit("change", { data: delta });
1417
 
        return removed;
1418
 
    };
1419
 
    this.removeNewLine = function(row) {
1420
 
        var firstLine = this.getLine(row);
1421
 
        var secondLine = this.getLine(row+1);
1422
 
 
1423
 
        var range = new Range(row, firstLine.length, row+1, 0);
1424
 
        var line = firstLine + secondLine;
1425
 
 
1426
 
        this.$lines.splice(row, 2, line);
1427
 
 
1428
 
        var delta = {
1429
 
            action: "removeText",
1430
 
            range: range,
1431
 
            text: this.getNewLineCharacter()
1432
 
        };
1433
 
        this._emit("change", { data: delta });
1434
 
    };
1435
 
    this.replace = function(range, text) {
1436
 
        if (text.length == 0 && range.isEmpty())
1437
 
            return range.start;
1438
 
        if (text == this.getTextRange(range))
1439
 
            return range.end;
1440
 
 
1441
 
        this.remove(range);
1442
 
        if (text) {
1443
 
            var end = this.insert(range.start, text);
1444
 
        }
1445
 
        else {
1446
 
            end = range.start;
1447
 
        }
1448
 
 
1449
 
        return end;
1450
 
    };
1451
 
    this.applyDeltas = function(deltas) {
1452
 
        for (var i=0; i<deltas.length; i++) {
1453
 
            var delta = deltas[i];
1454
 
            var range = Range.fromPoints(delta.range.start, delta.range.end);
1455
 
 
1456
 
            if (delta.action == "insertLines")
1457
 
                this.insertLines(range.start.row, delta.lines);
1458
 
            else if (delta.action == "insertText")
1459
 
                this.insert(range.start, delta.text);
1460
 
            else if (delta.action == "removeLines")
1461
 
                this.removeLines(range.start.row, range.end.row - 1);
1462
 
            else if (delta.action == "removeText")
1463
 
                this.remove(range);
1464
 
        }
1465
 
    };
1466
 
    this.revertDeltas = function(deltas) {
1467
 
        for (var i=deltas.length-1; i>=0; i--) {
1468
 
            var delta = deltas[i];
1469
 
 
1470
 
            var range = Range.fromPoints(delta.range.start, delta.range.end);
1471
 
 
1472
 
            if (delta.action == "insertLines")
1473
 
                this.removeLines(range.start.row, range.end.row - 1);
1474
 
            else if (delta.action == "insertText")
1475
 
                this.remove(range);
1476
 
            else if (delta.action == "removeLines")
1477
 
                this.insertLines(range.start.row, delta.lines);
1478
 
            else if (delta.action == "removeText")
1479
 
                this.insert(range.start, delta.text);
1480
 
        }
1481
 
    };
1482
 
    this.indexToPosition = function(index, startRow) {
1483
 
        var lines = this.$lines || this.getAllLines();
1484
 
        var newlineLength = this.getNewLineCharacter().length;
1485
 
        for (var i = startRow || 0, l = lines.length; i < l; i++) {
1486
 
            index -= lines[i].length + newlineLength;
1487
 
            if (index < 0)
1488
 
                return {row: i, column: index + lines[i].length + newlineLength};
1489
 
        }
1490
 
        return {row: l-1, column: lines[l-1].length};
1491
 
    };
1492
 
    this.positionToIndex = function(pos, startRow) {
1493
 
        var lines = this.$lines || this.getAllLines();
1494
 
        var newlineLength = this.getNewLineCharacter().length;
1495
 
        var index = 0;
1496
 
        var row = Math.min(pos.row, lines.length);
1497
 
        for (var i = startRow || 0; i < row; ++i)
1498
 
            index += lines[i].length;
1499
 
 
1500
 
        return index + newlineLength * i + pos.column;
1501
 
    };
1502
 
 
1503
 
}).call(Document.prototype);
1504
 
 
1505
 
exports.Document = Document;
1506
 
});
1507
 
 
1508
 
define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
1509
 
 
1510
 
var comparePoints = function(p1, p2) {
1511
 
    return p1.row - p2.row || p1.column - p2.column;
1512
 
};
1513
 
var Range = function(startRow, startColumn, endRow, endColumn) {
1514
 
    this.start = {
1515
 
        row: startRow,
1516
 
        column: startColumn
1517
 
    };
1518
 
 
1519
 
    this.end = {
1520
 
        row: endRow,
1521
 
        column: endColumn
1522
 
    };
1523
 
};
1524
 
 
1525
 
(function() {
1526
 
    this.isEqual = function(range) {
1527
 
        return this.start.row === range.start.row &&
1528
 
            this.end.row === range.end.row &&
1529
 
            this.start.column === range.start.column &&
1530
 
            this.end.column === range.end.column;
1531
 
    };
1532
 
    this.toString = function() {
1533
 
        return ("Range: [" + this.start.row + "/" + this.start.column +
1534
 
            "] -> [" + this.end.row + "/" + this.end.column + "]");
1535
 
    };
1536
 
 
1537
 
    this.contains = function(row, column) {
1538
 
        return this.compare(row, column) == 0;
1539
 
    };
1540
 
    this.compareRange = function(range) {
1541
 
        var cmp,
1542
 
            end = range.end,
1543
 
            start = range.start;
1544
 
 
1545
 
        cmp = this.compare(end.row, end.column);
1546
 
        if (cmp == 1) {
1547
 
            cmp = this.compare(start.row, start.column);
1548
 
            if (cmp == 1) {
1549
 
                return 2;
1550
 
            } else if (cmp == 0) {
1551
 
                return 1;
1552
 
            } else {
1553
 
                return 0;
1554
 
            }
1555
 
        } else if (cmp == -1) {
1556
 
            return -2;
1557
 
        } else {
1558
 
            cmp = this.compare(start.row, start.column);
1559
 
            if (cmp == -1) {
1560
 
                return -1;
1561
 
            } else if (cmp == 1) {
1562
 
                return 42;
1563
 
            } else {
1564
 
                return 0;
1565
 
            }
1566
 
        }
1567
 
    };
1568
 
    this.comparePoint = function(p) {
1569
 
        return this.compare(p.row, p.column);
1570
 
    };
1571
 
    this.containsRange = function(range) {
1572
 
        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
1573
 
    };
1574
 
    this.intersects = function(range) {
1575
 
        var cmp = this.compareRange(range);
1576
 
        return (cmp == -1 || cmp == 0 || cmp == 1);
1577
 
    };
1578
 
    this.isEnd = function(row, column) {
1579
 
        return this.end.row == row && this.end.column == column;
1580
 
    };
1581
 
    this.isStart = function(row, column) {
1582
 
        return this.start.row == row && this.start.column == column;
1583
 
    };
1584
 
    this.setStart = function(row, column) {
1585
 
        if (typeof row == "object") {
1586
 
            this.start.column = row.column;
1587
 
            this.start.row = row.row;
1588
 
        } else {
1589
 
            this.start.row = row;
1590
 
            this.start.column = column;
1591
 
        }
1592
 
    };
1593
 
    this.setEnd = function(row, column) {
1594
 
        if (typeof row == "object") {
1595
 
            this.end.column = row.column;
1596
 
            this.end.row = row.row;
1597
 
        } else {
1598
 
            this.end.row = row;
1599
 
            this.end.column = column;
1600
 
        }
1601
 
    };
1602
 
    this.inside = function(row, column) {
1603
 
        if (this.compare(row, column) == 0) {
1604
 
            if (this.isEnd(row, column) || this.isStart(row, column)) {
1605
 
                return false;
1606
 
            } else {
1607
 
                return true;
1608
 
            }
1609
 
        }
1610
 
        return false;
1611
 
    };
1612
 
    this.insideStart = function(row, column) {
1613
 
        if (this.compare(row, column) == 0) {
1614
 
            if (this.isEnd(row, column)) {
1615
 
                return false;
1616
 
            } else {
1617
 
                return true;
1618
 
            }
1619
 
        }
1620
 
        return false;
1621
 
    };
1622
 
    this.insideEnd = function(row, column) {
1623
 
        if (this.compare(row, column) == 0) {
1624
 
            if (this.isStart(row, column)) {
1625
 
                return false;
1626
 
            } else {
1627
 
                return true;
1628
 
            }
1629
 
        }
1630
 
        return false;
1631
 
    };
1632
 
    this.compare = function(row, column) {
1633
 
        if (!this.isMultiLine()) {
1634
 
            if (row === this.start.row) {
1635
 
                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
1636
 
            };
1637
 
        }
1638
 
 
1639
 
        if (row < this.start.row)
1640
 
            return -1;
1641
 
 
1642
 
        if (row > this.end.row)
1643
 
            return 1;
1644
 
 
1645
 
        if (this.start.row === row)
1646
 
            return column >= this.start.column ? 0 : -1;
1647
 
 
1648
 
        if (this.end.row === row)
1649
 
            return column <= this.end.column ? 0 : 1;
1650
 
 
1651
 
        return 0;
1652
 
    };
1653
 
    this.compareStart = function(row, column) {
1654
 
        if (this.start.row == row && this.start.column == column) {
1655
 
            return -1;
1656
 
        } else {
1657
 
            return this.compare(row, column);
1658
 
        }
1659
 
    };
1660
 
    this.compareEnd = function(row, column) {
1661
 
        if (this.end.row == row && this.end.column == column) {
1662
 
            return 1;
1663
 
        } else {
1664
 
            return this.compare(row, column);
1665
 
        }
1666
 
    };
1667
 
    this.compareInside = function(row, column) {
1668
 
        if (this.end.row == row && this.end.column == column) {
1669
 
            return 1;
1670
 
        } else if (this.start.row == row && this.start.column == column) {
1671
 
            return -1;
1672
 
        } else {
1673
 
            return this.compare(row, column);
1674
 
        }
1675
 
    };
1676
 
    this.clipRows = function(firstRow, lastRow) {
1677
 
        if (this.end.row > lastRow)
1678
 
            var end = {row: lastRow + 1, column: 0};
1679
 
        else if (this.end.row < firstRow)
1680
 
            var end = {row: firstRow, column: 0};
1681
 
 
1682
 
        if (this.start.row > lastRow)
1683
 
            var start = {row: lastRow + 1, column: 0};
1684
 
        else if (this.start.row < firstRow)
1685
 
            var start = {row: firstRow, column: 0};
1686
 
 
1687
 
        return Range.fromPoints(start || this.start, end || this.end);
1688
 
    };
1689
 
    this.extend = function(row, column) {
1690
 
        var cmp = this.compare(row, column);
1691
 
 
1692
 
        if (cmp == 0)
1693
 
            return this;
1694
 
        else if (cmp == -1)
1695
 
            var start = {row: row, column: column};
1696
 
        else
1697
 
            var end = {row: row, column: column};
1698
 
 
1699
 
        return Range.fromPoints(start || this.start, end || this.end);
1700
 
    };
1701
 
 
1702
 
    this.isEmpty = function() {
1703
 
        return (this.start.row === this.end.row && this.start.column === this.end.column);
1704
 
    };
1705
 
    this.isMultiLine = function() {
1706
 
        return (this.start.row !== this.end.row);
1707
 
    };
1708
 
    this.clone = function() {
1709
 
        return Range.fromPoints(this.start, this.end);
1710
 
    };
1711
 
    this.collapseRows = function() {
1712
 
        if (this.end.column == 0)
1713
 
            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
1714
 
        else
1715
 
            return new Range(this.start.row, 0, this.end.row, 0)
1716
 
    };
1717
 
    this.toScreenRange = function(session) {
1718
 
        var screenPosStart = session.documentToScreenPosition(this.start);
1719
 
        var screenPosEnd = session.documentToScreenPosition(this.end);
1720
 
 
1721
 
        return new Range(
1722
 
            screenPosStart.row, screenPosStart.column,
1723
 
            screenPosEnd.row, screenPosEnd.column
1724
 
        );
1725
 
    };
1726
 
    this.moveBy = function(row, column) {
1727
 
        this.start.row += row;
1728
 
        this.start.column += column;
1729
 
        this.end.row += row;
1730
 
        this.end.column += column;
1731
 
    };
1732
 
 
1733
 
}).call(Range.prototype);
1734
 
Range.fromPoints = function(start, end) {
1735
 
    return new Range(start.row, start.column, end.row, end.column);
1736
 
};
1737
 
Range.comparePoints = comparePoints;
1738
 
 
1739
 
exports.Range = Range;
1740
 
});
1741
 
 
1742
 
define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
1743
 
 
1744
 
 
1745
 
var oop = require("./lib/oop");
1746
 
var EventEmitter = require("./lib/event_emitter").EventEmitter;
1747
 
 
1748
 
var Anchor = exports.Anchor = function(doc, row, column) {
1749
 
    this.document = doc;
1750
 
    
1751
 
    if (typeof column == "undefined")
1752
 
        this.setPosition(row.row, row.column);
1753
 
    else
1754
 
        this.setPosition(row, column);
1755
 
 
1756
 
    this.$onChange = this.onChange.bind(this);
1757
 
    doc.on("change", this.$onChange);
1758
 
};
1759
 
 
1760
 
(function() {
1761
 
 
1762
 
    oop.implement(this, EventEmitter);
1763
 
 
1764
 
    this.getPosition = function() {
1765
 
        return this.$clipPositionToDocument(this.row, this.column);
1766
 
    };
1767
 
        
1768
 
    this.getDocument = function() {
1769
 
        return this.document;
1770
 
    };
1771
 
 
1772
 
    this.onChange = function(e) {
1773
 
        var delta = e.data;
1774
 
        var range = delta.range;
1775
 
            
1776
 
        if (range.start.row == range.end.row && range.start.row != this.row)
1777
 
            return;
1778
 
            
1779
 
        if (range.start.row > this.row)
1780
 
            return;
1781
 
            
1782
 
        if (range.start.row == this.row && range.start.column > this.column)
1783
 
            return;
1784
 
    
1785
 
        var row = this.row;
1786
 
        var column = this.column;
1787
 
        
1788
 
        if (delta.action === "insertText") {
1789
 
            if (range.start.row === row && range.start.column <= column) {
1790
 
                if (range.start.row === range.end.row) {
1791
 
                    column += range.end.column - range.start.column;
1792
 
                }
1793
 
                else {
1794
 
                    column -= range.start.column;
1795
 
                    row += range.end.row - range.start.row;
1796
 
                }
1797
 
            }
1798
 
            else if (range.start.row !== range.end.row && range.start.row < row) {
1799
 
                row += range.end.row - range.start.row;
1800
 
            }
1801
 
        } else if (delta.action === "insertLines") {
1802
 
            if (range.start.row <= row) {
1803
 
                row += range.end.row - range.start.row;
1804
 
            }
1805
 
        }
1806
 
        else if (delta.action == "removeText") {
1807
 
            if (range.start.row == row && range.start.column < column) {
1808
 
                if (range.end.column >= column)
1809
 
                    column = range.start.column;
1810
 
                else
1811
 
                    column = Math.max(0, column - (range.end.column - range.start.column));
1812
 
                
1813
 
            } else if (range.start.row !== range.end.row && range.start.row < row) {
1814
 
                if (range.end.row == row) {
1815
 
                    column = Math.max(0, column - range.end.column) + range.start.column;
1816
 
                }
1817
 
                row -= (range.end.row - range.start.row);
1818
 
            }
1819
 
            else if (range.end.row == row) {
1820
 
                row -= range.end.row - range.start.row;
1821
 
                column = Math.max(0, column - range.end.column) + range.start.column;
1822
 
            }
1823
 
        } else if (delta.action == "removeLines") {
1824
 
            if (range.start.row <= row) {
1825
 
                if (range.end.row <= row)
1826
 
                    row -= range.end.row - range.start.row;
1827
 
                else {
1828
 
                    row = range.start.row;
1829
 
                    column = 0;
1830
 
                }
1831
 
            }
1832
 
        }
1833
 
 
1834
 
        this.setPosition(row, column, true);
1835
 
    };
1836
 
 
1837
 
    this.setPosition = function(row, column, noClip) {
1838
 
        var pos;
1839
 
        if (noClip) {
1840
 
            pos = {
1841
 
                row: row,
1842
 
                column: column
1843
 
            };
1844
 
        }
1845
 
        else {
1846
 
            pos = this.$clipPositionToDocument(row, column);
1847
 
        }
1848
 
        
1849
 
        if (this.row == pos.row && this.column == pos.column)
1850
 
            return;
1851
 
            
1852
 
        var old = {
1853
 
            row: this.row,
1854
 
            column: this.column
1855
 
        };
1856
 
        
1857
 
        this.row = pos.row;
1858
 
        this.column = pos.column;
1859
 
        this._emit("change", {
1860
 
            old: old,
1861
 
            value: pos
1862
 
        });
1863
 
    };
1864
 
 
1865
 
    this.detach = function() {
1866
 
        this.document.removeEventListener("change", this.$onChange);
1867
 
    };
1868
 
    this.$clipPositionToDocument = function(row, column) {
1869
 
        var pos = {};
1870
 
    
1871
 
        if (row >= this.document.getLength()) {
1872
 
            pos.row = Math.max(0, this.document.getLength() - 1);
1873
 
            pos.column = this.document.getLine(pos.row).length;
1874
 
        }
1875
 
        else if (row < 0) {
1876
 
            pos.row = 0;
1877
 
            pos.column = 0;
1878
 
        }
1879
 
        else {
1880
 
            pos.row = row;
1881
 
            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
1882
 
        }
1883
 
        
1884
 
        if (column < 0)
1885
 
            pos.column = 0;
1886
 
            
1887
 
        return pos;
1888
 
    };
1889
 
    
1890
 
}).call(Anchor.prototype);
1891
 
 
1892
 
});
1893
 
 
1894
 
define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
1895
 
 
1896
 
 
1897
 
exports.stringReverse = function(string) {
1898
 
    return string.split("").reverse().join("");
1899
 
};
1900
 
 
1901
 
exports.stringRepeat = function (string, count) {
1902
 
    var result = '';
1903
 
    while (count > 0) {
1904
 
        if (count & 1)
1905
 
            result += string;
1906
 
 
1907
 
        if (count >>= 1)
1908
 
            string += string;
1909
 
    }
1910
 
    return result;
1911
 
};
1912
 
 
1913
 
var trimBeginRegexp = /^\s\s*/;
1914
 
var trimEndRegexp = /\s\s*$/;
1915
 
 
1916
 
exports.stringTrimLeft = function (string) {
1917
 
    return string.replace(trimBeginRegexp, '');
1918
 
};
1919
 
 
1920
 
exports.stringTrimRight = function (string) {
1921
 
    return string.replace(trimEndRegexp, '');
1922
 
};
1923
 
 
1924
 
exports.copyObject = function(obj) {
1925
 
    var copy = {};
1926
 
    for (var key in obj) {
1927
 
        copy[key] = obj[key];
1928
 
    }
1929
 
    return copy;
1930
 
};
1931
 
 
1932
 
exports.copyArray = function(array){
1933
 
    var copy = [];
1934
 
    for (var i=0, l=array.length; i<l; i++) {
1935
 
        if (array[i] && typeof array[i] == "object")
1936
 
            copy[i] = this.copyObject( array[i] );
1937
 
        else 
1938
 
            copy[i] = array[i];
1939
 
    }
1940
 
    return copy;
1941
 
};
1942
 
 
1943
 
exports.deepCopy = function (obj) {
1944
 
    if (typeof obj != "object") {
1945
 
        return obj;
1946
 
    }
1947
 
    
1948
 
    var copy = obj.constructor();
1949
 
    for (var key in obj) {
1950
 
        if (typeof obj[key] == "object") {
1951
 
            copy[key] = this.deepCopy(obj[key]);
1952
 
        } else {
1953
 
            copy[key] = obj[key];
1954
 
        }
1955
 
    }
1956
 
    return copy;
1957
 
};
1958
 
 
1959
 
exports.arrayToMap = function(arr) {
1960
 
    var map = {};
1961
 
    for (var i=0; i<arr.length; i++) {
1962
 
        map[arr[i]] = 1;
1963
 
    }
1964
 
    return map;
1965
 
 
1966
 
};
1967
 
 
1968
 
exports.createMap = function(props) {
1969
 
    var map = Object.create(null);
1970
 
    for (var i in props) {
1971
 
        map[i] = props[i];
1972
 
    }
1973
 
    return map;
1974
 
};
1975
 
exports.arrayRemove = function(array, value) {
1976
 
  for (var i = 0; i <= array.length; i++) {
1977
 
    if (value === array[i]) {
1978
 
      array.splice(i, 1);
1979
 
    }
1980
 
  }
1981
 
};
1982
 
 
1983
 
exports.escapeRegExp = function(str) {
1984
 
    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
1985
 
};
1986
 
 
1987
 
exports.escapeHTML = function(str) {
1988
 
    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
1989
 
};
1990
 
 
1991
 
exports.getMatchOffsets = function(string, regExp) {
1992
 
    var matches = [];
1993
 
 
1994
 
    string.replace(regExp, function(str) {
1995
 
        matches.push({
1996
 
            offset: arguments[arguments.length-2],
1997
 
            length: str.length
1998
 
        });
1999
 
    });
2000
 
 
2001
 
    return matches;
2002
 
};
2003
 
exports.deferredCall = function(fcn) {
2004
 
 
2005
 
    var timer = null;
2006
 
    var callback = function() {
2007
 
        timer = null;
2008
 
        fcn();
2009
 
    };
2010
 
 
2011
 
    var deferred = function(timeout) {
2012
 
        deferred.cancel();
2013
 
        timer = setTimeout(callback, timeout || 0);
2014
 
        return deferred;
2015
 
    };
2016
 
 
2017
 
    deferred.schedule = deferred;
2018
 
 
2019
 
    deferred.call = function() {
2020
 
        this.cancel();
2021
 
        fcn();
2022
 
        return deferred;
2023
 
    };
2024
 
 
2025
 
    deferred.cancel = function() {
2026
 
        clearTimeout(timer);
2027
 
        timer = null;
2028
 
        return deferred;
2029
 
    };
2030
 
 
2031
 
    return deferred;
2032
 
};
2033
 
 
2034
 
 
2035
 
exports.delayedCall = function(fcn, defaultTimeout) {
2036
 
    var timer = null;
2037
 
    var callback = function() {
2038
 
        timer = null;
2039
 
        fcn();
2040
 
    };
2041
 
 
2042
 
    var _self = function(timeout) {
2043
 
        timer && clearTimeout(timer);
2044
 
        timer = setTimeout(callback, timeout || defaultTimeout);
2045
 
    };
2046
 
 
2047
 
    _self.delay = _self;
2048
 
    _self.schedule = function(timeout) {
2049
 
        if (timer == null)
2050
 
            timer = setTimeout(callback, timeout || 0);
2051
 
    };
2052
 
 
2053
 
    _self.call = function() {
2054
 
        this.cancel();
2055
 
        fcn();
2056
 
    };
2057
 
 
2058
 
    _self.cancel = function() {
2059
 
        timer && clearTimeout(timer);
2060
 
        timer = null;
2061
 
    };
2062
 
 
2063
 
    _self.isPending = function() {
2064
 
        return timer;
2065
 
    };
2066
 
 
2067
 
    return _self;
2068
 
};
2069
 
});
2070
 
 
2071
 
define('ace/mode/coffee/coffee-script', ['require', 'exports', 'module' , 'ace/mode/coffee/lexer', 'ace/mode/coffee/parser', 'ace/mode/coffee/nodes'], function(require, exports, module) {
2072
 
    
2073
 
    var Lexer = require("./lexer").Lexer;
2074
 
    var parser = require("./parser");
2075
 
 
2076
 
    var lexer = new Lexer();
2077
 
    parser.lexer = {
2078
 
        lex: function() {
2079
 
            var tag, _ref2;
2080
 
            _ref2 = this.tokens[this.pos++] || [''], tag = _ref2[0], this.yytext = _ref2[1], this.yylineno = _ref2[2];
2081
 
            return tag;
2082
 
        },
2083
 
        setInput: function(tokens) {
2084
 
            this.tokens = tokens;
2085
 
            return this.pos = 0;
2086
 
        },
2087
 
        upcomingInput: function() {
2088
 
            return "";
2089
 
        }
2090
 
    };
2091
 
    parser.yy = require('./nodes');
2092
 
    
2093
 
    exports.parse = function(code) {
2094
 
        return parser.parse(lexer.tokenize(code));
2095
 
    };
2096
 
});
2097
 
 
2098
 
define('ace/mode/coffee/lexer', ['require', 'exports', 'module' , 'ace/mode/coffee/rewriter', 'ace/mode/coffee/helpers'], function(require, exports, module) {
2099
 
 
2100
 
  var BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, starts, _ref, _ref1,
2101
 
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
2102
 
 
2103
 
  _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;
2104
 
 
2105
 
  _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last;
2106
 
 
2107
 
  exports.Lexer = Lexer = (function() {
2108
 
 
2109
 
    function Lexer() {}
2110
 
 
2111
 
    Lexer.prototype.tokenize = function(code, opts) {
2112
 
      var i, tag;
2113
 
      if (opts == null) {
2114
 
        opts = {};
2115
 
      }
2116
 
      if (WHITESPACE.test(code)) {
2117
 
        code = "\n" + code;
2118
 
      }
2119
 
      code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
2120
 
      this.code = code;
2121
 
      this.line = opts.line || 0;
2122
 
      this.indent = 0;
2123
 
      this.indebt = 0;
2124
 
      this.outdebt = 0;
2125
 
      this.indents = [];
2126
 
      this.ends = [];
2127
 
      this.tokens = [];
2128
 
      i = 0;
2129
 
      while (this.chunk = code.slice(i)) {
2130
 
        i += this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
2131
 
      }
2132
 
      this.closeIndentation();
2133
 
      if (tag = this.ends.pop()) {
2134
 
        this.error("missing " + tag);
2135
 
      }
2136
 
      if (opts.rewrite === false) {
2137
 
        return this.tokens;
2138
 
      }
2139
 
      return (new Rewriter).rewrite(this.tokens);
2140
 
    };
2141
 
 
2142
 
    Lexer.prototype.identifierToken = function() {
2143
 
      var colon, forcedIdentifier, id, input, match, prev, tag, _ref2, _ref3;
2144
 
      if (!(match = IDENTIFIER.exec(this.chunk))) {
2145
 
        return 0;
2146
 
      }
2147
 
      input = match[0], id = match[1], colon = match[2];
2148
 
      if (id === 'own' && this.tag() === 'FOR') {
2149
 
        this.token('OWN', id);
2150
 
        return id.length;
2151
 
      }
2152
 
      forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::') || !prev.spaced && prev[0] === '@');
2153
 
      tag = 'IDENTIFIER';
2154
 
      if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) {
2155
 
        tag = id.toUpperCase();
2156
 
        if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
2157
 
          tag = 'LEADING_WHEN';
2158
 
        } else if (tag === 'FOR') {
2159
 
          this.seenFor = true;
2160
 
        } else if (tag === 'UNLESS') {
2161
 
          tag = 'IF';
2162
 
        } else if (__indexOf.call(UNARY, tag) >= 0) {
2163
 
          tag = 'UNARY';
2164
 
        } else if (__indexOf.call(RELATION, tag) >= 0) {
2165
 
          if (tag !== 'INSTANCEOF' && this.seenFor) {
2166
 
            tag = 'FOR' + tag;
2167
 
            this.seenFor = false;
2168
 
          } else {
2169
 
            tag = 'RELATION';
2170
 
            if (this.value() === '!') {
2171
 
              this.tokens.pop();
2172
 
              id = '!' + id;
2173
 
            }
2174
 
          }
2175
 
        }
2176
 
      }
2177
 
      if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
2178
 
        if (forcedIdentifier) {
2179
 
          tag = 'IDENTIFIER';
2180
 
          id = new String(id);
2181
 
          id.reserved = true;
2182
 
        } else if (__indexOf.call(RESERVED, id) >= 0) {
2183
 
          this.error("reserved word \"" + id + "\"");
2184
 
        }
2185
 
      }
2186
 
      if (!forcedIdentifier) {
2187
 
        if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
2188
 
          id = COFFEE_ALIAS_MAP[id];
2189
 
        }
2190
 
        tag = (function() {
2191
 
          switch (id) {
2192
 
            case '!':
2193
 
              return 'UNARY';
2194
 
            case '==':
2195
 
            case '!=':
2196
 
              return 'COMPARE';
2197
 
            case '&&':
2198
 
            case '||':
2199
 
              return 'LOGIC';
2200
 
            case 'true':
2201
 
            case 'false':
2202
 
              return 'BOOL';
2203
 
            case 'break':
2204
 
            case 'continue':
2205
 
              return 'STATEMENT';
2206
 
            default:
2207
 
              return tag;
2208
 
          }
2209
 
        })();
2210
 
      }
2211
 
      this.token(tag, id);
2212
 
      if (colon) {
2213
 
        this.token(':', ':');
2214
 
      }
2215
 
      return input.length;
2216
 
    };
2217
 
 
2218
 
    Lexer.prototype.numberToken = function() {
2219
 
      var binaryLiteral, lexedLength, match, number, octalLiteral;
2220
 
      if (!(match = NUMBER.exec(this.chunk))) {
2221
 
        return 0;
2222
 
      }
2223
 
      number = match[0];
2224
 
      if (/^0[BOX]/.test(number)) {
2225
 
        this.error("radix prefix '" + number + "' must be lowercase");
2226
 
      } else if (/E/.test(number) && !/^0x/.test(number)) {
2227
 
        this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'");
2228
 
      } else if (/^0\d*[89]/.test(number)) {
2229
 
        this.error("decimal literal '" + number + "' must not be prefixed with '0'");
2230
 
      } else if (/^0\d+/.test(number)) {
2231
 
        this.error("octal literal '" + number + "' must be prefixed with '0o'");
2232
 
      }
2233
 
      lexedLength = number.length;
2234
 
      if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
2235
 
        number = '0x' + (parseInt(octalLiteral[1], 8)).toString(16);
2236
 
      }
2237
 
      if (binaryLiteral = /^0b([01]+)/.exec(number)) {
2238
 
        number = '0x' + (parseInt(binaryLiteral[1], 2)).toString(16);
2239
 
      }
2240
 
      this.token('NUMBER', number);
2241
 
      return lexedLength;
2242
 
    };
2243
 
 
2244
 
    Lexer.prototype.stringToken = function() {
2245
 
      var match, octalEsc, string;
2246
 
      switch (this.chunk.charAt(0)) {
2247
 
        case "'":
2248
 
          if (!(match = SIMPLESTR.exec(this.chunk))) {
2249
 
            return 0;
2250
 
          }
2251
 
          this.token('STRING', (string = match[0]).replace(MULTILINER, '\\\n'));
2252
 
          break;
2253
 
        case '"':
2254
 
          if (!(string = this.balancedString(this.chunk, '"'))) {
2255
 
            return 0;
2256
 
          }
2257
 
          if (0 < string.indexOf('#{', 1)) {
2258
 
            this.interpolateString(string.slice(1, -1));
2259
 
          } else {
2260
 
            this.token('STRING', this.escapeLines(string));
2261
 
          }
2262
 
          break;
2263
 
        default:
2264
 
          return 0;
2265
 
      }
2266
 
      if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
2267
 
        this.error("octal escape sequences " + string + " are not allowed");
2268
 
      }
2269
 
      this.line += count(string, '\n');
2270
 
      return string.length;
2271
 
    };
2272
 
 
2273
 
    Lexer.prototype.heredocToken = function() {
2274
 
      var doc, heredoc, match, quote;
2275
 
      if (!(match = HEREDOC.exec(this.chunk))) {
2276
 
        return 0;
2277
 
      }
2278
 
      heredoc = match[0];
2279
 
      quote = heredoc.charAt(0);
2280
 
      doc = this.sanitizeHeredoc(match[2], {
2281
 
        quote: quote,
2282
 
        indent: null
2283
 
      });
2284
 
      if (quote === '"' && 0 <= doc.indexOf('#{')) {
2285
 
        this.interpolateString(doc, {
2286
 
          heredoc: true
2287
 
        });
2288
 
      } else {
2289
 
        this.token('STRING', this.makeString(doc, quote, true));
2290
 
      }
2291
 
      this.line += count(heredoc, '\n');
2292
 
      return heredoc.length;
2293
 
    };
2294
 
 
2295
 
    Lexer.prototype.commentToken = function() {
2296
 
      var comment, here, match;
2297
 
      if (!(match = this.chunk.match(COMMENT))) {
2298
 
        return 0;
2299
 
      }
2300
 
      comment = match[0], here = match[1];
2301
 
      if (here) {
2302
 
        this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
2303
 
          herecomment: true,
2304
 
          indent: Array(this.indent + 1).join(' ')
2305
 
        }));
2306
 
      }
2307
 
      this.line += count(comment, '\n');
2308
 
      return comment.length;
2309
 
    };
2310
 
 
2311
 
    Lexer.prototype.jsToken = function() {
2312
 
      var match, script;
2313
 
      if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
2314
 
        return 0;
2315
 
      }
2316
 
      this.token('JS', (script = match[0]).slice(1, -1));
2317
 
      this.line += count(script, '\n');
2318
 
      return script.length;
2319
 
    };
2320
 
 
2321
 
    Lexer.prototype.regexToken = function() {
2322
 
      var flags, length, match, prev, regex, _ref2, _ref3;
2323
 
      if (this.chunk.charAt(0) !== '/') {
2324
 
        return 0;
2325
 
      }
2326
 
      if (match = HEREGEX.exec(this.chunk)) {
2327
 
        length = this.heregexToken(match);
2328
 
        this.line += count(match[0], '\n');
2329
 
        return length;
2330
 
      }
2331
 
      prev = last(this.tokens);
2332
 
      if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
2333
 
        return 0;
2334
 
      }
2335
 
      if (!(match = REGEX.exec(this.chunk))) {
2336
 
        return 0;
2337
 
      }
2338
 
      _ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2];
2339
 
      if (regex.slice(0, 2) === '/*') {
2340
 
        this.error('regular expressions cannot begin with `*`');
2341
 
      }
2342
 
      if (regex === '//') {
2343
 
        regex = '/(?:)/';
2344
 
      }
2345
 
      this.token('REGEX', "" + regex + flags);
2346
 
      return match.length;
2347
 
    };
2348
 
 
2349
 
    Lexer.prototype.heregexToken = function(match) {
2350
 
      var body, flags, heregex, re, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4, _ref5;
2351
 
      heregex = match[0], body = match[1], flags = match[2];
2352
 
      if (0 > body.indexOf('#{')) {
2353
 
        re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
2354
 
        if (re.match(/^\*/)) {
2355
 
          this.error('regular expressions cannot begin with `*`');
2356
 
        }
2357
 
        this.token('REGEX', "/" + (re || '(?:)') + "/" + flags);
2358
 
        return heregex.length;
2359
 
      }
2360
 
      this.token('IDENTIFIER', 'RegExp');
2361
 
      this.tokens.push(['CALL_START', '(']);
2362
 
      tokens = [];
2363
 
      _ref2 = this.interpolateString(body, {
2364
 
        regex: true
2365
 
      });
2366
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
2367
 
        _ref3 = _ref2[_i], tag = _ref3[0], value = _ref3[1];
2368
 
        if (tag === 'TOKENS') {
2369
 
          tokens.push.apply(tokens, value);
2370
 
        } else {
2371
 
          if (!(value = value.replace(HEREGEX_OMIT, ''))) {
2372
 
            continue;
2373
 
          }
2374
 
          value = value.replace(/\\/g, '\\\\');
2375
 
          tokens.push(['STRING', this.makeString(value, '"', true)]);
2376
 
        }
2377
 
        tokens.push(['+', '+']);
2378
 
      }
2379
 
      tokens.pop();
2380
 
      if (((_ref4 = tokens[0]) != null ? _ref4[0] : void 0) !== 'STRING') {
2381
 
        this.tokens.push(['STRING', '""'], ['+', '+']);
2382
 
      }
2383
 
      (_ref5 = this.tokens).push.apply(_ref5, tokens);
2384
 
      if (flags) {
2385
 
        this.tokens.push([',', ','], ['STRING', '"' + flags + '"']);
2386
 
      }
2387
 
      this.token(')', ')');
2388
 
      return heregex.length;
2389
 
    };
2390
 
 
2391
 
    Lexer.prototype.lineToken = function() {
2392
 
      var diff, indent, match, noNewlines, size;
2393
 
      if (!(match = MULTI_DENT.exec(this.chunk))) {
2394
 
        return 0;
2395
 
      }
2396
 
      indent = match[0];
2397
 
      this.line += count(indent, '\n');
2398
 
      this.seenFor = false;
2399
 
      size = indent.length - 1 - indent.lastIndexOf('\n');
2400
 
      noNewlines = this.unfinished();
2401
 
      if (size - this.indebt === this.indent) {
2402
 
        if (noNewlines) {
2403
 
          this.suppressNewlines();
2404
 
        } else {
2405
 
          this.newlineToken();
2406
 
        }
2407
 
        return indent.length;
2408
 
      }
2409
 
      if (size > this.indent) {
2410
 
        if (noNewlines) {
2411
 
          this.indebt = size - this.indent;
2412
 
          this.suppressNewlines();
2413
 
          return indent.length;
2414
 
        }
2415
 
        diff = size - this.indent + this.outdebt;
2416
 
        this.token('INDENT', diff);
2417
 
        this.indents.push(diff);
2418
 
        this.ends.push('OUTDENT');
2419
 
        this.outdebt = this.indebt = 0;
2420
 
      } else {
2421
 
        this.indebt = 0;
2422
 
        this.outdentToken(this.indent - size, noNewlines);
2423
 
      }
2424
 
      this.indent = size;
2425
 
      return indent.length;
2426
 
    };
2427
 
 
2428
 
    Lexer.prototype.outdentToken = function(moveOut, noNewlines) {
2429
 
      var dent, len;
2430
 
      while (moveOut > 0) {
2431
 
        len = this.indents.length - 1;
2432
 
        if (this.indents[len] === void 0) {
2433
 
          moveOut = 0;
2434
 
        } else if (this.indents[len] === this.outdebt) {
2435
 
          moveOut -= this.outdebt;
2436
 
          this.outdebt = 0;
2437
 
        } else if (this.indents[len] < this.outdebt) {
2438
 
          this.outdebt -= this.indents[len];
2439
 
          moveOut -= this.indents[len];
2440
 
        } else {
2441
 
          dent = this.indents.pop() - this.outdebt;
2442
 
          moveOut -= dent;
2443
 
          this.outdebt = 0;
2444
 
          this.pair('OUTDENT');
2445
 
          this.token('OUTDENT', dent);
2446
 
        }
2447
 
      }
2448
 
      if (dent) {
2449
 
        this.outdebt -= moveOut;
2450
 
      }
2451
 
      while (this.value() === ';') {
2452
 
        this.tokens.pop();
2453
 
      }
2454
 
      if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
2455
 
        this.token('TERMINATOR', '\n');
2456
 
      }
2457
 
      return this;
2458
 
    };
2459
 
 
2460
 
    Lexer.prototype.whitespaceToken = function() {
2461
 
      var match, nline, prev;
2462
 
      if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
2463
 
        return 0;
2464
 
      }
2465
 
      prev = last(this.tokens);
2466
 
      if (prev) {
2467
 
        prev[match ? 'spaced' : 'newLine'] = true;
2468
 
      }
2469
 
      if (match) {
2470
 
        return match[0].length;
2471
 
      } else {
2472
 
        return 0;
2473
 
      }
2474
 
    };
2475
 
 
2476
 
    Lexer.prototype.newlineToken = function() {
2477
 
      while (this.value() === ';') {
2478
 
        this.tokens.pop();
2479
 
      }
2480
 
      if (this.tag() !== 'TERMINATOR') {
2481
 
        this.token('TERMINATOR', '\n');
2482
 
      }
2483
 
      return this;
2484
 
    };
2485
 
 
2486
 
    Lexer.prototype.suppressNewlines = function() {
2487
 
      if (this.value() === '\\') {
2488
 
        this.tokens.pop();
2489
 
      }
2490
 
      return this;
2491
 
    };
2492
 
 
2493
 
    Lexer.prototype.literalToken = function() {
2494
 
      var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
2495
 
      if (match = OPERATOR.exec(this.chunk)) {
2496
 
        value = match[0];
2497
 
        if (CODE.test(value)) {
2498
 
          this.tagParameters();
2499
 
        }
2500
 
      } else {
2501
 
        value = this.chunk.charAt(0);
2502
 
      }
2503
 
      tag = value;
2504
 
      prev = last(this.tokens);
2505
 
      if (value === '=' && prev) {
2506
 
        if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
2507
 
          this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
2508
 
        }
2509
 
        if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
2510
 
          prev[0] = 'COMPOUND_ASSIGN';
2511
 
          prev[1] += '=';
2512
 
          return value.length;
2513
 
        }
2514
 
      }
2515
 
      if (value === ';') {
2516
 
        this.seenFor = false;
2517
 
        tag = 'TERMINATOR';
2518
 
      } else if (__indexOf.call(MATH, value) >= 0) {
2519
 
        tag = 'MATH';
2520
 
      } else if (__indexOf.call(COMPARE, value) >= 0) {
2521
 
        tag = 'COMPARE';
2522
 
      } else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
2523
 
        tag = 'COMPOUND_ASSIGN';
2524
 
      } else if (__indexOf.call(UNARY, value) >= 0) {
2525
 
        tag = 'UNARY';
2526
 
      } else if (__indexOf.call(SHIFT, value) >= 0) {
2527
 
        tag = 'SHIFT';
2528
 
      } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
2529
 
        tag = 'LOGIC';
2530
 
      } else if (prev && !prev.spaced) {
2531
 
        if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
2532
 
          if (prev[0] === '?') {
2533
 
            prev[0] = 'FUNC_EXIST';
2534
 
          }
2535
 
          tag = 'CALL_START';
2536
 
        } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
2537
 
          tag = 'INDEX_START';
2538
 
          switch (prev[0]) {
2539
 
            case '?':
2540
 
              prev[0] = 'INDEX_SOAK';
2541
 
          }
2542
 
        }
2543
 
      }
2544
 
      switch (value) {
2545
 
        case '(':
2546
 
        case '{':
2547
 
        case '[':
2548
 
          this.ends.push(INVERSES[value]);
2549
 
          break;
2550
 
        case ')':
2551
 
        case '}':
2552
 
        case ']':
2553
 
          this.pair(value);
2554
 
      }
2555
 
      this.token(tag, value);
2556
 
      return value.length;
2557
 
    };
2558
 
 
2559
 
    Lexer.prototype.sanitizeHeredoc = function(doc, options) {
2560
 
      var attempt, herecomment, indent, match, _ref2;
2561
 
      indent = options.indent, herecomment = options.herecomment;
2562
 
      if (herecomment) {
2563
 
        if (HEREDOC_ILLEGAL.test(doc)) {
2564
 
          this.error("block comment cannot contain \"*/\", starting");
2565
 
        }
2566
 
        if (doc.indexOf('\n') <= 0) {
2567
 
          return doc;
2568
 
        }
2569
 
      } else {
2570
 
        while (match = HEREDOC_INDENT.exec(doc)) {
2571
 
          attempt = match[1];
2572
 
          if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
2573
 
            indent = attempt;
2574
 
          }
2575
 
        }
2576
 
      }
2577
 
      if (indent) {
2578
 
        doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
2579
 
      }
2580
 
      if (!herecomment) {
2581
 
        doc = doc.replace(/^\n/, '');
2582
 
      }
2583
 
      return doc;
2584
 
    };
2585
 
 
2586
 
    Lexer.prototype.tagParameters = function() {
2587
 
      var i, stack, tok, tokens;
2588
 
      if (this.tag() !== ')') {
2589
 
        return this;
2590
 
      }
2591
 
      stack = [];
2592
 
      tokens = this.tokens;
2593
 
      i = tokens.length;
2594
 
      tokens[--i][0] = 'PARAM_END';
2595
 
      while (tok = tokens[--i]) {
2596
 
        switch (tok[0]) {
2597
 
          case ')':
2598
 
            stack.push(tok);
2599
 
            break;
2600
 
          case '(':
2601
 
          case 'CALL_START':
2602
 
            if (stack.length) {
2603
 
              stack.pop();
2604
 
            } else if (tok[0] === '(') {
2605
 
              tok[0] = 'PARAM_START';
2606
 
              return this;
2607
 
            } else {
2608
 
              return this;
2609
 
            }
2610
 
        }
2611
 
      }
2612
 
      return this;
2613
 
    };
2614
 
 
2615
 
    Lexer.prototype.closeIndentation = function() {
2616
 
      return this.outdentToken(this.indent);
2617
 
    };
2618
 
 
2619
 
    Lexer.prototype.balancedString = function(str, end) {
2620
 
      var continueCount, i, letter, match, prev, stack, _i, _ref2;
2621
 
      continueCount = 0;
2622
 
      stack = [end];
2623
 
      for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) {
2624
 
        if (continueCount) {
2625
 
          --continueCount;
2626
 
          continue;
2627
 
        }
2628
 
        switch (letter = str.charAt(i)) {
2629
 
          case '\\':
2630
 
            ++continueCount;
2631
 
            continue;
2632
 
          case end:
2633
 
            stack.pop();
2634
 
            if (!stack.length) {
2635
 
              return str.slice(0, +i + 1 || 9e9);
2636
 
            }
2637
 
            end = stack[stack.length - 1];
2638
 
            continue;
2639
 
        }
2640
 
        if (end === '}' && (letter === '"' || letter === "'")) {
2641
 
          stack.push(end = letter);
2642
 
        } else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) {
2643
 
          continueCount += match[0].length - 1;
2644
 
        } else if (end === '}' && letter === '{') {
2645
 
          stack.push(end = '}');
2646
 
        } else if (end === '"' && prev === '#' && letter === '{') {
2647
 
          stack.push(end = '}');
2648
 
        }
2649
 
        prev = letter;
2650
 
      }
2651
 
      return this.error("missing " + (stack.pop()) + ", starting");
2652
 
    };
2653
 
 
2654
 
    Lexer.prototype.interpolateString = function(str, options) {
2655
 
      var expr, heredoc, i, inner, interpolated, len, letter, nested, pi, regex, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4;
2656
 
      if (options == null) {
2657
 
        options = {};
2658
 
      }
2659
 
      heredoc = options.heredoc, regex = options.regex;
2660
 
      tokens = [];
2661
 
      pi = 0;
2662
 
      i = -1;
2663
 
      while (letter = str.charAt(i += 1)) {
2664
 
        if (letter === '\\') {
2665
 
          i += 1;
2666
 
          continue;
2667
 
        }
2668
 
        if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
2669
 
          continue;
2670
 
        }
2671
 
        if (pi < i) {
2672
 
          tokens.push(['NEOSTRING', str.slice(pi, i)]);
2673
 
        }
2674
 
        inner = expr.slice(1, -1);
2675
 
        if (inner.length) {
2676
 
          nested = new Lexer().tokenize(inner, {
2677
 
            line: this.line,
2678
 
            rewrite: false
2679
 
          });
2680
 
          nested.pop();
2681
 
          if (((_ref2 = nested[0]) != null ? _ref2[0] : void 0) === 'TERMINATOR') {
2682
 
            nested.shift();
2683
 
          }
2684
 
          if (len = nested.length) {
2685
 
            if (len > 1) {
2686
 
              nested.unshift(['(', '(', this.line]);
2687
 
              nested.push([')', ')', this.line]);
2688
 
            }
2689
 
            tokens.push(['TOKENS', nested]);
2690
 
          }
2691
 
        }
2692
 
        i += expr.length;
2693
 
        pi = i + 1;
2694
 
      }
2695
 
      if ((i > pi && pi < str.length)) {
2696
 
        tokens.push(['NEOSTRING', str.slice(pi)]);
2697
 
      }
2698
 
      if (regex) {
2699
 
        return tokens;
2700
 
      }
2701
 
      if (!tokens.length) {
2702
 
        return this.token('STRING', '""');
2703
 
      }
2704
 
      if (tokens[0][0] !== 'NEOSTRING') {
2705
 
        tokens.unshift(['', '']);
2706
 
      }
2707
 
      if (interpolated = tokens.length > 1) {
2708
 
        this.token('(', '(');
2709
 
      }
2710
 
      for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
2711
 
        _ref3 = tokens[i], tag = _ref3[0], value = _ref3[1];
2712
 
        if (i) {
2713
 
          this.token('+', '+');
2714
 
        }
2715
 
        if (tag === 'TOKENS') {
2716
 
          (_ref4 = this.tokens).push.apply(_ref4, value);
2717
 
        } else {
2718
 
          this.token('STRING', this.makeString(value, '"', heredoc));
2719
 
        }
2720
 
      }
2721
 
      if (interpolated) {
2722
 
        this.token(')', ')');
2723
 
      }
2724
 
      return tokens;
2725
 
    };
2726
 
 
2727
 
    Lexer.prototype.pair = function(tag) {
2728
 
      var size, wanted;
2729
 
      if (tag !== (wanted = last(this.ends))) {
2730
 
        if ('OUTDENT' !== wanted) {
2731
 
          this.error("unmatched " + tag);
2732
 
        }
2733
 
        this.indent -= size = last(this.indents);
2734
 
        this.outdentToken(size, true);
2735
 
        return this.pair(tag);
2736
 
      }
2737
 
      return this.ends.pop();
2738
 
    };
2739
 
 
2740
 
    Lexer.prototype.token = function(tag, value) {
2741
 
      return this.tokens.push([tag, value, this.line]);
2742
 
    };
2743
 
 
2744
 
    Lexer.prototype.tag = function(index, tag) {
2745
 
      var tok;
2746
 
      return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
2747
 
    };
2748
 
 
2749
 
    Lexer.prototype.value = function(index, val) {
2750
 
      var tok;
2751
 
      return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
2752
 
    };
2753
 
 
2754
 
    Lexer.prototype.unfinished = function() {
2755
 
      var _ref2;
2756
 
      return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
2757
 
    };
2758
 
 
2759
 
    Lexer.prototype.escapeLines = function(str, heredoc) {
2760
 
      return str.replace(MULTILINER, heredoc ? '\\n' : '');
2761
 
    };
2762
 
 
2763
 
    Lexer.prototype.makeString = function(body, quote, heredoc) {
2764
 
      if (!body) {
2765
 
        return quote + quote;
2766
 
      }
2767
 
      body = body.replace(/\\([\s\S])/g, function(match, contents) {
2768
 
        if (contents === '\n' || contents === quote) {
2769
 
          return contents;
2770
 
        } else {
2771
 
          return match;
2772
 
        }
2773
 
      });
2774
 
      body = body.replace(RegExp("" + quote, "g"), '\\$&');
2775
 
      return quote + this.escapeLines(body, heredoc) + quote;
2776
 
    };
2777
 
 
2778
 
    Lexer.prototype.error = function(message) {
2779
 
      throw SyntaxError("" + message + " on line " + (this.line + 1));
2780
 
    };
2781
 
 
2782
 
    return Lexer;
2783
 
 
2784
 
  })();
2785
 
 
2786
 
  JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super'];
2787
 
 
2788
 
  COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
2789
 
 
2790
 
  COFFEE_ALIAS_MAP = {
2791
 
    and: '&&',
2792
 
    or: '||',
2793
 
    is: '==',
2794
 
    isnt: '!=',
2795
 
    not: '!',
2796
 
    yes: 'true',
2797
 
    no: 'false',
2798
 
    on: 'true',
2799
 
    off: 'false'
2800
 
  };
2801
 
 
2802
 
  COFFEE_ALIASES = (function() {
2803
 
    var _results;
2804
 
    _results = [];
2805
 
    for (key in COFFEE_ALIAS_MAP) {
2806
 
      _results.push(key);
2807
 
    }
2808
 
    return _results;
2809
 
  })();
2810
 
 
2811
 
  COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);
2812
 
 
2813
 
  RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield'];
2814
 
 
2815
 
  STRICT_PROSCRIBED = ['arguments', 'eval'];
2816
 
 
2817
 
  JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED);
2818
 
 
2819
 
  exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED);
2820
 
 
2821
 
  exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED;
2822
 
 
2823
 
  IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
2824
 
 
2825
 
  NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
2826
 
 
2827
 
  HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
2828
 
 
2829
 
  OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
2830
 
 
2831
 
  WHITESPACE = /^[^\n\S]+/;
2832
 
 
2833
 
  COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/;
2834
 
 
2835
 
  CODE = /^[-=]>/;
2836
 
 
2837
 
  MULTI_DENT = /^(?:\n[^\n\S]*)+/;
2838
 
 
2839
 
  SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
2840
 
 
2841
 
  JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
2842
 
 
2843
 
  REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/;
2844
 
 
2845
 
  HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/;
2846
 
 
2847
 
  HEREGEX_OMIT = /\s+(?:#.*)?/g;
2848
 
 
2849
 
  MULTILINER = /\n/g;
2850
 
 
2851
 
  HEREDOC_INDENT = /\n+([^\n\S]*)/g;
2852
 
 
2853
 
  HEREDOC_ILLEGAL = /\*\//;
2854
 
 
2855
 
  LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;
2856
 
 
2857
 
  TRAILING_SPACES = /\s+$/;
2858
 
 
2859
 
  COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
2860
 
 
2861
 
  UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'];
2862
 
 
2863
 
  LOGIC = ['&&', '||', '&', '|', '^'];
2864
 
 
2865
 
  SHIFT = ['<<', '>>', '>>>'];
2866
 
 
2867
 
  COMPARE = ['==', '!=', '<', '>', '<=', '>='];
2868
 
 
2869
 
  MATH = ['*', '/', '%'];
2870
 
 
2871
 
  RELATION = ['IN', 'OF', 'INSTANCEOF'];
2872
 
 
2873
 
  BOOL = ['TRUE', 'FALSE'];
2874
 
 
2875
 
  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']'];
2876
 
 
2877
 
  NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
2878
 
 
2879
 
  CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
2880
 
 
2881
 
  INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED');
2882
 
 
2883
 
  LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
2884
 
 
2885
 
 
2886
 
});
2887
 
 
2888
 
define('ace/mode/coffee/rewriter', ['require', 'exports', 'module' ], function(require, exports, module) {
2889
 
 
2890
 
  var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, left, rite, _i, _len, _ref,
2891
 
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
2892
 
    __slice = [].slice;
2893
 
 
2894
 
  exports.Rewriter = (function() {
2895
 
 
2896
 
    function Rewriter() {}
2897
 
 
2898
 
    Rewriter.prototype.rewrite = function(tokens) {
2899
 
      this.tokens = tokens;
2900
 
      this.removeLeadingNewlines();
2901
 
      this.removeMidExpressionNewlines();
2902
 
      this.closeOpenCalls();
2903
 
      this.closeOpenIndexes();
2904
 
      this.addImplicitIndentation();
2905
 
      this.tagPostfixConditionals();
2906
 
      this.addImplicitBraces();
2907
 
      this.addImplicitParentheses();
2908
 
      return this.tokens;
2909
 
    };
2910
 
 
2911
 
    Rewriter.prototype.scanTokens = function(block) {
2912
 
      var i, token, tokens;
2913
 
      tokens = this.tokens;
2914
 
      i = 0;
2915
 
      while (token = tokens[i]) {
2916
 
        i += block.call(this, token, i, tokens);
2917
 
      }
2918
 
      return true;
2919
 
    };
2920
 
 
2921
 
    Rewriter.prototype.detectEnd = function(i, condition, action) {
2922
 
      var levels, token, tokens, _ref, _ref1;
2923
 
      tokens = this.tokens;
2924
 
      levels = 0;
2925
 
      while (token = tokens[i]) {
2926
 
        if (levels === 0 && condition.call(this, token, i)) {
2927
 
          return action.call(this, token, i);
2928
 
        }
2929
 
        if (!token || levels < 0) {
2930
 
          return action.call(this, token, i - 1);
2931
 
        }
2932
 
        if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
2933
 
          levels += 1;
2934
 
        } else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
2935
 
          levels -= 1;
2936
 
        }
2937
 
        i += 1;
2938
 
      }
2939
 
      return i - 1;
2940
 
    };
2941
 
 
2942
 
    Rewriter.prototype.removeLeadingNewlines = function() {
2943
 
      var i, tag, _i, _len, _ref;
2944
 
      _ref = this.tokens;
2945
 
      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
2946
 
        tag = _ref[i][0];
2947
 
        if (tag !== 'TERMINATOR') {
2948
 
          break;
2949
 
        }
2950
 
      }
2951
 
      if (i) {
2952
 
        return this.tokens.splice(0, i);
2953
 
      }
2954
 
    };
2955
 
 
2956
 
    Rewriter.prototype.removeMidExpressionNewlines = function() {
2957
 
      return this.scanTokens(function(token, i, tokens) {
2958
 
        var _ref;
2959
 
        if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
2960
 
          return 1;
2961
 
        }
2962
 
        tokens.splice(i, 1);
2963
 
        return 0;
2964
 
      });
2965
 
    };
2966
 
 
2967
 
    Rewriter.prototype.closeOpenCalls = function() {
2968
 
      var action, condition;
2969
 
      condition = function(token, i) {
2970
 
        var _ref;
2971
 
        return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
2972
 
      };
2973
 
      action = function(token, i) {
2974
 
        return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
2975
 
      };
2976
 
      return this.scanTokens(function(token, i) {
2977
 
        if (token[0] === 'CALL_START') {
2978
 
          this.detectEnd(i + 1, condition, action);
2979
 
        }
2980
 
        return 1;
2981
 
      });
2982
 
    };
2983
 
 
2984
 
    Rewriter.prototype.closeOpenIndexes = function() {
2985
 
      var action, condition;
2986
 
      condition = function(token, i) {
2987
 
        var _ref;
2988
 
        return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
2989
 
      };
2990
 
      action = function(token, i) {
2991
 
        return token[0] = 'INDEX_END';
2992
 
      };
2993
 
      return this.scanTokens(function(token, i) {
2994
 
        if (token[0] === 'INDEX_START') {
2995
 
          this.detectEnd(i + 1, condition, action);
2996
 
        }
2997
 
        return 1;
2998
 
      });
2999
 
    };
3000
 
 
3001
 
    Rewriter.prototype.addImplicitBraces = function() {
3002
 
      var action, condition, sameLine, stack, start, startIndent, startIndex, startsLine;
3003
 
      stack = [];
3004
 
      start = null;
3005
 
      startsLine = null;
3006
 
      sameLine = true;
3007
 
      startIndent = 0;
3008
 
      startIndex = 0;
3009
 
      condition = function(token, i) {
3010
 
        var one, tag, three, two, _ref, _ref1;
3011
 
        _ref = this.tokens.slice(i + 1, +(i + 3) + 1 || 9e9), one = _ref[0], two = _ref[1], three = _ref[2];
3012
 
        if ('HERECOMMENT' === (one != null ? one[0] : void 0)) {
3013
 
          return false;
3014
 
        }
3015
 
        tag = token[0];
3016
 
        if (__indexOf.call(LINEBREAKS, tag) >= 0) {
3017
 
          sameLine = false;
3018
 
        }
3019
 
        return (((tag === 'TERMINATOR' || tag === 'OUTDENT') || (__indexOf.call(IMPLICIT_END, tag) >= 0 && sameLine && !(i - startIndex === 1))) && ((!startsLine && this.tag(i - 1) !== ',') || !((two != null ? two[0] : void 0) === ':' || (one != null ? one[0] : void 0) === '@' && (three != null ? three[0] : void 0) === ':'))) || (tag === ',' && one && ((_ref1 = one[0]) !== 'IDENTIFIER' && _ref1 !== 'NUMBER' && _ref1 !== 'STRING' && _ref1 !== '@' && _ref1 !== 'TERMINATOR' && _ref1 !== 'OUTDENT'));
3020
 
      };
3021
 
      action = function(token, i) {
3022
 
        var tok;
3023
 
        tok = this.generate('}', '}', token[2]);
3024
 
        return this.tokens.splice(i, 0, tok);
3025
 
      };
3026
 
      return this.scanTokens(function(token, i, tokens) {
3027
 
        var ago, idx, prevTag, tag, tok, value, _ref, _ref1;
3028
 
        if (_ref = (tag = token[0]), __indexOf.call(EXPRESSION_START, _ref) >= 0) {
3029
 
          stack.push([(tag === 'INDENT' && this.tag(i - 1) === '{' ? '{' : tag), i]);
3030
 
          return 1;
3031
 
        }
3032
 
        if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
3033
 
          start = stack.pop();
3034
 
          return 1;
3035
 
        }
3036
 
        if (!(tag === ':' && ((ago = this.tag(i - 2)) === ':' || ((_ref1 = stack[stack.length - 1]) != null ? _ref1[0] : void 0) !== '{'))) {
3037
 
          return 1;
3038
 
        }
3039
 
        sameLine = true;
3040
 
        startIndex = i + 1;
3041
 
        stack.push(['{']);
3042
 
        idx = ago === '@' ? i - 2 : i - 1;
3043
 
        while (this.tag(idx - 2) === 'HERECOMMENT') {
3044
 
          idx -= 2;
3045
 
        }
3046
 
        prevTag = this.tag(idx - 1);
3047
 
        startsLine = !prevTag || (__indexOf.call(LINEBREAKS, prevTag) >= 0);
3048
 
        value = new String('{');
3049
 
        value.generated = true;
3050
 
        tok = this.generate('{', value, token[2]);
3051
 
        tokens.splice(idx, 0, tok);
3052
 
        this.detectEnd(i + 2, condition, action);
3053
 
        return 2;
3054
 
      });
3055
 
    };
3056
 
 
3057
 
    Rewriter.prototype.addImplicitParentheses = function() {
3058
 
      var action, condition, noCall, seenControl, seenSingle;
3059
 
      noCall = seenSingle = seenControl = false;
3060
 
      condition = function(token, i) {
3061
 
        var post, tag, _ref, _ref1;
3062
 
        tag = token[0];
3063
 
        if (!seenSingle && token.fromThen) {
3064
 
          return true;
3065
 
        }
3066
 
        if (tag === 'IF' || tag === 'ELSE' || tag === 'CATCH' || tag === '->' || tag === '=>' || tag === 'CLASS') {
3067
 
          seenSingle = true;
3068
 
        }
3069
 
        if (tag === 'IF' || tag === 'ELSE' || tag === 'SWITCH' || tag === 'TRY' || tag === '=') {
3070
 
          seenControl = true;
3071
 
        }
3072
 
        if ((tag === '.' || tag === '?.' || tag === '::') && this.tag(i - 1) === 'OUTDENT') {
3073
 
          return true;
3074
 
        }
3075
 
        return !token.generated && this.tag(i - 1) !== ',' && (__indexOf.call(IMPLICIT_END, tag) >= 0 || (tag === 'INDENT' && !seenControl)) && (tag !== 'INDENT' || (((_ref = this.tag(i - 2)) !== 'CLASS' && _ref !== 'EXTENDS') && (_ref1 = this.tag(i - 1), __indexOf.call(IMPLICIT_BLOCK, _ref1) < 0) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{')));
3076
 
      };
3077
 
      action = function(token, i) {
3078
 
        return this.tokens.splice(i, 0, this.generate('CALL_END', ')', token[2]));
3079
 
      };
3080
 
      return this.scanTokens(function(token, i, tokens) {
3081
 
        var callObject, current, next, prev, tag, _ref, _ref1, _ref2;
3082
 
        tag = token[0];
3083
 
        if (tag === 'CLASS' || tag === 'IF' || tag === 'FOR' || tag === 'WHILE') {
3084
 
          noCall = true;
3085
 
        }
3086
 
        _ref = tokens.slice(i - 1, +(i + 1) + 1 || 9e9), prev = _ref[0], current = _ref[1], next = _ref[2];
3087
 
        callObject = !noCall && tag === 'INDENT' && next && next.generated && next[0] === '{' && prev && (_ref1 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref1) >= 0);
3088
 
        seenSingle = false;
3089
 
        seenControl = false;
3090
 
        if (__indexOf.call(LINEBREAKS, tag) >= 0) {
3091
 
          noCall = false;
3092
 
        }
3093
 
        if (prev && !prev.spaced && tag === '?') {
3094
 
          token.call = true;
3095
 
        }
3096
 
        if (token.fromThen) {
3097
 
          return 1;
3098
 
        }
3099
 
        if (!(callObject || (prev != null ? prev.spaced : void 0) && (prev.call || (_ref2 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref2) >= 0)) && (__indexOf.call(IMPLICIT_CALL, tag) >= 0 || !(token.spaced || token.newLine) && __indexOf.call(IMPLICIT_UNSPACED_CALL, tag) >= 0))) {
3100
 
          return 1;
3101
 
        }
3102
 
        tokens.splice(i, 0, this.generate('CALL_START', '(', token[2]));
3103
 
        this.detectEnd(i + 1, condition, action);
3104
 
        if (prev[0] === '?') {
3105
 
          prev[0] = 'FUNC_EXIST';
3106
 
        }
3107
 
        return 2;
3108
 
      });
3109
 
    };
3110
 
 
3111
 
    Rewriter.prototype.addImplicitIndentation = function() {
3112
 
      var action, condition, indent, outdent, starter;
3113
 
      starter = indent = outdent = null;
3114
 
      condition = function(token, i) {
3115
 
        var _ref;
3116
 
        return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
3117
 
      };
3118
 
      action = function(token, i) {
3119
 
        return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
3120
 
      };
3121
 
      return this.scanTokens(function(token, i, tokens) {
3122
 
        var tag, _ref, _ref1;
3123
 
        tag = token[0];
3124
 
        if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
3125
 
          tokens.splice(i, 1);
3126
 
          return 0;
3127
 
        }
3128
 
        if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
3129
 
          tokens.splice.apply(tokens, [i, 0].concat(__slice.call(this.indentation(token))));
3130
 
          return 2;
3131
 
        }
3132
 
        if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
3133
 
          tokens.splice.apply(tokens, [i + 2, 0].concat(__slice.call(this.indentation(token))));
3134
 
          return 4;
3135
 
        }
3136
 
        if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
3137
 
          starter = tag;
3138
 
          _ref1 = this.indentation(token, true), indent = _ref1[0], outdent = _ref1[1];
3139
 
          if (starter === 'THEN') {
3140
 
            indent.fromThen = true;
3141
 
          }
3142
 
          tokens.splice(i + 1, 0, indent);
3143
 
          this.detectEnd(i + 2, condition, action);
3144
 
          if (tag === 'THEN') {
3145
 
            tokens.splice(i, 1);
3146
 
          }
3147
 
          return 1;
3148
 
        }
3149
 
        return 1;
3150
 
      });
3151
 
    };
3152
 
 
3153
 
    Rewriter.prototype.tagPostfixConditionals = function() {
3154
 
      var action, condition, original;
3155
 
      original = null;
3156
 
      condition = function(token, i) {
3157
 
        var _ref;
3158
 
        return (_ref = token[0]) === 'TERMINATOR' || _ref === 'INDENT';
3159
 
      };
3160
 
      action = function(token, i) {
3161
 
        if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) {
3162
 
          return original[0] = 'POST_' + original[0];
3163
 
        }
3164
 
      };
3165
 
      return this.scanTokens(function(token, i) {
3166
 
        if (token[0] !== 'IF') {
3167
 
          return 1;
3168
 
        }
3169
 
        original = token;
3170
 
        this.detectEnd(i + 1, condition, action);
3171
 
        return 1;
3172
 
      });
3173
 
    };
3174
 
 
3175
 
    Rewriter.prototype.indentation = function(token, implicit) {
3176
 
      var indent, outdent;
3177
 
      if (implicit == null) {
3178
 
        implicit = false;
3179
 
      }
3180
 
      indent = ['INDENT', 2, token[2]];
3181
 
      outdent = ['OUTDENT', 2, token[2]];
3182
 
      if (implicit) {
3183
 
        indent.generated = outdent.generated = true;
3184
 
      }
3185
 
      return [indent, outdent];
3186
 
    };
3187
 
 
3188
 
    Rewriter.prototype.generate = function(tag, value, line) {
3189
 
      var tok;
3190
 
      tok = [tag, value, line];
3191
 
      tok.generated = true;
3192
 
      return tok;
3193
 
    };
3194
 
 
3195
 
    Rewriter.prototype.tag = function(i) {
3196
 
      var _ref;
3197
 
      return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
3198
 
    };
3199
 
 
3200
 
    return Rewriter;
3201
 
 
3202
 
  })();
3203
 
 
3204
 
  BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
3205
 
 
3206
 
  exports.INVERSES = INVERSES = {};
3207
 
 
3208
 
  EXPRESSION_START = [];
3209
 
 
3210
 
  EXPRESSION_END = [];
3211
 
 
3212
 
  for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
3213
 
    _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
3214
 
    EXPRESSION_START.push(INVERSES[rite] = left);
3215
 
    EXPRESSION_END.push(INVERSES[left] = rite);
3216
 
  }
3217
 
 
3218
 
  EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
3219
 
 
3220
 
  IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
3221
 
 
3222
 
  IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
3223
 
 
3224
 
  IMPLICIT_UNSPACED_CALL = ['+', '-'];
3225
 
 
3226
 
  IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
3227
 
 
3228
 
  IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
3229
 
 
3230
 
  SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
3231
 
 
3232
 
  SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
3233
 
 
3234
 
  LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
3235
 
 
3236
 
 
3237
 
});
3238
 
 
3239
 
define('ace/mode/coffee/helpers', ['require', 'exports', 'module' ], function(require, exports, module) {
3240
 
 
3241
 
  var extend, flatten, _ref;
3242
 
 
3243
 
  exports.starts = function(string, literal, start) {
3244
 
    return literal === string.substr(start, literal.length);
3245
 
  };
3246
 
 
3247
 
  exports.ends = function(string, literal, back) {
3248
 
    var len;
3249
 
    len = literal.length;
3250
 
    return literal === string.substr(string.length - len - (back || 0), len);
3251
 
  };
3252
 
 
3253
 
  exports.compact = function(array) {
3254
 
    var item, _i, _len, _results;
3255
 
    _results = [];
3256
 
    for (_i = 0, _len = array.length; _i < _len; _i++) {
3257
 
      item = array[_i];
3258
 
      if (item) {
3259
 
        _results.push(item);
3260
 
      }
3261
 
    }
3262
 
    return _results;
3263
 
  };
3264
 
 
3265
 
  exports.count = function(string, substr) {
3266
 
    var num, pos;
3267
 
    num = pos = 0;
3268
 
    if (!substr.length) {
3269
 
      return 1 / 0;
3270
 
    }
3271
 
    while (pos = 1 + string.indexOf(substr, pos)) {
3272
 
      num++;
3273
 
    }
3274
 
    return num;
3275
 
  };
3276
 
 
3277
 
  exports.merge = function(options, overrides) {
3278
 
    return extend(extend({}, options), overrides);
3279
 
  };
3280
 
 
3281
 
  extend = exports.extend = function(object, properties) {
3282
 
    var key, val;
3283
 
    for (key in properties) {
3284
 
      val = properties[key];
3285
 
      object[key] = val;
3286
 
    }
3287
 
    return object;
3288
 
  };
3289
 
 
3290
 
  exports.flatten = flatten = function(array) {
3291
 
    var element, flattened, _i, _len;
3292
 
    flattened = [];
3293
 
    for (_i = 0, _len = array.length; _i < _len; _i++) {
3294
 
      element = array[_i];
3295
 
      if (element instanceof Array) {
3296
 
        flattened = flattened.concat(flatten(element));
3297
 
      } else {
3298
 
        flattened.push(element);
3299
 
      }
3300
 
    }
3301
 
    return flattened;
3302
 
  };
3303
 
 
3304
 
  exports.del = function(obj, key) {
3305
 
    var val;
3306
 
    val = obj[key];
3307
 
    delete obj[key];
3308
 
    return val;
3309
 
  };
3310
 
 
3311
 
  exports.last = function(array, back) {
3312
 
    return array[array.length - (back || 0) - 1];
3313
 
  };
3314
 
 
3315
 
  exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
3316
 
    var e, _i, _len;
3317
 
    for (_i = 0, _len = this.length; _i < _len; _i++) {
3318
 
      e = this[_i];
3319
 
      if (fn(e)) {
3320
 
        return true;
3321
 
      }
3322
 
    }
3323
 
    return false;
3324
 
  };
3325
 
 
3326
 
 
3327
 
});
3328
 
 
3329
 
define('ace/mode/coffee/parser', ['require', 'exports', 'module' ], function(require, exports, module) {
3330
 
 
3331
 
var parser = {trace: function trace() { },
3332
 
yy: {},
3333
 
symbols_: {"error":2,"Root":3,"Body":4,"Block":5,"TERMINATOR":6,"Line":7,"Expression":8,"Statement":9,"Return":10,"Comment":11,"STATEMENT":12,"Value":13,"Invocation":14,"Code":15,"Operation":16,"Assign":17,"If":18,"Try":19,"While":20,"For":21,"Switch":22,"Class":23,"Throw":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"Index":69,"INDEX_START":70,"IndexValue":71,"INDEX_END":72,"INDEX_SOAK":73,"Slice":74,"{":75,"AssignList":76,"}":77,"CLASS":78,"EXTENDS":79,"OptFuncExist":80,"Arguments":81,"SUPER":82,"FUNC_EXIST":83,"CALL_START":84,"CALL_END":85,"ArgList":86,"THIS":87,"@":88,"[":89,"]":90,"RangeDots":91,"..":92,"Arg":93,"SimpleArgs":94,"TRY":95,"Catch":96,"FINALLY":97,"CATCH":98,"THROW":99,"(":100,")":101,"WhileSource":102,"WHILE":103,"WHEN":104,"UNTIL":105,"Loop":106,"LOOP":107,"ForBody":108,"FOR":109,"ForStart":110,"ForSource":111,"ForVariables":112,"OWN":113,"ForValue":114,"FORIN":115,"FOROF":116,"BY":117,"SWITCH":118,"Whens":119,"ELSE":120,"When":121,"LEADING_WHEN":122,"IfBlock":123,"IF":124,"POST_IF":125,"UNARY":126,"-":127,"+":128,"--":129,"++":130,"?":131,"MATH":132,"SHIFT":133,"COMPARE":134,"LOGIC":135,"RELATION":136,"COMPOUND_ASSIGN":137,"$accept":0,"$end":1},
3334
 
terminals_: {2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",124:"IF",125:"POST_IF",126:"UNARY",127:"-",128:"+",129:"--",130:"++",131:"?",132:"MATH",133:"SHIFT",134:"COMPARE",135:"LOGIC",136:"RELATION",137:"COMPOUND_ASSIGN"},
3335
 
productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,3]],
3336
 
performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
3337
 
 
3338
 
var $0 = $$.length - 1;
3339
 
switch (yystate) {
3340
 
case 1:return this.$ = new yy.Block;
3341
 
break;
3342
 
case 2:return this.$ = $$[$0];
3343
 
break;
3344
 
case 3:return this.$ = $$[$0-1];
3345
 
break;
3346
 
case 4:this.$ = yy.Block.wrap([$$[$0]]);
3347
 
break;
3348
 
case 5:this.$ = $$[$0-2].push($$[$0]);
3349
 
break;
3350
 
case 6:this.$ = $$[$0-1];
3351
 
break;
3352
 
case 7:this.$ = $$[$0];
3353
 
break;
3354
 
case 8:this.$ = $$[$0];
3355
 
break;
3356
 
case 9:this.$ = $$[$0];
3357
 
break;
3358
 
case 10:this.$ = $$[$0];
3359
 
break;
3360
 
case 11:this.$ = new yy.Literal($$[$0]);
3361
 
break;
3362
 
case 12:this.$ = $$[$0];
3363
 
break;
3364
 
case 13:this.$ = $$[$0];
3365
 
break;
3366
 
case 14:this.$ = $$[$0];
3367
 
break;
3368
 
case 15:this.$ = $$[$0];
3369
 
break;
3370
 
case 16:this.$ = $$[$0];
3371
 
break;
3372
 
case 17:this.$ = $$[$0];
3373
 
break;
3374
 
case 18:this.$ = $$[$0];
3375
 
break;
3376
 
case 19:this.$ = $$[$0];
3377
 
break;
3378
 
case 20:this.$ = $$[$0];
3379
 
break;
3380
 
case 21:this.$ = $$[$0];
3381
 
break;
3382
 
case 22:this.$ = $$[$0];
3383
 
break;
3384
 
case 23:this.$ = $$[$0];
3385
 
break;
3386
 
case 24:this.$ = new yy.Block;
3387
 
break;
3388
 
case 25:this.$ = $$[$0-1];
3389
 
break;
3390
 
case 26:this.$ = new yy.Literal($$[$0]);
3391
 
break;
3392
 
case 27:this.$ = new yy.Literal($$[$0]);
3393
 
break;
3394
 
case 28:this.$ = new yy.Literal($$[$0]);
3395
 
break;
3396
 
case 29:this.$ = $$[$0];
3397
 
break;
3398
 
case 30:this.$ = new yy.Literal($$[$0]);
3399
 
break;
3400
 
case 31:this.$ = new yy.Literal($$[$0]);
3401
 
break;
3402
 
case 32:this.$ = new yy.Literal($$[$0]);
3403
 
break;
3404
 
case 33:this.$ = new yy.Undefined;
3405
 
break;
3406
 
case 34:this.$ = new yy.Null;
3407
 
break;
3408
 
case 35:this.$ = new yy.Bool($$[$0]);
3409
 
break;
3410
 
case 36:this.$ = new yy.Assign($$[$0-2], $$[$0]);
3411
 
break;
3412
 
case 37:this.$ = new yy.Assign($$[$0-3], $$[$0]);
3413
 
break;
3414
 
case 38:this.$ = new yy.Assign($$[$0-4], $$[$0-1]);
3415
 
break;
3416
 
case 39:this.$ = new yy.Value($$[$0]);
3417
 
break;
3418
 
case 40:this.$ = new yy.Assign(new yy.Value($$[$0-2]), $$[$0], 'object');
3419
 
break;
3420
 
case 41:this.$ = new yy.Assign(new yy.Value($$[$0-4]), $$[$0-1], 'object');
3421
 
break;
3422
 
case 42:this.$ = $$[$0];
3423
 
break;
3424
 
case 43:this.$ = $$[$0];
3425
 
break;
3426
 
case 44:this.$ = $$[$0];
3427
 
break;
3428
 
case 45:this.$ = $$[$0];
3429
 
break;
3430
 
case 46:this.$ = new yy.Return($$[$0]);
3431
 
break;
3432
 
case 47:this.$ = new yy.Return;
3433
 
break;
3434
 
case 48:this.$ = new yy.Comment($$[$0]);
3435
 
break;
3436
 
case 49:this.$ = new yy.Code($$[$0-3], $$[$0], $$[$0-1]);
3437
 
break;
3438
 
case 50:this.$ = new yy.Code([], $$[$0], $$[$0-1]);
3439
 
break;
3440
 
case 51:this.$ = 'func';
3441
 
break;
3442
 
case 52:this.$ = 'boundfunc';
3443
 
break;
3444
 
case 53:this.$ = $$[$0];
3445
 
break;
3446
 
case 54:this.$ = $$[$0];
3447
 
break;
3448
 
case 55:this.$ = [];
3449
 
break;
3450
 
case 56:this.$ = [$$[$0]];
3451
 
break;
3452
 
case 57:this.$ = $$[$0-2].concat($$[$0]);
3453
 
break;
3454
 
case 58:this.$ = $$[$0-3].concat($$[$0]);
3455
 
break;
3456
 
case 59:this.$ = $$[$0-5].concat($$[$0-2]);
3457
 
break;
3458
 
case 60:this.$ = new yy.Param($$[$0]);
3459
 
break;
3460
 
case 61:this.$ = new yy.Param($$[$0-1], null, true);
3461
 
break;
3462
 
case 62:this.$ = new yy.Param($$[$0-2], $$[$0]);
3463
 
break;
3464
 
case 63:this.$ = $$[$0];
3465
 
break;
3466
 
case 64:this.$ = $$[$0];
3467
 
break;
3468
 
case 65:this.$ = $$[$0];
3469
 
break;
3470
 
case 66:this.$ = $$[$0];
3471
 
break;
3472
 
case 67:this.$ = new yy.Splat($$[$0-1]);
3473
 
break;
3474
 
case 68:this.$ = new yy.Value($$[$0]);
3475
 
break;
3476
 
case 69:this.$ = $$[$0-1].add($$[$0]);
3477
 
break;
3478
 
case 70:this.$ = new yy.Value($$[$0-1], [].concat($$[$0]));
3479
 
break;
3480
 
case 71:this.$ = $$[$0];
3481
 
break;
3482
 
case 72:this.$ = $$[$0];
3483
 
break;
3484
 
case 73:this.$ = new yy.Value($$[$0]);
3485
 
break;
3486
 
case 74:this.$ = new yy.Value($$[$0]);
3487
 
break;
3488
 
case 75:this.$ = $$[$0];
3489
 
break;
3490
 
case 76:this.$ = new yy.Value($$[$0]);
3491
 
break;
3492
 
case 77:this.$ = new yy.Value($$[$0]);
3493
 
break;
3494
 
case 78:this.$ = new yy.Value($$[$0]);
3495
 
break;
3496
 
case 79:this.$ = $$[$0];
3497
 
break;
3498
 
case 80:this.$ = new yy.Access($$[$0]);
3499
 
break;
3500
 
case 81:this.$ = new yy.Access($$[$0], 'soak');
3501
 
break;
3502
 
case 82:this.$ = [new yy.Access(new yy.Literal('prototype')), new yy.Access($$[$0])];
3503
 
break;
3504
 
case 83:this.$ = new yy.Access(new yy.Literal('prototype'));
3505
 
break;
3506
 
case 84:this.$ = $$[$0];
3507
 
break;
3508
 
case 85:this.$ = $$[$0-1];
3509
 
break;
3510
 
case 86:this.$ = yy.extend($$[$0], {
3511
 
          soak: true
3512
 
        });
3513
 
break;
3514
 
case 87:this.$ = new yy.Index($$[$0]);
3515
 
break;
3516
 
case 88:this.$ = new yy.Slice($$[$0]);
3517
 
break;
3518
 
case 89:this.$ = new yy.Obj($$[$0-2], $$[$0-3].generated);
3519
 
break;
3520
 
case 90:this.$ = [];
3521
 
break;
3522
 
case 91:this.$ = [$$[$0]];
3523
 
break;
3524
 
case 92:this.$ = $$[$0-2].concat($$[$0]);
3525
 
break;
3526
 
case 93:this.$ = $$[$0-3].concat($$[$0]);
3527
 
break;
3528
 
case 94:this.$ = $$[$0-5].concat($$[$0-2]);
3529
 
break;
3530
 
case 95:this.$ = new yy.Class;
3531
 
break;
3532
 
case 96:this.$ = new yy.Class(null, null, $$[$0]);
3533
 
break;
3534
 
case 97:this.$ = new yy.Class(null, $$[$0]);
3535
 
break;
3536
 
case 98:this.$ = new yy.Class(null, $$[$0-1], $$[$0]);
3537
 
break;
3538
 
case 99:this.$ = new yy.Class($$[$0]);
3539
 
break;
3540
 
case 100:this.$ = new yy.Class($$[$0-1], null, $$[$0]);
3541
 
break;
3542
 
case 101:this.$ = new yy.Class($$[$0-2], $$[$0]);
3543
 
break;
3544
 
case 102:this.$ = new yy.Class($$[$0-3], $$[$0-1], $$[$0]);
3545
 
break;
3546
 
case 103:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
3547
 
break;
3548
 
case 104:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
3549
 
break;
3550
 
case 105:this.$ = new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]);
3551
 
break;
3552
 
case 106:this.$ = new yy.Call('super', $$[$0]);
3553
 
break;
3554
 
case 107:this.$ = false;
3555
 
break;
3556
 
case 108:this.$ = true;
3557
 
break;
3558
 
case 109:this.$ = [];
3559
 
break;
3560
 
case 110:this.$ = $$[$0-2];
3561
 
break;
3562
 
case 111:this.$ = new yy.Value(new yy.Literal('this'));
3563
 
break;
3564
 
case 112:this.$ = new yy.Value(new yy.Literal('this'));
3565
 
break;
3566
 
case 113:this.$ = new yy.Value(new yy.Literal('this'), [new yy.Access($$[$0])], 'this');
3567
 
break;
3568
 
case 114:this.$ = new yy.Arr([]);
3569
 
break;
3570
 
case 115:this.$ = new yy.Arr($$[$0-2]);
3571
 
break;
3572
 
case 116:this.$ = 'inclusive';
3573
 
break;
3574
 
case 117:this.$ = 'exclusive';
3575
 
break;
3576
 
case 118:this.$ = new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]);
3577
 
break;
3578
 
case 119:this.$ = new yy.Range($$[$0-2], $$[$0], $$[$0-1]);
3579
 
break;
3580
 
case 120:this.$ = new yy.Range($$[$0-1], null, $$[$0]);
3581
 
break;
3582
 
case 121:this.$ = new yy.Range(null, $$[$0], $$[$0-1]);
3583
 
break;
3584
 
case 122:this.$ = new yy.Range(null, null, $$[$0]);
3585
 
break;
3586
 
case 123:this.$ = [$$[$0]];
3587
 
break;
3588
 
case 124:this.$ = $$[$0-2].concat($$[$0]);
3589
 
break;
3590
 
case 125:this.$ = $$[$0-3].concat($$[$0]);
3591
 
break;
3592
 
case 126:this.$ = $$[$0-2];
3593
 
break;
3594
 
case 127:this.$ = $$[$0-5].concat($$[$0-2]);
3595
 
break;
3596
 
case 128:this.$ = $$[$0];
3597
 
break;
3598
 
case 129:this.$ = $$[$0];
3599
 
break;
3600
 
case 130:this.$ = $$[$0];
3601
 
break;
3602
 
case 131:this.$ = [].concat($$[$0-2], $$[$0]);
3603
 
break;
3604
 
case 132:this.$ = new yy.Try($$[$0]);
3605
 
break;
3606
 
case 133:this.$ = new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]);
3607
 
break;
3608
 
case 134:this.$ = new yy.Try($$[$0-2], null, null, $$[$0]);
3609
 
break;
3610
 
case 135:this.$ = new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]);
3611
 
break;
3612
 
case 136:this.$ = [$$[$0-1], $$[$0]];
3613
 
break;
3614
 
case 137:this.$ = new yy.Throw($$[$0]);
3615
 
break;
3616
 
case 138:this.$ = new yy.Parens($$[$0-1]);
3617
 
break;
3618
 
case 139:this.$ = new yy.Parens($$[$0-2]);
3619
 
break;
3620
 
case 140:this.$ = new yy.While($$[$0]);
3621
 
break;
3622
 
case 141:this.$ = new yy.While($$[$0-2], {
3623
 
          guard: $$[$0]
3624
 
        });
3625
 
break;
3626
 
case 142:this.$ = new yy.While($$[$0], {
3627
 
          invert: true
3628
 
        });
3629
 
break;
3630
 
case 143:this.$ = new yy.While($$[$0-2], {
3631
 
          invert: true,
3632
 
          guard: $$[$0]
3633
 
        });
3634
 
break;
3635
 
case 144:this.$ = $$[$0-1].addBody($$[$0]);
3636
 
break;
3637
 
case 145:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
3638
 
break;
3639
 
case 146:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
3640
 
break;
3641
 
case 147:this.$ = $$[$0];
3642
 
break;
3643
 
case 148:this.$ = new yy.While(new yy.Literal('true')).addBody($$[$0]);
3644
 
break;
3645
 
case 149:this.$ = new yy.While(new yy.Literal('true')).addBody(yy.Block.wrap([$$[$0]]));
3646
 
break;
3647
 
case 150:this.$ = new yy.For($$[$0-1], $$[$0]);
3648
 
break;
3649
 
case 151:this.$ = new yy.For($$[$0-1], $$[$0]);
3650
 
break;
3651
 
case 152:this.$ = new yy.For($$[$0], $$[$0-1]);
3652
 
break;
3653
 
case 153:this.$ = {
3654
 
          source: new yy.Value($$[$0])
3655
 
        };
3656
 
break;
3657
 
case 154:this.$ = (function () {
3658
 
        $$[$0].own = $$[$0-1].own;
3659
 
        $$[$0].name = $$[$0-1][0];
3660
 
        $$[$0].index = $$[$0-1][1];
3661
 
        return $$[$0];
3662
 
      }());
3663
 
break;
3664
 
case 155:this.$ = $$[$0];
3665
 
break;
3666
 
case 156:this.$ = (function () {
3667
 
        $$[$0].own = true;
3668
 
        return $$[$0];
3669
 
      }());
3670
 
break;
3671
 
case 157:this.$ = $$[$0];
3672
 
break;
3673
 
case 158:this.$ = $$[$0];
3674
 
break;
3675
 
case 159:this.$ = new yy.Value($$[$0]);
3676
 
break;
3677
 
case 160:this.$ = new yy.Value($$[$0]);
3678
 
break;
3679
 
case 161:this.$ = [$$[$0]];
3680
 
break;
3681
 
case 162:this.$ = [$$[$0-2], $$[$0]];
3682
 
break;
3683
 
case 163:this.$ = {
3684
 
          source: $$[$0]
3685
 
        };
3686
 
break;
3687
 
case 164:this.$ = {
3688
 
          source: $$[$0],
3689
 
          object: true
3690
 
        };
3691
 
break;
3692
 
case 165:this.$ = {
3693
 
          source: $$[$0-2],
3694
 
          guard: $$[$0]
3695
 
        };
3696
 
break;
3697
 
case 166:this.$ = {
3698
 
          source: $$[$0-2],
3699
 
          guard: $$[$0],
3700
 
          object: true
3701
 
        };
3702
 
break;
3703
 
case 167:this.$ = {
3704
 
          source: $$[$0-2],
3705
 
          step: $$[$0]
3706
 
        };
3707
 
break;
3708
 
case 168:this.$ = {
3709
 
          source: $$[$0-4],
3710
 
          guard: $$[$0-2],
3711
 
          step: $$[$0]
3712
 
        };
3713
 
break;
3714
 
case 169:this.$ = {
3715
 
          source: $$[$0-4],
3716
 
          step: $$[$0-2],
3717
 
          guard: $$[$0]
3718
 
        };
3719
 
break;
3720
 
case 170:this.$ = new yy.Switch($$[$0-3], $$[$0-1]);
3721
 
break;
3722
 
case 171:this.$ = new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]);
3723
 
break;
3724
 
case 172:this.$ = new yy.Switch(null, $$[$0-1]);
3725
 
break;
3726
 
case 173:this.$ = new yy.Switch(null, $$[$0-3], $$[$0-1]);
3727
 
break;
3728
 
case 174:this.$ = $$[$0];
3729
 
break;
3730
 
case 175:this.$ = $$[$0-1].concat($$[$0]);
3731
 
break;
3732
 
case 176:this.$ = [[$$[$0-1], $$[$0]]];
3733
 
break;
3734
 
case 177:this.$ = [[$$[$0-2], $$[$0-1]]];
3735
 
break;
3736
 
case 178:this.$ = new yy.If($$[$0-1], $$[$0], {
3737
 
          type: $$[$0-2]
3738
 
        });
3739
 
break;
3740
 
case 179:this.$ = $$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
3741
 
          type: $$[$0-2]
3742
 
        }));
3743
 
break;
3744
 
case 180:this.$ = $$[$0];
3745
 
break;
3746
 
case 181:this.$ = $$[$0-2].addElse($$[$0]);
3747
 
break;
3748
 
case 182:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
3749
 
          type: $$[$0-1],
3750
 
          statement: true
3751
 
        });
3752
 
break;
3753
 
case 183:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
3754
 
          type: $$[$0-1],
3755
 
          statement: true
3756
 
        });
3757
 
break;
3758
 
case 184:this.$ = new yy.Op($$[$0-1], $$[$0]);
3759
 
break;
3760
 
case 185:this.$ = new yy.Op('-', $$[$0]);
3761
 
break;
3762
 
case 186:this.$ = new yy.Op('+', $$[$0]);
3763
 
break;
3764
 
case 187:this.$ = new yy.Op('--', $$[$0]);
3765
 
break;
3766
 
case 188:this.$ = new yy.Op('++', $$[$0]);
3767
 
break;
3768
 
case 189:this.$ = new yy.Op('--', $$[$0-1], null, true);
3769
 
break;
3770
 
case 190:this.$ = new yy.Op('++', $$[$0-1], null, true);
3771
 
break;
3772
 
case 191:this.$ = new yy.Existence($$[$0-1]);
3773
 
break;
3774
 
case 192:this.$ = new yy.Op('+', $$[$0-2], $$[$0]);
3775
 
break;
3776
 
case 193:this.$ = new yy.Op('-', $$[$0-2], $$[$0]);
3777
 
break;
3778
 
case 194:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
3779
 
break;
3780
 
case 195:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
3781
 
break;
3782
 
case 196:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
3783
 
break;
3784
 
case 197:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
3785
 
break;
3786
 
case 198:this.$ = (function () {
3787
 
        if ($$[$0-1].charAt(0) === '!') {
3788
 
          return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
3789
 
        } else {
3790
 
          return new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
3791
 
        }
3792
 
      }());
3793
 
break;
3794
 
case 199:this.$ = new yy.Assign($$[$0-2], $$[$0], $$[$0-1]);
3795
 
break;
3796
 
case 200:this.$ = new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]);
3797
 
break;
3798
 
case 201:this.$ = new yy.Extends($$[$0-2], $$[$0]);
3799
 
break;
3800
 
}
3801
 
},
3802
 
table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[1,129],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{5:132,25:[1,5]},{8:133,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,134],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,141],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71]},{8:149,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,6],6:[2,6],7:172,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{8:174,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{8:182,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],103:[2,150],104:[2,150],105:[2,150],109:[2,150],117:[2,150],125:[2,150],127:[2,150],128:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150]},{81:183,84:[1,105]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84]},{8:188,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70]},{6:[1,196],8:195,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,197],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,205],49:[2,60],54:[2,60],57:[1,204]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:148,28:[1,73]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[2,184],104:[2,184],105:[2,184],108:88,109:[2,184],110:69,117:[2,184],125:[2,184],127:[2,184],128:[2,184],131:[1,78],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,187],73:[2,72],77:[2,187],83:[2,72],84:[2,72],85:[2,187],90:[2,187],92:[2,187],101:[2,187],103:[2,187],104:[2,187],105:[2,187],109:[2,187],117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],72:[2,189],77:[2,189],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{8:206,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,207],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:208,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:209,25:[1,5],124:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:211,97:[1,212],98:[1,213],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],103:[2,144],104:[2,144],105:[2,144],109:[2,144],117:[2,144],125:[2,144],127:[2,144],128:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144],135:[2,144],136:[2,144]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{25:[1,214],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:215,121:216,122:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:218,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:219,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,220],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],101:[2,137],102:87,103:[2,137],104:[2,137],105:[2,137],108:88,109:[2,137],110:69,117:[2,137],125:[2,137],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,221]},{4:222,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],90:[2,128],91:223,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:225,54:[1,226],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:227,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:228,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],72:[2,140],77:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],102:87,103:[1,65],104:[1,229],105:[1,66],108:88,109:[1,68],110:69,117:[2,140],125:[2,140],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],102:87,103:[1,65],104:[2,149],105:[1,66],108:88,109:[1,68],110:69,117:[2,149],125:[2,149],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{115:[2,155],116:[2,155]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:231,114:157},{54:[1,232],115:[2,161],116:[2,161]},{54:[2,157],115:[2,157],116:[2,157]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{8:233,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:234,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:235,54:[1,236],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,237],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],102:87,103:[2,192],104:[2,192],105:[2,192],108:88,109:[2,192],110:69,117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[1,78],132:[1,81],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,196],135:[2,196],136:[1,85]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,198],135:[2,198],136:[2,198]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],102:87,103:[1,65],104:[2,182],105:[1,66],108:88,109:[1,68],110:69,117:[2,182],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82]},{72:[1,238]},{57:[1,192],72:[2,87],91:239,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:240,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:241,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:242,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:243,54:[1,226],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:245,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:246,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,247],25:[1,248]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:249,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:250,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],102:87,103:[2,201],104:[2,201],105:[2,201],108:88,109:[2,201],110:69,117:[2,201],125:[2,201],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{8:251,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,252],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:253,25:[1,5]},{27:254,28:[1,73]},{119:255,121:216,122:[1,217]},{26:[1,256],120:[1,257],121:258,122:[1,217]},{26:[2,174],120:[2,174],122:[2,174]},{8:260,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:259,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:261,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:262,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],66:[2,138],67:[2,138],68:[2,138],70:[2,138],72:[2,138],73:[2,138],77:[2,138],83:[2,138],84:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],103:[2,138],104:[2,138],105:[2,138],109:[2,138],117:[2,138],125:[2,138],127:[2,138],128:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138]},{6:[1,74],26:[1,263]},{8:264,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,266],25:[1,267],90:[1,265]},{6:[2,54],8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:268,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:269,54:[1,226]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],49:[2,178],54:[2,178],57:[2,178],72:[2,178],77:[2,178],85:[2,178],90:[2,178],92:[2,178],101:[2,178],103:[2,178],104:[2,178],105:[2,178],109:[2,178],117:[2,178],120:[2,178],125:[2,178],127:[2,178],128:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178],135:[2,178],136:[2,178]},{8:270,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:271,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:272},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],49:[2,163],54:[2,163],57:[2,163],72:[2,163],77:[2,163],85:[2,163],90:[2,163],92:[2,163],101:[2,163],102:87,103:[2,163],104:[1,273],105:[2,163],108:88,109:[2,163],110:69,117:[1,274],125:[2,163],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,275],105:[2,164],108:88,109:[2,164],110:69,117:[2,164],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,277],25:[1,278],77:[1,276]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:279,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:280,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,281],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85]},{8:282,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,283],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],85:[1,284]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:285,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:286,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:287,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,288],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:289,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:290,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:291,25:[1,5]},{26:[1,292],120:[1,293],121:258,122:[1,217]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{5:294,25:[1,5]},{26:[2,175],120:[2,175],122:[2,175]},{5:295,25:[1,5],54:[1,296]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:297,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,298]},{90:[1,299],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:300,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:301,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,266],25:[1,267],26:[1,302]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[2,141],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[2,143],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,162],116:[2,162]},{8:303,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:304,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:305,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:306,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:307,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:308,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:309,54:[1,202]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],103:[2,200],104:[2,200],105:[2,200],109:[2,200],117:[2,200],125:[2,200],127:[2,200],128:[2,200],131:[2,200],132:[2,200],133:[2,200],134:[2,200],135:[2,200],136:[2,200]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],103:[2,170],104:[2,170],105:[2,170],109:[2,170],117:[2,170],125:[2,170],127:[2,170],128:[2,170],131:[2,170],132:[2,170],133:[2,170],134:[2,170],135:[2,170],136:[2,170]},{5:310,25:[1,5]},{26:[1,311]},{6:[1,312],26:[2,176],120:[2,176],122:[2,176]},{8:313,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:314,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[2,165],105:[2,165],108:88,109:[2,165],110:69,117:[1,315],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[1,316],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[2,166],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:317,54:[1,236]},{26:[1,318],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,247],25:[1,248],26:[1,319]},{26:[1,320]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{26:[2,177],120:[2,177],122:[2,177]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],26:[1,321]},{8:322,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:323,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,277],25:[1,278],26:[1,324]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[2,168],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],
3803
 
defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},
3804
 
parseError: function parseError(str, hash) {
3805
 
    throw new Error(str);
3806
 
},
3807
 
parse: function parse(input) {
3808
 
    var self = this,
3809
 
        stack = [0],
3810
 
        vstack = [null], // semantic value stack
3811
 
        lstack = [], // location stack
3812
 
        table = this.table,
3813
 
        yytext = '',
3814
 
        yylineno = 0,
3815
 
        yyleng = 0,
3816
 
        recovering = 0,
3817
 
        TERROR = 2,
3818
 
        EOF = 1;
3819
 
 
3820
 
    this.lexer.setInput(input);
3821
 
    this.lexer.yy = this.yy;
3822
 
    this.yy.lexer = this.lexer;
3823
 
    if (typeof this.lexer.yylloc == 'undefined')
3824
 
        this.lexer.yylloc = {};
3825
 
    var yyloc = this.lexer.yylloc;
3826
 
    lstack.push(yyloc);
3827
 
 
3828
 
    if (typeof this.yy.parseError === 'function')
3829
 
        this.parseError = this.yy.parseError;
3830
 
 
3831
 
    function popStack (n) {
3832
 
        stack.length = stack.length - 2*n;
3833
 
        vstack.length = vstack.length - n;
3834
 
        lstack.length = lstack.length - n;
3835
 
    }
3836
 
 
3837
 
    function lex() {
3838
 
        var token;
3839
 
        token = self.lexer.lex() || 1; // $end = 1
3840
 
        if (typeof token !== 'number') {
3841
 
            token = self.symbols_[token] || token;
3842
 
        }
3843
 
        return token;
3844
 
    }
3845
 
 
3846
 
    var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;
3847
 
    while (true) {
3848
 
        state = stack[stack.length-1];
3849
 
        if (this.defaultActions[state]) {
3850
 
            action = this.defaultActions[state];
3851
 
        } else {
3852
 
            if (symbol == null)
3853
 
                symbol = lex();
3854
 
            action = table[state] && table[state][symbol];
3855
 
        }
3856
 
        _handle_error:
3857
 
        if (typeof action === 'undefined' || !action.length || !action[0]) {
3858
 
 
3859
 
            if (!recovering) {
3860
 
                expected = [];
3861
 
                for (p in table[state]) if (this.terminals_[p] && p > 2) {
3862
 
                    expected.push("'"+this.terminals_[p]+"'");
3863
 
                }
3864
 
                var errStr = '';
3865
 
                if (this.lexer.showPosition) {
3866
 
                    errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + this.terminals_[symbol]+ "'";
3867
 
                } else {
3868
 
                    errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " +
3869
 
                                  (symbol == 1 /*EOF*/ ? "end of input" :
3870
 
                                              ("'"+(this.terminals_[symbol] || symbol)+"'"));
3871
 
                }
3872
 
                this.parseError(errStr,
3873
 
                    {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
3874
 
            }
3875
 
            if (recovering == 3) {
3876
 
                if (symbol == EOF) {
3877
 
                    throw new Error(errStr || 'Parsing halted.');
3878
 
                }
3879
 
                yyleng = this.lexer.yyleng;
3880
 
                yytext = this.lexer.yytext;
3881
 
                yylineno = this.lexer.yylineno;
3882
 
                yyloc = this.lexer.yylloc;
3883
 
                symbol = lex();
3884
 
            }
3885
 
            while (1) {
3886
 
                if ((TERROR.toString()) in table[state]) {
3887
 
                    break;
3888
 
                }
3889
 
                if (state == 0) {
3890
 
                    throw new Error(errStr || 'Parsing halted.');
3891
 
                }
3892
 
                popStack(1);
3893
 
                state = stack[stack.length-1];
3894
 
            }
3895
 
 
3896
 
            preErrorSymbol = symbol; // save the lookahead token
3897
 
            symbol = TERROR;         // insert generic error symbol as new lookahead
3898
 
            state = stack[stack.length-1];
3899
 
            action = table[state] && table[state][TERROR];
3900
 
            recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
3901
 
        }
3902
 
        if (action[0] instanceof Array && action.length > 1) {
3903
 
            throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);
3904
 
        }
3905
 
 
3906
 
        switch (action[0]) {
3907
 
 
3908
 
            case 1: // shift
3909
 
 
3910
 
                stack.push(symbol);
3911
 
                vstack.push(this.lexer.yytext);
3912
 
                lstack.push(this.lexer.yylloc);
3913
 
                stack.push(action[1]); // push state
3914
 
                symbol = null;
3915
 
                if (!preErrorSymbol) { // normal execution/no error
3916
 
                    yyleng = this.lexer.yyleng;
3917
 
                    yytext = this.lexer.yytext;
3918
 
                    yylineno = this.lexer.yylineno;
3919
 
                    yyloc = this.lexer.yylloc;
3920
 
                    if (recovering > 0)
3921
 
                        recovering--;
3922
 
                } else { // error just occurred, resume old lookahead f/ before error
3923
 
                    symbol = preErrorSymbol;
3924
 
                    preErrorSymbol = null;
3925
 
                }
3926
 
                break;
3927
 
 
3928
 
            case 2: // reduce
3929
 
 
3930
 
                len = this.productions_[action[1]][1];
3931
 
                yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
3932
 
                yyval._$ = {
3933
 
                    first_line: lstack[lstack.length-(len||1)].first_line,
3934
 
                    last_line: lstack[lstack.length-1].last_line,
3935
 
                    first_column: lstack[lstack.length-(len||1)].first_column,
3936
 
                    last_column: lstack[lstack.length-1].last_column
3937
 
                };
3938
 
                r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
3939
 
 
3940
 
                if (typeof r !== 'undefined') {
3941
 
                    return r;
3942
 
                }
3943
 
                if (len) {
3944
 
                    stack = stack.slice(0,-1*len*2);
3945
 
                    vstack = vstack.slice(0, -1*len);
3946
 
                    lstack = lstack.slice(0, -1*len);
3947
 
                }
3948
 
 
3949
 
                stack.push(this.productions_[action[1]][0]);    // push nonterminal (reduce)
3950
 
                vstack.push(yyval.$);
3951
 
                lstack.push(yyval._$);
3952
 
                newState = table[stack[stack.length-2]][stack[stack.length-1]];
3953
 
                stack.push(newState);
3954
 
                break;
3955
 
 
3956
 
            case 3: // accept
3957
 
                return true;
3958
 
        }
3959
 
 
3960
 
    }
3961
 
 
3962
 
    return true;
3963
 
}};
3964
 
undefined
3965
 
 
3966
 
module.exports = parser;
3967
 
 
3968
 
 
3969
 
});
3970
 
 
3971
 
define('ace/mode/coffee/nodes', ['require', 'exports', 'module' , 'ace/mode/coffee/scope', 'ace/mode/coffee/lexer', 'ace/mode/coffee/helpers'], function(require, exports, module) {
3972
 
 
3973
 
  var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, compact, del, ends, extend, flatten, last, merge, multident, some, starts, unfoldSoak, utility, _ref, _ref1,
3974
 
    __hasProp = {}.hasOwnProperty,
3975
 
    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
3976
 
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
3977
 
 
3978
 
  Scope = require('./scope').Scope;
3979
 
 
3980
 
  _ref = require('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED;
3981
 
 
3982
 
  _ref1 = require('./helpers'), compact = _ref1.compact, flatten = _ref1.flatten, extend = _ref1.extend, merge = _ref1.merge, del = _ref1.del, starts = _ref1.starts, ends = _ref1.ends, last = _ref1.last, some = _ref1.some;
3983
 
 
3984
 
  exports.extend = extend;
3985
 
 
3986
 
  YES = function() {
3987
 
    return true;
3988
 
  };
3989
 
 
3990
 
  NO = function() {
3991
 
    return false;
3992
 
  };
3993
 
 
3994
 
  THIS = function() {
3995
 
    return this;
3996
 
  };
3997
 
 
3998
 
  NEGATE = function() {
3999
 
    this.negated = !this.negated;
4000
 
    return this;
4001
 
  };
4002
 
 
4003
 
  exports.Base = Base = (function() {
4004
 
 
4005
 
    function Base() {}
4006
 
 
4007
 
    Base.prototype.compile = function(o, lvl) {
4008
 
      var node;
4009
 
      o = extend({}, o);
4010
 
      if (lvl) {
4011
 
        o.level = lvl;
4012
 
      }
4013
 
      node = this.unfoldSoak(o) || this;
4014
 
      node.tab = o.indent;
4015
 
      if (o.level === LEVEL_TOP || !node.isStatement(o)) {
4016
 
        return node.compileNode(o);
4017
 
      } else {
4018
 
        return node.compileClosure(o);
4019
 
      }
4020
 
    };
4021
 
 
4022
 
    Base.prototype.compileClosure = function(o) {
4023
 
      if (this.jumps()) {
4024
 
        throw SyntaxError('cannot use a pure statement in an expression.');
4025
 
      }
4026
 
      o.sharedScope = true;
4027
 
      return Closure.wrap(this).compileNode(o);
4028
 
    };
4029
 
 
4030
 
    Base.prototype.cache = function(o, level, reused) {
4031
 
      var ref, sub;
4032
 
      if (!this.isComplex()) {
4033
 
        ref = level ? this.compile(o, level) : this;
4034
 
        return [ref, ref];
4035
 
      } else {
4036
 
        ref = new Literal(reused || o.scope.freeVariable('ref'));
4037
 
        sub = new Assign(ref, this);
4038
 
        if (level) {
4039
 
          return [sub.compile(o, level), ref.value];
4040
 
        } else {
4041
 
          return [sub, ref];
4042
 
        }
4043
 
      }
4044
 
    };
4045
 
 
4046
 
    Base.prototype.compileLoopReference = function(o, name) {
4047
 
      var src, tmp;
4048
 
      src = tmp = this.compile(o, LEVEL_LIST);
4049
 
      if (!((-Infinity < +src && +src < Infinity) || IDENTIFIER.test(src) && o.scope.check(src, true))) {
4050
 
        src = "" + (tmp = o.scope.freeVariable(name)) + " = " + src;
4051
 
      }
4052
 
      return [src, tmp];
4053
 
    };
4054
 
 
4055
 
    Base.prototype.makeReturn = function(res) {
4056
 
      var me;
4057
 
      me = this.unwrapAll();
4058
 
      if (res) {
4059
 
        return new Call(new Literal("" + res + ".push"), [me]);
4060
 
      } else {
4061
 
        return new Return(me);
4062
 
      }
4063
 
    };
4064
 
 
4065
 
    Base.prototype.contains = function(pred) {
4066
 
      var contains;
4067
 
      contains = false;
4068
 
      this.traverseChildren(false, function(node) {
4069
 
        if (pred(node)) {
4070
 
          contains = true;
4071
 
          return false;
4072
 
        }
4073
 
      });
4074
 
      return contains;
4075
 
    };
4076
 
 
4077
 
    Base.prototype.containsType = function(type) {
4078
 
      return this instanceof type || this.contains(function(node) {
4079
 
        return node instanceof type;
4080
 
      });
4081
 
    };
4082
 
 
4083
 
    Base.prototype.lastNonComment = function(list) {
4084
 
      var i;
4085
 
      i = list.length;
4086
 
      while (i--) {
4087
 
        if (!(list[i] instanceof Comment)) {
4088
 
          return list[i];
4089
 
        }
4090
 
      }
4091
 
      return null;
4092
 
    };
4093
 
 
4094
 
    Base.prototype.toString = function(idt, name) {
4095
 
      var tree;
4096
 
      if (idt == null) {
4097
 
        idt = '';
4098
 
      }
4099
 
      if (name == null) {
4100
 
        name = this.constructor.name;
4101
 
      }
4102
 
      tree = '\n' + idt + name;
4103
 
      if (this.soak) {
4104
 
        tree += '?';
4105
 
      }
4106
 
      this.eachChild(function(node) {
4107
 
        return tree += node.toString(idt + TAB);
4108
 
      });
4109
 
      return tree;
4110
 
    };
4111
 
 
4112
 
    Base.prototype.eachChild = function(func) {
4113
 
      var attr, child, _i, _j, _len, _len1, _ref2, _ref3;
4114
 
      if (!this.children) {
4115
 
        return this;
4116
 
      }
4117
 
      _ref2 = this.children;
4118
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
4119
 
        attr = _ref2[_i];
4120
 
        if (this[attr]) {
4121
 
          _ref3 = flatten([this[attr]]);
4122
 
          for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
4123
 
            child = _ref3[_j];
4124
 
            if (func(child) === false) {
4125
 
              return this;
4126
 
            }
4127
 
          }
4128
 
        }
4129
 
      }
4130
 
      return this;
4131
 
    };
4132
 
 
4133
 
    Base.prototype.traverseChildren = function(crossScope, func) {
4134
 
      return this.eachChild(function(child) {
4135
 
        if (func(child) === false) {
4136
 
          return false;
4137
 
        }
4138
 
        return child.traverseChildren(crossScope, func);
4139
 
      });
4140
 
    };
4141
 
 
4142
 
    Base.prototype.invert = function() {
4143
 
      return new Op('!', this);
4144
 
    };
4145
 
 
4146
 
    Base.prototype.unwrapAll = function() {
4147
 
      var node;
4148
 
      node = this;
4149
 
      while (node !== (node = node.unwrap())) {
4150
 
        continue;
4151
 
      }
4152
 
      return node;
4153
 
    };
4154
 
 
4155
 
    Base.prototype.children = [];
4156
 
 
4157
 
    Base.prototype.isStatement = NO;
4158
 
 
4159
 
    Base.prototype.jumps = NO;
4160
 
 
4161
 
    Base.prototype.isComplex = YES;
4162
 
 
4163
 
    Base.prototype.isChainable = NO;
4164
 
 
4165
 
    Base.prototype.isAssignable = NO;
4166
 
 
4167
 
    Base.prototype.unwrap = THIS;
4168
 
 
4169
 
    Base.prototype.unfoldSoak = NO;
4170
 
 
4171
 
    Base.prototype.assigns = NO;
4172
 
 
4173
 
    return Base;
4174
 
 
4175
 
  })();
4176
 
 
4177
 
  exports.Block = Block = (function(_super) {
4178
 
 
4179
 
    __extends(Block, _super);
4180
 
 
4181
 
    function Block(nodes) {
4182
 
      this.expressions = compact(flatten(nodes || []));
4183
 
    }
4184
 
 
4185
 
    Block.prototype.children = ['expressions'];
4186
 
 
4187
 
    Block.prototype.push = function(node) {
4188
 
      this.expressions.push(node);
4189
 
      return this;
4190
 
    };
4191
 
 
4192
 
    Block.prototype.pop = function() {
4193
 
      return this.expressions.pop();
4194
 
    };
4195
 
 
4196
 
    Block.prototype.unshift = function(node) {
4197
 
      this.expressions.unshift(node);
4198
 
      return this;
4199
 
    };
4200
 
 
4201
 
    Block.prototype.unwrap = function() {
4202
 
      if (this.expressions.length === 1) {
4203
 
        return this.expressions[0];
4204
 
      } else {
4205
 
        return this;
4206
 
      }
4207
 
    };
4208
 
 
4209
 
    Block.prototype.isEmpty = function() {
4210
 
      return !this.expressions.length;
4211
 
    };
4212
 
 
4213
 
    Block.prototype.isStatement = function(o) {
4214
 
      var exp, _i, _len, _ref2;
4215
 
      _ref2 = this.expressions;
4216
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
4217
 
        exp = _ref2[_i];
4218
 
        if (exp.isStatement(o)) {
4219
 
          return true;
4220
 
        }
4221
 
      }
4222
 
      return false;
4223
 
    };
4224
 
 
4225
 
    Block.prototype.jumps = function(o) {
4226
 
      var exp, _i, _len, _ref2;
4227
 
      _ref2 = this.expressions;
4228
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
4229
 
        exp = _ref2[_i];
4230
 
        if (exp.jumps(o)) {
4231
 
          return exp;
4232
 
        }
4233
 
      }
4234
 
    };
4235
 
 
4236
 
    Block.prototype.makeReturn = function(res) {
4237
 
      var expr, len;
4238
 
      len = this.expressions.length;
4239
 
      while (len--) {
4240
 
        expr = this.expressions[len];
4241
 
        if (!(expr instanceof Comment)) {
4242
 
          this.expressions[len] = expr.makeReturn(res);
4243
 
          if (expr instanceof Return && !expr.expression) {
4244
 
            this.expressions.splice(len, 1);
4245
 
          }
4246
 
          break;
4247
 
        }
4248
 
      }
4249
 
      return this;
4250
 
    };
4251
 
 
4252
 
    Block.prototype.compile = function(o, level) {
4253
 
      if (o == null) {
4254
 
        o = {};
4255
 
      }
4256
 
      if (o.scope) {
4257
 
        return Block.__super__.compile.call(this, o, level);
4258
 
      } else {
4259
 
        return this.compileRoot(o);
4260
 
      }
4261
 
    };
4262
 
 
4263
 
    Block.prototype.compileNode = function(o) {
4264
 
      var code, codes, node, top, _i, _len, _ref2;
4265
 
      this.tab = o.indent;
4266
 
      top = o.level === LEVEL_TOP;
4267
 
      codes = [];
4268
 
      _ref2 = this.expressions;
4269
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
4270
 
        node = _ref2[_i];
4271
 
        node = node.unwrapAll();
4272
 
        node = node.unfoldSoak(o) || node;
4273
 
        if (node instanceof Block) {
4274
 
          codes.push(node.compileNode(o));
4275
 
        } else if (top) {
4276
 
          node.front = true;
4277
 
          code = node.compile(o);
4278
 
          if (!node.isStatement(o)) {
4279
 
            code = "" + this.tab + code + ";";
4280
 
            if (node instanceof Literal) {
4281
 
              code = "" + code + "\n";
4282
 
            }
4283
 
          }
4284
 
          codes.push(code);
4285
 
        } else {
4286
 
          codes.push(node.compile(o, LEVEL_LIST));
4287
 
        }
4288
 
      }
4289
 
      if (top) {
4290
 
        if (this.spaced) {
4291
 
          return "\n" + (codes.join('\n\n')) + "\n";
4292
 
        } else {
4293
 
          return codes.join('\n');
4294
 
        }
4295
 
      }
4296
 
      code = codes.join(', ') || 'void 0';
4297
 
      if (codes.length > 1 && o.level >= LEVEL_LIST) {
4298
 
        return "(" + code + ")";
4299
 
      } else {
4300
 
        return code;
4301
 
      }
4302
 
    };
4303
 
 
4304
 
    Block.prototype.compileRoot = function(o) {
4305
 
      var code, exp, i, prelude, preludeExps, rest;
4306
 
      o.indent = o.bare ? '' : TAB;
4307
 
      o.scope = new Scope(null, this, null);
4308
 
      o.level = LEVEL_TOP;
4309
 
      this.spaced = true;
4310
 
      prelude = "";
4311
 
      if (!o.bare) {
4312
 
        preludeExps = (function() {
4313
 
          var _i, _len, _ref2, _results;
4314
 
          _ref2 = this.expressions;
4315
 
          _results = [];
4316
 
          for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
4317
 
            exp = _ref2[i];
4318
 
            if (!(exp.unwrap() instanceof Comment)) {
4319
 
              break;
4320
 
            }
4321
 
            _results.push(exp);
4322
 
          }
4323
 
          return _results;
4324
 
        }).call(this);
4325
 
        rest = this.expressions.slice(preludeExps.length);
4326
 
        this.expressions = preludeExps;
4327
 
        if (preludeExps.length) {
4328
 
          prelude = "" + (this.compileNode(merge(o, {
4329
 
            indent: ''
4330
 
          }))) + "\n";
4331
 
        }
4332
 
        this.expressions = rest;
4333
 
      }
4334
 
      code = this.compileWithDeclarations(o);
4335
 
      if (o.bare) {
4336
 
        return code;
4337
 
      }
4338
 
      return "" + prelude + "(function() {\n" + code + "\n}).call(this);\n";
4339
 
    };
4340
 
 
4341
 
    Block.prototype.compileWithDeclarations = function(o) {
4342
 
      var assigns, code, declars, exp, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
4343
 
      code = post = '';
4344
 
      _ref2 = this.expressions;
4345
 
      for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
4346
 
        exp = _ref2[i];
4347
 
        exp = exp.unwrap();
4348
 
        if (!(exp instanceof Comment || exp instanceof Literal)) {
4349
 
          break;
4350
 
        }
4351
 
      }
4352
 
      o = merge(o, {
4353
 
        level: LEVEL_TOP
4354
 
      });
4355
 
      if (i) {
4356
 
        rest = this.expressions.splice(i, 9e9);
4357
 
        _ref3 = [this.spaced, false], spaced = _ref3[0], this.spaced = _ref3[1];
4358
 
        _ref4 = [this.compileNode(o), spaced], code = _ref4[0], this.spaced = _ref4[1];
4359
 
        this.expressions = rest;
4360
 
      }
4361
 
      post = this.compileNode(o);
4362
 
      scope = o.scope;
4363
 
      if (scope.expressions === this) {
4364
 
        declars = o.scope.hasDeclarations();
4365
 
        assigns = scope.hasAssignments;
4366
 
        if (declars || assigns) {
4367
 
          if (i) {
4368
 
            code += '\n';
4369
 
          }
4370
 
          code += "" + this.tab + "var ";
4371
 
          if (declars) {
4372
 
            code += scope.declaredVariables().join(', ');
4373
 
          }
4374
 
          if (assigns) {
4375
 
            if (declars) {
4376
 
              code += ",\n" + (this.tab + TAB);
4377
 
            }
4378
 
            code += scope.assignedVariables().join(",\n" + (this.tab + TAB));
4379
 
          }
4380
 
          code += ';\n';
4381
 
        }
4382
 
      }
4383
 
      return code + post;
4384
 
    };
4385
 
 
4386
 
    Block.wrap = function(nodes) {
4387
 
      if (nodes.length === 1 && nodes[0] instanceof Block) {
4388
 
        return nodes[0];
4389
 
      }
4390
 
      return new Block(nodes);
4391
 
    };
4392
 
 
4393
 
    return Block;
4394
 
 
4395
 
  })(Base);
4396
 
 
4397
 
  exports.Literal = Literal = (function(_super) {
4398
 
 
4399
 
    __extends(Literal, _super);
4400
 
 
4401
 
    function Literal(value) {
4402
 
      this.value = value;
4403
 
    }
4404
 
 
4405
 
    Literal.prototype.makeReturn = function() {
4406
 
      if (this.isStatement()) {
4407
 
        return this;
4408
 
      } else {
4409
 
        return Literal.__super__.makeReturn.apply(this, arguments);
4410
 
      }
4411
 
    };
4412
 
 
4413
 
    Literal.prototype.isAssignable = function() {
4414
 
      return IDENTIFIER.test(this.value);
4415
 
    };
4416
 
 
4417
 
    Literal.prototype.isStatement = function() {
4418
 
      var _ref2;
4419
 
      return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
4420
 
    };
4421
 
 
4422
 
    Literal.prototype.isComplex = NO;
4423
 
 
4424
 
    Literal.prototype.assigns = function(name) {
4425
 
      return name === this.value;
4426
 
    };
4427
 
 
4428
 
    Literal.prototype.jumps = function(o) {
4429
 
      if (this.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) {
4430
 
        return this;
4431
 
      }
4432
 
      if (this.value === 'continue' && !(o != null ? o.loop : void 0)) {
4433
 
        return this;
4434
 
      }
4435
 
    };
4436
 
 
4437
 
    Literal.prototype.compileNode = function(o) {
4438
 
      var code, _ref2;
4439
 
      code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value;
4440
 
      if (this.isStatement()) {
4441
 
        return "" + this.tab + code + ";";
4442
 
      } else {
4443
 
        return code;
4444
 
      }
4445
 
    };
4446
 
 
4447
 
    Literal.prototype.toString = function() {
4448
 
      return ' "' + this.value + '"';
4449
 
    };
4450
 
 
4451
 
    return Literal;
4452
 
 
4453
 
  })(Base);
4454
 
 
4455
 
  exports.Undefined = (function(_super) {
4456
 
 
4457
 
    __extends(Undefined, _super);
4458
 
 
4459
 
    function Undefined() {
4460
 
      return Undefined.__super__.constructor.apply(this, arguments);
4461
 
    }
4462
 
 
4463
 
    Undefined.prototype.isAssignable = NO;
4464
 
 
4465
 
    Undefined.prototype.isComplex = NO;
4466
 
 
4467
 
    Undefined.prototype.compileNode = function(o) {
4468
 
      if (o.level >= LEVEL_ACCESS) {
4469
 
        return '(void 0)';
4470
 
      } else {
4471
 
        return 'void 0';
4472
 
      }
4473
 
    };
4474
 
 
4475
 
    return Undefined;
4476
 
 
4477
 
  })(Base);
4478
 
 
4479
 
  exports.Null = (function(_super) {
4480
 
 
4481
 
    __extends(Null, _super);
4482
 
 
4483
 
    function Null() {
4484
 
      return Null.__super__.constructor.apply(this, arguments);
4485
 
    }
4486
 
 
4487
 
    Null.prototype.isAssignable = NO;
4488
 
 
4489
 
    Null.prototype.isComplex = NO;
4490
 
 
4491
 
    Null.prototype.compileNode = function() {
4492
 
      return "null";
4493
 
    };
4494
 
 
4495
 
    return Null;
4496
 
 
4497
 
  })(Base);
4498
 
 
4499
 
  exports.Bool = (function(_super) {
4500
 
 
4501
 
    __extends(Bool, _super);
4502
 
 
4503
 
    Bool.prototype.isAssignable = NO;
4504
 
 
4505
 
    Bool.prototype.isComplex = NO;
4506
 
 
4507
 
    Bool.prototype.compileNode = function() {
4508
 
      return this.val;
4509
 
    };
4510
 
 
4511
 
    function Bool(val) {
4512
 
      this.val = val;
4513
 
    }
4514
 
 
4515
 
    return Bool;
4516
 
 
4517
 
  })(Base);
4518
 
 
4519
 
  exports.Return = Return = (function(_super) {
4520
 
 
4521
 
    __extends(Return, _super);
4522
 
 
4523
 
    function Return(expr) {
4524
 
      if (expr && !expr.unwrap().isUndefined) {
4525
 
        this.expression = expr;
4526
 
      }
4527
 
    }
4528
 
 
4529
 
    Return.prototype.children = ['expression'];
4530
 
 
4531
 
    Return.prototype.isStatement = YES;
4532
 
 
4533
 
    Return.prototype.makeReturn = THIS;
4534
 
 
4535
 
    Return.prototype.jumps = THIS;
4536
 
 
4537
 
    Return.prototype.compile = function(o, level) {
4538
 
      var expr, _ref2;
4539
 
      expr = (_ref2 = this.expression) != null ? _ref2.makeReturn() : void 0;
4540
 
      if (expr && !(expr instanceof Return)) {
4541
 
        return expr.compile(o, level);
4542
 
      } else {
4543
 
        return Return.__super__.compile.call(this, o, level);
4544
 
      }
4545
 
    };
4546
 
 
4547
 
    Return.prototype.compileNode = function(o) {
4548
 
      return this.tab + ("return" + [this.expression ? " " + (this.expression.compile(o, LEVEL_PAREN)) : void 0] + ";");
4549
 
    };
4550
 
 
4551
 
    return Return;
4552
 
 
4553
 
  })(Base);
4554
 
 
4555
 
  exports.Value = Value = (function(_super) {
4556
 
 
4557
 
    __extends(Value, _super);
4558
 
 
4559
 
    function Value(base, props, tag) {
4560
 
      if (!props && base instanceof Value) {
4561
 
        return base;
4562
 
      }
4563
 
      this.base = base;
4564
 
      this.properties = props || [];
4565
 
      if (tag) {
4566
 
        this[tag] = true;
4567
 
      }
4568
 
      return this;
4569
 
    }
4570
 
 
4571
 
    Value.prototype.children = ['base', 'properties'];
4572
 
 
4573
 
    Value.prototype.add = function(props) {
4574
 
      this.properties = this.properties.concat(props);
4575
 
      return this;
4576
 
    };
4577
 
 
4578
 
    Value.prototype.hasProperties = function() {
4579
 
      return !!this.properties.length;
4580
 
    };
4581
 
 
4582
 
    Value.prototype.isArray = function() {
4583
 
      return !this.properties.length && this.base instanceof Arr;
4584
 
    };
4585
 
 
4586
 
    Value.prototype.isComplex = function() {
4587
 
      return this.hasProperties() || this.base.isComplex();
4588
 
    };
4589
 
 
4590
 
    Value.prototype.isAssignable = function() {
4591
 
      return this.hasProperties() || this.base.isAssignable();
4592
 
    };
4593
 
 
4594
 
    Value.prototype.isSimpleNumber = function() {
4595
 
      return this.base instanceof Literal && SIMPLENUM.test(this.base.value);
4596
 
    };
4597
 
 
4598
 
    Value.prototype.isString = function() {
4599
 
      return this.base instanceof Literal && IS_STRING.test(this.base.value);
4600
 
    };
4601
 
 
4602
 
    Value.prototype.isAtomic = function() {
4603
 
      var node, _i, _len, _ref2;
4604
 
      _ref2 = this.properties.concat(this.base);
4605
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
4606
 
        node = _ref2[_i];
4607
 
        if (node.soak || node instanceof Call) {
4608
 
          return false;
4609
 
        }
4610
 
      }
4611
 
      return true;
4612
 
    };
4613
 
 
4614
 
    Value.prototype.isStatement = function(o) {
4615
 
      return !this.properties.length && this.base.isStatement(o);
4616
 
    };
4617
 
 
4618
 
    Value.prototype.assigns = function(name) {
4619
 
      return !this.properties.length && this.base.assigns(name);
4620
 
    };
4621
 
 
4622
 
    Value.prototype.jumps = function(o) {
4623
 
      return !this.properties.length && this.base.jumps(o);
4624
 
    };
4625
 
 
4626
 
    Value.prototype.isObject = function(onlyGenerated) {
4627
 
      if (this.properties.length) {
4628
 
        return false;
4629
 
      }
4630
 
      return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated);
4631
 
    };
4632
 
 
4633
 
    Value.prototype.isSplice = function() {
4634
 
      return last(this.properties) instanceof Slice;
4635
 
    };
4636
 
 
4637
 
    Value.prototype.unwrap = function() {
4638
 
      if (this.properties.length) {
4639
 
        return this;
4640
 
      } else {
4641
 
        return this.base;
4642
 
      }
4643
 
    };
4644
 
 
4645
 
    Value.prototype.cacheReference = function(o) {
4646
 
      var base, bref, name, nref;
4647
 
      name = last(this.properties);
4648
 
      if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
4649
 
        return [this, this];
4650
 
      }
4651
 
      base = new Value(this.base, this.properties.slice(0, -1));
4652
 
      if (base.isComplex()) {
4653
 
        bref = new Literal(o.scope.freeVariable('base'));
4654
 
        base = new Value(new Parens(new Assign(bref, base)));
4655
 
      }
4656
 
      if (!name) {
4657
 
        return [base, bref];
4658
 
      }
4659
 
      if (name.isComplex()) {
4660
 
        nref = new Literal(o.scope.freeVariable('name'));
4661
 
        name = new Index(new Assign(nref, name.index));
4662
 
        nref = new Index(nref);
4663
 
      }
4664
 
      return [base.add(name), new Value(bref || base.base, [nref || name])];
4665
 
    };
4666
 
 
4667
 
    Value.prototype.compileNode = function(o) {
4668
 
      var code, prop, props, _i, _len;
4669
 
      this.base.front = this.front;
4670
 
      props = this.properties;
4671
 
      code = this.base.compile(o, props.length ? LEVEL_ACCESS : null);
4672
 
      if ((this.base instanceof Parens || props.length) && SIMPLENUM.test(code)) {
4673
 
        code = "" + code + ".";
4674
 
      }
4675
 
      for (_i = 0, _len = props.length; _i < _len; _i++) {
4676
 
        prop = props[_i];
4677
 
        code += prop.compile(o);
4678
 
      }
4679
 
      return code;
4680
 
    };
4681
 
 
4682
 
    Value.prototype.unfoldSoak = function(o) {
4683
 
      var result,
4684
 
        _this = this;
4685
 
      if (this.unfoldedSoak != null) {
4686
 
        return this.unfoldedSoak;
4687
 
      }
4688
 
      result = (function() {
4689
 
        var fst, i, ifn, prop, ref, snd, _i, _len, _ref2;
4690
 
        if (ifn = _this.base.unfoldSoak(o)) {
4691
 
          Array.prototype.push.apply(ifn.body.properties, _this.properties);
4692
 
          return ifn;
4693
 
        }
4694
 
        _ref2 = _this.properties;
4695
 
        for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
4696
 
          prop = _ref2[i];
4697
 
          if (!prop.soak) {
4698
 
            continue;
4699
 
          }
4700
 
          prop.soak = false;
4701
 
          fst = new Value(_this.base, _this.properties.slice(0, i));
4702
 
          snd = new Value(_this.base, _this.properties.slice(i));
4703
 
          if (fst.isComplex()) {
4704
 
            ref = new Literal(o.scope.freeVariable('ref'));
4705
 
            fst = new Parens(new Assign(ref, fst));
4706
 
            snd.base = ref;
4707
 
          }
4708
 
          return new If(new Existence(fst), snd, {
4709
 
            soak: true
4710
 
          });
4711
 
        }
4712
 
        return null;
4713
 
      })();
4714
 
      return this.unfoldedSoak = result || false;
4715
 
    };
4716
 
 
4717
 
    return Value;
4718
 
 
4719
 
  })(Base);
4720
 
 
4721
 
  exports.Comment = Comment = (function(_super) {
4722
 
 
4723
 
    __extends(Comment, _super);
4724
 
 
4725
 
    function Comment(comment) {
4726
 
      this.comment = comment;
4727
 
    }
4728
 
 
4729
 
    Comment.prototype.isStatement = YES;
4730
 
 
4731
 
    Comment.prototype.makeReturn = THIS;
4732
 
 
4733
 
    Comment.prototype.compileNode = function(o, level) {
4734
 
      var code;
4735
 
      code = '/*' + multident(this.comment, this.tab) + ("\n" + this.tab + "*/\n");
4736
 
      if ((level || o.level) === LEVEL_TOP) {
4737
 
        code = o.indent + code;
4738
 
      }
4739
 
      return code;
4740
 
    };
4741
 
 
4742
 
    return Comment;
4743
 
 
4744
 
  })(Base);
4745
 
 
4746
 
  exports.Call = Call = (function(_super) {
4747
 
 
4748
 
    __extends(Call, _super);
4749
 
 
4750
 
    function Call(variable, args, soak) {
4751
 
      this.args = args != null ? args : [];
4752
 
      this.soak = soak;
4753
 
      this.isNew = false;
4754
 
      this.isSuper = variable === 'super';
4755
 
      this.variable = this.isSuper ? null : variable;
4756
 
    }
4757
 
 
4758
 
    Call.prototype.children = ['variable', 'args'];
4759
 
 
4760
 
    Call.prototype.newInstance = function() {
4761
 
      var base, _ref2;
4762
 
      base = ((_ref2 = this.variable) != null ? _ref2.base : void 0) || this.variable;
4763
 
      if (base instanceof Call && !base.isNew) {
4764
 
        base.newInstance();
4765
 
      } else {
4766
 
        this.isNew = true;
4767
 
      }
4768
 
      return this;
4769
 
    };
4770
 
 
4771
 
    Call.prototype.superReference = function(o) {
4772
 
      var accesses, method, name;
4773
 
      method = o.scope.namedMethod();
4774
 
      if (!method) {
4775
 
        throw SyntaxError('cannot call super outside of a function.');
4776
 
      }
4777
 
      name = method.name;
4778
 
      if (name == null) {
4779
 
        throw SyntaxError('cannot call super on an anonymous function.');
4780
 
      }
4781
 
      if (method.klass) {
4782
 
        accesses = [new Access(new Literal('__super__'))];
4783
 
        if (method["static"]) {
4784
 
          accesses.push(new Access(new Literal('constructor')));
4785
 
        }
4786
 
        accesses.push(new Access(new Literal(name)));
4787
 
        return (new Value(new Literal(method.klass), accesses)).compile(o);
4788
 
      } else {
4789
 
        return "" + name + ".__super__.constructor";
4790
 
      }
4791
 
    };
4792
 
 
4793
 
    Call.prototype.superThis = function(o) {
4794
 
      var method;
4795
 
      method = o.scope.method;
4796
 
      return (method && !method.klass && method.context) || "this";
4797
 
    };
4798
 
 
4799
 
    Call.prototype.unfoldSoak = function(o) {
4800
 
      var call, ifn, left, list, rite, _i, _len, _ref2, _ref3;
4801
 
      if (this.soak) {
4802
 
        if (this.variable) {
4803
 
          if (ifn = unfoldSoak(o, this, 'variable')) {
4804
 
            return ifn;
4805
 
          }
4806
 
          _ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1];
4807
 
        } else {
4808
 
          left = new Literal(this.superReference(o));
4809
 
          rite = new Value(left);
4810
 
        }
4811
 
        rite = new Call(rite, this.args);
4812
 
        rite.isNew = this.isNew;
4813
 
        left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
4814
 
        return new If(left, new Value(rite), {
4815
 
          soak: true
4816
 
        });
4817
 
      }
4818
 
      call = this;
4819
 
      list = [];
4820
 
      while (true) {
4821
 
        if (call.variable instanceof Call) {
4822
 
          list.push(call);
4823
 
          call = call.variable;
4824
 
          continue;
4825
 
        }
4826
 
        if (!(call.variable instanceof Value)) {
4827
 
          break;
4828
 
        }
4829
 
        list.push(call);
4830
 
        if (!((call = call.variable.base) instanceof Call)) {
4831
 
          break;
4832
 
        }
4833
 
      }
4834
 
      _ref3 = list.reverse();
4835
 
      for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
4836
 
        call = _ref3[_i];
4837
 
        if (ifn) {
4838
 
          if (call.variable instanceof Call) {
4839
 
            call.variable = ifn;
4840
 
          } else {
4841
 
            call.variable.base = ifn;
4842
 
          }
4843
 
        }
4844
 
        ifn = unfoldSoak(o, call, 'variable');
4845
 
      }
4846
 
      return ifn;
4847
 
    };
4848
 
 
4849
 
    Call.prototype.filterImplicitObjects = function(list) {
4850
 
      var node, nodes, obj, prop, properties, _i, _j, _len, _len1, _ref2;
4851
 
      nodes = [];
4852
 
      for (_i = 0, _len = list.length; _i < _len; _i++) {
4853
 
        node = list[_i];
4854
 
        if (!((typeof node.isObject === "function" ? node.isObject() : void 0) && node.base.generated)) {
4855
 
          nodes.push(node);
4856
 
          continue;
4857
 
        }
4858
 
        obj = null;
4859
 
        _ref2 = node.base.properties;
4860
 
        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
4861
 
          prop = _ref2[_j];
4862
 
          if (prop instanceof Assign || prop instanceof Comment) {
4863
 
            if (!obj) {
4864
 
              nodes.push(obj = new Obj(properties = [], true));
4865
 
            }
4866
 
            properties.push(prop);
4867
 
          } else {
4868
 
            nodes.push(prop);
4869
 
            obj = null;
4870
 
          }
4871
 
        }
4872
 
      }
4873
 
      return nodes;
4874
 
    };
4875
 
 
4876
 
    Call.prototype.compileNode = function(o) {
4877
 
      var arg, args, code, _ref2;
4878
 
      if ((_ref2 = this.variable) != null) {
4879
 
        _ref2.front = this.front;
4880
 
      }
4881
 
      if (code = Splat.compileSplattedArray(o, this.args, true)) {
4882
 
        return this.compileSplat(o, code);
4883
 
      }
4884
 
      args = this.filterImplicitObjects(this.args);
4885
 
      args = ((function() {
4886
 
        var _i, _len, _results;
4887
 
        _results = [];
4888
 
        for (_i = 0, _len = args.length; _i < _len; _i++) {
4889
 
          arg = args[_i];
4890
 
          _results.push(arg.compile(o, LEVEL_LIST));
4891
 
        }
4892
 
        return _results;
4893
 
      })()).join(', ');
4894
 
      if (this.isSuper) {
4895
 
        return this.superReference(o) + (".call(" + (this.superThis(o)) + (args && ', ' + args) + ")");
4896
 
      } else {
4897
 
        return (this.isNew ? 'new ' : '') + this.variable.compile(o, LEVEL_ACCESS) + ("(" + args + ")");
4898
 
      }
4899
 
    };
4900
 
 
4901
 
    Call.prototype.compileSuper = function(args, o) {
4902
 
      return "" + (this.superReference(o)) + ".call(" + (this.superThis(o)) + (args.length ? ', ' : '') + args + ")";
4903
 
    };
4904
 
 
4905
 
    Call.prototype.compileSplat = function(o, splatArgs) {
4906
 
      var base, fun, idt, name, ref;
4907
 
      if (this.isSuper) {
4908
 
        return "" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", " + splatArgs + ")";
4909
 
      }
4910
 
      if (this.isNew) {
4911
 
        idt = this.tab + TAB;
4912
 
        return "(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args), t = typeof result;\n" + idt + "return t == \"object\" || t == \"function\" ? result || child : child;\n" + this.tab + "})(" + (this.variable.compile(o, LEVEL_LIST)) + ", " + splatArgs + ", function(){})";
4913
 
      }
4914
 
      base = new Value(this.variable);
4915
 
      if ((name = base.properties.pop()) && base.isComplex()) {
4916
 
        ref = o.scope.freeVariable('ref');
4917
 
        fun = "(" + ref + " = " + (base.compile(o, LEVEL_LIST)) + ")" + (name.compile(o));
4918
 
      } else {
4919
 
        fun = base.compile(o, LEVEL_ACCESS);
4920
 
        if (SIMPLENUM.test(fun)) {
4921
 
          fun = "(" + fun + ")";
4922
 
        }
4923
 
        if (name) {
4924
 
          ref = fun;
4925
 
          fun += name.compile(o);
4926
 
        } else {
4927
 
          ref = 'null';
4928
 
        }
4929
 
      }
4930
 
      return "" + fun + ".apply(" + ref + ", " + splatArgs + ")";
4931
 
    };
4932
 
 
4933
 
    return Call;
4934
 
 
4935
 
  })(Base);
4936
 
 
4937
 
  exports.Extends = Extends = (function(_super) {
4938
 
 
4939
 
    __extends(Extends, _super);
4940
 
 
4941
 
    function Extends(child, parent) {
4942
 
      this.child = child;
4943
 
      this.parent = parent;
4944
 
    }
4945
 
 
4946
 
    Extends.prototype.children = ['child', 'parent'];
4947
 
 
4948
 
    Extends.prototype.compile = function(o) {
4949
 
      return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compile(o);
4950
 
    };
4951
 
 
4952
 
    return Extends;
4953
 
 
4954
 
  })(Base);
4955
 
 
4956
 
  exports.Access = Access = (function(_super) {
4957
 
 
4958
 
    __extends(Access, _super);
4959
 
 
4960
 
    function Access(name, tag) {
4961
 
      this.name = name;
4962
 
      this.name.asKey = true;
4963
 
      this.soak = tag === 'soak';
4964
 
    }
4965
 
 
4966
 
    Access.prototype.children = ['name'];
4967
 
 
4968
 
    Access.prototype.compile = function(o) {
4969
 
      var name;
4970
 
      name = this.name.compile(o);
4971
 
      if (IDENTIFIER.test(name)) {
4972
 
        return "." + name;
4973
 
      } else {
4974
 
        return "[" + name + "]";
4975
 
      }
4976
 
    };
4977
 
 
4978
 
    Access.prototype.isComplex = NO;
4979
 
 
4980
 
    return Access;
4981
 
 
4982
 
  })(Base);
4983
 
 
4984
 
  exports.Index = Index = (function(_super) {
4985
 
 
4986
 
    __extends(Index, _super);
4987
 
 
4988
 
    function Index(index) {
4989
 
      this.index = index;
4990
 
    }
4991
 
 
4992
 
    Index.prototype.children = ['index'];
4993
 
 
4994
 
    Index.prototype.compile = function(o) {
4995
 
      return "[" + (this.index.compile(o, LEVEL_PAREN)) + "]";
4996
 
    };
4997
 
 
4998
 
    Index.prototype.isComplex = function() {
4999
 
      return this.index.isComplex();
5000
 
    };
5001
 
 
5002
 
    return Index;
5003
 
 
5004
 
  })(Base);
5005
 
 
5006
 
  exports.Range = Range = (function(_super) {
5007
 
 
5008
 
    __extends(Range, _super);
5009
 
 
5010
 
    Range.prototype.children = ['from', 'to'];
5011
 
 
5012
 
    function Range(from, to, tag) {
5013
 
      this.from = from;
5014
 
      this.to = to;
5015
 
      this.exclusive = tag === 'exclusive';
5016
 
      this.equals = this.exclusive ? '' : '=';
5017
 
    }
5018
 
 
5019
 
    Range.prototype.compileVariables = function(o) {
5020
 
      var step, _ref2, _ref3, _ref4, _ref5;
5021
 
      o = merge(o, {
5022
 
        top: true
5023
 
      });
5024
 
      _ref2 = this.from.cache(o, LEVEL_LIST), this.fromC = _ref2[0], this.fromVar = _ref2[1];
5025
 
      _ref3 = this.to.cache(o, LEVEL_LIST), this.toC = _ref3[0], this.toVar = _ref3[1];
5026
 
      if (step = del(o, 'step')) {
5027
 
        _ref4 = step.cache(o, LEVEL_LIST), this.step = _ref4[0], this.stepVar = _ref4[1];
5028
 
      }
5029
 
      _ref5 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref5[0], this.toNum = _ref5[1];
5030
 
      if (this.stepVar) {
5031
 
        return this.stepNum = this.stepVar.match(SIMPLENUM);
5032
 
      }
5033
 
    };
5034
 
 
5035
 
    Range.prototype.compileNode = function(o) {
5036
 
      var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref2, _ref3;
5037
 
      if (!this.fromVar) {
5038
 
        this.compileVariables(o);
5039
 
      }
5040
 
      if (!o.index) {
5041
 
        return this.compileArray(o);
5042
 
      }
5043
 
      known = this.fromNum && this.toNum;
5044
 
      idx = del(o, 'index');
5045
 
      idxName = del(o, 'name');
5046
 
      namedIndex = idxName && idxName !== idx;
5047
 
      varPart = "" + idx + " = " + this.fromC;
5048
 
      if (this.toC !== this.toVar) {
5049
 
        varPart += ", " + this.toC;
5050
 
      }
5051
 
      if (this.step !== this.stepVar) {
5052
 
        varPart += ", " + this.step;
5053
 
      }
5054
 
      _ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1];
5055
 
      condPart = this.stepNum ? +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [+this.fromNum, +this.toNum], from = _ref3[0], to = _ref3[1], _ref3), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
5056
 
      stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--";
5057
 
      if (namedIndex) {
5058
 
        varPart = "" + idxName + " = " + varPart;
5059
 
      }
5060
 
      if (namedIndex) {
5061
 
        stepPart = "" + idxName + " = " + stepPart;
5062
 
      }
5063
 
      return "" + varPart + "; " + condPart + "; " + stepPart;
5064
 
    };
5065
 
 
5066
 
    Range.prototype.compileArray = function(o) {
5067
 
      var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref2, _ref3, _results;
5068
 
      if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
5069
 
        range = (function() {
5070
 
          _results = [];
5071
 
          for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i++ : _i--){ _results.push(_i); }
5072
 
          return _results;
5073
 
        }).apply(this);
5074
 
        if (this.exclusive) {
5075
 
          range.pop();
5076
 
        }
5077
 
        return "[" + (range.join(', ')) + "]";
5078
 
      }
5079
 
      idt = this.tab + TAB;
5080
 
      i = o.scope.freeVariable('i');
5081
 
      result = o.scope.freeVariable('results');
5082
 
      pre = "\n" + idt + result + " = [];";
5083
 
      if (this.fromNum && this.toNum) {
5084
 
        o.index = i;
5085
 
        body = this.compileNode(o);
5086
 
      } else {
5087
 
        vars = ("" + i + " = " + this.fromC) + (this.toC !== this.toVar ? ", " + this.toC : '');
5088
 
        cond = "" + this.fromVar + " <= " + this.toVar;
5089
 
        body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--";
5090
 
      }
5091
 
      post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent;
5092
 
      hasArgs = function(node) {
5093
 
        return node != null ? node.contains(function(n) {
5094
 
          return n instanceof Literal && n.value === 'arguments' && !n.asKey;
5095
 
        }) : void 0;
5096
 
      };
5097
 
      if (hasArgs(this.from) || hasArgs(this.to)) {
5098
 
        args = ', arguments';
5099
 
      }
5100
 
      return "(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")";
5101
 
    };
5102
 
 
5103
 
    return Range;
5104
 
 
5105
 
  })(Base);
5106
 
 
5107
 
  exports.Slice = Slice = (function(_super) {
5108
 
 
5109
 
    __extends(Slice, _super);
5110
 
 
5111
 
    Slice.prototype.children = ['range'];
5112
 
 
5113
 
    function Slice(range) {
5114
 
      this.range = range;
5115
 
      Slice.__super__.constructor.call(this);
5116
 
    }
5117
 
 
5118
 
    Slice.prototype.compileNode = function(o) {
5119
 
      var compiled, from, fromStr, to, toStr, _ref2;
5120
 
      _ref2 = this.range, to = _ref2.to, from = _ref2.from;
5121
 
      fromStr = from && from.compile(o, LEVEL_PAREN) || '0';
5122
 
      compiled = to && to.compile(o, LEVEL_PAREN);
5123
 
      if (to && !(!this.range.exclusive && +compiled === -1)) {
5124
 
        toStr = ', ' + (this.range.exclusive ? compiled : SIMPLENUM.test(compiled) ? "" + (+compiled + 1) : (compiled = to.compile(o, LEVEL_ACCESS), "+" + compiled + " + 1 || 9e9"));
5125
 
      }
5126
 
      return ".slice(" + fromStr + (toStr || '') + ")";
5127
 
    };
5128
 
 
5129
 
    return Slice;
5130
 
 
5131
 
  })(Base);
5132
 
 
5133
 
  exports.Obj = Obj = (function(_super) {
5134
 
 
5135
 
    __extends(Obj, _super);
5136
 
 
5137
 
    function Obj(props, generated) {
5138
 
      this.generated = generated != null ? generated : false;
5139
 
      this.objects = this.properties = props || [];
5140
 
    }
5141
 
 
5142
 
    Obj.prototype.children = ['properties'];
5143
 
 
5144
 
    Obj.prototype.compileNode = function(o) {
5145
 
      var i, idt, indent, join, lastNoncom, node, obj, prop, props, _i, _len;
5146
 
      props = this.properties;
5147
 
      if (!props.length) {
5148
 
        return (this.front ? '({})' : '{}');
5149
 
      }
5150
 
      if (this.generated) {
5151
 
        for (_i = 0, _len = props.length; _i < _len; _i++) {
5152
 
          node = props[_i];
5153
 
          if (node instanceof Value) {
5154
 
            throw new Error('cannot have an implicit value in an implicit object');
5155
 
          }
5156
 
        }
5157
 
      }
5158
 
      idt = o.indent += TAB;
5159
 
      lastNoncom = this.lastNonComment(this.properties);
5160
 
      props = (function() {
5161
 
        var _j, _len1, _results;
5162
 
        _results = [];
5163
 
        for (i = _j = 0, _len1 = props.length; _j < _len1; i = ++_j) {
5164
 
          prop = props[i];
5165
 
          join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
5166
 
          indent = prop instanceof Comment ? '' : idt;
5167
 
          if (prop instanceof Value && prop["this"]) {
5168
 
            prop = new Assign(prop.properties[0].name, prop, 'object');
5169
 
          }
5170
 
          if (!(prop instanceof Comment)) {
5171
 
            if (!(prop instanceof Assign)) {
5172
 
              prop = new Assign(prop, prop, 'object');
5173
 
            }
5174
 
            (prop.variable.base || prop.variable).asKey = true;
5175
 
          }
5176
 
          _results.push(indent + prop.compile(o, LEVEL_TOP) + join);
5177
 
        }
5178
 
        return _results;
5179
 
      })();
5180
 
      props = props.join('');
5181
 
      obj = "{" + (props && '\n' + props + '\n' + this.tab) + "}";
5182
 
      if (this.front) {
5183
 
        return "(" + obj + ")";
5184
 
      } else {
5185
 
        return obj;
5186
 
      }
5187
 
    };
5188
 
 
5189
 
    Obj.prototype.assigns = function(name) {
5190
 
      var prop, _i, _len, _ref2;
5191
 
      _ref2 = this.properties;
5192
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
5193
 
        prop = _ref2[_i];
5194
 
        if (prop.assigns(name)) {
5195
 
          return true;
5196
 
        }
5197
 
      }
5198
 
      return false;
5199
 
    };
5200
 
 
5201
 
    return Obj;
5202
 
 
5203
 
  })(Base);
5204
 
 
5205
 
  exports.Arr = Arr = (function(_super) {
5206
 
 
5207
 
    __extends(Arr, _super);
5208
 
 
5209
 
    function Arr(objs) {
5210
 
      this.objects = objs || [];
5211
 
    }
5212
 
 
5213
 
    Arr.prototype.children = ['objects'];
5214
 
 
5215
 
    Arr.prototype.filterImplicitObjects = Call.prototype.filterImplicitObjects;
5216
 
 
5217
 
    Arr.prototype.compileNode = function(o) {
5218
 
      var code, obj, objs;
5219
 
      if (!this.objects.length) {
5220
 
        return '[]';
5221
 
      }
5222
 
      o.indent += TAB;
5223
 
      objs = this.filterImplicitObjects(this.objects);
5224
 
      if (code = Splat.compileSplattedArray(o, objs)) {
5225
 
        return code;
5226
 
      }
5227
 
      code = ((function() {
5228
 
        var _i, _len, _results;
5229
 
        _results = [];
5230
 
        for (_i = 0, _len = objs.length; _i < _len; _i++) {
5231
 
          obj = objs[_i];
5232
 
          _results.push(obj.compile(o, LEVEL_LIST));
5233
 
        }
5234
 
        return _results;
5235
 
      })()).join(', ');
5236
 
      if (code.indexOf('\n') >= 0) {
5237
 
        return "[\n" + o.indent + code + "\n" + this.tab + "]";
5238
 
      } else {
5239
 
        return "[" + code + "]";
5240
 
      }
5241
 
    };
5242
 
 
5243
 
    Arr.prototype.assigns = function(name) {
5244
 
      var obj, _i, _len, _ref2;
5245
 
      _ref2 = this.objects;
5246
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
5247
 
        obj = _ref2[_i];
5248
 
        if (obj.assigns(name)) {
5249
 
          return true;
5250
 
        }
5251
 
      }
5252
 
      return false;
5253
 
    };
5254
 
 
5255
 
    return Arr;
5256
 
 
5257
 
  })(Base);
5258
 
 
5259
 
  exports.Class = Class = (function(_super) {
5260
 
 
5261
 
    __extends(Class, _super);
5262
 
 
5263
 
    function Class(variable, parent, body) {
5264
 
      this.variable = variable;
5265
 
      this.parent = parent;
5266
 
      this.body = body != null ? body : new Block;
5267
 
      this.boundFuncs = [];
5268
 
      this.body.classBody = true;
5269
 
    }
5270
 
 
5271
 
    Class.prototype.children = ['variable', 'parent', 'body'];
5272
 
 
5273
 
    Class.prototype.determineName = function() {
5274
 
      var decl, tail;
5275
 
      if (!this.variable) {
5276
 
        return null;
5277
 
      }
5278
 
      decl = (tail = last(this.variable.properties)) ? tail instanceof Access && tail.name.value : this.variable.base.value;
5279
 
      if (__indexOf.call(STRICT_PROSCRIBED, decl) >= 0) {
5280
 
        throw SyntaxError("variable name may not be " + decl);
5281
 
      }
5282
 
      return decl && (decl = IDENTIFIER.test(decl) && decl);
5283
 
    };
5284
 
 
5285
 
    Class.prototype.setContext = function(name) {
5286
 
      return this.body.traverseChildren(false, function(node) {
5287
 
        if (node.classBody) {
5288
 
          return false;
5289
 
        }
5290
 
        if (node instanceof Literal && node.value === 'this') {
5291
 
          return node.value = name;
5292
 
        } else if (node instanceof Code) {
5293
 
          node.klass = name;
5294
 
          if (node.bound) {
5295
 
            return node.context = name;
5296
 
          }
5297
 
        }
5298
 
      });
5299
 
    };
5300
 
 
5301
 
    Class.prototype.addBoundFunctions = function(o) {
5302
 
      var bvar, lhs, _i, _len, _ref2, _results;
5303
 
      if (this.boundFuncs.length) {
5304
 
        _ref2 = this.boundFuncs;
5305
 
        _results = [];
5306
 
        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
5307
 
          bvar = _ref2[_i];
5308
 
          lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o);
5309
 
          _results.push(this.ctor.body.unshift(new Literal("" + lhs + " = " + (utility('bind')) + "(" + lhs + ", this)")));
5310
 
        }
5311
 
        return _results;
5312
 
      }
5313
 
    };
5314
 
 
5315
 
    Class.prototype.addProperties = function(node, name, o) {
5316
 
      var assign, base, exprs, func, props;
5317
 
      props = node.base.properties.slice(0);
5318
 
      exprs = (function() {
5319
 
        var _results;
5320
 
        _results = [];
5321
 
        while (assign = props.shift()) {
5322
 
          if (assign instanceof Assign) {
5323
 
            base = assign.variable.base;
5324
 
            delete assign.context;
5325
 
            func = assign.value;
5326
 
            if (base.value === 'constructor') {
5327
 
              if (this.ctor) {
5328
 
                throw new Error('cannot define more than one constructor in a class');
5329
 
              }
5330
 
              if (func.bound) {
5331
 
                throw new Error('cannot define a constructor as a bound function');
5332
 
              }
5333
 
              if (func instanceof Code) {
5334
 
                assign = this.ctor = func;
5335
 
              } else {
5336
 
                this.externalCtor = o.scope.freeVariable('class');
5337
 
                assign = new Assign(new Literal(this.externalCtor), func);
5338
 
              }
5339
 
            } else {
5340
 
              if (assign.variable["this"]) {
5341
 
                func["static"] = true;
5342
 
                if (func.bound) {
5343
 
                  func.context = name;
5344
 
                }
5345
 
              } else {
5346
 
                assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]);
5347
 
                if (func instanceof Code && func.bound) {
5348
 
                  this.boundFuncs.push(base);
5349
 
                  func.bound = false;
5350
 
                }
5351
 
              }
5352
 
            }
5353
 
          }
5354
 
          _results.push(assign);
5355
 
        }
5356
 
        return _results;
5357
 
      }).call(this);
5358
 
      return compact(exprs);
5359
 
    };
5360
 
 
5361
 
    Class.prototype.walkBody = function(name, o) {
5362
 
      var _this = this;
5363
 
      return this.traverseChildren(false, function(child) {
5364
 
        var exps, i, node, _i, _len, _ref2;
5365
 
        if (child instanceof Class) {
5366
 
          return false;
5367
 
        }
5368
 
        if (child instanceof Block) {
5369
 
          _ref2 = exps = child.expressions;
5370
 
          for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
5371
 
            node = _ref2[i];
5372
 
            if (node instanceof Value && node.isObject(true)) {
5373
 
              exps[i] = _this.addProperties(node, name, o);
5374
 
            }
5375
 
          }
5376
 
          return child.expressions = exps = flatten(exps);
5377
 
        }
5378
 
      });
5379
 
    };
5380
 
 
5381
 
    Class.prototype.hoistDirectivePrologue = function() {
5382
 
      var expressions, index, node;
5383
 
      index = 0;
5384
 
      expressions = this.body.expressions;
5385
 
      while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) {
5386
 
        ++index;
5387
 
      }
5388
 
      return this.directives = expressions.splice(0, index);
5389
 
    };
5390
 
 
5391
 
    Class.prototype.ensureConstructor = function(name) {
5392
 
      if (!this.ctor) {
5393
 
        this.ctor = new Code;
5394
 
        if (this.parent) {
5395
 
          this.ctor.body.push(new Literal("" + name + ".__super__.constructor.apply(this, arguments)"));
5396
 
        }
5397
 
        if (this.externalCtor) {
5398
 
          this.ctor.body.push(new Literal("" + this.externalCtor + ".apply(this, arguments)"));
5399
 
        }
5400
 
        this.ctor.body.makeReturn();
5401
 
        this.body.expressions.unshift(this.ctor);
5402
 
      }
5403
 
      this.ctor.ctor = this.ctor.name = name;
5404
 
      this.ctor.klass = null;
5405
 
      return this.ctor.noReturn = true;
5406
 
    };
5407
 
 
5408
 
    Class.prototype.compileNode = function(o) {
5409
 
      var call, decl, klass, lname, name, params, _ref2;
5410
 
      decl = this.determineName();
5411
 
      name = decl || '_Class';
5412
 
      if (name.reserved) {
5413
 
        name = "_" + name;
5414
 
      }
5415
 
      lname = new Literal(name);
5416
 
      this.hoistDirectivePrologue();
5417
 
      this.setContext(name);
5418
 
      this.walkBody(name, o);
5419
 
      this.ensureConstructor(name);
5420
 
      this.body.spaced = true;
5421
 
      if (!(this.ctor instanceof Code)) {
5422
 
        this.body.expressions.unshift(this.ctor);
5423
 
      }
5424
 
      this.body.expressions.push(lname);
5425
 
      (_ref2 = this.body.expressions).unshift.apply(_ref2, this.directives);
5426
 
      this.addBoundFunctions(o);
5427
 
      call = Closure.wrap(this.body);
5428
 
      if (this.parent) {
5429
 
        this.superClass = new Literal(o.scope.freeVariable('super', false));
5430
 
        this.body.expressions.unshift(new Extends(lname, this.superClass));
5431
 
        call.args.push(this.parent);
5432
 
        params = call.variable.params || call.variable.base.params;
5433
 
        params.push(new Param(this.superClass));
5434
 
      }
5435
 
      klass = new Parens(call, true);
5436
 
      if (this.variable) {
5437
 
        klass = new Assign(this.variable, klass);
5438
 
      }
5439
 
      return klass.compile(o);
5440
 
    };
5441
 
 
5442
 
    return Class;
5443
 
 
5444
 
  })(Base);
5445
 
 
5446
 
  exports.Assign = Assign = (function(_super) {
5447
 
 
5448
 
    __extends(Assign, _super);
5449
 
 
5450
 
    function Assign(variable, value, context, options) {
5451
 
      var forbidden, name, _ref2;
5452
 
      this.variable = variable;
5453
 
      this.value = value;
5454
 
      this.context = context;
5455
 
      this.param = options && options.param;
5456
 
      this.subpattern = options && options.subpattern;
5457
 
      forbidden = (_ref2 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0);
5458
 
      if (forbidden && this.context !== 'object') {
5459
 
        throw SyntaxError("variable name may not be \"" + name + "\"");
5460
 
      }
5461
 
    }
5462
 
 
5463
 
    Assign.prototype.children = ['variable', 'value'];
5464
 
 
5465
 
    Assign.prototype.isStatement = function(o) {
5466
 
      return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && __indexOf.call(this.context, "?") >= 0;
5467
 
    };
5468
 
 
5469
 
    Assign.prototype.assigns = function(name) {
5470
 
      return this[this.context === 'object' ? 'value' : 'variable'].assigns(name);
5471
 
    };
5472
 
 
5473
 
    Assign.prototype.unfoldSoak = function(o) {
5474
 
      return unfoldSoak(o, this, 'variable');
5475
 
    };
5476
 
 
5477
 
    Assign.prototype.compileNode = function(o) {
5478
 
      var isValue, match, name, val, varBase, _ref2, _ref3, _ref4, _ref5;
5479
 
      if (isValue = this.variable instanceof Value) {
5480
 
        if (this.variable.isArray() || this.variable.isObject()) {
5481
 
          return this.compilePatternMatch(o);
5482
 
        }
5483
 
        if (this.variable.isSplice()) {
5484
 
          return this.compileSplice(o);
5485
 
        }
5486
 
        if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') {
5487
 
          return this.compileConditional(o);
5488
 
        }
5489
 
      }
5490
 
      name = this.variable.compile(o, LEVEL_LIST);
5491
 
      if (!this.context) {
5492
 
        if (!(varBase = this.variable.unwrapAll()).isAssignable()) {
5493
 
          throw SyntaxError("\"" + (this.variable.compile(o)) + "\" cannot be assigned.");
5494
 
        }
5495
 
        if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) {
5496
 
          if (this.param) {
5497
 
            o.scope.add(name, 'var');
5498
 
          } else {
5499
 
            o.scope.find(name);
5500
 
          }
5501
 
        }
5502
 
      }
5503
 
      if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) {
5504
 
        if (match[1]) {
5505
 
          this.value.klass = match[1];
5506
 
        }
5507
 
        this.value.name = (_ref3 = (_ref4 = (_ref5 = match[2]) != null ? _ref5 : match[3]) != null ? _ref4 : match[4]) != null ? _ref3 : match[5];
5508
 
      }
5509
 
      val = this.value.compile(o, LEVEL_LIST);
5510
 
      if (this.context === 'object') {
5511
 
        return "" + name + ": " + val;
5512
 
      }
5513
 
      val = name + (" " + (this.context || '=') + " ") + val;
5514
 
      if (o.level <= LEVEL_LIST) {
5515
 
        return val;
5516
 
      } else {
5517
 
        return "(" + val + ")";
5518
 
      }
5519
 
    };
5520
 
 
5521
 
    Assign.prototype.compilePatternMatch = function(o) {
5522
 
      var acc, assigns, code, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
5523
 
      top = o.level === LEVEL_TOP;
5524
 
      value = this.value;
5525
 
      objects = this.variable.base.objects;
5526
 
      if (!(olen = objects.length)) {
5527
 
        code = value.compile(o);
5528
 
        if (o.level >= LEVEL_OP) {
5529
 
          return "(" + code + ")";
5530
 
        } else {
5531
 
          return code;
5532
 
        }
5533
 
      }
5534
 
      isObject = this.variable.isObject();
5535
 
      if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) {
5536
 
        if (obj instanceof Assign) {
5537
 
          _ref2 = obj, (_ref3 = _ref2.variable, idx = _ref3.base), obj = _ref2.value;
5538
 
        } else {
5539
 
          if (obj.base instanceof Parens) {
5540
 
            _ref4 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref4[0], idx = _ref4[1];
5541
 
          } else {
5542
 
            idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0);
5543
 
          }
5544
 
        }
5545
 
        acc = IDENTIFIER.test(idx.unwrap().value || 0);
5546
 
        value = new Value(value);
5547
 
        value.properties.push(new (acc ? Access : Index)(idx));
5548
 
        if (_ref5 = obj.unwrap().value, __indexOf.call(RESERVED, _ref5) >= 0) {
5549
 
          throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (value.compile(o)));
5550
 
        }
5551
 
        return new Assign(obj, value, null, {
5552
 
          param: this.param
5553
 
        }).compile(o, LEVEL_TOP);
5554
 
      }
5555
 
      vvar = value.compile(o, LEVEL_LIST);
5556
 
      assigns = [];
5557
 
      splat = false;
5558
 
      if (!IDENTIFIER.test(vvar) || this.variable.assigns(vvar)) {
5559
 
        assigns.push("" + (ref = o.scope.freeVariable('ref')) + " = " + vvar);
5560
 
        vvar = ref;
5561
 
      }
5562
 
      for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) {
5563
 
        obj = objects[i];
5564
 
        idx = i;
5565
 
        if (isObject) {
5566
 
          if (obj instanceof Assign) {
5567
 
            _ref6 = obj, (_ref7 = _ref6.variable, idx = _ref7.base), obj = _ref6.value;
5568
 
          } else {
5569
 
            if (obj.base instanceof Parens) {
5570
 
              _ref8 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref8[0], idx = _ref8[1];
5571
 
            } else {
5572
 
              idx = obj["this"] ? obj.properties[0].name : obj;
5573
 
            }
5574
 
          }
5575
 
        }
5576
 
        if (!splat && obj instanceof Splat) {
5577
 
          name = obj.name.unwrap().value;
5578
 
          obj = obj.unwrap();
5579
 
          val = "" + olen + " <= " + vvar + ".length ? " + (utility('slice')) + ".call(" + vvar + ", " + i;
5580
 
          if (rest = olen - i - 1) {
5581
 
            ivar = o.scope.freeVariable('i');
5582
 
            val += ", " + ivar + " = " + vvar + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])";
5583
 
          } else {
5584
 
            val += ") : []";
5585
 
          }
5586
 
          val = new Literal(val);
5587
 
          splat = "" + ivar + "++";
5588
 
        } else {
5589
 
          name = obj.unwrap().value;
5590
 
          if (obj instanceof Splat) {
5591
 
            obj = obj.name.compile(o);
5592
 
            throw new SyntaxError("multiple splats are disallowed in an assignment: " + obj + "...");
5593
 
          }
5594
 
          if (typeof idx === 'number') {
5595
 
            idx = new Literal(splat || idx);
5596
 
            acc = false;
5597
 
          } else {
5598
 
            acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0);
5599
 
          }
5600
 
          val = new Value(new Literal(vvar), [new (acc ? Access : Index)(idx)]);
5601
 
        }
5602
 
        if ((name != null) && __indexOf.call(RESERVED, name) >= 0) {
5603
 
          throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (val.compile(o)));
5604
 
        }
5605
 
        assigns.push(new Assign(obj, val, null, {
5606
 
          param: this.param,
5607
 
          subpattern: true
5608
 
        }).compile(o, LEVEL_LIST));
5609
 
      }
5610
 
      if (!(top || this.subpattern)) {
5611
 
        assigns.push(vvar);
5612
 
      }
5613
 
      code = assigns.join(', ');
5614
 
      if (o.level < LEVEL_LIST) {
5615
 
        return code;
5616
 
      } else {
5617
 
        return "(" + code + ")";
5618
 
      }
5619
 
    };
5620
 
 
5621
 
    Assign.prototype.compileConditional = function(o) {
5622
 
      var left, right, _ref2;
5623
 
      _ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1];
5624
 
      if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
5625
 
        throw new Error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been defined.");
5626
 
      }
5627
 
      if (__indexOf.call(this.context, "?") >= 0) {
5628
 
        o.isExistentialEquals = true;
5629
 
      }
5630
 
      return new Op(this.context.slice(0, -1), left, new Assign(right, this.value, '=')).compile(o);
5631
 
    };
5632
 
 
5633
 
    Assign.prototype.compileSplice = function(o) {
5634
 
      var code, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref2, _ref3, _ref4;
5635
 
      _ref2 = this.variable.properties.pop().range, from = _ref2.from, to = _ref2.to, exclusive = _ref2.exclusive;
5636
 
      name = this.variable.compile(o);
5637
 
      _ref3 = (from != null ? from.cache(o, LEVEL_OP) : void 0) || ['0', '0'], fromDecl = _ref3[0], fromRef = _ref3[1];
5638
 
      if (to) {
5639
 
        if ((from != null ? from.isSimpleNumber() : void 0) && to.isSimpleNumber()) {
5640
 
          to = +to.compile(o) - +fromRef;
5641
 
          if (!exclusive) {
5642
 
            to += 1;
5643
 
          }
5644
 
        } else {
5645
 
          to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef;
5646
 
          if (!exclusive) {
5647
 
            to += ' + 1';
5648
 
          }
5649
 
        }
5650
 
      } else {
5651
 
        to = "9e9";
5652
 
      }
5653
 
      _ref4 = this.value.cache(o, LEVEL_LIST), valDef = _ref4[0], valRef = _ref4[1];
5654
 
      code = "[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat(" + valDef + ")), " + valRef;
5655
 
      if (o.level > LEVEL_TOP) {
5656
 
        return "(" + code + ")";
5657
 
      } else {
5658
 
        return code;
5659
 
      }
5660
 
    };
5661
 
 
5662
 
    return Assign;
5663
 
 
5664
 
  })(Base);
5665
 
 
5666
 
  exports.Code = Code = (function(_super) {
5667
 
 
5668
 
    __extends(Code, _super);
5669
 
 
5670
 
    function Code(params, body, tag) {
5671
 
      this.params = params || [];
5672
 
      this.body = body || new Block;
5673
 
      this.bound = tag === 'boundfunc';
5674
 
      if (this.bound) {
5675
 
        this.context = '_this';
5676
 
      }
5677
 
    }
5678
 
 
5679
 
    Code.prototype.children = ['params', 'body'];
5680
 
 
5681
 
    Code.prototype.isStatement = function() {
5682
 
      return !!this.ctor;
5683
 
    };
5684
 
 
5685
 
    Code.prototype.jumps = NO;
5686
 
 
5687
 
    Code.prototype.compileNode = function(o) {
5688
 
      var code, exprs, i, idt, lit, name, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
5689
 
      o.scope = new Scope(o.scope, this.body, this);
5690
 
      o.scope.shared = del(o, 'sharedScope');
5691
 
      o.indent += TAB;
5692
 
      delete o.bare;
5693
 
      delete o.isExistentialEquals;
5694
 
      params = [];
5695
 
      exprs = [];
5696
 
      _ref2 = this.paramNames();
5697
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
5698
 
        name = _ref2[_i];
5699
 
        if (!o.scope.check(name)) {
5700
 
          o.scope.parameter(name);
5701
 
        }
5702
 
      }
5703
 
      _ref3 = this.params;
5704
 
      for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
5705
 
        param = _ref3[_j];
5706
 
        if (!param.splat) {
5707
 
          continue;
5708
 
        }
5709
 
        _ref4 = this.params;
5710
 
        for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
5711
 
          p = _ref4[_k].name;
5712
 
          if (p["this"]) {
5713
 
            p = p.properties[0].name;
5714
 
          }
5715
 
          if (p.value) {
5716
 
            o.scope.add(p.value, 'var', true);
5717
 
          }
5718
 
        }
5719
 
        splats = new Assign(new Value(new Arr((function() {
5720
 
          var _l, _len3, _ref5, _results;
5721
 
          _ref5 = this.params;
5722
 
          _results = [];
5723
 
          for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
5724
 
            p = _ref5[_l];
5725
 
            _results.push(p.asReference(o));
5726
 
          }
5727
 
          return _results;
5728
 
        }).call(this))), new Value(new Literal('arguments')));
5729
 
        break;
5730
 
      }
5731
 
      _ref5 = this.params;
5732
 
      for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) {
5733
 
        param = _ref5[_l];
5734
 
        if (param.isComplex()) {
5735
 
          val = ref = param.asReference(o);
5736
 
          if (param.value) {
5737
 
            val = new Op('?', ref, param.value);
5738
 
          }
5739
 
          exprs.push(new Assign(new Value(param.name), val, '=', {
5740
 
            param: true
5741
 
          }));
5742
 
        } else {
5743
 
          ref = param;
5744
 
          if (param.value) {
5745
 
            lit = new Literal(ref.name.value + ' == null');
5746
 
            val = new Assign(new Value(param.name), param.value, '=');
5747
 
            exprs.push(new If(lit, val));
5748
 
          }
5749
 
        }
5750
 
        if (!splats) {
5751
 
          params.push(ref);
5752
 
        }
5753
 
      }
5754
 
      wasEmpty = this.body.isEmpty();
5755
 
      if (splats) {
5756
 
        exprs.unshift(splats);
5757
 
      }
5758
 
      if (exprs.length) {
5759
 
        (_ref6 = this.body.expressions).unshift.apply(_ref6, exprs);
5760
 
      }
5761
 
      for (i = _m = 0, _len4 = params.length; _m < _len4; i = ++_m) {
5762
 
        p = params[i];
5763
 
        o.scope.parameter(params[i] = p.compile(o));
5764
 
      }
5765
 
      uniqs = [];
5766
 
      _ref7 = this.paramNames();
5767
 
      for (_n = 0, _len5 = _ref7.length; _n < _len5; _n++) {
5768
 
        name = _ref7[_n];
5769
 
        if (__indexOf.call(uniqs, name) >= 0) {
5770
 
          throw SyntaxError("multiple parameters named '" + name + "'");
5771
 
        }
5772
 
        uniqs.push(name);
5773
 
      }
5774
 
      if (!(wasEmpty || this.noReturn)) {
5775
 
        this.body.makeReturn();
5776
 
      }
5777
 
      if (this.bound) {
5778
 
        if ((_ref8 = o.scope.parent.method) != null ? _ref8.bound : void 0) {
5779
 
          this.bound = this.context = o.scope.parent.method.context;
5780
 
        } else if (!this["static"]) {
5781
 
          o.scope.parent.assign('_this', 'this');
5782
 
        }
5783
 
      }
5784
 
      idt = o.indent;
5785
 
      code = 'function';
5786
 
      if (this.ctor) {
5787
 
        code += ' ' + this.name;
5788
 
      }
5789
 
      code += '(' + params.join(', ') + ') {';
5790
 
      if (!this.body.isEmpty()) {
5791
 
        code += "\n" + (this.body.compileWithDeclarations(o)) + "\n" + this.tab;
5792
 
      }
5793
 
      code += '}';
5794
 
      if (this.ctor) {
5795
 
        return this.tab + code;
5796
 
      }
5797
 
      if (this.front || (o.level >= LEVEL_ACCESS)) {
5798
 
        return "(" + code + ")";
5799
 
      } else {
5800
 
        return code;
5801
 
      }
5802
 
    };
5803
 
 
5804
 
    Code.prototype.paramNames = function() {
5805
 
      var names, param, _i, _len, _ref2;
5806
 
      names = [];
5807
 
      _ref2 = this.params;
5808
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
5809
 
        param = _ref2[_i];
5810
 
        names.push.apply(names, param.names());
5811
 
      }
5812
 
      return names;
5813
 
    };
5814
 
 
5815
 
    Code.prototype.traverseChildren = function(crossScope, func) {
5816
 
      if (crossScope) {
5817
 
        return Code.__super__.traverseChildren.call(this, crossScope, func);
5818
 
      }
5819
 
    };
5820
 
 
5821
 
    return Code;
5822
 
 
5823
 
  })(Base);
5824
 
 
5825
 
  exports.Param = Param = (function(_super) {
5826
 
 
5827
 
    __extends(Param, _super);
5828
 
 
5829
 
    function Param(name, value, splat) {
5830
 
      var _ref2;
5831
 
      this.name = name;
5832
 
      this.value = value;
5833
 
      this.splat = splat;
5834
 
      if (_ref2 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
5835
 
        throw SyntaxError("parameter name \"" + name + "\" is not allowed");
5836
 
      }
5837
 
    }
5838
 
 
5839
 
    Param.prototype.children = ['name', 'value'];
5840
 
 
5841
 
    Param.prototype.compile = function(o) {
5842
 
      return this.name.compile(o, LEVEL_LIST);
5843
 
    };
5844
 
 
5845
 
    Param.prototype.asReference = function(o) {
5846
 
      var node;
5847
 
      if (this.reference) {
5848
 
        return this.reference;
5849
 
      }
5850
 
      node = this.name;
5851
 
      if (node["this"]) {
5852
 
        node = node.properties[0].name;
5853
 
        if (node.value.reserved) {
5854
 
          node = new Literal(o.scope.freeVariable(node.value));
5855
 
        }
5856
 
      } else if (node.isComplex()) {
5857
 
        node = new Literal(o.scope.freeVariable('arg'));
5858
 
      }
5859
 
      node = new Value(node);
5860
 
      if (this.splat) {
5861
 
        node = new Splat(node);
5862
 
      }
5863
 
      return this.reference = node;
5864
 
    };
5865
 
 
5866
 
    Param.prototype.isComplex = function() {
5867
 
      return this.name.isComplex();
5868
 
    };
5869
 
 
5870
 
    Param.prototype.names = function(name) {
5871
 
      var atParam, names, obj, _i, _len, _ref2;
5872
 
      if (name == null) {
5873
 
        name = this.name;
5874
 
      }
5875
 
      atParam = function(obj) {
5876
 
        var value;
5877
 
        value = obj.properties[0].name.value;
5878
 
        if (value.reserved) {
5879
 
          return [];
5880
 
        } else {
5881
 
          return [value];
5882
 
        }
5883
 
      };
5884
 
      if (name instanceof Literal) {
5885
 
        return [name.value];
5886
 
      }
5887
 
      if (name instanceof Value) {
5888
 
        return atParam(name);
5889
 
      }
5890
 
      names = [];
5891
 
      _ref2 = name.objects;
5892
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
5893
 
        obj = _ref2[_i];
5894
 
        if (obj instanceof Assign) {
5895
 
          names.push(obj.value.unwrap().value);
5896
 
        } else if (obj instanceof Splat) {
5897
 
          names.push(obj.name.unwrap().value);
5898
 
        } else if (obj instanceof Value) {
5899
 
          if (obj.isArray() || obj.isObject()) {
5900
 
            names.push.apply(names, this.names(obj.base));
5901
 
          } else if (obj["this"]) {
5902
 
            names.push.apply(names, atParam(obj));
5903
 
          } else {
5904
 
            names.push(obj.base.value);
5905
 
          }
5906
 
        } else {
5907
 
          throw SyntaxError("illegal parameter " + (obj.compile()));
5908
 
        }
5909
 
      }
5910
 
      return names;
5911
 
    };
5912
 
 
5913
 
    return Param;
5914
 
 
5915
 
  })(Base);
5916
 
 
5917
 
  exports.Splat = Splat = (function(_super) {
5918
 
 
5919
 
    __extends(Splat, _super);
5920
 
 
5921
 
    Splat.prototype.children = ['name'];
5922
 
 
5923
 
    Splat.prototype.isAssignable = YES;
5924
 
 
5925
 
    function Splat(name) {
5926
 
      this.name = name.compile ? name : new Literal(name);
5927
 
    }
5928
 
 
5929
 
    Splat.prototype.assigns = function(name) {
5930
 
      return this.name.assigns(name);
5931
 
    };
5932
 
 
5933
 
    Splat.prototype.compile = function(o) {
5934
 
      if (this.index != null) {
5935
 
        return this.compileParam(o);
5936
 
      } else {
5937
 
        return this.name.compile(o);
5938
 
      }
5939
 
    };
5940
 
 
5941
 
    Splat.prototype.unwrap = function() {
5942
 
      return this.name;
5943
 
    };
5944
 
 
5945
 
    Splat.compileSplattedArray = function(o, list, apply) {
5946
 
      var args, base, code, i, index, node, _i, _len;
5947
 
      index = -1;
5948
 
      while ((node = list[++index]) && !(node instanceof Splat)) {
5949
 
        continue;
5950
 
      }
5951
 
      if (index >= list.length) {
5952
 
        return '';
5953
 
      }
5954
 
      if (list.length === 1) {
5955
 
        code = list[0].compile(o, LEVEL_LIST);
5956
 
        if (apply) {
5957
 
          return code;
5958
 
        }
5959
 
        return "" + (utility('slice')) + ".call(" + code + ")";
5960
 
      }
5961
 
      args = list.slice(index);
5962
 
      for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
5963
 
        node = args[i];
5964
 
        code = node.compile(o, LEVEL_LIST);
5965
 
        args[i] = node instanceof Splat ? "" + (utility('slice')) + ".call(" + code + ")" : "[" + code + "]";
5966
 
      }
5967
 
      if (index === 0) {
5968
 
        return args[0] + (".concat(" + (args.slice(1).join(', ')) + ")");
5969
 
      }
5970
 
      base = (function() {
5971
 
        var _j, _len1, _ref2, _results;
5972
 
        _ref2 = list.slice(0, index);
5973
 
        _results = [];
5974
 
        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
5975
 
          node = _ref2[_j];
5976
 
          _results.push(node.compile(o, LEVEL_LIST));
5977
 
        }
5978
 
        return _results;
5979
 
      })();
5980
 
      return "[" + (base.join(', ')) + "].concat(" + (args.join(', ')) + ")";
5981
 
    };
5982
 
 
5983
 
    return Splat;
5984
 
 
5985
 
  })(Base);
5986
 
 
5987
 
  exports.While = While = (function(_super) {
5988
 
 
5989
 
    __extends(While, _super);
5990
 
 
5991
 
    function While(condition, options) {
5992
 
      this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition;
5993
 
      this.guard = options != null ? options.guard : void 0;
5994
 
    }
5995
 
 
5996
 
    While.prototype.children = ['condition', 'guard', 'body'];
5997
 
 
5998
 
    While.prototype.isStatement = YES;
5999
 
 
6000
 
    While.prototype.makeReturn = function(res) {
6001
 
      if (res) {
6002
 
        return While.__super__.makeReturn.apply(this, arguments);
6003
 
      } else {
6004
 
        this.returns = !this.jumps({
6005
 
          loop: true
6006
 
        });
6007
 
        return this;
6008
 
      }
6009
 
    };
6010
 
 
6011
 
    While.prototype.addBody = function(body) {
6012
 
      this.body = body;
6013
 
      return this;
6014
 
    };
6015
 
 
6016
 
    While.prototype.jumps = function() {
6017
 
      var expressions, node, _i, _len;
6018
 
      expressions = this.body.expressions;
6019
 
      if (!expressions.length) {
6020
 
        return false;
6021
 
      }
6022
 
      for (_i = 0, _len = expressions.length; _i < _len; _i++) {
6023
 
        node = expressions[_i];
6024
 
        if (node.jumps({
6025
 
          loop: true
6026
 
        })) {
6027
 
          return node;
6028
 
        }
6029
 
      }
6030
 
      return false;
6031
 
    };
6032
 
 
6033
 
    While.prototype.compileNode = function(o) {
6034
 
      var body, code, rvar, set;
6035
 
      o.indent += TAB;
6036
 
      set = '';
6037
 
      body = this.body;
6038
 
      if (body.isEmpty()) {
6039
 
        body = '';
6040
 
      } else {
6041
 
        if (this.returns) {
6042
 
          body.makeReturn(rvar = o.scope.freeVariable('results'));
6043
 
          set = "" + this.tab + rvar + " = [];\n";
6044
 
        }
6045
 
        if (this.guard) {
6046
 
          if (body.expressions.length > 1) {
6047
 
            body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
6048
 
          } else {
6049
 
            if (this.guard) {
6050
 
              body = Block.wrap([new If(this.guard, body)]);
6051
 
            }
6052
 
          }
6053
 
        }
6054
 
        body = "\n" + (body.compile(o, LEVEL_TOP)) + "\n" + this.tab;
6055
 
      }
6056
 
      code = set + this.tab + ("while (" + (this.condition.compile(o, LEVEL_PAREN)) + ") {" + body + "}");
6057
 
      if (this.returns) {
6058
 
        code += "\n" + this.tab + "return " + rvar + ";";
6059
 
      }
6060
 
      return code;
6061
 
    };
6062
 
 
6063
 
    return While;
6064
 
 
6065
 
  })(Base);
6066
 
 
6067
 
  exports.Op = Op = (function(_super) {
6068
 
    var CONVERSIONS, INVERSIONS;
6069
 
 
6070
 
    __extends(Op, _super);
6071
 
 
6072
 
    function Op(op, first, second, flip) {
6073
 
      if (op === 'in') {
6074
 
        return new In(first, second);
6075
 
      }
6076
 
      if (op === 'do') {
6077
 
        return this.generateDo(first);
6078
 
      }
6079
 
      if (op === 'new') {
6080
 
        if (first instanceof Call && !first["do"] && !first.isNew) {
6081
 
          return first.newInstance();
6082
 
        }
6083
 
        if (first instanceof Code && first.bound || first["do"]) {
6084
 
          first = new Parens(first);
6085
 
        }
6086
 
      }
6087
 
      this.operator = CONVERSIONS[op] || op;
6088
 
      this.first = first;
6089
 
      this.second = second;
6090
 
      this.flip = !!flip;
6091
 
      return this;
6092
 
    }
6093
 
 
6094
 
    CONVERSIONS = {
6095
 
      '==': '===',
6096
 
      '!=': '!==',
6097
 
      'of': 'in'
6098
 
    };
6099
 
 
6100
 
    INVERSIONS = {
6101
 
      '!==': '===',
6102
 
      '===': '!=='
6103
 
    };
6104
 
 
6105
 
    Op.prototype.children = ['first', 'second'];
6106
 
 
6107
 
    Op.prototype.isSimpleNumber = NO;
6108
 
 
6109
 
    Op.prototype.isUnary = function() {
6110
 
      return !this.second;
6111
 
    };
6112
 
 
6113
 
    Op.prototype.isComplex = function() {
6114
 
      var _ref2;
6115
 
      return !(this.isUnary() && ((_ref2 = this.operator) === '+' || _ref2 === '-')) || this.first.isComplex();
6116
 
    };
6117
 
 
6118
 
    Op.prototype.isChainable = function() {
6119
 
      var _ref2;
6120
 
      return (_ref2 = this.operator) === '<' || _ref2 === '>' || _ref2 === '>=' || _ref2 === '<=' || _ref2 === '===' || _ref2 === '!==';
6121
 
    };
6122
 
 
6123
 
    Op.prototype.invert = function() {
6124
 
      var allInvertable, curr, fst, op, _ref2;
6125
 
      if (this.isChainable() && this.first.isChainable()) {
6126
 
        allInvertable = true;
6127
 
        curr = this;
6128
 
        while (curr && curr.operator) {
6129
 
          allInvertable && (allInvertable = curr.operator in INVERSIONS);
6130
 
          curr = curr.first;
6131
 
        }
6132
 
        if (!allInvertable) {
6133
 
          return new Parens(this).invert();
6134
 
        }
6135
 
        curr = this;
6136
 
        while (curr && curr.operator) {
6137
 
          curr.invert = !curr.invert;
6138
 
          curr.operator = INVERSIONS[curr.operator];
6139
 
          curr = curr.first;
6140
 
        }
6141
 
        return this;
6142
 
      } else if (op = INVERSIONS[this.operator]) {
6143
 
        this.operator = op;
6144
 
        if (this.first.unwrap() instanceof Op) {
6145
 
          this.first.invert();
6146
 
        }
6147
 
        return this;
6148
 
      } else if (this.second) {
6149
 
        return new Parens(this).invert();
6150
 
      } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref2 = fst.operator) === '!' || _ref2 === 'in' || _ref2 === 'instanceof')) {
6151
 
        return fst;
6152
 
      } else {
6153
 
        return new Op('!', this);
6154
 
      }
6155
 
    };
6156
 
 
6157
 
    Op.prototype.unfoldSoak = function(o) {
6158
 
      var _ref2;
6159
 
      return ((_ref2 = this.operator) === '++' || _ref2 === '--' || _ref2 === 'delete') && unfoldSoak(o, this, 'first');
6160
 
    };
6161
 
 
6162
 
    Op.prototype.generateDo = function(exp) {
6163
 
      var call, func, param, passedParams, ref, _i, _len, _ref2;
6164
 
      passedParams = [];
6165
 
      func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
6166
 
      _ref2 = func.params || [];
6167
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
6168
 
        param = _ref2[_i];
6169
 
        if (param.value) {
6170
 
          passedParams.push(param.value);
6171
 
          delete param.value;
6172
 
        } else {
6173
 
          passedParams.push(param);
6174
 
        }
6175
 
      }
6176
 
      call = new Call(exp, passedParams);
6177
 
      call["do"] = true;
6178
 
      return call;
6179
 
    };
6180
 
 
6181
 
    Op.prototype.compileNode = function(o) {
6182
 
      var code, isChain, _ref2, _ref3;
6183
 
      isChain = this.isChainable() && this.first.isChainable();
6184
 
      if (!isChain) {
6185
 
        this.first.front = this.front;
6186
 
      }
6187
 
      if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) {
6188
 
        throw SyntaxError('delete operand may not be argument or var');
6189
 
      }
6190
 
      if (((_ref2 = this.operator) === '--' || _ref2 === '++') && (_ref3 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref3) >= 0)) {
6191
 
        throw SyntaxError('prefix increment/decrement may not have eval or arguments operand');
6192
 
      }
6193
 
      if (this.isUnary()) {
6194
 
        return this.compileUnary(o);
6195
 
      }
6196
 
      if (isChain) {
6197
 
        return this.compileChain(o);
6198
 
      }
6199
 
      if (this.operator === '?') {
6200
 
        return this.compileExistence(o);
6201
 
      }
6202
 
      code = this.first.compile(o, LEVEL_OP) + ' ' + this.operator + ' ' + this.second.compile(o, LEVEL_OP);
6203
 
      if (o.level <= LEVEL_OP) {
6204
 
        return code;
6205
 
      } else {
6206
 
        return "(" + code + ")";
6207
 
      }
6208
 
    };
6209
 
 
6210
 
    Op.prototype.compileChain = function(o) {
6211
 
      var code, fst, shared, _ref2;
6212
 
      _ref2 = this.first.second.cache(o), this.first.second = _ref2[0], shared = _ref2[1];
6213
 
      fst = this.first.compile(o, LEVEL_OP);
6214
 
      code = "" + fst + " " + (this.invert ? '&&' : '||') + " " + (shared.compile(o)) + " " + this.operator + " " + (this.second.compile(o, LEVEL_OP));
6215
 
      return "(" + code + ")";
6216
 
    };
6217
 
 
6218
 
    Op.prototype.compileExistence = function(o) {
6219
 
      var fst, ref;
6220
 
      if (this.first.isComplex()) {
6221
 
        ref = new Literal(o.scope.freeVariable('ref'));
6222
 
        fst = new Parens(new Assign(ref, this.first));
6223
 
      } else {
6224
 
        fst = this.first;
6225
 
        ref = fst;
6226
 
      }
6227
 
      return new If(new Existence(fst), ref, {
6228
 
        type: 'if'
6229
 
      }).addElse(this.second).compile(o);
6230
 
    };
6231
 
 
6232
 
    Op.prototype.compileUnary = function(o) {
6233
 
      var op, parts, plusMinus;
6234
 
      if (o.level >= LEVEL_ACCESS) {
6235
 
        return (new Parens(this)).compile(o);
6236
 
      }
6237
 
      parts = [op = this.operator];
6238
 
      plusMinus = op === '+' || op === '-';
6239
 
      if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) {
6240
 
        parts.push(' ');
6241
 
      }
6242
 
      if ((plusMinus && this.first instanceof Op) || (op === 'new' && this.first.isStatement(o))) {
6243
 
        this.first = new Parens(this.first);
6244
 
      }
6245
 
      parts.push(this.first.compile(o, LEVEL_OP));
6246
 
      if (this.flip) {
6247
 
        parts.reverse();
6248
 
      }
6249
 
      return parts.join('');
6250
 
    };
6251
 
 
6252
 
    Op.prototype.toString = function(idt) {
6253
 
      return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator);
6254
 
    };
6255
 
 
6256
 
    return Op;
6257
 
 
6258
 
  })(Base);
6259
 
 
6260
 
  exports.In = In = (function(_super) {
6261
 
 
6262
 
    __extends(In, _super);
6263
 
 
6264
 
    function In(object, array) {
6265
 
      this.object = object;
6266
 
      this.array = array;
6267
 
    }
6268
 
 
6269
 
    In.prototype.children = ['object', 'array'];
6270
 
 
6271
 
    In.prototype.invert = NEGATE;
6272
 
 
6273
 
    In.prototype.compileNode = function(o) {
6274
 
      var hasSplat, obj, _i, _len, _ref2;
6275
 
      if (this.array instanceof Value && this.array.isArray()) {
6276
 
        _ref2 = this.array.base.objects;
6277
 
        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
6278
 
          obj = _ref2[_i];
6279
 
          if (!(obj instanceof Splat)) {
6280
 
            continue;
6281
 
          }
6282
 
          hasSplat = true;
6283
 
          break;
6284
 
        }
6285
 
        if (!hasSplat) {
6286
 
          return this.compileOrTest(o);
6287
 
        }
6288
 
      }
6289
 
      return this.compileLoopTest(o);
6290
 
    };
6291
 
 
6292
 
    In.prototype.compileOrTest = function(o) {
6293
 
      var cmp, cnj, i, item, ref, sub, tests, _ref2, _ref3;
6294
 
      if (this.array.base.objects.length === 0) {
6295
 
        return "" + (!!this.negated);
6296
 
      }
6297
 
      _ref2 = this.object.cache(o, LEVEL_OP), sub = _ref2[0], ref = _ref2[1];
6298
 
      _ref3 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref3[0], cnj = _ref3[1];
6299
 
      tests = (function() {
6300
 
        var _i, _len, _ref4, _results;
6301
 
        _ref4 = this.array.base.objects;
6302
 
        _results = [];
6303
 
        for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
6304
 
          item = _ref4[i];
6305
 
          _results.push((i ? ref : sub) + cmp + item.compile(o, LEVEL_ACCESS));
6306
 
        }
6307
 
        return _results;
6308
 
      }).call(this);
6309
 
      tests = tests.join(cnj);
6310
 
      if (o.level < LEVEL_OP) {
6311
 
        return tests;
6312
 
      } else {
6313
 
        return "(" + tests + ")";
6314
 
      }
6315
 
    };
6316
 
 
6317
 
    In.prototype.compileLoopTest = function(o) {
6318
 
      var code, ref, sub, _ref2;
6319
 
      _ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1];
6320
 
      code = utility('indexOf') + (".call(" + (this.array.compile(o, LEVEL_LIST)) + ", " + ref + ") ") + (this.negated ? '< 0' : '>= 0');
6321
 
      if (sub === ref) {
6322
 
        return code;
6323
 
      }
6324
 
      code = sub + ', ' + code;
6325
 
      if (o.level < LEVEL_LIST) {
6326
 
        return code;
6327
 
      } else {
6328
 
        return "(" + code + ")";
6329
 
      }
6330
 
    };
6331
 
 
6332
 
    In.prototype.toString = function(idt) {
6333
 
      return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : ''));
6334
 
    };
6335
 
 
6336
 
    return In;
6337
 
 
6338
 
  })(Base);
6339
 
 
6340
 
  exports.Try = Try = (function(_super) {
6341
 
 
6342
 
    __extends(Try, _super);
6343
 
 
6344
 
    function Try(attempt, error, recovery, ensure) {
6345
 
      this.attempt = attempt;
6346
 
      this.error = error;
6347
 
      this.recovery = recovery;
6348
 
      this.ensure = ensure;
6349
 
    }
6350
 
 
6351
 
    Try.prototype.children = ['attempt', 'recovery', 'ensure'];
6352
 
 
6353
 
    Try.prototype.isStatement = YES;
6354
 
 
6355
 
    Try.prototype.jumps = function(o) {
6356
 
      var _ref2;
6357
 
      return this.attempt.jumps(o) || ((_ref2 = this.recovery) != null ? _ref2.jumps(o) : void 0);
6358
 
    };
6359
 
 
6360
 
    Try.prototype.makeReturn = function(res) {
6361
 
      if (this.attempt) {
6362
 
        this.attempt = this.attempt.makeReturn(res);
6363
 
      }
6364
 
      if (this.recovery) {
6365
 
        this.recovery = this.recovery.makeReturn(res);
6366
 
      }
6367
 
      return this;
6368
 
    };
6369
 
 
6370
 
    Try.prototype.compileNode = function(o) {
6371
 
      var catchPart, ensurePart, errorPart, tryPart;
6372
 
      o.indent += TAB;
6373
 
      errorPart = this.error ? " (" + (this.error.compile(o)) + ") " : ' ';
6374
 
      tryPart = this.attempt.compile(o, LEVEL_TOP);
6375
 
      catchPart = (function() {
6376
 
        var _ref2;
6377
 
        if (this.recovery) {
6378
 
          if (_ref2 = this.error.value, __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
6379
 
            throw SyntaxError("catch variable may not be \"" + this.error.value + "\"");
6380
 
          }
6381
 
          if (!o.scope.check(this.error.value)) {
6382
 
            o.scope.add(this.error.value, 'param');
6383
 
          }
6384
 
          return " catch" + errorPart + "{\n" + (this.recovery.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}";
6385
 
        } else if (!(this.ensure || this.recovery)) {
6386
 
          return ' catch (_error) {}';
6387
 
        }
6388
 
      }).call(this);
6389
 
      ensurePart = this.ensure ? " finally {\n" + (this.ensure.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}" : '';
6390
 
      return "" + this.tab + "try {\n" + tryPart + "\n" + this.tab + "}" + (catchPart || '') + ensurePart;
6391
 
    };
6392
 
 
6393
 
    return Try;
6394
 
 
6395
 
  })(Base);
6396
 
 
6397
 
  exports.Throw = Throw = (function(_super) {
6398
 
 
6399
 
    __extends(Throw, _super);
6400
 
 
6401
 
    function Throw(expression) {
6402
 
      this.expression = expression;
6403
 
    }
6404
 
 
6405
 
    Throw.prototype.children = ['expression'];
6406
 
 
6407
 
    Throw.prototype.isStatement = YES;
6408
 
 
6409
 
    Throw.prototype.jumps = NO;
6410
 
 
6411
 
    Throw.prototype.makeReturn = THIS;
6412
 
 
6413
 
    Throw.prototype.compileNode = function(o) {
6414
 
      return this.tab + ("throw " + (this.expression.compile(o)) + ";");
6415
 
    };
6416
 
 
6417
 
    return Throw;
6418
 
 
6419
 
  })(Base);
6420
 
 
6421
 
  exports.Existence = Existence = (function(_super) {
6422
 
 
6423
 
    __extends(Existence, _super);
6424
 
 
6425
 
    function Existence(expression) {
6426
 
      this.expression = expression;
6427
 
    }
6428
 
 
6429
 
    Existence.prototype.children = ['expression'];
6430
 
 
6431
 
    Existence.prototype.invert = NEGATE;
6432
 
 
6433
 
    Existence.prototype.compileNode = function(o) {
6434
 
      var cmp, cnj, code, _ref2;
6435
 
      this.expression.front = this.front;
6436
 
      code = this.expression.compile(o, LEVEL_OP);
6437
 
      if (IDENTIFIER.test(code) && !o.scope.check(code)) {
6438
 
        _ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1];
6439
 
        code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null";
6440
 
      } else {
6441
 
        code = "" + code + " " + (this.negated ? '==' : '!=') + " null";
6442
 
      }
6443
 
      if (o.level <= LEVEL_COND) {
6444
 
        return code;
6445
 
      } else {
6446
 
        return "(" + code + ")";
6447
 
      }
6448
 
    };
6449
 
 
6450
 
    return Existence;
6451
 
 
6452
 
  })(Base);
6453
 
 
6454
 
  exports.Parens = Parens = (function(_super) {
6455
 
 
6456
 
    __extends(Parens, _super);
6457
 
 
6458
 
    function Parens(body) {
6459
 
      this.body = body;
6460
 
    }
6461
 
 
6462
 
    Parens.prototype.children = ['body'];
6463
 
 
6464
 
    Parens.prototype.unwrap = function() {
6465
 
      return this.body;
6466
 
    };
6467
 
 
6468
 
    Parens.prototype.isComplex = function() {
6469
 
      return this.body.isComplex();
6470
 
    };
6471
 
 
6472
 
    Parens.prototype.compileNode = function(o) {
6473
 
      var bare, code, expr;
6474
 
      expr = this.body.unwrap();
6475
 
      if (expr instanceof Value && expr.isAtomic()) {
6476
 
        expr.front = this.front;
6477
 
        return expr.compile(o);
6478
 
      }
6479
 
      code = expr.compile(o, LEVEL_PAREN);
6480
 
      bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns));
6481
 
      if (bare) {
6482
 
        return code;
6483
 
      } else {
6484
 
        return "(" + code + ")";
6485
 
      }
6486
 
    };
6487
 
 
6488
 
    return Parens;
6489
 
 
6490
 
  })(Base);
6491
 
 
6492
 
  exports.For = For = (function(_super) {
6493
 
 
6494
 
    __extends(For, _super);
6495
 
 
6496
 
    function For(body, source) {
6497
 
      var _ref2;
6498
 
      this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
6499
 
      this.body = Block.wrap([body]);
6500
 
      this.own = !!source.own;
6501
 
      this.object = !!source.object;
6502
 
      if (this.object) {
6503
 
        _ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1];
6504
 
      }
6505
 
      if (this.index instanceof Value) {
6506
 
        throw SyntaxError('index cannot be a pattern matching expression');
6507
 
      }
6508
 
      this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length;
6509
 
      this.pattern = this.name instanceof Value;
6510
 
      if (this.range && this.index) {
6511
 
        throw SyntaxError('indexes do not apply to range loops');
6512
 
      }
6513
 
      if (this.range && this.pattern) {
6514
 
        throw SyntaxError('cannot pattern match over range loops');
6515
 
      }
6516
 
      this.returns = false;
6517
 
    }
6518
 
 
6519
 
    For.prototype.children = ['body', 'source', 'guard', 'step'];
6520
 
 
6521
 
    For.prototype.compileNode = function(o) {
6522
 
      var body, defPart, forPart, forVarPart, guardPart, idt1, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, stepPart, stepvar, svar, varPart, _ref2;
6523
 
      body = Block.wrap([this.body]);
6524
 
      lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0;
6525
 
      if (lastJumps && lastJumps instanceof Return) {
6526
 
        this.returns = false;
6527
 
      }
6528
 
      source = this.range ? this.source.base : this.source;
6529
 
      scope = o.scope;
6530
 
      name = this.name && this.name.compile(o, LEVEL_LIST);
6531
 
      index = this.index && this.index.compile(o, LEVEL_LIST);
6532
 
      if (name && !this.pattern) {
6533
 
        scope.find(name);
6534
 
      }
6535
 
      if (index) {
6536
 
        scope.find(index);
6537
 
      }
6538
 
      if (this.returns) {
6539
 
        rvar = scope.freeVariable('results');
6540
 
      }
6541
 
      ivar = (this.object && index) || scope.freeVariable('i');
6542
 
      kvar = (this.range && name) || index || ivar;
6543
 
      kvarAssign = kvar !== ivar ? "" + kvar + " = " : "";
6544
 
      if (this.step && !this.range) {
6545
 
        stepvar = scope.freeVariable("step");
6546
 
      }
6547
 
      if (this.pattern) {
6548
 
        name = ivar;
6549
 
      }
6550
 
      varPart = '';
6551
 
      guardPart = '';
6552
 
      defPart = '';
6553
 
      idt1 = this.tab + TAB;
6554
 
      if (this.range) {
6555
 
        forPart = source.compile(merge(o, {
6556
 
          index: ivar,
6557
 
          name: name,
6558
 
          step: this.step
6559
 
        }));
6560
 
      } else {
6561
 
        svar = this.source.compile(o, LEVEL_LIST);
6562
 
        if ((name || this.own) && !IDENTIFIER.test(svar)) {
6563
 
          defPart = "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n";
6564
 
          svar = ref;
6565
 
        }
6566
 
        if (name && !this.pattern) {
6567
 
          namePart = "" + name + " = " + svar + "[" + kvar + "]";
6568
 
        }
6569
 
        if (!this.object) {
6570
 
          lvar = scope.freeVariable('len');
6571
 
          forVarPart = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length";
6572
 
          if (this.step) {
6573
 
            forVarPart += ", " + stepvar + " = " + (this.step.compile(o, LEVEL_OP));
6574
 
          }
6575
 
          stepPart = "" + kvarAssign + (this.step ? "" + ivar + " += " + stepvar : (kvar !== ivar ? "++" + ivar : "" + ivar + "++"));
6576
 
          forPart = "" + forVarPart + "; " + ivar + " < " + lvar + "; " + stepPart;
6577
 
        }
6578
 
      }
6579
 
      if (this.returns) {
6580
 
        resultPart = "" + this.tab + rvar + " = [];\n";
6581
 
        returnResult = "\n" + this.tab + "return " + rvar + ";";
6582
 
        body.makeReturn(rvar);
6583
 
      }
6584
 
      if (this.guard) {
6585
 
        if (body.expressions.length > 1) {
6586
 
          body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
6587
 
        } else {
6588
 
          if (this.guard) {
6589
 
            body = Block.wrap([new If(this.guard, body)]);
6590
 
          }
6591
 
        }
6592
 
      }
6593
 
      if (this.pattern) {
6594
 
        body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]")));
6595
 
      }
6596
 
      defPart += this.pluckDirectCall(o, body);
6597
 
      if (namePart) {
6598
 
        varPart = "\n" + idt1 + namePart + ";";
6599
 
      }
6600
 
      if (this.object) {
6601
 
        forPart = "" + kvar + " in " + svar;
6602
 
        if (this.own) {
6603
 
          guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) continue;";
6604
 
        }
6605
 
      }
6606
 
      body = body.compile(merge(o, {
6607
 
        indent: idt1
6608
 
      }), LEVEL_TOP);
6609
 
      if (body) {
6610
 
        body = '\n' + body + '\n';
6611
 
      }
6612
 
      return "" + defPart + (resultPart || '') + this.tab + "for (" + forPart + ") {" + guardPart + varPart + body + this.tab + "}" + (returnResult || '');
6613
 
    };
6614
 
 
6615
 
    For.prototype.pluckDirectCall = function(o, body) {
6616
 
      var base, defs, expr, fn, idx, ref, val, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
6617
 
      defs = '';
6618
 
      _ref2 = body.expressions;
6619
 
      for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) {
6620
 
        expr = _ref2[idx];
6621
 
        expr = expr.unwrapAll();
6622
 
        if (!(expr instanceof Call)) {
6623
 
          continue;
6624
 
        }
6625
 
        val = expr.variable.unwrapAll();
6626
 
        if (!((val instanceof Code) || (val instanceof Value && ((_ref3 = val.base) != null ? _ref3.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref4 = (_ref5 = val.properties[0].name) != null ? _ref5.value : void 0) === 'call' || _ref4 === 'apply')))) {
6627
 
          continue;
6628
 
        }
6629
 
        fn = ((_ref6 = val.base) != null ? _ref6.unwrapAll() : void 0) || val;
6630
 
        ref = new Literal(o.scope.freeVariable('fn'));
6631
 
        base = new Value(ref);
6632
 
        if (val.base) {
6633
 
          _ref7 = [base, val], val.base = _ref7[0], base = _ref7[1];
6634
 
        }
6635
 
        body.expressions[idx] = new Call(base, expr.args);
6636
 
        defs += this.tab + new Assign(ref, fn).compile(o, LEVEL_TOP) + ';\n';
6637
 
      }
6638
 
      return defs;
6639
 
    };
6640
 
 
6641
 
    return For;
6642
 
 
6643
 
  })(While);
6644
 
 
6645
 
  exports.Switch = Switch = (function(_super) {
6646
 
 
6647
 
    __extends(Switch, _super);
6648
 
 
6649
 
    function Switch(subject, cases, otherwise) {
6650
 
      this.subject = subject;
6651
 
      this.cases = cases;
6652
 
      this.otherwise = otherwise;
6653
 
    }
6654
 
 
6655
 
    Switch.prototype.children = ['subject', 'cases', 'otherwise'];
6656
 
 
6657
 
    Switch.prototype.isStatement = YES;
6658
 
 
6659
 
    Switch.prototype.jumps = function(o) {
6660
 
      var block, conds, _i, _len, _ref2, _ref3, _ref4;
6661
 
      if (o == null) {
6662
 
        o = {
6663
 
          block: true
6664
 
        };
6665
 
      }
6666
 
      _ref2 = this.cases;
6667
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
6668
 
        _ref3 = _ref2[_i], conds = _ref3[0], block = _ref3[1];
6669
 
        if (block.jumps(o)) {
6670
 
          return block;
6671
 
        }
6672
 
      }
6673
 
      return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0;
6674
 
    };
6675
 
 
6676
 
    Switch.prototype.makeReturn = function(res) {
6677
 
      var pair, _i, _len, _ref2, _ref3;
6678
 
      _ref2 = this.cases;
6679
 
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
6680
 
        pair = _ref2[_i];
6681
 
        pair[1].makeReturn(res);
6682
 
      }
6683
 
      if (res) {
6684
 
        this.otherwise || (this.otherwise = new Block([new Literal('void 0')]));
6685
 
      }
6686
 
      if ((_ref3 = this.otherwise) != null) {
6687
 
        _ref3.makeReturn(res);
6688
 
      }
6689
 
      return this;
6690
 
    };
6691
 
 
6692
 
    Switch.prototype.compileNode = function(o) {
6693
 
      var block, body, code, cond, conditions, expr, i, idt1, idt2, _i, _j, _len, _len1, _ref2, _ref3, _ref4, _ref5;
6694
 
      idt1 = o.indent + TAB;
6695
 
      idt2 = o.indent = idt1 + TAB;
6696
 
      code = this.tab + ("switch (" + (((_ref2 = this.subject) != null ? _ref2.compile(o, LEVEL_PAREN) : void 0) || false) + ") {\n");
6697
 
      _ref3 = this.cases;
6698
 
      for (i = _i = 0, _len = _ref3.length; _i < _len; i = ++_i) {
6699
 
        _ref4 = _ref3[i], conditions = _ref4[0], block = _ref4[1];
6700
 
        _ref5 = flatten([conditions]);
6701
 
        for (_j = 0, _len1 = _ref5.length; _j < _len1; _j++) {
6702
 
          cond = _ref5[_j];
6703
 
          if (!this.subject) {
6704
 
            cond = cond.invert();
6705
 
          }
6706
 
          code += idt1 + ("case " + (cond.compile(o, LEVEL_PAREN)) + ":\n");
6707
 
        }
6708
 
        if (body = block.compile(o, LEVEL_TOP)) {
6709
 
          code += body + '\n';
6710
 
        }
6711
 
        if (i === this.cases.length - 1 && !this.otherwise) {
6712
 
          break;
6713
 
        }
6714
 
        expr = this.lastNonComment(block.expressions);
6715
 
        if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) {
6716
 
          continue;
6717
 
        }
6718
 
        code += idt2 + 'break;\n';
6719
 
      }
6720
 
      if (this.otherwise && this.otherwise.expressions.length) {
6721
 
        code += idt1 + ("default:\n" + (this.otherwise.compile(o, LEVEL_TOP)) + "\n");
6722
 
      }
6723
 
      return code + this.tab + '}';
6724
 
    };
6725
 
 
6726
 
    return Switch;
6727
 
 
6728
 
  })(Base);
6729
 
 
6730
 
  exports.If = If = (function(_super) {
6731
 
 
6732
 
    __extends(If, _super);
6733
 
 
6734
 
    function If(condition, body, options) {
6735
 
      this.body = body;
6736
 
      if (options == null) {
6737
 
        options = {};
6738
 
      }
6739
 
      this.condition = options.type === 'unless' ? condition.invert() : condition;
6740
 
      this.elseBody = null;
6741
 
      this.isChain = false;
6742
 
      this.soak = options.soak;
6743
 
    }
6744
 
 
6745
 
    If.prototype.children = ['condition', 'body', 'elseBody'];
6746
 
 
6747
 
    If.prototype.bodyNode = function() {
6748
 
      var _ref2;
6749
 
      return (_ref2 = this.body) != null ? _ref2.unwrap() : void 0;
6750
 
    };
6751
 
 
6752
 
    If.prototype.elseBodyNode = function() {
6753
 
      var _ref2;
6754
 
      return (_ref2 = this.elseBody) != null ? _ref2.unwrap() : void 0;
6755
 
    };
6756
 
 
6757
 
    If.prototype.addElse = function(elseBody) {
6758
 
      if (this.isChain) {
6759
 
        this.elseBodyNode().addElse(elseBody);
6760
 
      } else {
6761
 
        this.isChain = elseBody instanceof If;
6762
 
        this.elseBody = this.ensureBlock(elseBody);
6763
 
      }
6764
 
      return this;
6765
 
    };
6766
 
 
6767
 
    If.prototype.isStatement = function(o) {
6768
 
      var _ref2;
6769
 
      return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref2 = this.elseBodyNode()) != null ? _ref2.isStatement(o) : void 0);
6770
 
    };
6771
 
 
6772
 
    If.prototype.jumps = function(o) {
6773
 
      var _ref2;
6774
 
      return this.body.jumps(o) || ((_ref2 = this.elseBody) != null ? _ref2.jumps(o) : void 0);
6775
 
    };
6776
 
 
6777
 
    If.prototype.compileNode = function(o) {
6778
 
      if (this.isStatement(o)) {
6779
 
        return this.compileStatement(o);
6780
 
      } else {
6781
 
        return this.compileExpression(o);
6782
 
      }
6783
 
    };
6784
 
 
6785
 
    If.prototype.makeReturn = function(res) {
6786
 
      if (res) {
6787
 
        this.elseBody || (this.elseBody = new Block([new Literal('void 0')]));
6788
 
      }
6789
 
      this.body && (this.body = new Block([this.body.makeReturn(res)]));
6790
 
      this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)]));
6791
 
      return this;
6792
 
    };
6793
 
 
6794
 
    If.prototype.ensureBlock = function(node) {
6795
 
      if (node instanceof Block) {
6796
 
        return node;
6797
 
      } else {
6798
 
        return new Block([node]);
6799
 
      }
6800
 
    };
6801
 
 
6802
 
    If.prototype.compileStatement = function(o) {
6803
 
      var body, child, cond, exeq, ifPart;
6804
 
      child = del(o, 'chainChild');
6805
 
      exeq = del(o, 'isExistentialEquals');
6806
 
      if (exeq) {
6807
 
        return new If(this.condition.invert(), this.elseBodyNode(), {
6808
 
          type: 'if'
6809
 
        }).compile(o);
6810
 
      }
6811
 
      cond = this.condition.compile(o, LEVEL_PAREN);
6812
 
      o.indent += TAB;
6813
 
      body = this.ensureBlock(this.body);
6814
 
      ifPart = "if (" + cond + ") {\n" + (body.compile(o)) + "\n" + this.tab + "}";
6815
 
      if (!child) {
6816
 
        ifPart = this.tab + ifPart;
6817
 
      }
6818
 
      if (!this.elseBody) {
6819
 
        return ifPart;
6820
 
      }
6821
 
      return ifPart + ' else ' + (this.isChain ? (o.indent = this.tab, o.chainChild = true, this.elseBody.unwrap().compile(o, LEVEL_TOP)) : "{\n" + (this.elseBody.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}");
6822
 
    };
6823
 
 
6824
 
    If.prototype.compileExpression = function(o) {
6825
 
      var alt, body, code, cond;
6826
 
      cond = this.condition.compile(o, LEVEL_COND);
6827
 
      body = this.bodyNode().compile(o, LEVEL_LIST);
6828
 
      alt = this.elseBodyNode() ? this.elseBodyNode().compile(o, LEVEL_LIST) : 'void 0';
6829
 
      code = "" + cond + " ? " + body + " : " + alt;
6830
 
      if (o.level >= LEVEL_COND) {
6831
 
        return "(" + code + ")";
6832
 
      } else {
6833
 
        return code;
6834
 
      }
6835
 
    };
6836
 
 
6837
 
    If.prototype.unfoldSoak = function() {
6838
 
      return this.soak && this;
6839
 
    };
6840
 
 
6841
 
    return If;
6842
 
 
6843
 
  })(Base);
6844
 
 
6845
 
  Closure = {
6846
 
    wrap: function(expressions, statement, noReturn) {
6847
 
      var args, call, func, mentionsArgs, meth;
6848
 
      if (expressions.jumps()) {
6849
 
        return expressions;
6850
 
      }
6851
 
      func = new Code([], Block.wrap([expressions]));
6852
 
      args = [];
6853
 
      if ((mentionsArgs = expressions.contains(this.literalArgs)) || expressions.contains(this.literalThis)) {
6854
 
        meth = new Literal(mentionsArgs ? 'apply' : 'call');
6855
 
        args = [new Literal('this')];
6856
 
        if (mentionsArgs) {
6857
 
          args.push(new Literal('arguments'));
6858
 
        }
6859
 
        func = new Value(func, [new Access(meth)]);
6860
 
      }
6861
 
      func.noReturn = noReturn;
6862
 
      call = new Call(func, args);
6863
 
      if (statement) {
6864
 
        return Block.wrap([call]);
6865
 
      } else {
6866
 
        return call;
6867
 
      }
6868
 
    },
6869
 
    literalArgs: function(node) {
6870
 
      return node instanceof Literal && node.value === 'arguments' && !node.asKey;
6871
 
    },
6872
 
    literalThis: function(node) {
6873
 
      return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper);
6874
 
    }
6875
 
  };
6876
 
 
6877
 
  unfoldSoak = function(o, parent, name) {
6878
 
    var ifn;
6879
 
    if (!(ifn = parent[name].unfoldSoak(o))) {
6880
 
      return;
6881
 
    }
6882
 
    parent[name] = ifn.body;
6883
 
    ifn.body = new Value(parent);
6884
 
    return ifn;
6885
 
  };
6886
 
 
6887
 
  UTILITIES = {
6888
 
    "extends": function() {
6889
 
      return "function(child, parent) { for (var key in parent) { if (" + (utility('hasProp')) + ".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }";
6890
 
    },
6891
 
    bind: function() {
6892
 
      return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }';
6893
 
    },
6894
 
    indexOf: function() {
6895
 
      return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }";
6896
 
    },
6897
 
    hasProp: function() {
6898
 
      return '{}.hasOwnProperty';
6899
 
    },
6900
 
    slice: function() {
6901
 
      return '[].slice';
6902
 
    }
6903
 
  };
6904
 
 
6905
 
  LEVEL_TOP = 1;
6906
 
 
6907
 
  LEVEL_PAREN = 2;
6908
 
 
6909
 
  LEVEL_LIST = 3;
6910
 
 
6911
 
  LEVEL_COND = 4;
6912
 
 
6913
 
  LEVEL_OP = 5;
6914
 
 
6915
 
  LEVEL_ACCESS = 6;
6916
 
 
6917
 
  TAB = '  ';
6918
 
 
6919
 
  IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
6920
 
 
6921
 
  IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$");
6922
 
 
6923
 
  SIMPLENUM = /^[+-]?\d+$/;
6924
 
 
6925
 
  METHOD_DEF = RegExp("^(?:(" + IDENTIFIER_STR + ")\\.prototype(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|(" + IDENTIFIER_STR + ")$");
6926
 
 
6927
 
  IS_STRING = /^['"]/;
6928
 
 
6929
 
  utility = function(name) {
6930
 
    var ref;
6931
 
    ref = "__" + name;
6932
 
    Scope.root.assign(ref, UTILITIES[name]());
6933
 
    return ref;
6934
 
  };
6935
 
 
6936
 
  multident = function(code, tab) {
6937
 
    code = code.replace(/\n/g, '$&' + tab);
6938
 
    return code.replace(/\s+$/, '');
6939
 
  };
6940
 
 
6941
 
 
6942
 
});
6943
 
 
6944
 
define('ace/mode/coffee/scope', ['require', 'exports', 'module' , 'ace/mode/coffee/helpers'], function(require, exports, module) {
6945
 
 
6946
 
  var Scope, extend, last, _ref;
6947
 
 
6948
 
  _ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
6949
 
 
6950
 
  exports.Scope = Scope = (function() {
6951
 
 
6952
 
    Scope.root = null;
6953
 
 
6954
 
    function Scope(parent, expressions, method) {
6955
 
      this.parent = parent;
6956
 
      this.expressions = expressions;
6957
 
      this.method = method;
6958
 
      this.variables = [
6959
 
        {
6960
 
          name: 'arguments',
6961
 
          type: 'arguments'
6962
 
        }
6963
 
      ];
6964
 
      this.positions = {};
6965
 
      if (!this.parent) {
6966
 
        Scope.root = this;
6967
 
      }
6968
 
    }
6969
 
 
6970
 
    Scope.prototype.add = function(name, type, immediate) {
6971
 
      if (this.shared && !immediate) {
6972
 
        return this.parent.add(name, type, immediate);
6973
 
      }
6974
 
      if (Object.prototype.hasOwnProperty.call(this.positions, name)) {
6975
 
        return this.variables[this.positions[name]].type = type;
6976
 
      } else {
6977
 
        return this.positions[name] = this.variables.push({
6978
 
          name: name,
6979
 
          type: type
6980
 
        }) - 1;
6981
 
      }
6982
 
    };
6983
 
 
6984
 
    Scope.prototype.namedMethod = function() {
6985
 
      if (this.method.name || !this.parent) {
6986
 
        return this.method;
6987
 
      }
6988
 
      return this.parent.namedMethod();
6989
 
    };
6990
 
 
6991
 
    Scope.prototype.find = function(name) {
6992
 
      if (this.check(name)) {
6993
 
        return true;
6994
 
      }
6995
 
      this.add(name, 'var');
6996
 
      return false;
6997
 
    };
6998
 
 
6999
 
    Scope.prototype.parameter = function(name) {
7000
 
      if (this.shared && this.parent.check(name, true)) {
7001
 
        return;
7002
 
      }
7003
 
      return this.add(name, 'param');
7004
 
    };
7005
 
 
7006
 
    Scope.prototype.check = function(name) {
7007
 
      var _ref1;
7008
 
      return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
7009
 
    };
7010
 
 
7011
 
    Scope.prototype.temporary = function(name, index) {
7012
 
      if (name.length > 1) {
7013
 
        return '_' + name + (index > 1 ? index - 1 : '');
7014
 
      } else {
7015
 
        return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
7016
 
      }
7017
 
    };
7018
 
 
7019
 
    Scope.prototype.type = function(name) {
7020
 
      var v, _i, _len, _ref1;
7021
 
      _ref1 = this.variables;
7022
 
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
7023
 
        v = _ref1[_i];
7024
 
        if (v.name === name) {
7025
 
          return v.type;
7026
 
        }
7027
 
      }
7028
 
      return null;
7029
 
    };
7030
 
 
7031
 
    Scope.prototype.freeVariable = function(name, reserve) {
7032
 
      var index, temp;
7033
 
      if (reserve == null) {
7034
 
        reserve = true;
7035
 
      }
7036
 
      index = 0;
7037
 
      while (this.check((temp = this.temporary(name, index)))) {
7038
 
        index++;
7039
 
      }
7040
 
      if (reserve) {
7041
 
        this.add(temp, 'var', true);
7042
 
      }
7043
 
      return temp;
7044
 
    };
7045
 
 
7046
 
    Scope.prototype.assign = function(name, value) {
7047
 
      this.add(name, {
7048
 
        value: value,
7049
 
        assigned: true
7050
 
      }, true);
7051
 
      return this.hasAssignments = true;
7052
 
    };
7053
 
 
7054
 
    Scope.prototype.hasDeclarations = function() {
7055
 
      return !!this.declaredVariables().length;
7056
 
    };
7057
 
 
7058
 
    Scope.prototype.declaredVariables = function() {
7059
 
      var realVars, tempVars, v, _i, _len, _ref1;
7060
 
      realVars = [];
7061
 
      tempVars = [];
7062
 
      _ref1 = this.variables;
7063
 
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
7064
 
        v = _ref1[_i];
7065
 
        if (v.type === 'var') {
7066
 
          (v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
7067
 
        }
7068
 
      }
7069
 
      return realVars.sort().concat(tempVars.sort());
7070
 
    };
7071
 
 
7072
 
    Scope.prototype.assignedVariables = function() {
7073
 
      var v, _i, _len, _ref1, _results;
7074
 
      _ref1 = this.variables;
7075
 
      _results = [];
7076
 
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
7077
 
        v = _ref1[_i];
7078
 
        if (v.type.assigned) {
7079
 
          _results.push("" + v.name + " = " + v.type.value);
7080
 
        }
7081
 
      }
7082
 
      return _results;
7083
 
    };
7084
 
 
7085
 
    return Scope;
7086
 
 
7087
 
  })();
7088
 
 
7089
 
 
7090
 
});
 
 
b'\\ No newline at end of file'