From 460b3f6d8e58e326d84437f93cb05e79970baaf2 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 26 Jan 2010 00:40:58 -0500 Subject: [PATCH] first draft of mandatory parentheses around function definition param lists -- all tests pass --- documentation/coffee/arguments.coffee | 2 +- documentation/coffee/blocks.coffee | 4 +- documentation/coffee/expressions.coffee | 2 +- documentation/coffee/functions.coffee | 4 +- documentation/coffee/long_arrow.coffee | 4 +- .../coffee/multiple_return_values.coffee | 2 +- documentation/coffee/overview.coffee | 6 +- .../coffee/range_comprehensions.coffee | 2 +- documentation/coffee/scope.coffee | 2 +- documentation/coffee/splats.coffee | 2 +- documentation/coffee/super.coffee | 12 +- documentation/index.html.erb | 9 +- examples/beautiful_code/binary_search.coffee | 2 +- .../beautiful_code/quicksort_runtime.coffee | 2 +- .../regular_expression_matcher.coffee | 6 +- examples/code.coffee | 34 +- .../computer_science/binary_search.coffee | 2 +- examples/computer_science/bubble_sort.coffee | 2 +- examples/computer_science/linked_list.coffee | 14 +- .../computer_science/luhn_algorithm.coffee | 2 +- examples/computer_science/merge_sort.coffee | 2 +- .../computer_science/selection_sort.coffee | 2 +- examples/documents.coffee | 72 - examples/poignant.coffee | 30 +- examples/potion.coffee | 22 +- examples/syntax_errors.coffee | 20 - examples/underscore.coffee | 200 +- .../Syntaxes/CoffeeScript.tmLanguage | 29 +- index.html | 51 +- lib/coffee_script/grammar.y | 8 +- lib/coffee_script/lexer.rb | 12 +- .../narwhal/coffee-script.coffee | 12 +- lib/coffee_script/narwhal/loader.coffee | 6 +- lib/coffee_script/parse_error.rb | 2 +- lib/coffee_script/parser.rb | 2249 ++++++++--------- lib/coffee_script/rewriter.rb | 15 +- test/fixtures/execution/test_arguments.coffee | 6 +- .../execution/test_array_comprehension.coffee | 2 +- .../fixtures/execution/test_assignment.coffee | 2 +- test/fixtures/execution/test_blocks.coffee | 2 +- .../execution/test_calling_super.coffee | 22 +- .../execution/test_chained_calls.coffee | 3 +- .../fixtures/execution/test_everything.coffee | 4 +- test/fixtures/execution/test_existence.coffee | 2 +- .../execution/test_expressions.coffee | 4 +- test/fixtures/execution/test_functions.coffee | 22 +- .../execution/test_funky_comments.coffee | 4 +- test/fixtures/execution/test_literals.coffee | 4 +- .../fixtures/execution/test_operations.coffee | 2 +- test/fixtures/execution/test_splats.coffee | 4 +- test/fixtures/execution/test_switch.coffee | 2 +- test/fixtures/generation/each.coffee | 2 +- test/fixtures/generation/each.tokens | 2 +- .../statements_as_expressions.coffee | 2 +- test/fixtures/generation/whitespace.coffee | 12 +- test/unit/test_lexer.rb | 5 +- test/unit/test_parser.rb | 2 +- 57 files changed, 1396 insertions(+), 1561 deletions(-) delete mode 100644 examples/documents.coffee delete mode 100644 examples/syntax_errors.coffee diff --git a/documentation/coffee/arguments.coffee b/documentation/coffee/arguments.coffee index afee3741..55c83348 100644 --- a/documentation/coffee/arguments.coffee +++ b/documentation/coffee/arguments.coffee @@ -1,4 +1,4 @@ -backwards: => +backwards: () => alert arguments.reverse() backwards "stairway", "to", "heaven" \ No newline at end of file diff --git a/documentation/coffee/blocks.coffee b/documentation/coffee/blocks.coffee index 6f31ee16..a80196b3 100644 --- a/documentation/coffee/blocks.coffee +++ b/documentation/coffee/blocks.coffee @@ -1,4 +1,4 @@ -$('table.list').each() table => - $('tr.account', table).each() row => +$('table.list').each (table) => + $('tr.account', table).each (row) => row.show() row.highlight() diff --git a/documentation/coffee/expressions.coffee b/documentation/coffee/expressions.coffee index fa0c1e3a..f74f8442 100644 --- a/documentation/coffee/expressions.coffee +++ b/documentation/coffee/expressions.coffee @@ -1,4 +1,4 @@ -grade: student => +grade: (student) => if student.excellent_work "A+" else if student.okay_stuff diff --git a/documentation/coffee/functions.coffee b/documentation/coffee/functions.coffee index ccc9401d..3d00c8f1 100644 --- a/documentation/coffee/functions.coffee +++ b/documentation/coffee/functions.coffee @@ -1,2 +1,2 @@ -square: x => x * x -cube: x => square(x) * x +square: (x) => x * x +cube: (x) => square(x) * x diff --git a/documentation/coffee/long_arrow.coffee b/documentation/coffee/long_arrow.coffee index 3b6e6504..90c33731 100644 --- a/documentation/coffee/long_arrow.coffee +++ b/documentation/coffee/long_arrow.coffee @@ -1,6 +1,6 @@ -Account: customer, cart => +Account: (customer, cart) => this.customer: customer this.cart: cart - $('.shopping_cart').bind('click') event ==> + $('.shopping_cart').bind('click') (event) ==> this.customer.purchase this.cart \ No newline at end of file diff --git a/documentation/coffee/multiple_return_values.coffee b/documentation/coffee/multiple_return_values.coffee index ef83ee0f..116f8b53 100644 --- a/documentation/coffee/multiple_return_values.coffee +++ b/documentation/coffee/multiple_return_values.coffee @@ -1,4 +1,4 @@ -weather_report: location => +weather_report: (location) => # Make an Ajax request to fetch the weather... [location, 72, "Mostly Sunny"] diff --git a/documentation/coffee/overview.coffee b/documentation/coffee/overview.coffee index 1b45bb69..0d8cd4d5 100644 --- a/documentation/coffee/overview.coffee +++ b/documentation/coffee/overview.coffee @@ -6,7 +6,7 @@ opposite_day: true number: -42 if opposite_day # Functions: -square: x => x * x +square: (x) => x * x # Arrays: list: [1, 2, 3, 4, 5] @@ -15,11 +15,11 @@ list: [1, 2, 3, 4, 5] math: { root: Math.sqrt square: square - cube: x => x * square(x) + cube: (x) => x * square x } # Splats: -race: winner, runners... => +race: (winner, runners...) => print winner, runners # Existence: diff --git a/documentation/coffee/range_comprehensions.coffee b/documentation/coffee/range_comprehensions.coffee index 8baa2e87..9b10f155 100644 --- a/documentation/coffee/range_comprehensions.coffee +++ b/documentation/coffee/range_comprehensions.coffee @@ -1,6 +1,6 @@ countdown: num for num in [10..1] -egg_delivery: => +egg_delivery: () => for i in [0...eggs.length] by 12 dozen_eggs: eggs[i...i+12] deliver new egg_carton(dozen) diff --git a/documentation/coffee/scope.coffee b/documentation/coffee/scope.coffee index b074dad2..4ae8401d 100644 --- a/documentation/coffee/scope.coffee +++ b/documentation/coffee/scope.coffee @@ -1,5 +1,5 @@ num: 1 -change_numbers: => +change_numbers: () => new_num: -1 num: 10 new_num: change_numbers() \ No newline at end of file diff --git a/documentation/coffee/splats.coffee b/documentation/coffee/splats.coffee index 93ca192d..ad919a5c 100644 --- a/documentation/coffee/splats.coffee +++ b/documentation/coffee/splats.coffee @@ -1,6 +1,6 @@ gold: silver: the_field: "unknown" -medalists: first, second, rest... => +medalists: (first, second, rest...) => gold: first silver: second the_field: rest diff --git a/documentation/coffee/super.coffee b/documentation/coffee/super.coffee index fa58a032..7cedbf44 100644 --- a/documentation/coffee/super.coffee +++ b/documentation/coffee/super.coffee @@ -1,16 +1,16 @@ -Animal: => -Animal::move: meters => +Animal: () => +Animal::move: (meters) => alert this.name + " moved " + meters + "m." -Snake: name => this.name: name +Snake: (name) => this.name: name Snake extends Animal -Snake::move: => +Snake::move: () => alert "Slithering..." super 5 -Horse: name => this.name: name +Horse: (name) => this.name: name Horse extends Animal -Horse::move: => +Horse::move: () => alert "Galloping..." super 45 diff --git a/documentation/index.html.erb b/documentation/index.html.erb index fa561d35..34f23c02 100644 --- a/documentation/index.html.erb +++ b/documentation/index.html.erb @@ -174,7 +174,7 @@ gem install coffee-script -e, --eval Compile and print a little snippet of CoffeeScript directly from the - command line (or from stdin). For example:
coffee -e "square: x => x * x" + command line (or from stdin). For example:
coffee -e "square: (x) => x * x" @@ -262,7 +262,7 @@ coffee --print app/scripts/*.coffee > concatenation.js <%= code_for('functions', 'cube(5)') %>

If you'd like to create an anonymous function, just wrap it in parentheses: - (x => x * x) + ((x) => x * x)

@@ -522,11 +522,6 @@ coffee --print app/scripts/*.coffee > concatenation.js so you don't have to close the parentheses on the other side.

<%= code_for('blocks') %> -

- If you prefer not to use blocks, you'll need to add a pair of parentheses - to help distinguish the arguments from the definition of the function: - _.map(array, (num => num * 2)) -

Pattern Matching (Destructuring Assignment) diff --git a/examples/beautiful_code/binary_search.coffee b/examples/beautiful_code/binary_search.coffee index 92e67409..2c659825 100644 --- a/examples/beautiful_code/binary_search.coffee +++ b/examples/beautiful_code/binary_search.coffee @@ -2,7 +2,7 @@ # The implementation of binary search that is tested. # Return the index of an element in a sorted list. (or -1, if not present) -index: list, target => +index: (list, target) => [low, high]: [0, list.length] while low < high mid: (low + high) >> 1 diff --git a/examples/beautiful_code/quicksort_runtime.coffee b/examples/beautiful_code/quicksort_runtime.coffee index bbba0504..2d1dc0b6 100644 --- a/examples/beautiful_code/quicksort_runtime.coffee +++ b/examples/beautiful_code/quicksort_runtime.coffee @@ -1,7 +1,7 @@ # Beautiful Code, Chapter 3. # Produces the expected runtime of Quicksort, for every integer from 1 to N. -runtime: N => +runtime: (N) => [sum, t]: [0, 0] for n in [1..N] sum += 2 * t diff --git a/examples/beautiful_code/regular_expression_matcher.coffee b/examples/beautiful_code/regular_expression_matcher.coffee index da6bd696..7f678402 100644 --- a/examples/beautiful_code/regular_expression_matcher.coffee +++ b/examples/beautiful_code/regular_expression_matcher.coffee @@ -3,7 +3,7 @@ # '.', '^', '$', and '*'. # Search for the regexp anywhere in the text. -match: regexp, text => +match: (regexp, text) => return match_here(regexp.slice(1), text) if regexp[0] is '^' while text return true if match_here(regexp, text) @@ -11,7 +11,7 @@ match: regexp, text => false # Search for the regexp at the beginning of the text. -match_here: regexp, text => +match_here: (regexp, text) => [cur, next]: [regexp[0], regexp[1]] if regexp.length is 0 then return true if next is '*' then return match_star(cur, regexp.slice(2), text) @@ -20,7 +20,7 @@ match_here: regexp, text => false # Search for a kleene star match at the beginning of the text. -match_star: c, regexp, text => +match_star: (c, regexp, text) => while true return true if match_here(regexp, text) return false unless text and (text[0] is c or c is '.') diff --git a/examples/code.coffee b/examples/code.coffee index 4cc02b72..df8d54bd 100644 --- a/examples/code.coffee +++ b/examples/code.coffee @@ -1,14 +1,14 @@ # Functions: -square: x => x * x +square: (x) => x * x -sum: x, y => x + y +sum: (x, y) => x + y -odd: x => x % 2 isnt 0 +odd: (x) => x % 2 isnt 0 -even: x => x % 2 is 0 +even: (x) => x % 2 is 0 -run_loop: => - fire_events(e => e.stopPropagation()) +run_loop: () => + fire_events((e) => e.stopPropagation()) listen() wait() @@ -22,14 +22,14 @@ spaced_out_multiline_object: { three: new Idea() inner_obj: { - freedom: => _.freedom() + freedom: () => _.freedom() } } # Arrays: stooges: [{moe: 45}, {curly: 43}, {larry: 46}] -exponents: [(x => x), (x => x * x), (x => x * x * x)] +exponents: [(x) => x, (x) => x * x, (x) => x * x * x] empty: [] @@ -54,7 +54,7 @@ decoration: medal_of_honor if war_hero go_to_sleep() unless coffee # Returning early: -race: => +race: () => run() walk() crawl() @@ -103,7 +103,7 @@ while true # Lexical scoping. v_1: 5 -change_a_and_set_b: => +change_a_and_set_b: () => v_1: 10 v_2: 15 v_2: 20 @@ -128,7 +128,7 @@ activity: switch day else go_to_work() # Semicolons can optionally be used instead of newlines. -wednesday: => eat_breakfast(); go_to_work(); eat_dinner() +wednesday: () => eat_breakfast(); go_to_work(); eat_dinner() # Array slice literals. zero_to_nine: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] @@ -140,19 +140,19 @@ sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad." # Inheritance and calling super. -Animal: => -Animal::move: meters => +Animal: () => +Animal::move: (meters) => alert(this.name + " moved " + meters + "m.") -Snake: name => this.name: name +Snake: (name) => this.name: name Snake extends Animal -Snake::move: => +Snake::move: () => alert('Slithering...') super(5) -Horse: name => this.name: name +Horse: (name) => this.name: name Horse extends Animal -Horse::move: => +Horse::move: () => alert('Galloping...') super(45) diff --git a/examples/computer_science/binary_search.coffee b/examples/computer_science/binary_search.coffee index e5447fa4..8b07f7a5 100644 --- a/examples/computer_science/binary_search.coffee +++ b/examples/computer_science/binary_search.coffee @@ -1,5 +1,5 @@ # Uses a binary search algorithm to locate a value in the specified array. -binary_search: items, value => +binary_search: (items, value) => start: 0 stop: items.length - 1 diff --git a/examples/computer_science/bubble_sort.coffee b/examples/computer_science/bubble_sort.coffee index f5578780..0d9a3aca 100644 --- a/examples/computer_science/bubble_sort.coffee +++ b/examples/computer_science/bubble_sort.coffee @@ -1,5 +1,5 @@ # A bubble sort implementation, sorting the given array in-place. -bubble_sort: list => +bubble_sort: (list) => for i in [0...list.length] for j in [0...list.length - i] [list[j], list[j+1]]: [list[j+1], list[j]] if list[j] > list[j+1] diff --git a/examples/computer_science/linked_list.coffee b/examples/computer_science/linked_list.coffee index f63da641..7154f71d 100644 --- a/examples/computer_science/linked_list.coffee +++ b/examples/computer_science/linked_list.coffee @@ -1,11 +1,11 @@ # "Classic" linked list implementation that doesn't keep track of its size. -LinkedList: => +LinkedList: () => this._head: null # Pointer to the first item in the list. # Appends some data to the end of the list. This method traverses the existing # list and places the value at the end in a new node. -LinkedList::add: data => +LinkedList::add: (data) => # Create a new node object to wrap the data. node: {data: data, next: null} @@ -20,7 +20,7 @@ LinkedList::add: data => # Retrieves the data at the given position in the list. -LinkedList::item: index => +LinkedList::item: (index) => # Check for out-of-bounds values. return null if index < 0 @@ -36,7 +36,7 @@ LinkedList::item: index => # Remove the item from the given location in the list. -LinkedList::remove: index => +LinkedList::remove: (index) => # Check for out-of-bounds values. return null if index < 0 @@ -60,7 +60,7 @@ LinkedList::remove: index => # Calculate the number of items in the list. -LinkedList::size: => +LinkedList::size: () => current: this._head count: 0 @@ -72,7 +72,7 @@ LinkedList::size: => # Convert the list into an array. -LinkedList::toArray: => +LinkedList::toArray: () => result: [] current: this._head @@ -84,7 +84,7 @@ LinkedList::toArray: => # The string representation of the linked list. -LinkedList::toString: => this.toArray().toString() +LinkedList::toString: () => this.toArray().toString() # Tests. diff --git a/examples/computer_science/luhn_algorithm.coffee b/examples/computer_science/luhn_algorithm.coffee index 2398fb26..ce3a78da 100644 --- a/examples/computer_science/luhn_algorithm.coffee +++ b/examples/computer_science/luhn_algorithm.coffee @@ -2,7 +2,7 @@ # numbers, national insurance numbers, etc. # See: http://en.wikipedia.org/wiki/Luhn_algorithm -is_valid_identifier: identifier => +is_valid_identifier: (identifier) => sum: 0 alt: false diff --git a/examples/computer_science/merge_sort.coffee b/examples/computer_science/merge_sort.coffee index ac8d0fe2..4df0a59d 100644 --- a/examples/computer_science/merge_sort.coffee +++ b/examples/computer_science/merge_sort.coffee @@ -1,5 +1,5 @@ # Sorts an array in ascending natural order using merge sort. -merge_sort: list => +merge_sort: (list) => return list if list.length is 1 diff --git a/examples/computer_science/selection_sort.coffee b/examples/computer_science/selection_sort.coffee index e8b3b53e..c134b225 100644 --- a/examples/computer_science/selection_sort.coffee +++ b/examples/computer_science/selection_sort.coffee @@ -1,5 +1,5 @@ # An in-place selection sort. -selection_sort: list => +selection_sort: (list) => len: list.length # For each item in the list. diff --git a/examples/documents.coffee b/examples/documents.coffee deleted file mode 100644 index 31d38d8e..00000000 --- a/examples/documents.coffee +++ /dev/null @@ -1,72 +0,0 @@ -# Document Model -dc.model.Document: dc.Model.extend({ - - constructor: attributes => this.base(attributes) - - # For display, show either the highlighted search results, or the summary, - # if no highlights are available. - # The import process will take care of this in the future, but the inline - # version of the summary has all runs of whitespace squeezed out. - displaySummary: => - text: this.get('highlight') or this.get('summary') or '' - text and text.replace(/\s+/g, ' ') - - # Return a list of the document's metadata. Think about caching this on the - # document by binding to Metadata, instead of on-the-fly. - metadata: => - docId: this.id - _.select(Metadata.models(), (meta => - _.any(meta.get('instances'), instance => - instance.document_id is docId))) - - bookmark: pageNumber => - bookmark: new dc.model.Bookmark({title: this.get('title'), page_number: pageNumber, document_id: this.id}) - Bookmarks.create(bookmark) - - # Inspect. - toString: => 'Document ' + this.id + ' "' + this.get('title') + '"' - -}) - -# Document Set -dc.model.DocumentSet: dc.model.RESTfulSet.extend({ - - resource: 'documents' - - SELECTION_CHANGED: 'documents:selection_changed' - - constructor: options => - this.base(options) - _.bindAll(this, 'downloadSelectedViewers', 'downloadSelectedPDF', 'downloadSelectedFullText') - - selected: => _.select(this.models(), m => m.get('selected')) - - selectedIds: => _.pluck(this.selected(), 'id') - - countSelected: => this.selected().length - - downloadSelectedViewers: => - dc.app.download('/download/' + this.selectedIds().join('/') + '/document_viewer.zip') - - downloadSelectedPDF: => - if this.countSelected() <= 1 then return window.open(this.selected()[0].get('pdf_url')) - dc.app.download('/download/' + this.selectedIds().join('/') + '/document_pdfs.zip') - - downloadSelectedFullText: => - if this.countSelected() <= 1 then return window.open(this.selected()[0].get('full_text_url')) - dc.app.download('/download/' + this.selectedIds().join('/') + '/document_text.zip') - - # We override "_onModelEvent" to fire selection changed events when documents - # change their selected state. - _onModelEvent: e, model => - this.base(e, model) - fire: e is dc.Model.CHANGED and model.hasChanged('selected') - if fire then _.defer(_(this.fire).bind(this, this.SELECTION_CHANGED, this)) - -}) - -# The main set of Documents, used by the search tab. -window.Documents: new dc.model.DocumentSet() - -# The set of documents that is used to look at a particular label. -dc.app.LabeledDocuments: new dc.model.DocumentSet() diff --git a/examples/poignant.coffee b/examples/poignant.coffee index 5ac07def..836a6155 100644 --- a/examples/poignant.coffee +++ b/examples/poignant.coffee @@ -2,7 +2,7 @@ # ['toast', 'cheese', 'wine'].each { |food| print food.capitalize } -['toast', 'wine', 'cheese'].each(food => print(food.capitalize())) +['toast', 'wine', 'cheese'].each (food) => print(food.capitalize()) @@ -14,10 +14,10 @@ # end LotteryTicket: { - get_picks: => this.picks - set_picks: nums => this.picks: nums - get_purchase: => this.purchase - set_purchase: amount => this.purchase: amount + get_picks: () => this.picks + set_picks: (nums) => this.picks: nums + get_purchase: () => this.purchase + set_purchase: (amount) => this.purchase: amount } @@ -40,11 +40,11 @@ LotteryTicket: { # end LotteryDraw: { - play: => + play: () => result: LotteryTicket.new_random() winners: {} - this.tickets.each() buyer, ticket_list => - ticket_list.each() ticket => + this.tickets.each (buyer, ticket_list) => + ticket_list.each (ticket) => score: ticket.score(result) return if score is 0 winners[buyer] ||= [] @@ -65,8 +65,8 @@ LotteryDraw: { # end WishScanner: { - scan_for_a_wish: => - wish: this.read().detect(thought => thought.index('wish: ') is 0) + scan_for_a_wish: () => + wish: this.read().detect((thought) => thought.index('wish: ') is 0) wish.replace('wish: ', '') } @@ -111,7 +111,7 @@ WishScanner: { Creature : { # This method applies a hit taken during a fight. - hit: damage => + hit: (damage) => p_up: Math.rand(this.charisma) if p_up % 9 is 7 this.life += p_up / 4 @@ -120,7 +120,7 @@ Creature : { if this.life <= 0 then puts("[" + this.name + " has died.]") # This method takes one turn in a fight. - fight: enemy, weapon => + fight: (enemy, weapon) => if this.life <= 0 then return puts("[" + this.name + "is too dead to fight!]") # Attack the opponent. @@ -156,12 +156,12 @@ Creature : { # Get evil idea and swap in code words print("Enter your new idea: ") idea: gets() -code_words.each(real, code => idea.replace(real, code)) +code_words.each((real, code) => idea.replace(real, code)) # Save the jibberish to a new file print("File encoded. Please enter a name for this idea: ") idea_name: gets().strip() -File.open("idea-" + idea_name + '.txt', 'w', file => file.write(idea)) +File.open("idea-" + idea_name + '.txt', 'w', (file) => file.write(idea)) @@ -177,7 +177,7 @@ File.open("idea-" + idea_name + '.txt', 'w', file => file.write(idea)) # end # end -wipe_mutterings_from: sentence => +wipe_mutterings_from: (sentence) => throw new Error("cannot wipe mutterings") unless sentence.indexOf while sentence.indexOf('(') >= 0 open: sentence.indexOf('(') - 1 diff --git a/examples/potion.coffee b/examples/potion.coffee index de8f72c5..06e6a142 100644 --- a/examples/potion.coffee +++ b/examples/potion.coffee @@ -8,7 +8,7 @@ print("Odelay!") for i in [1..5] # add = (x, y): x + y. # add(2, 4) string print -add: x, y => x + y +add: (x, y) => x + y print(add(2, 4)) @@ -31,7 +31,7 @@ print({language: 'Potion', pointless: true}['language']) # minus = (x, y): x - y. # minus (y=10, x=6) -minus: x, y => x - y +minus: (x, y) => x - y minus(6, 10) @@ -53,8 +53,8 @@ for key, val of {dog: 'canine', cat: 'feline', fox: 'vulpine'} # Person print = (): # ('My name is ', /name, '.') join print. -Person: => -Person::print: => +Person: () => +Person::print: () => print('My name is ' + this.name + '.') @@ -71,9 +71,9 @@ print(p.name) # # Policeman ('Constable') print -Policeman: rank => this.rank: rank +Policeman: (rank) => this.rank: rank Policeman extends Person -Policeman::print: => +Policeman::print: () => print('My name is ' + this.name + " and I'm a " + this.rank + '.') print(new Policeman('Constable')) @@ -115,13 +115,13 @@ table: { # String length = (): 10. # this foul business... -String::length: => 10 +String::length: () => 10 # block = : # 'potion' print. -block: => +block: () => print('potion') @@ -178,7 +178,7 @@ if (3).gender? # HomePage get = (url): # session = url query ? at ('session'). -HomePage::get: url => +HomePage::get: (url) => session: url.query.session if url.query? @@ -187,7 +187,7 @@ HomePage::get: url => # b /left = BTree () # b /right = BTree () -BTree: => +BTree: () => b: new BTree() b.left: new BTree() b.right: new BTree() @@ -199,7 +199,7 @@ b.right: new BTree() # if (b ? /left): # 'left path found!' print. -BTree: => +BTree: () => b: new BTree() print('left path found!') if b.left? diff --git a/examples/syntax_errors.coffee b/examples/syntax_errors.coffee deleted file mode 100644 index aa72cd71..00000000 --- a/examples/syntax_errors.coffee +++ /dev/null @@ -1,20 +0,0 @@ -# Identifiers run together: -# a b c - -# Trailing comma in array: -# array: [1, 2, 3, 4, 5,] - -# Unterminated object literal: -# obj: { one: 1, two: 2 - -# Numbers run together: -# 101 202 - -# Strings run together: -# str: "broken" "words" - -# Forgot to terminate a function: -# obj: { -# first: a => a[0]. -# last: a => a[a.length-1] -# } \ No newline at end of file diff --git a/examples/underscore.coffee b/examples/underscore.coffee index edc3cb9a..b2dfc129 100644 --- a/examples/underscore.coffee +++ b/examples/underscore.coffee @@ -21,7 +21,7 @@ # If Underscore is called as a function, it returns a wrapped object that # can be used OO-style. This wrapper holds altered versions of all the # underscore functions. Wrapped objects may be chained. - wrapper: obj => + wrapper: (obj) => this._wrapped: obj this @@ -31,7 +31,7 @@ # Create a safe reference to the Underscore object forreference below. - _: root._: obj => new wrapper(obj) + _: root._: (obj) => new wrapper(obj) # Export the Underscore object for CommonJS. @@ -54,7 +54,7 @@ # The cornerstone, an each implementation. # Handles objects implementing forEach, arrays, and raw objects. - _.each: obj, iterator, context => + _.each: (obj, iterator, context) => index: 0 try return obj.forEach(iterator, context) if obj.forEach @@ -68,36 +68,36 @@ # Return the results of applying the iterator to each element. Use JavaScript # 1.6's version of map, if possible. - _.map: obj, iterator, context => + _.map: (obj, iterator, context) => return obj.map(iterator, context) if (obj and _.isFunction(obj.map)) results: [] - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => results.push(iterator.call(context, value, index, list)) results # Reduce builds up a single result from a list of values. Also known as # inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible. - _.reduce: obj, memo, iterator, context => + _.reduce: (obj, memo, iterator, context) => return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce)) - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => memo: iterator.call(context, memo, value, index, list) memo # The right-associative version of reduce, also known as foldr. Uses # JavaScript 1.8's version of reduceRight, if available. - _.reduceRight: obj, memo, iterator, context => + _.reduceRight: (obj, memo, iterator, context) => return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight)) - _.each(_.clone(_.toArray(obj)).reverse()) value, index => + _.each(_.clone(_.toArray(obj)).reverse()) (value, index) => memo: iterator.call(context, memo, value, index, obj) memo # Return the first value which passes a truth test. - _.detect: obj, iterator, context => + _.detect: (obj, iterator, context) => result: null - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => if iterator.call(context, value, index, list) result: value _.breakLoop() @@ -106,47 +106,47 @@ # Return all the elements that pass a truth test. Use JavaScript 1.6's # filter(), if it exists. - _.select: obj, iterator, context => + _.select: (obj, iterator, context) => if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context) results: [] - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => results.push(value) if iterator.call(context, value, index, list) results # Return all the elements for which a truth test fails. - _.reject: obj, iterator, context => + _.reject: (obj, iterator, context) => results: [] - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => results.push(value) if not iterator.call(context, value, index, list) results # Determine whether all of the elements match a truth test. Delegate to # JavaScript 1.6's every(), if it is present. - _.all: obj, iterator, context => + _.all: (obj, iterator, context) => iterator ||= _.identity return obj.every(iterator, context) if obj and _.isFunction(obj.every) result: true - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => _.breakLoop() unless (result: result and iterator.call(context, value, index, list)) result # Determine if at least one element in the object matches a truth test. Use # JavaScript 1.6's some(), if it exists. - _.any: obj, iterator, context => + _.any: (obj, iterator, context) => iterator ||= _.identity return obj.some(iterator, context) if obj and _.isFunction(obj.some) result: false - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => _.breakLoop() if (result: iterator.call(context, value, index, list)) result # Determine if a given value is included in the array or object, # based on '==='. - _.include: obj, target => + _.include: (obj, target) => return _.indexOf(obj, target) isnt -1 if _.isArray(obj) for key, val of obj return true if val is target @@ -154,41 +154,41 @@ # Invoke a method with arguments on every item in a collection. - _.invoke: obj, method => + _.invoke: (obj, method) => args: _.rest(arguments, 2) (if method then val[method] else val).apply(val, args) for val in obj # Convenience version of a common use case of map: fetching a property. - _.pluck: obj, key => - _.map(obj, (val => val[key])) + _.pluck: (obj, key) => + _.map(obj, ((val) => val[key])) # Return the maximum item or (item-based computation). - _.max: obj, iterator, context => + _.max: (obj, iterator, context) => return Math.max.apply(Math, obj) if not iterator and _.isArray(obj) result: {computed: -Infinity} - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => computed: if iterator then iterator.call(context, value, index, list) else value computed >= result.computed and (result: {value: value, computed: computed}) result.value # Return the minimum element (or element-based computation). - _.min: obj, iterator, context => + _.min: (obj, iterator, context) => return Math.min.apply(Math, obj) if not iterator and _.isArray(obj) result: {computed: Infinity} - _.each(obj) value, index, list => + _.each(obj) (value, index, list) => computed: if iterator then iterator.call(context, value, index, list) else value computed < result.computed and (result: {value: value, computed: computed}) result.value # Sort the object's values by a criteria produced by an iterator. - _.sortBy: obj, iterator, context => - _.pluck(((_.map(obj) value, index, list => + _.sortBy: (obj, iterator, context) => + _.pluck(((_.map(obj) (value, index, list) => {value: value, criteria: iterator.call(context, value, index, list)} - ).sort() left, right => + ).sort() (left, right) => a: left.criteria; b: right.criteria if a < b then -1 else if a > b then 1 else 0 ), 'value') @@ -196,7 +196,7 @@ # Use a comparator function to figure out at what index an object should # be inserted so as to maintain order. Uses binary search. - _.sortedIndex: array, obj, iterator => + _.sortedIndex: (array, obj, iterator) => iterator ||= _.identity low: 0; high: array.length while low < high @@ -206,7 +206,7 @@ # Convert anything iterable into a real, live array. - _.toArray: iterable => + _.toArray: (iterable) => return [] if (!iterable) return iterable.toArray() if (iterable.toArray) return iterable if (_.isArray(iterable)) @@ -215,7 +215,7 @@ # Return the number of elements in an object. - _.size: obj => _.toArray(obj).length + _.size: (obj) => _.toArray(obj).length # -------------------------- Array Functions: ------------------------------ @@ -223,7 +223,7 @@ # Get the first element of an array. Passing "n" will return the first N # values in the array. Aliased as "head". The "guard" check allows it to work # with _.map. - _.first: array, n, guard => + _.first: (array, n, guard) => if n and not guard then slice.call(array, 0, n) else array[0] @@ -231,35 +231,35 @@ # Especially useful on the arguments object. Passing an "index" will return # the rest of the values in the array from that index onward. The "guard" # check allows it to work with _.map. - _.rest: array, index, guard => + _.rest: (array, index, guard) => slice.call(array, if _.isUndefined(index) or guard then 1 else index) # Get the last element of an array. - _.last: array => array[array.length - 1] + _.last: (array) => array[array.length - 1] # Trim out all falsy values from an array. - _.compact: array => array[i] for i in [0...array.length] when array[i] + _.compact: (array) => array[i] for i in [0...array.length] when array[i] # Return a completely flattened version of an array. - _.flatten: array => - _.reduce(array, []) memo, value => + _.flatten: (array) => + _.reduce(array, []) (memo, value) => return memo.concat(_.flatten(value)) if _.isArray(value) memo.push(value) memo # Return a version of the array that does not contain the specified value(s). - _.without: array => + _.without: (array) => values: _.rest(arguments) val for val in _.toArray(array) when not _.include(values, val) # Produce a duplicate-free version of the array. If the array has already # been sorted, you have the option of using a faster algorithm. - _.uniq: array, isSorted => + _.uniq: (array, isSorted) => memo: [] for el, i in _.toArray(array) memo.push(el) if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el)) @@ -268,28 +268,27 @@ # Produce an array that contains every item shared between all the # passed-in arrays. - _.intersect: array => + _.intersect: (array) => rest: _.rest(arguments) - _.select(_.uniq(array)) item => - _.all(rest) other => + _.select(_.uniq(array)) (item) => + _.all(rest) (other) => _.indexOf(other, item) >= 0 # Zip together multiple lists into a single array -- elements that share # an index go together. - _.zip: => - args: _.toArray(arguments) - length: _.max(_.pluck(args, 'length')) + _.zip: () => + length: _.max(_.pluck(arguments, 'length')) results: new Array(length) for i in [0...length] - results[i]: _.pluck(args, String(i)) + results[i]: _.pluck(arguments, String(i)) results # If the browser doesn't supply us with indexOf (I'm looking at you, MSIE), # we need this function. Return the position of the first occurence of an # item in an array, or -1 if the item is not included in the array. - _.indexOf: array, item => + _.indexOf: (array, item) => return array.indexOf(item) if array.indexOf i: 0; l: array.length while l - i @@ -299,7 +298,7 @@ # Provide JavaScript 1.6's lastIndexOf, delegating to the native function, # if possible. - _.lastIndexOf: array, item => + _.lastIndexOf: (array, item) => return array.lastIndexOf(item) if array.lastIndexOf i: array.length while i @@ -310,8 +309,8 @@ # Generate an integer Array containing an arithmetic progression. A port of # the native Python range() function. See: # http://docs.python.org/library/functions.html#range - _.range: start, stop, step => - a: _.toArray(arguments) + _.range: (start, stop, step) => + a: arguments solo: a.length <= 1 i: start: if solo then 0 else a[0]; stop: if solo then a[0] else a[1]; @@ -331,45 +330,45 @@ # Create a function bound to a given object (assigning 'this', and arguments, # optionally). Binding with arguments is also known as 'curry'. - _.bind: func, obj => + _.bind: (func, obj) => args: _.rest(arguments, 2) - => func.apply(obj or root, args.concat(_.toArray(arguments))) + () => func.apply(obj or root, args.concat(arguments)) # Bind all of an object's methods to that object. Useful for ensuring that # all callbacks defined on an object belong to it. - _.bindAll: obj => + _.bindAll: (obj) => funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj) - _.each(funcs, (f => obj[f]: _.bind(obj[f], obj))) + _.each(funcs, (f) => obj[f]: _.bind(obj[f], obj)) obj # Delays a function for the given number of milliseconds, and then calls # it with the arguments supplied. - _.delay: func, wait => + _.delay: (func, wait) => args: _.rest(arguments, 2) - setTimeout((=> func.apply(func, args)), wait) + setTimeout((() => func.apply(func, args)), wait) # Defers a function, scheduling it to run after the current call stack has # cleared. - _.defer: func => + _.defer: (func) => _.delay.apply(_, [func, 1].concat(_.rest(arguments))) # Returns the first function passed as an argument to the second, # allowing you to adjust arguments, run code before and after, and # conditionally execute the original function. - _.wrap: func, wrapper => - => wrapper.apply(wrapper, [func].concat(_.toArray(arguments))) + _.wrap: (func, wrapper) => + () => wrapper.apply(wrapper, [func].concat(arguments)) # Returns a function that is the composition of a list of functions, each # consuming the return value of the function that follows. - _.compose: => - funcs: _.toArray(arguments) - => - args: _.toArray(arguments) + _.compose: () => + funcs: arguments + () => + args: arguments for i in [(funcs.length - 1)..0] args: [funcs[i].apply(this, args)] args[0] @@ -378,43 +377,43 @@ # ------------------------- Object Functions: ---------------------------- # Retrieve the names of an object's properties. - _.keys: obj => + _.keys: (obj) => return _.range(0, obj.length) if _.isArray(obj) key for key, val of obj # Retrieve the values of an object's properties. - _.values: obj => + _.values: (obj) => _.map(obj, _.identity) # Return a sorted list of the function names available in Underscore. - _.functions: obj => - _.select(_.keys(obj), key => _.isFunction(obj[key])).sort() + _.functions: (obj) => + _.select(_.keys(obj), (key) => _.isFunction(obj[key])).sort() # Extend a given object with all of the properties in a source object. - _.extend: destination, source => + _.extend: (destination, source) => for key, val of source destination[key]: val destination # Create a (shallow-cloned) duplicate of an object. - _.clone: obj => + _.clone: (obj) => return obj.slice(0) if _.isArray(obj) _.extend({}, obj) # Invokes interceptor with the obj, and then returns obj. # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain. - _.tap: obj, interceptor => + _.tap: (obj, interceptor) => interceptor(obj) obj # Perform a deep comparison to check if two objects are equal. - _.isEqual: a, b => + _.isEqual: (a, b) => # Check object identity. return true if a is b # Different types? @@ -450,81 +449,81 @@ # Is a given array or object empty? - _.isEmpty: obj => _.keys(obj).length is 0 + _.isEmpty: (obj) => _.keys(obj).length is 0 # Is a given value a DOM element? - _.isElement: obj => obj and obj.nodeType is 1 + _.isElement: (obj) => obj and obj.nodeType is 1 # Is a given value an array? - _.isArray: obj => !!(obj and obj.concat and obj.unshift) + _.isArray: (obj) => !!(obj and obj.concat and obj.unshift) # Is a given variable an arguments object? - _.isArguments: obj => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length') + _.isArguments: (obj) => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length') # Is the given value a function? - _.isFunction: obj => !!(obj and obj.constructor and obj.call and obj.apply) + _.isFunction: (obj) => !!(obj and obj.constructor and obj.call and obj.apply) # Is the given value a string? - _.isString: obj => !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) + _.isString: (obj) => !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) # Is a given value a number? - _.isNumber: obj => toString.call(obj) is '[object Number]' + _.isNumber: (obj) => toString.call(obj) is '[object Number]' # Is a given value a Date? - _.isDate: obj => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) + _.isDate: (obj) => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) # Is the given value a regular expression? - _.isRegExp: obj => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) + _.isRegExp: (obj) => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) # Is the given value NaN -- this one is interesting. NaN != NaN, and # isNaN(undefined) == true, so we make sure it's a number first. - _.isNaN: obj => _.isNumber(obj) and window.isNaN(obj) + _.isNaN: (obj) => _.isNumber(obj) and window.isNaN(obj) # Is a given value equal to null? - _.isNull: obj => obj is null + _.isNull: (obj) => obj is null # Is a given variable undefined? - _.isUndefined: obj => typeof obj is 'undefined' + _.isUndefined: (obj) => typeof obj is 'undefined' # -------------------------- Utility Functions: -------------------------- # Run Underscore.js in noConflict mode, returning the '_' variable to its # previous owner. Returns a reference to the Underscore object. - _.noConflict: => + _.noConflict: () => root._: previousUnderscore this # Keep the identity function around for default iterators. - _.identity: value => value + _.identity: (value) => value # Break out of the middle of an iteration. - _.breakLoop: => throw breaker + _.breakLoop: () => throw breaker # Generate a unique integer id (unique within the entire client session). # Useful for temporary DOM ids. idCounter: 0 - _.uniqueId: prefix => + _.uniqueId: (prefix) => (prefix or '') + idCounter++ # JavaScript templating a-la ERB, pilfered from John Resig's # "Secrets of the JavaScript Ninja", page 83. - _.template: str, data => + _.template: (str, data) => `var fn = new Function('obj', 'var p=[],print=function(){p.push.apply(p,arguments);};' + 'with(obj){p.push(\'' + @@ -556,39 +555,38 @@ # /*------------------------ Setup the OOP Wrapper: --------------------------*/ # Helper function to continue chaining intermediate results. - result: obj, chain => + result: (obj, chain) => if chain then _(obj).chain() else obj # Add all of the Underscore functions to the wrapper object. - _.each(_.functions(_)) name => + _.each(_.functions(_)) (name) => method: _[name] - wrapper.prototype[name]: => - args: _.toArray(arguments) - unshift.call(args, this._wrapped) + wrapper.prototype[name]: () => + unshift.call(arguments, this._wrapped) result(method.apply(_, args), this._chain) # Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) name => + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) (name) => method: Array.prototype[name] - wrapper.prototype[name]: => + wrapper.prototype[name]: () => method.apply(this._wrapped, arguments) result(this._wrapped, this._chain) # Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice']) name => + _.each(['concat', 'join', 'slice']) (name) => method: Array.prototype[name] - wrapper.prototype[name]: => + wrapper.prototype[name]: () => result(method.apply(this._wrapped, arguments), this._chain) # Start chaining a wrapped Underscore object. - wrapper::chain: => + wrapper::chain: () => this._chain: true this # Extracts the result from a wrapped and chained object. - wrapper::value: => this._wrapped + wrapper::value: () => this._wrapped diff --git a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage index f394402b..850870fe 100644 --- a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage +++ b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage @@ -19,17 +19,12 @@ captures - 1 + 1 name - entity.name.function.coffee + storage.type.function.coffee 2 - - name - keyword.operator.coffee - - 3 name variable.parameter.function.coffee @@ -39,23 +34,7 @@ name storage.type.function.coffee - - comment - match stuff like: funcName: => … - match - ([a-zA-Z0-9_?.$:*]*?)\s*(=\b|:\b)\s*([\w,\s]*?)\s*(=+>) - name - meta.function.coffee - - - captures - - 1 - - name - variable.parameter.function.coffee - - 3 + 5 name storage.type.function.coffee @@ -64,7 +43,7 @@ comment match stuff like: a => … match - ([a-zA-Z0-9_?.$]*(,\s*[a-zA-Z0-9_?.$]+)*)\s*(=+>) + (\()([a-zA-Z0-9_?.$]*(,\s*[a-zA-Z0-9_?.$]+)*)(\))\s*(=+>) name meta.inline.function.coffee diff --git a/index.html b/index.html index b97f4a35..5c8c1eff 100644 --- a/index.html +++ b/index.html @@ -85,7 +85,7 @@ number: -42 if opposite_day # Functions: -square: x => x * x +square: (x) => x * x # Arrays: list: [1, 2, 3, 4, 5] @@ -94,11 +94,11 @@ math: { root: Math.sqrt square: square - cube: x => x * square(x) + cube: (x) => x * square x } # Splats: -race: winner, runners... => +race: (winner, runners...) => print winner, runners # Existence: @@ -271,7 +271,7 @@ gem install coffee-script -e, --eval Compile and print a little snippet of CoffeeScript directly from the - command line (or from stdin). For example:
coffee -e "square: x => x * x" + command line (or from stdin). For example:
coffee -e "square: (x) => x * x" @@ -356,8 +356,8 @@ coffee --print app/scripts/*.coffee > concatenation.js function body. The empty function looks like this: =>. All functions in CoffeeScript are named by default, for easier debugging.

-
square: x => x * x
-cube:   x => square(x) * x
+    
square: (x) => x * x
+cube:   (x) => square(x) * x
 
var cube, square;
 square = function square(x) {
   return x * x;
@@ -375,7 +375,7 @@ cube = function cube(x) {
 ;alert(cube(5));'>run: cube(5)

If you'd like to create an anonymous function, just wrap it in parentheses: - (x => x * x) + ((x) => x * x)

@@ -444,7 +444,7 @@ matrix = [1, 0, 1, 0, 0, 1, 1, 1, 0]; var yourself.

num: 1
-change_numbers: =>
+change_numbers: () =>
   new_num: -1
   num: 10
 new_num: change_numbers()
@@ -615,7 +615,7 @@ car.speed < speed_limit ? accelerate() : 
     
gold: silver: the_field: "unknown"
 
-medalists: first, second, rest... =>
+medalists: (first, second, rest...) =>
   gold:       first
   silver:     second
   the_field:  rest
@@ -675,7 +675,7 @@ alert("The Field: " + the_field);
       Array methods
       available.
     

-
backwards: =>
+    
backwards: () =>
   alert arguments.reverse()
 
 backwards "stairway", "to", "heaven"
@@ -807,7 +807,7 @@ __d = asteroids;
     

countdown: num for num in [10..1]
 
-egg_delivery: =>
+egg_delivery: () =>
   for i in [0...eggs.length] by 12
     dozen_eggs: eggs[i...i+12]
     deliver new egg_carton(dozen)
@@ -945,7 +945,7 @@ numbers.splice.apply(numbers, [3, 6 - 3 + 1].concat([-3, -4, -5, -6]));
       pushed down into each possible branch of execution, in the function
       below.
     

-
grade: student =>
+    
grade: (student) =>
   if student.excellent_work
     "A+"
   else if student.okay_stuff
@@ -1078,19 +1078,19 @@ globals = ((function() {
       object's prototype, and converts super() into a call against
       the immediate ancestor's method of the same name.
     

-
Animal: =>
-Animal::move: meters =>
+    
Animal: () =>
+Animal::move: (meters) =>
   alert this.name + " moved " + meters + "m."
 
-Snake: name => this.name: name
+Snake: (name) => this.name: name
 Snake extends Animal
-Snake::move: =>
+Snake::move: () =>
   alert "Slithering..."
   super 5
 
-Horse: name => this.name: name
+Horse: (name) => this.name: name
 Horse extends Animal
-Horse::move: =>
+Horse::move: () =>
   alert "Galloping..."
   super 45
 
@@ -1186,8 +1186,8 @@ tom.move();
       final functions easier to pass, CoffeeScript includes block syntax,
       so you don't have to close the parentheses on the other side.
     

-
$('table.list').each() table =>
-  $('tr.account', table).each() row =>
+    
$('table.list').each (table) =>
+  $('tr.account', table).each (row) =>
     row.show()
     row.highlight()
 
$('table.list').each(function(table) {
@@ -1197,11 +1197,6 @@ tom.move();
   });
 });
 

-

- If you prefer not to use blocks, you'll need to add a pair of parentheses - to help distinguish the arguments from the definition of the function: - _.map(array, (num => num * 2)) -

Pattern Matching (Destructuring Assignment) @@ -1234,7 +1229,7 @@ and_switch = __a[1]; But it's also helpful for dealing with functions that return multiple values.

-
weather_report: location =>
+    
weather_report: (location) =>
   # Make an Ajax request to fetch the weather...
   [location, 72, "Mostly Sunny"]
 
@@ -1316,11 +1311,11 @@ city = __c[1];
       to use with bind. Functions created with the long arrow are able to access
       properties of the this where they're defined.
     

-
Account: customer, cart =>
+    
Account: (customer, cart) =>
   this.customer: customer
   this.cart: cart
 
-  $('.shopping_cart').bind('click') event ==>
+  $('.shopping_cart').bind('click') (event) ==>
     this.customer.purchase this.cart
 
var Account;
 Account = function Account(customer, cart) {
diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y
index 617bda01..ce1eaac7 100644
--- a/lib/coffee_script/grammar.y
+++ b/lib/coffee_script/grammar.y
@@ -5,7 +5,7 @@ token IF ELSE UNLESS
 token NUMBER STRING REGEX
 token TRUE FALSE YES NO ON OFF
 token IDENTIFIER PROPERTY_ACCESS PROTOTYPE_ACCESS SOAK_ACCESS
-token CODE PARAM NEW RETURN
+token CODE PARAM_START PARAM PARAM_END NEW RETURN
 token TRY CATCH FINALLY THROW
 token BREAK CONTINUE
 token FOR IN OF BY WHEN WHILE
@@ -200,8 +200,10 @@ rule
 
   # Function definition.
   Code:
-    ParamList FuncGlyph Block         { result = CodeNode.new(val[0], val[2], val[1]) }
-  | FuncGlyph Block                   { result = CodeNode.new([], val[1], val[0]) }
+    PARAM_START ParamList PARAM_END
+      FuncGlyph Block                 { result = CodeNode.new(val[1], val[4], val[3]) }
+  | PARAM_START PARAM_END
+      FuncGlyph Block                 { result = CodeNode.new([], val[3], val[2]) }
   ;
 
   # The symbols to signify functions, and bound functions.
diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb
index 6dcf7a1c..bf4ff7f9 100644
--- a/lib/coffee_script/lexer.rb
+++ b/lib/coffee_script/lexer.rb
@@ -242,19 +242,15 @@ module CoffeeScript
     # make use of splats.
     def tag_parameters
       i = 0
-      tagged = false
       loop do
         i -= 1
         tok = @tokens[i]
         return if !tok
-        if ['.', ','].include?(tok[0])
-          tagged = false
-          next
+        case tok[0]
+        when :IDENTIFIER  then tok[0] = :PARAM
+        when ')'          then tok[0] = :PARAM_END
+        when '('          then return tok[0] = :PARAM_START
         end
-        return if tagged
-        return if tok[0] != :IDENTIFIER
-        tok[0] = :PARAM
-        tagged = true
       end
     end
 
diff --git a/lib/coffee_script/narwhal/coffee-script.coffee b/lib/coffee_script/narwhal/coffee-script.coffee
index d3bc2b33..ce0ba011 100644
--- a/lib/coffee_script/narwhal/coffee-script.coffee
+++ b/lib/coffee_script/narwhal/coffee-script.coffee
@@ -12,14 +12,14 @@ Readline: require('readline')
 coffeePath: File.path(module.path).dirname().dirname().dirname().dirname().dirname().join('bin', 'coffee')
 
 # Our general-purpose error handler.
-checkForErrors: coffeeProcess =>
+checkForErrors: (coffeeProcess) =>
   return true if coffeeProcess.wait() is 0
   system.stderr.print(coffeeProcess.stderr.read())
   throw new Error("CoffeeScript compile error")
 
 # Run a simple REPL, round-tripping to the CoffeeScript compiler for every
 # command.
-exports.run: args =>
+exports.run: (args) =>
   if args.length
     for path, i in args
       exports.evalCS(File.read(path))
@@ -35,24 +35,24 @@ exports.run: args =>
       print(e)
 
 # Compile a given CoffeeScript file into JavaScript.
-exports.compileFile: path =>
+exports.compileFile: (path) =>
   coffee: OS.popen([coffeePath, "--print", "--no-wrap", path])
   checkForErrors(coffee)
   coffee.stdout.read()
 
 # Compile a string of CoffeeScript into JavaScript.
-exports.compile: source, flags =>
+exports.compile: (source, flags) =>
   coffee: OS.popen([coffeePath, "--eval", "--no-wrap"].concat(flags or []))
   coffee.stdin.write(source).flush().close()
   checkForErrors(coffee)
   coffee.stdout.read()
 
 # Evaluating a string of CoffeeScript first compiles it externally.
-exports.evalCS: source, flags =>
+exports.evalCS: (source, flags) =>
   eval(exports.compile(source, flags))
 
 # Make a factory for the CoffeeScript environment.
-exports.makeNarwhalFactory: path =>
+exports.makeNarwhalFactory: (path) =>
   code: exports.compileFile(path)
   factoryText: "function(require,exports,module,system,print){" + code + "/**/\n}"
   if system.engine is "rhino"
diff --git a/lib/coffee_script/narwhal/loader.coffee b/lib/coffee_script/narwhal/loader.coffee
index ea6e2a0e..5012286f 100644
--- a/lib/coffee_script/narwhal/loader.coffee
+++ b/lib/coffee_script/narwhal/loader.coffee
@@ -6,12 +6,12 @@ factories: {}
 loader: {
 
   # Reload the coffee-script environment from source.
-  reload: topId, path =>
+  reload: (topId, path) =>
     coffeescript ||= require('coffee-script')
-    factories[topId]: => coffeescript.makeNarwhalFactory(path)
+    factories[topId]: () => coffeescript.makeNarwhalFactory(path)
 
   # Ensure that the coffee-script environment is loaded.
-  load: topId, path =>
+  load: (topId, path) =>
     factories[topId] ||= this.reload(topId, path)
 
 }
diff --git a/lib/coffee_script/parse_error.rb b/lib/coffee_script/parse_error.rb
index 0f23bc92..4903deb5 100644
--- a/lib/coffee_script/parse_error.rb
+++ b/lib/coffee_script/parse_error.rb
@@ -18,7 +18,7 @@ module CoffeeScript
     def message
       line      = @value.respond_to?(:line) ? @value.line : "END"
       line_part = "line #{line}:"
-      id_part   = @token_id != @value.to_s ? "unexpected #{@token_id.to_s.downcase}" : ""
+      id_part   = @token_id != @value.to_s ? " unexpected #{@token_id.to_s.downcase}" : ""
       val_part  = @message || "for #{TOKEN_MAP[@value.to_s] || "'#{@value}'"}"
       "#{line_part} syntax error, #{val_part}#{id_part}"
     end
diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb
index a375ea28..deb2bc33 100644
--- a/lib/coffee_script/parser.rb
+++ b/lib/coffee_script/parser.rb
@@ -10,7 +10,7 @@ module CoffeeScript
 
 class Parser < Racc::Parser
 
-module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 449)
+module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 451)
   # Lex and parse a CoffeeScript.
   def parse(code)
     # Uncomment the following line to enable grammar debugging, in combination
@@ -34,319 +34,301 @@ module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 449)
 ##### State transition tables begin ###
 
 clist = [
-'106,9,114,20,24,27,32,36,40,46,50,55,61,276,270,271,178,1,5,11,14,18',
-'276,22,28,33,122,126,30,30,18,99,63,265,72,115,3,6,30,15,266,18,26,218',
-'30,111,1,44,48,53,59,136,139,102,105,109,113,118,121,125,129,132,135',
-'138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116',
-'119,123,127,130,133,302,51,56,149,151,152,71,173,2,9,10,183,20,24,27',
-'32,36,40,46,50,55,61,294,149,151,152,1,5,11,14,51,56,22,28,33,35,80',
-'30,189,242,57,63,97,72,79,3,6,80,15,241,18,26,184,185,276,79,44,48,53',
-'59,64,68,18,51,56,293,13,141,62,66,111,191,192,18,30,76,136,139,102',
-'105,109,150,62,66,18,155,149,151,152,191,192,149,151,152,239,51,56,149',
-'151,152,71,150,2,9,10,155,20,24,27,32,36,40,46,50,55,61,153,149,151',
-'152,1,5,11,14,30,80,22,28,33,35,80,62,66,79,57,63,249,72,79,3,6,249',
-'15,284,18,26,62,66,62,66,44,48,53,59,64,68,270,271,145,111,13,91,18',
-'157,150,-181,-181,18,155,150,111,62,66,155,1,150,136,139,30,155,62,66',
-'251,273,263,62,66,251,275,51,56,30,145,262,71,150,2,9,10,155,20,24,27',
-'32,36,40,46,50,55,61,187,249,190,30,1,5,11,14,256,111,22,28,33,35,85',
-'-181,-181,179,57,63,255,72,80,3,6,111,15,309,18,26,79,-181,-181,75,44',
-'48,53,59,64,68,97,,,,13,62,66,251,,252,,111,62,66,176,,111,136,139,18',
-',76,136,139,102,105,109,113,118,121,125,129,,51,56,,,,71,,2,9,10,,20',
-'24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,62',
-'66,176,,57,63,177,72,,3,6,111,15,,18,26,,136,139,,44,48,53,59,64,68',
-'111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104',
-'108,112,117,120,124,128,,,111,,,,51,56,-181,-181,,71,,2,9,10,,20,24',
-'27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,,,,,57',
-'63,,72,,3,6,111,15,,18,26,,-181,-181,,44,48,53,59,64,68,111,,,,13,,136',
-'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117',
-'120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135',
-'138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24',
-'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3',
-'6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,,,,51',
-'56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28',
-'33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13',
-',136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112',
-'117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55',
-'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44',
-'48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132',
-'135,138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20',
-'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72',
-',3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,',
-',,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,',
-',22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111',
-',,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108',
-'112,117,120,124,128,,299,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40',
-'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26',
-',,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125',
-'129,132,135,138,111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2',
-'9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,',
-'57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109',
-'113,118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,95,,,44,48,53,59',
-'64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138',
-'111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109,,,,51,56,,',
-',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33',
-'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136',
-'139,102,105,109,113,118,121,125,129,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,282,,,,44,48,53,59',
-'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,62,66,,71,,2,9,10,,20',
-'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72',
-',3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14',
-',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,',
-',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36',
-'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18',
-'26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,',
-',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33',
-'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,',
-',,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55',
-'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44',
-'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10',
-',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170,,,,44',
-'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10',
-',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,',
-',,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1',
-'5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59',
-'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24',
-'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3',
-'6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14',
-',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,',
-',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36',
-'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18',
-'26,30,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56',
-'62,66,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46',
-'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,',
-',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71',
-',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,',
-',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61',
-',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48',
-'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,',
-'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63',
-',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5',
-'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64',
-'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27',
-'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22',
-'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13',
-'20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,,,,,,51,56,,,,71,,2,15',
-'10,,26,,,106,,114,20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,122',
-'126,,,,99,,,,115,,,,15,,,26,,,111,71,,2,,10,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,71,310,2,,10',
-',,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105',
-'109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128',
-'131,134,137,100,103,107,110,116,119,254,127,130,133,,,,,,,,274,20,24',
-'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,,63,,72,,3,6',
-',15,,18,26,,,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122',
-'126,,,,99,,51,56,115,,,71,,2,,10,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,,,,,,,,306,20,24,27,32,36',
-'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,,,,,,,63,,72,,3,6,,15,,18,26',
-',,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99',
-',51,56,115,,,71,,2,,10,30,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,254,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,',
-'122,126,,,,99,,,,115,,,,,,,,248,,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,',
-',,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,',
-',,,,122,126,,,,99,,,,115,,,,,,,,30,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,',
-',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,',
-',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,',
-',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113',
-'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134',
-'137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,,,,,',
-',,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101',
-'104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123',
-'127,130,133,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131',
-'134,137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,',
-',,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138',
-'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119',
-'123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136',
-'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117',
-'120,124,128,131,134,137,100,103,107,110,116,119,123,122,126,,,,,,,,115',
-',,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138',
-'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119',
-'123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121',
-'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100',
-'103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124',
-'128,131,134,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,',
-'111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104',
-'108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123,126',
-',,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129',
-'132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107',
-'110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131',
-'134,137,100,103,107,110,116,119,123,115,,,,,,,,,,111,,,,,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124',
-'128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136,139',
-'102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120',
-'124,128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136',
-'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117',
-'120,124,128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102',
-'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124',
-'128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109',
-'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131',
-'134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118',
-'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137',
-'100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125',
-'129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103',
-'107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125,129,132',
-'135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110',
-'116,119' ]
-        racc_action_table = arr = Array.new(9789, nil)
+'117,37,125,21,24,25,29,34,39,44,47,50,54,130,202,203,285,285,108,-181',
+'-181,169,277,278,27,27,35,40,140,144,81,83,84,118,171,172,37,133,287',
+'130,37,19,1,130,32,-181,-181,130,309,-181,-181,60,65,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+'149,111,114,119,122,126,129,134,137,141,145,148,110,81,83,84,81,83,84',
+'2,168,8,7,18,194,21,24,25,29,34,39,44,47,50,54,200,85,7,72,1,78,175',
+'14,17,22,93,175,30,35,40,42,277,278,92,255,61,63,182,3,37,9,11,130,19',
+'37,27,32,258,113,116,183,49,52,55,58,67,69,171,172,60,65,16,37,152,27',
+'60,65,177,130,178,60,65,177,85,113,116,85,78,262,37,78,81,83,84,81,83',
+'84,102,299,81,83,84,60,65,261,2,184,8,7,18,264,21,24,25,29,34,39,44',
+'47,50,54,60,65,170,175,1,159,37,14,17,22,130,285,30,35,40,42,-181,-181',
+'281,27,61,63,300,3,191,9,11,95,19,192,27,32,74,60,65,189,49,52,55,58',
+'67,69,72,73,202,203,16,60,65,177,85,234,157,85,78,270,93,78,85,60,65',
+'130,78,108,92,37,7,113,116,21,24,25,29,34,39,44,47,50,54,271,2,37,8',
+'1,18,273,14,17,22,198,93,30,35,40,42,27,311,89,92,61,63,274,3,93,9,11',
+'130,19,152,27,32,92,-181,-181,201,49,52,55,58,67,69,130,60,65,,16,130',
+'-181,-181,27,93,89,113,116,121,124,128,130,92,195,196,,27,-181,-181',
+'7,60,65,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,27,30,35',
+'40,42,60,65,189,,61,63,190,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
+'130,,,,16,,113,116,121,124,128,132,136,139,143,147,150,112,115,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34',
+'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
+',19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132',
+'136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,',
+'2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,',
+'49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147',
+'150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17',
+'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
+'130,,,,16,,113,116,121,124,128,132,136,139,143,147,,,,,,,,,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
+'128,132,136,139,143,147,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
+',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
+'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,,',
+',,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35',
+'40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16',
+',113,116,121,124,128,132,136,130,,,,,,113,116,121,124,128,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
+'128,132,136,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18',
+',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58',
+'67,69,130,,,,16,,113,116,121,124,128,132,136,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,105,,,49,52,55,58',
+'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
+',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
+'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,150',
+'112,115,120,123,127,131,135,138,142,146,,291,,,,,,,,,,2,,8,7,18,,21',
+'24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
+',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+'74,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34',
+'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
+',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
+',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,',
+',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,',
+',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,',
+',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,74,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39',
+'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19',
+',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25',
+'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3',
+',9,11,,19,,27,32,37,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+',,,,,,,,60,65,,2,,8,7,18,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17',
+'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69',
+',,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1',
+'18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55',
+'58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54',
+',2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,',
+',49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44',
+'47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,',
+'27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29',
+'34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9',
+'11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21',
+'24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61',
+'63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,',
+',,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40',
+'42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,',
+',,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22',
+',,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,',
+',,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18',
+',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58',
+'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2',
+',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49',
+'52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47',
+'50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27',
+'32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34',
+'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11',
+',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24',
+'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63',
+',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,',
+'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42',
+',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,',
+',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30',
+'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16',
+',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14',
+'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67',
+'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8',
+'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50',
+'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32',
+'117,,125,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,140,144,,,,118,,,,133',
+',,,,,,,,,130,2,,8,,18,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
+'137,179,145,148,110,117,,125,,,,,263,,,,,,,,,,,,,,,,,,,,,140,144,,,',
+'118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147',
+'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126',
+'129,134,137,141,145,148,110,,,,,,,,310,21,24,25,29,34,39,44,47,50,54',
+',,,,1,,,14,17,22,,,30,35,40,42,,,,,,63,,3,,9,11,,19,,27,32,,,,,49,52',
+'55,58,67,69,,,,,16,,,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22',
+',,30,35,40,,,,,,2,63,8,3,18,9,11,,19,,27,32,117,,125,,49,52,55,58,,',
+',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,,,,,,,,304',
+'21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,,,,,,,63,',
+'3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,21,24,25,29,34,39,44',
+'47,50,54,,,,,,,,,,,,,,35,40,,,,,,,,,2,,8,,18,19,130,,32,117,,125,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,130',
+'125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123',
+'127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117',
+'130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,',
+'113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131',
+'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110',
+'117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,',
+',,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
+'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
+'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148',
+'110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,',
+',130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123',
+'127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145',
+'148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,',
+',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141',
+'145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133',
+',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
+'179,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,',
+'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
+'137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118',
+',,,133,,,,,,,,252,,130,,,,,,113,116,121,124,128,132,136,139,143,147',
+'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126',
+'129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144',
+',,,118,,,,133,,,,,,,,37,,130,,,,,,113,116,121,124,128,132,136,139,143',
+'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
+'126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140',
+'144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139',
+'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119',
+'122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,',
+',,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136',
+'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114',
+'119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,',
+',,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132',
+'136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111',
+'114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,',
+',,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128',
+'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149',
+'111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,',
+',,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+'149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,',
+',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,37,,130,,,,,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125',
+',,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,140',
+'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143',
+'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
+'126,129,134,137,141,145,148,110,140,144,,,,,,,,133,,,,,,,,,,130,,,,',
+',113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131',
+'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110',
+'140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139',
+'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119',
+'122,126,129,134,137,141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,140,144,,,,,,,,133,',
+',,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
+'141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136',
+'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114',
+'119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116',
+'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138',
+'142,146,149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,',
+',,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141',
+'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143',
+'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122',
+'126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124',
+'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146',
+'149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,133,,,,',
+',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,133',
+',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115',
+'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137',
+'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112',
+'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134',
+'137,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120',
+'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,130',
+',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127',
+'131,135,138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113',
+'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135',
+'138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121',
+'124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142',
+'146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121,124,128',
+'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149',
+'111,114,119,122,126,129,134,137' ]
+        racc_action_table = arr = Array.new(8867, nil)
         idx = 0
         clist.each do |str|
           str.split(',', -1).each do |i|
@@ -356,348 +338,329 @@ clist = [
         end
 
 clist = [
-'87,145,87,111,111,111,111,111,111,111,111,111,111,296,193,193,79,111',
-'111,111,111,296,248,111,111,111,87,87,193,265,248,87,111,186,111,87',
-'111,111,291,111,190,111,111,123,145,87,275,111,111,111,111,87,87,87',
-'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87',
-'87,87,87,87,87,87,87,87,291,111,111,83,83,83,111,75,111,100,111,87,100',
-'100,100,100,100,100,100,100,100,100,277,70,70,70,100,100,100,100,275',
-'275,100,100,100,100,76,185,94,152,100,100,35,100,76,100,100,176,100',
-'151,100,100,90,90,277,176,100,100,100,100,100,100,277,38,38,277,100',
-'38,301,301,208,217,217,76,263,76,208,208,208,208,208,83,94,94,176,83',
-'84,84,84,98,98,41,41,41,149,100,100,244,244,244,100,70,100,302,100,70',
-'302,302,302,302,302,302,302,302,302,302,41,243,243,243,302,302,302,302',
-'42,175,302,302,302,302,259,176,176,175,302,302,245,302,259,302,302,180',
-'302,254,302,302,29,29,34,34,302,302,302,302,302,302,272,272,143,161',
-'302,21,175,41,84,161,161,259,84,41,197,278,278,41,141,244,197,197,140',
-'244,245,245,245,218,184,180,180,180,245,302,302,294,39,180,302,243,302',
-'3,302,243,3,3,3,3,3,3,3,3,3,3,91,169,97,14,3,3,3,3,174,160,3,3,3,3,6',
-'160,160,80,3,3,173,3,2,3,3,159,3,303,3,3,2,159,159,1,3,3,3,3,3,3,122',
-',,,3,169,169,169,,169,,204,174,174,174,,230,204,204,2,,2,230,230,230',
-'230,230,230,230,230,230,230,,3,3,,,,3,,3,126,3,,126,126,126,126,126',
-'126,126,126,126,126,,,89,,126,126,126,126,89,89,126,126,126,126,78,78',
-'78,,126,126,78,126,,126,126,200,126,,126,126,,200,200,,126,126,126,126',
-'126,126,219,,,,126,,219,219,219,219,219,219,219,219,219,219,219,219',
-'219,219,219,219,219,219,219,219,219,,,165,,,,126,126,165,165,,126,,126',
-'125,126,,125,125,125,125,125,125,125,125,125,125,,,166,,125,125,125',
-'125,166,166,125,125,125,125,,,,,125,125,,125,,125,125,163,125,,125,125',
-',163,163,,125,125,125,125,125,125,215,,,,125,,215,215,215,215,215,215',
-'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,,,,,,,125',
-'125,,,,125,,125,9,125,,9,9,9,9,9,9,9,9,9,9,,,,,9,9,9,9,,,9,9,9,9,,,',
-',9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,223,,,,9,,223,223,223,223,223,223',
-'223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,,,,,,,9',
-'9,,,,9,,9,10,9,,10,10,10,10,10,10,10,10,10,10,,,,,10,10,10,10,,,10,10',
-'10,10,,,,,10,10,,10,,10,10,,10,,10,10,,,,,10,10,10,10,10,10,195,,,,10',
-',195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195',
-'195,195,195,195,,,,,,,10,10,,,,10,,10,124,10,,124,124,124,124,124,124',
-'124,124,124,124,,,,,124,124,124,124,,,124,124,124,124,,,,,124,124,,124',
-',124,124,,124,,124,124,,,,,124,124,124,124,124,124,231,,,,124,,231,231',
-'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231',
-'231,231,,,,,,,124,124,,,,124,,124,13,124,,13,13,13,13,13,13,13,13,13',
-'13,,,,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13,,13,13,,13,,13,13,,,',
-',13,13,13,13,13,13,229,,,,13,,229,229,229,229,229,229,229,229,229,229',
-'229,229,229,229,229,229,229,229,229,229,229,,,,,,,13,13,,,,13,,13,128',
-'13,,128,128,128,128,128,128,128,128,128,128,,,,,128,128,128,128,,,128',
-'128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,,,128,128,128',
-'128,128,128,226,,,,128,,226,226,226,226,226,226,226,226,226,226,226',
-'226,226,226,226,226,226,226,226,226,226,,,,,,,128,128,,,,128,,128,284',
-'128,,284,284,284,284,284,284,284,284,284,284,,,,,284,284,284,284,,,284',
-'284,284,284,,,,,284,284,,284,,284,284,,284,,284,284,,,,,284,284,284',
-'284,284,284,212,,,,284,,212,212,212,212,212,212,212,212,212,212,212',
-'212,212,212,212,212,212,212,212,212,212,,284,,,,,284,284,,,,284,,284',
-'22,284,,22,22,22,22,22,22,22,22,22,22,,,,,22,22,22,22,,,22,22,22,22',
-',,,,22,22,,22,,22,22,,22,,22,22,,,,,22,22,22,22,22,22,196,,,,22,,196',
-'196,196,196,196,196,196,196,196,196,196,196,196,224,,,,,,224,224,224',
-'224,224,224,224,,22,22,,,,22,,22,282,22,,282,282,282,282,282,282,282',
-'282,282,282,,,,,282,282,282,282,,,282,282,282,282,,,,,282,282,,282,',
-'282,282,,282,,282,282,,,,,282,282,282,282,282,282,207,,,,282,,207,207',
-'207,207,207,207,207,207,207,207,207,207,207,220,,,,,,220,220,220,220',
-'220,220,220,,282,282,,,,282,,282,30,282,,30,30,30,30,30,30,30,30,30',
-'30,,,,,30,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,30',
-',,30,30,30,30,30,30,203,,,,30,,203,203,203,203,203,203,203,203,203,203',
-'203,203,203,216,,,,,,216,216,216,216,216,216,216,,30,30,,,,30,,30,281',
-'30,,281,281,281,281,281,281,281,281,281,281,,,,,281,281,281,281,,,281',
-'281,281,281,,,,,281,281,,281,,281,281,,281,,281,281,,,,,281,281,281',
-'281,281,281,199,,,,281,,199,199,199,199,199,199,199,199,199,199,199',
-'199,199,213,,,,,,213,213,213,213,213,,,,281,281,,,,281,,281,276,281',
-',276,276,276,276,276,276,276,276,276,276,,,,,276,276,276,276,,,276,276',
-'276,276,,,,,276,276,,276,,276,276,,276,,276,276,,,,,276,276,276,276',
-'276,276,232,,,,276,,232,232,232,232,232,232,232,232,232,232,227,,,,',
-',227,227,227,227,227,227,227,227,227,227,,276,276,,,,276,,276,271,276',
-',271,271,271,271,271,271,271,271,271,271,,,,,271,271,271,271,,,271,271',
-'271,271,,,,,271,271,,271,,271,271,,271,,271,271,,,,,271,271,271,271',
-'271,271,,,,,271,,,,,,,,,,,,,,,,,,,,,,,,,,,,,271,271,,,,271,,271,270',
-'271,,270,270,270,270,270,270,270,270,270,270,,,,,270,270,270,270,,,270',
-'270,270,270,,,,,270,270,,270,,270,270,,270,,270,270,,,,,270,270,270',
-'270,270,270,,,,,270,,,,,,,,,,,,,,,,,,,,,,,,,,,,,270,270,,,,270,,270',
-'251,270,,251,251,251,251,251,251,251,251,251,251,,,,,251,251,251,251',
-',,251,251,251,251,,,,,251,251,,251,,251,251,,251,,251,251,251,,,,251',
-'251,251,251,251,251,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,251,251,251',
-'251,,251,,251,250,251,,250,250,250,250,250,250,250,250,250,250,,,,,250',
-'250,250,250,,,250,250,250,250,,,,,250,250,,250,,250,250,,250,,250,250',
-',,,,250,250,250,250,250,250,,,,,250,,,,,,,,,,,,,,,,,,,,,,,,,,,,,250',
-'250,,,,250,,250,129,250,,129,129,129,129,129,129,129,129,129,129,,,',
-',129,129,129,129,,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129',
-'129,,,,,129,129,129,129,129,129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
-'129,129,,,,129,,129,44,129,,44,44,44,44,44,44,44,44,44,44,,,,,44,44',
-'44,44,,,44,44,44,44,,,,,44,44,,44,,44,44,,44,,44,44,,,,,44,44,44,44',
-'44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,44,,,,44,,44,48,44,,48,48',
-'48,48,48,48,48,48,48,48,,,,,48,48,48,48,,,48,48,48,48,,,,,48,48,,48',
-',48,48,,48,,48,48,,,,,48,48,48,48,48,48,,,,,48,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,48,48,,,,48,,48,53,48,,53,53,53,53,53,53,53,53,53,53,,,,,53,53',
-'53,53,,,53,53,53,53,,,,,53,53,,53,,53,53,,53,,53,53,,,,,53,53,53,53',
-'53,53,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57',
-'57,57,57,57,57,57,57,57,,,,,57,57,57,57,,,57,57,57,57,,,,,57,57,,57',
-',57,57,,57,,57,57,,,,,57,57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,57,57,,,,57,,57,59,57,,59,59,59,59,59,59,59,59,59,59,,,,,59,59',
-'59,59,,,59,59,59,59,,,,,59,59,,59,,59,59,,59,,59,59,,,,,59,59,59,59',
-'59,59,,,,,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,59,,,,59,,59,63,59,,63,63',
-'63,63,63,63,63,63,63,63,,,,,63,63,63,63,,,63,63,63,63,,,,,63,63,,63',
-',63,63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,63,63,,,,63,,63,64,63,,64,64,64,64,64,64,64,64,64,64,,,,,64,64',
-'64,64,,,64,64,64,64,,,,,64,64,,64,,64,64,,64,,64,64,,,,,64,64,64,64',
-'64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64,64,,,,64,,64,68,64,,68,68',
-'68,68,68,68,68,68,68,68,,,,,68,68,68,68,,,68,68,68,68,,,,,68,68,,68',
-',68,68,,68,,68,68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,68,68,,,,68,,68,192,68,,192,192,192,192,192,192,192,192,192,192',
-',,,,192,192,192,192,,,192,192,192,192,,,,,192,192,,192,,192,192,,192',
-',192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,192,192,,,,192,,192,71,192,,71,71,71,71,71,71,71,71,71,71,,,,,71',
-'71,71,71,,,71,71,71,71,,,,,71,71,,71,,71,71,,71,,71,71,71,,,,71,71,71',
-'71,71,71,,,,,71,,,,,,,,,,,,,,,,,,,,,,,,,,,,,71,71,,,,71,,71,72,71,,72',
-'72,72,72,72,72,72,72,72,72,,,,,72,72,72,72,,,72,72,72,72,,,,,72,72,',
-'72,,72,72,,72,,72,72,,,,,72,72,72,72,72,72,,,,,72,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,,72,72,,,,72,,72,191,72,,191,191,191,191,191,191,191,191,191',
-'191,,,,,191,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191',
-',191,,191,191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,,191,191,,,,191,,191,179,191,,179,179,179,179,179,179,179,179',
-'179,179,,,,,179,179,179,179,,,179,179,179,179,,,,,179,179,,179,,179',
-'179,,179,,179,179,,,,,179,179,179,179,179,179,,,,,179,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,,179,179,,,,179,,179,178,179,,178,178,178,178,178,178,178',
-'178,178,178,,,,,178,178,178,178,,,178,178,178,178,,,,,178,178,,178,',
-'178,178,,178,,178,178,,,,,178,178,178,178,178,178,,,,,178,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,178,178,,,,178,,178,121,178,,121,121,121,121,121,121',
-'121,121,121,121,,,,,121,121,121,121,,,121,121,121,121,,,,,121,121,,121',
-',121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,,,121,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,,121,121,,,,121,,121,170,121,,170,170,170,170,170',
-'170,170,170,170,170,,,,,170,170,170,170,,,170,170,170,170,,,,,170,170',
-',170,,170,170,,170,,170,170,,,,,170,170,170,170,170,170,,,,,170,,,,',
-',,,,,,,,,,,,,,,,,,,,,,,,170,170,,,,170,,170,157,170,,157,157,157,157',
-'157,157,157,157,157,157,,,,,157,157,157,157,,,157,157,157,157,,,,,157',
-'157,,157,,157,157,,157,,157,157,,,,,157,157,157,157,157,157,,,,,157',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,157,157,,,,157,,157,155,157,,155,155,155',
-'155,155,155,155,155,155,155,,,,,155,155,155,155,,,155,155,155,155,,',
-',,155,155,,155,,155,155,,155,,155,155,155,,,,155,155,155,155,155,155',
-',,,,155,,,,,,,,,,,,,,,,,,,,,,,,,,,,,155,155,,,,155,,155,120,155,,120',
-'120,120,120,120,120,120,120,120,120,,,,,120,120,120,120,,,120,120,120',
-'120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120,120,120',
-'120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120,,,,120,,120,85,120,',
-'85,85,85,85,85,85,85,85,85,85,,,,,85,85,85,85,,,85,85,85,85,,,,,85,85',
-',85,,85,85,,85,,85,85,85,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,85,85,,,,85,,85,150,85,,150,150,150,150,150,150,150,150',
-'150,150,,,,,150,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150',
-'150,,150,,150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,,150,150,,,,150,,150,0,150,,0,0,0,0,0,0,0,0,0,0,,,,,0,0',
-'0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,',
-',,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,138,0,,138,138,138,138,138,138,138',
-'138,138,138,,,,,138,138,138,138,,,138,138,138,138,,,,,138,138,,138,',
-'138,138,,138,,138,138,,,,,138,138,138,138,138,138,,,,,138,,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,138,138,,,,138,,138,137,138,,137,137,137,137,137,137',
-'137,137,137,137,,,,,137,137,137,137,,,137,137,137,137,,,,,137,137,,137',
-',137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,,137,,,,,,,,,',
-',,,,,,,,,,,,,,,,,,,137,137,,,,137,,137,135,137,,135,135,135,135,135',
-'135,135,135,135,135,,,,,135,135,135,135,,,135,135,135,135,,,,,135,135',
-',135,,135,135,,135,,135,135,,,,,135,135,135,135,135,135,,,,,135,,,,',
-',,,,,,,,,,,,,,,,,,,,,,,,135,135,,,,135,,135,134,135,,134,134,134,134',
-'134,134,134,134,134,134,,,,,134,134,134,134,,,134,134,134,134,,,,,134',
-'134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,,,134',
-',,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,,134,133,134,,133,133,133',
-'133,133,133,133,133,133,133,,,,,133,133,133,133,,,133,133,133,133,,',
-',,133,133,,133,,133,133,,133,,133,133,,,,,133,133,133,133,133,133,,',
-',,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,133,133,,,,133,,133,93,133,,93,93',
-'93,93,93,93,93,93,93,93,,,,,93,93,93,93,,,93,93,93,93,,,,,93,93,,93',
-',93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,,,,,,,,,,,,,,,,,,',
-',,,,,,,93,93,,,,93,,93,132,93,,132,132,132,132,132,132,132,132,132,132',
-',,,,132,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132,132,,132',
-',132,132,,,,,132,132,132,132,132,132,,,,,132,,,,,,,,,,,,,,,,,,,,,,,',
-',,,,,132,132,,,,132,,132,131,132,,131,131,131,131,131,131,131,131,131',
-'131,,,,,131,131,131,131,,,131,131,131,131,,,,,131,131,,131,,131,131',
-',131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,,,,,,,,,,',
-',,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130,130,130,130,130',
-'130,130,,,,,130,130,130,130,,,130,130,130,130,,,,,130,130,,130,,130',
-'130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,,,,,,',
-',,,,,,,,,,,,,,130,130,,,,130,,130,99,130,,99,99,99,99,99,99,99,99,99',
-'99,,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99,,99,99,,99,,99,99,,,',
-',99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,,,,,,,,,99,99,,,,99,,99',
-'127,99,,127,127,127,127,127,127,127,127,127,127,,,,,127,127,127,127',
-',,127,127,127,127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127',
-'127,127,127,127,,,,,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,127,127,,,,127,',
-'127,101,127,,101,101,101,101,101,101,101,101,101,101,,,,,101,101,101',
-'101,,,101,101,101,101,,,,,101,101,,101,,101,101,,101,,101,101,,,,,101',
-'101,101,101,101,101,,,,,101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,101,101,,,,101',
-',101,102,101,,102,102,102,102,102,102,102,102,102,102,,,,,102,102,102',
-'102,,,102,102,102,102,,,,,102,102,,102,,102,102,,102,,102,102,,,,,102',
-'102,102,102,102,102,,,,,102,,,,,,,,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102',
-',102,103,102,,103,103,103,103,103,103,103,103,103,103,,,,,103,103,103',
-'103,,,103,103,103,103,,,,,103,103,,103,,103,103,,103,,103,103,,,,,103',
-'103,103,103,103,103,,,,,103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103',
-',103,104,103,,104,104,104,104,104,104,104,104,104,104,,,,,104,104,104',
-'104,,,104,104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104',
-'104,104,104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104,,,,104',
-',104,105,104,,105,105,105,105,105,105,105,105,105,105,,,,,105,105,105',
-'105,,,105,105,105,105,,,,,105,105,,105,,105,105,,105,,105,105,,,,,105',
-'105,105,105,105,105,,,,,105,,,,,,,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105',
-',105,106,105,,106,106,106,106,106,106,106,106,106,106,,,,,106,106,106',
-'106,,,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106',
-'106,106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106',
-',106,118,106,,118,118,118,118,118,118,118,118,118,118,,,,,118,118,118',
-'118,,,118,118,118,118,,,,,118,118,,118,,118,118,,118,,118,118,,,,,118',
-'118,118,118,118,118,,,,,118,,,,,,,,,,,,,,,,,,,,,,,,,,,,,118,118,,,,118',
-',118,108,118,,108,108,108,108,108,108,108,108,108,108,,,,,108,108,108',
-'108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108,,,,,108',
-'108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108',
-',108,109,108,,109,109,109,109,109,109,109,109,109,109,,,,,109,109,109',
-'109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109',
-'109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109',
-',109,110,109,,110,110,110,110,110,110,110,110,110,110,,,,,110,110,110',
-'110,,,110,110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110',
-'110,110,110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,,,,,,,,,,110,110,,,,110',
-',110,119,110,,119,119,119,119,119,119,119,119,119,119,,,,,119,119,119',
-'119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119,,,,,119',
-'119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119',
-',119,112,119,,112,112,112,112,112,112,112,112,112,112,,,,,112,112,112',
-'112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112',
-'112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112',
-',112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,,113,113,113',
-'113,,,113,113,113,113,,,,,113,113,,113,,113,113,,113,,113,113,,,,,113',
-'113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113',
-',113,114,113,,114,114,114,114,114,114,114,114,114,114,,,,,114,114,114',
-'114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114,,,,,114',
-'114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,114,114,,,,114',
-',114,115,114,,115,115,115,115,115,115,115,115,115,115,,,,,115,115,115',
-'115,,,115,115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115',
-'115,115,115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115,,,,115',
-',115,116,115,,116,116,116,116,116,116,116,116,116,116,,,,,116,116,116',
-'116,,,116,116,116,116,,,,,116,116,,116,,116,116,,116,,116,116,,,,,116',
-'116,116,116,116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116',
-',116,117,116,,117,117,117,117,117,117,117,117,117,117,,,,,117,117,117',
-'117,,,117,117,117,117,,,,,117,117,,117,,117,117,,117,,117,117,,,,,117',
-'117,117,117,117,117,,,,,117,,,,,,,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117',
-',117,107,117,,107,107,107,107,107,107,107,107,107,107,,,,,107,107,107',
-'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,,,,,107',
-'107,107,107,107,107,,,,,107,153,153,153,153,153,153,153,153,153,153',
-',,,,,,,,,,,153,153,,,,,,107,107,,,,107,,107,153,107,,153,,,305,,305',
-'5,5,5,5,5,5,5,5,5,5,,,,,,,,,,,,5,5,305,305,,,,305,,,,305,,,,5,,,5,,',
-'305,153,,153,,153,305,305,305,305,305,305,305,305,305,305,305,305,305',
+'100,302,100,159,159,159,159,159,159,159,159,159,159,162,109,109,252',
+'301,42,162,162,70,204,204,252,301,159,159,100,100,96,96,96,100,169,169',
+'204,100,255,163,254,159,262,161,159,163,163,100,302,161,161,36,36,100',
+'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100',
+'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,249',
+'249,249,250,250,250,159,70,159,177,159,100,177,177,177,177,177,177,177',
+'177,177,177,106,96,152,168,177,96,75,177,177,177,189,180,177,177,177',
+'177,280,280,189,170,177,177,81,177,271,177,177,214,177,273,177,177,177',
+'214,214,83,177,177,177,177,177,177,73,73,106,106,177,152,153,189,75',
+'75,75,221,75,180,180,180,249,221,221,250,249,180,173,250,97,97,97,5',
+'5,5,26,282,46,46,46,177,177,179,177,84,177,2,177,187,2,2,2,2,2,2,2,2',
+'2,2,189,189,72,193,2,46,22,2,2,2,98,282,2,2,2,2,98,98,234,282,2,2,282',
+'2,92,2,2,11,2,93,2,2,2,187,187,187,2,2,2,2,2,2,1,1,233,233,2,193,193',
+'193,97,141,46,5,97,193,8,5,46,41,41,217,46,140,8,299,3,217,217,3,3,3',
+'3,3,3,3,3,3,3,195,2,196,2,3,2,197,3,3,3,102,89,3,3,3,3,8,306,8,89,3',
+'3,201,3,267,3,3,167,3,45,3,3,267,167,167,108,3,3,3,3,3,3,160,308,308',
+',3,225,160,160,89,188,89,225,225,225,225,225,166,188,101,101,,267,166',
+'166,131,283,283,131,131,131,131,131,131,131,131,131,131,,3,,3,131,3',
+',131,131,131,,188,131,131,131,131,91,91,91,,131,131,91,131,,131,131',
+',131,,131,131,,,,,131,131,131,131,131,131,213,,,,131,,213,213,213,213',
+'213,213,213,213,213,213,213,213,213,,,,,,7,,,7,7,7,7,7,7,7,7,7,7,,131',
+',131,7,131,,7,7,7,,,7,7,7,7,,,,,7,7,,7,,7,7,,7,,7,7,,,,,7,7,7,7,7,7',
+'224,,,,7,,224,224,224,224,224,224,224,224,224,224,224,224,224,,,,,,129',
+',,129,129,129,129,129,129,129,129,129,129,,7,,7,129,7,,129,129,129,',
+',129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129,129',
+'129,129,129,129,220,,,,129,,220,220,220,220,220,220,220,220,220,220',
+'220,220,220,,,,,,9,,,9,9,9,9,9,9,9,9,9,9,,129,,129,9,129,,9,9,9,,,9',
+'9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,216,,,,9,,216,216,216',
+'216,216,216,216,216,216,216,216,216,216,,,,,,128,,,128,128,128,128,128',
+'128,128,128,128,128,,9,,9,128,9,,128,128,128,,,128,128,128,128,,,,,128',
+'128,,128,,128,128,,128,,128,128,,,,,128,128,128,128,128,128,209,,,,128',
+',209,209,209,209,209,209,209,209,209,209,,,,,,,,,127,,,127,127,127,127',
+'127,127,127,127,127,127,,128,,128,127,128,,127,127,127,,,127,127,127',
+'127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127',
+'127,207,,,,127,,207,207,207,207,207,207,207,207,207,207,,,,,,,,,16,',
+',16,16,16,16,16,16,16,16,16,16,,127,,127,16,127,,16,16,16,,,16,16,16',
+'16,,,,,16,16,,16,,16,16,,16,,16,16,,,,,16,16,16,16,16,16,243,,,,16,',
+'243,243,243,243,243,243,243,243,243,243,,,,,,,,,126,,,126,126,126,126',
+'126,126,126,126,126,126,,16,,16,126,16,,126,126,126,,,126,126,126,126',
+',,,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126,126,126,126',
+'240,,,,126,,240,240,240,240,240,240,240,229,,,,,,229,229,229,229,229',
+'18,,,18,18,18,18,18,18,18,18,18,18,,126,,126,18,126,,18,18,18,,,18,18',
+'18,18,,,,,18,18,,18,,18,18,,18,,18,18,,,,,18,18,18,18,18,18,232,,,,18',
+',232,232,232,232,232,232,232,,,,,,,,,,,,285,,,285,285,285,285,285,285',
+'285,285,285,285,,18,,18,285,18,,285,285,285,,,285,285,285,285,,,,,285',
+'285,,285,,285,285,,285,,285,285,,,,,285,285,285,285,285,285,236,,,,285',
+',236,236,236,236,236,236,236,,,,,,,,,,,,278,,,278,278,278,278,278,278',
+'278,278,278,278,,285,,285,278,285,,278,278,278,,,278,278,278,278,,,',
+',278,278,,278,,278,278,,278,,278,278,,,,,278,278,278,278,278,278,,,',
+',278,,,,,,,,,,,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30,30,,278,,278',
+'30,278,,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30',
+'30,30,30,30,30,,,,,30,,,,,,,,,,,,,,,,,,,,277,,,277,277,277,277,277,277',
+'277,277,277,277,,30,,30,277,30,,277,277,277,,,277,277,277,277,,,,,277',
+'277,,277,,277,277,,277,,277,277,,,,,277,277,277,277,277,277,,,,,277',
+',,,,,,,,,,,,,,,,,,,37,,,37,37,37,37,37,37,37,37,37,37,,277,,277,37,277',
+',37,37,37,,,37,37,37,37,,,,,37,37,,37,,37,37,,37,,37,37,,37,,,37,37',
+'37,37,37,37,,,,,37,,,,,,,,,,,,,,,,,,,,261,,,261,261,261,261,261,261',
+'261,261,261,261,,37,,37,261,37,,261,261,261,,,261,261,261,261,,,,,261',
+'261,,261,,261,261,,261,,261,261,,,,,261,261,261,261,261,261,206,,,,261',
+',206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206',
+'206,206,206,206,,261,,,,,,,,,,261,,261,259,261,,259,259,259,259,259',
+'259,259,259,259,259,,,,,259,,,259,259,259,,,259,259,259,259,,,,,259',
+'259,,259,,259,259,,259,,259,259,,,,,259,259,259,259,259,259,,,,,259',
+',,,,,,,,,,,,,,,,,,,258,,,258,258,258,258,258,258,258,258,258,258,,259',
+',259,258,259,,258,258,258,,,258,258,258,258,,,,,258,258,,258,,258,258',
+',258,,258,258,,,,,258,258,258,258,258,258,,,,,258,,,,,,,,,,,,,,,,,,',
+',203,,,203,203,203,203,203,203,203,203,203,203,,258,,258,203,258,,203',
+'203,203,,,203,203,203,203,,,,,203,203,,203,,203,203,,203,,203,203,,',
+',,203,203,203,203,203,203,,,,,203,,,,,,,,,,,,,,,,,,,,202,,,202,202,202',
+'202,202,202,202,202,202,202,,203,,203,202,203,,202,202,202,,,202,202',
+'202,202,,,,,202,202,,202,,202,202,,202,,202,202,,,,,202,202,202,202',
+'202,202,,,,,202,,,,,,,,,,,,,,,,,,,,49,,,49,49,49,49,49,49,49,49,49,49',
+',202,,202,49,202,,49,49,49,,,49,49,49,49,,,,,49,49,,49,,49,49,,49,,49',
+'49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,,,,,,,,,,,,52,,,52,52,52,52',
+'52,52,52,52,52,52,,49,,49,52,49,,52,52,52,,,52,52,52,52,,,,,52,52,,52',
+',52,52,,52,,52,52,,,,,52,52,52,52,52,52,,,,,52,,,,,,,,,,,,,,,,,,,,55',
+',,55,55,55,55,55,55,55,55,55,55,,52,,52,55,52,,55,55,55,,,55,55,55,55',
+',,,,55,55,,55,,55,55,,55,,55,55,,,,,55,55,55,55,55,55,,,,,55,,,,,,,',
+',,,,,,,,,,,,58,,,58,58,58,58,58,58,58,58,58,58,,55,,55,58,55,,58,58',
+'58,,,58,58,58,58,,,,,58,58,,58,,58,58,,58,,58,58,,,,,58,58,58,58,58',
+'58,,,,,58,,,,,,,,,,,,,,,,,,,,61,,,61,61,61,61,61,61,61,61,61,61,,58',
+',58,61,58,,61,61,61,,,61,61,61,61,,,,,61,61,,61,,61,61,,61,,61,61,,',
+',,61,61,61,61,61,61,,,,,61,,,,,,,,,,,,,,,,,,,,63,,,63,63,63,63,63,63',
+'63,63,63,63,,61,,61,63,61,,63,63,63,,,63,63,63,63,,,,,63,63,,63,,63',
+'63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,67,,,67',
+'67,67,67,67,67,67,67,67,67,,63,,63,67,63,,67,67,67,,,67,67,67,67,,,',
+',67,67,,67,,67,67,,67,,67,67,,,,,67,67,67,67,67,67,,,,,67,,,,,,,,,,',
+',,,,,,,,,69,,,69,69,69,69,69,69,69,69,69,69,,67,,67,69,67,,69,69,69',
+',,69,69,69,69,,,,,69,69,,69,,69,69,,69,,69,69,,,,,69,69,69,69,69,69',
+',,,,69,,,,,,,,,,,,,,,,,,,,192,,,192,192,192,192,192,192,192,192,192',
+'192,,69,,69,192,69,,192,192,192,,,192,192,192,192,,,,,192,192,,192,',
+'192,192,,192,,192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,',
+',,,,,,,,,191,,,191,191,191,191,191,191,191,191,191,191,,192,,192,191',
+'192,,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191,,191,,191',
+'191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,125,,,125',
+'125,125,125,125,125,125,125,125,125,,191,,191,125,191,,125,125,125,',
+',125,125,125,125,,,,,125,125,,125,,125,125,,125,,125,125,,,,,125,125',
+'125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,74,,,74,74,74,74,74,74,74',
+'74,74,74,,125,,125,74,125,,74,74,74,,,74,74,74,74,,,,,74,74,,74,,74',
+'74,,74,,74,74,,,,,74,74,74,74,74,74,,,,,74,,,,,,,,,,,,,,,,,,,,124,,',
+'124,124,124,124,124,124,124,124,124,124,,74,,74,124,74,,124,124,124',
+',,124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124',
+'124,124,124,124,,,,,124,,,,,,,,,,,,,,,,,,,,309,,,309,309,309,309,309',
+'309,309,309,309,309,,124,,124,309,124,,309,309,309,,,309,309,309,309',
+',,,,309,309,,309,,309,309,,309,,309,309,,,,,309,309,309,309,309,309',
+',,,,309,,,,,,,,,,,,,,,,,,,,176,,,176,176,176,176,176,176,176,176,176',
+'176,,309,,309,176,309,,176,176,176,,,176,176,176,176,,,,,176,176,,176',
+',176,176,,176,,176,176,,,,,176,176,176,176,176,176,,,,,176,,,,,,,,,',
+',,,,,,,,,,78,,,78,78,78,78,78,78,78,78,78,78,,176,,176,78,176,,78,78',
+'78,,,78,78,78,78,,,,,78,78,,78,,78,78,,78,,78,78,78,,,,78,78,78,78,78',
+'78,,,,,78,,,,,,,,,,,,,,,,,,,,123,,,123,123,123,123,123,123,123,123,123',
+'123,,78,,78,123,78,,123,123,123,,,123,123,123,123,,,,,123,123,,123,',
+'123,123,,123,,123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,,,,,,',
+',,,,,,,,,157,,,157,157,157,157,157,157,157,157,157,157,,123,,123,157',
+'123,,157,157,157,,,157,157,157,157,,,,,157,157,,157,,157,157,,157,,157',
+'157,,,,,157,157,157,157,157,157,,,,,157,,,,,,,,,,,,,,,,,,,,150,,,150',
+'150,150,150,150,150,150,150,150,150,,157,,157,150,157,,150,150,150,',
+',150,150,150,150,,,,,150,150,,150,,150,150,,150,,150,150,,,,,150,150',
+'150,150,150,150,,,,,150,,,,,,,,,,,,,,,,,,,,85,,,85,85,85,85,85,85,85',
+'85,85,85,,150,,150,85,150,,85,85,85,,,85,85,85,85,,,,,85,85,,85,,85',
+'85,,85,,85,85,,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,149,,',
+'149,149,149,149,149,149,149,149,149,149,,85,,85,149,85,,149,149,149',
+',,149,149,149,149,,,,,149,149,,149,,149,149,,149,,149,149,,,,,149,149',
+'149,149,149,149,,,,,149,,,,,,,,,,,,,,,,,,,,148,,,148,148,148,148,148',
+'148,148,148,148,148,,149,,149,148,149,,148,148,148,,,148,148,148,148',
+',,,,148,148,,148,,148,148,,148,,148,148,,,,,148,148,148,148,148,148',
+',,,,148,,,,,,,,,,,,,,,,,,,,147,,,147,147,147,147,147,147,147,147,147',
+'147,,148,,148,147,148,,147,147,147,,,147,147,147,147,,,,,147,147,,147',
+',147,147,,147,,147,147,,,,,147,147,147,147,147,147,,,,,147,,,,,,,,,',
+',,,,,,,,,,146,,,146,146,146,146,146,146,146,146,146,146,,147,,147,146',
+'147,,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,,146,,146',
+'146,,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,,,,,,,,,,145,,,145',
+'145,145,145,145,145,145,145,145,145,,146,,146,145,146,,145,145,145,',
+',145,145,145,145,,,,,145,145,,145,,145,145,,145,,145,145,,,,,145,145',
+'145,145,145,145,,,,,145,,,,,,,,,,,,,,,,,,,,144,,,144,144,144,144,144',
+'144,144,144,144,144,,145,,145,144,145,,144,144,144,,,144,144,144,144',
+',,,,144,144,,144,,144,144,,144,,144,144,,,,,144,144,144,144,144,144',
+',,,,144,,,,,,,,,,,,,,,,,,,,95,,,95,95,95,95,95,95,95,95,95,95,,144,',
+'144,95,144,,95,95,95,,,95,95,95,95,,,,,95,95,,95,,95,95,,95,,95,95,95',
+',,,95,95,95,95,95,95,,,,,95,,,,,,,,,,,,,,,,,,,,143,,,143,143,143,143',
+'143,143,143,143,143,143,,95,,95,143,95,,143,143,143,,,143,143,143,143',
+',,,,143,143,,143,,143,143,,143,,143,143,,,,,143,143,143,143,143,143',
+',,,,143,,,,,,,,,,,,,,,,,,,,142,,,142,142,142,142,142,142,142,142,142',
+'142,,143,,143,142,143,,142,142,142,,,142,142,142,142,,,,,142,142,,142',
+',142,142,,142,,142,142,,,,,142,142,142,142,142,142,,,,,142,,,,,,,,,',
+',,,,,,,,,,139,,,139,139,139,139,139,139,139,139,139,139,,142,,142,139',
+'142,,139,139,139,,,139,139,139,139,,,,,139,139,,139,,139,139,,139,,139',
+'139,,,,,139,139,139,139,139,139,,,,,139,,,,,,,,,,,,,,,,,,,,138,,,138',
+'138,138,138,138,138,138,138,138,138,,139,,139,138,139,,138,138,138,',
+',138,138,138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138',
+'138,138,138,138,,,,,138,,,,,,,,,,,,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,',
+'138,,138,0,138,,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0',
+'0,0,235,,,,0,,235,235,235,235,235,235,235,235,235,235,235,235,235,235',
+'235,235,235,235,235,235,235,,,,,,,,,0,0,,0,,0,137,0,,137,137,137,137',
+'137,137,137,137,137,137,,,,,137,,,137,137,137,,,137,137,137,137,,,,',
+'137,137,,137,,137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,',
+'137,,,,,,,,,,,,,,,,,,,,136,,,136,136,136,136,136,136,136,136,136,136',
+',137,,137,136,137,,136,136,136,,,136,136,136,136,,,,,136,136,,136,,136',
+'136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136,,,,,,,,,,,,,,',
+',,,,,135,,,135,135,135,135,135,135,135,135,135,135,,136,,136,135,136',
+',135,135,135,,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135',
+',,,,135,135,135,135,135,135,,,,,135,,,,,,,,,,,,,,,,,,,,104,,,104,104',
+'104,104,104,104,104,104,104,104,,135,,135,104,135,,104,104,104,,,104',
+'104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104,104,104',
+'104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,134,,,134,134,134,134,134,134',
+'134,134,134,134,,104,,104,134,104,,134,134,134,,,134,134,134,134,,,',
+',134,134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,',
+',134,,,,,,,,,,,,,,,,,,,,133,,,133,133,133,133,133,133,133,133,133,133',
+',134,,134,133,134,,133,133,133,,,133,133,133,133,,,,,133,133,,133,,133',
+'133,,133,,133,133,,,,,133,133,133,133,133,133,,,,,133,,,,,,,,,,,,,,',
+',,,,,122,,,122,122,122,122,122,122,122,122,122,122,,133,,133,122,133',
+',122,122,122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122,,122,122',
+',,,,122,122,122,122,122,122,,,,,122,,,,,,,,,,,,,,,,,,,,110,,,110,110',
+'110,110,110,110,110,110,110,110,,122,,122,110,122,,110,110,110,,,110',
+'110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110,110,110',
+'110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,111,,,111,111,111,111,111,111',
+'111,111,111,111,,110,,110,111,110,,111,111,111,,,111,111,111,111,,,',
+',111,111,,111,,111,111,,111,,111,111,,,,,111,111,111,111,111,111,,,',
+',111,,,,,,,,,,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112,112,112',
+',111,,111,112,111,,112,112,112,,,112,112,112,112,,,,,112,112,,112,,112',
+'112,,112,,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,,,,,,',
+',,,,,114,,,114,114,114,114,114,114,114,114,114,114,,112,,112,114,112',
+',114,114,114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114',
+',,,,114,114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,115,,,115,115',
+'115,115,115,115,115,115,115,115,,114,,114,115,114,,115,115,115,,,115',
+'115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115,115,115',
+'115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,117,,,117,117,117,117,117,117',
+'117,117,117,117,,115,,115,117,115,,117,117,117,,,117,117,117,117,,,',
+',117,117,,117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,',
+',117,,,,,,,,,,,,,,,,,,,,118,,,118,118,118,118,118,118,118,118,118,118',
+',117,,117,118,117,,118,118,118,,,118,118,118,118,,,,,118,118,,118,,118',
+'118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,',
+',,,,,119,,,119,119,119,119,119,119,119,119,119,119,,118,,118,119,118',
+',119,119,119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119',
+',,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,120,,,120,120',
+'120,120,120,120,120,120,120,120,,119,,119,120,119,,120,120,120,,,120',
+'120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120',
+'120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,121,,,121,121,121,121,121,121',
+'121,121,121,121,,120,,120,121,120,,121,121,121,,,121,121,121,121,,,',
+',121,121,,121,,121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,',
+',121,,,,,,,,,,,,,,,,,,,,132,,,132,132,132,132,132,132,132,132,132,132',
+',121,,121,132,121,,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132',
+'132,,132,,132,132,185,,185,,132,132,132,132,132,132,,,,,132,,,,,,,,',
+',,,,,185,185,,,,185,,,,185,,,,,,,,,,185,132,,132,,132,185,185,185,185',
+'185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185',
+'185,185,185,185,185,185,185,185,185,185,185,185,185,305,,305,,,,,185',
+',,,,,,,,,,,,,,,,,,,,305,305,,,,305,,,,305,,,,,,,,,,305,,,,,,305,305',
 '305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305',
-'305,305,305,305,240,,240,,,,5,305,5,,5,,,,,,,,,,,,,,,,240,240,,,,240',
-',,,240,,,,,,,,,,240,,,,,,240,240,240,240,240,240,240,240,240,240,240',
-'240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240',
-'240,240,240,240,240,240,,,,,,,,240,11,11,11,11,11,11,11,11,11,11,,,',
-',11,11,11,11,,,11,11,11,11,,,,,,11,,11,,11,11,,11,,11,11,,,,,11,11,11',
-'11,11,11,300,,300,,11,,,,,,,,,,,,,,,,,,,,,,300,300,,,,300,,11,11,300',
-',,11,,11,,11,,,300,,,,,,300,300,300,300,300,300,300,300,300,300,300',
-'300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300',
-'300,300,300,300,300,300,,,,,,,,300,299,299,299,299,299,299,299,299,299',
-'299,,,,,299,299,299,299,,,299,299,299,,,,,,,299,,299,,299,299,,299,',
-'299,299,,,,,299,299,299,299,299,299,162,,162,,299,,,,,,,,,,,,,,,,,,',
-',,,162,162,,,,162,,299,299,162,,,299,,299,,299,162,,162,,,,,,162,162',
-'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162',
-'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,308,,308',
-',,,,,,,,,,,,,,,,,,,,,,,308,308,,,,308,,,,308,,,,,,,,,,308,,,,,,308,308',
-'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308',
-'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,201,,201',
-',,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201,,,,,,,,,,201,,,,,,201,201',
-'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201',
-'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,298,,298',
-',,,,,,,,,,,,,,,,,,,,,,,298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298',
-'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298',
-'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,194,,194',
-',,,,,,,,,,,,,,,,,,,,,,,194,194,,,,194,,,,194,,,,,,,,,,194,,,,,,194,194',
-'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194',
-'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,188,,188',
-',,,,,,,,,,,,,,,,,,,,,,,188,188,,,,188,,,,188,,,,,,,,,,188,,,,,,188,188',
-'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188',
-'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,297,,297',
-',,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297',
-'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297',
-'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,292,,292',
-',,,,,,,,,,,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292,,,,,,292,292',
-'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292',
-'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,181,,181',
-',,,,,,,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181',
-'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181',
-'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,37,,37,',
-',,,,,,,,,,,,,,,,,,,,,,37,37,,,,37,,,,37,,,,,,,,,,37,,,,,,37,37,37,37',
-'37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37',
-'37,37,37,37,37,37,37,171,,171,,,,,,,,,,,,,,,,,,,,,,,,171,171,,,,171',
-',,,171,,,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171,171',
-'171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171',
-'171,171,171,171,171,171,253,,253,,,,,,,,,,,,,,,,,,,,,,,,253,253,,,,253',
-',,,253,,,,,,,,,,253,,,,,,253,253,253,253,253,253,253,253,253,253,253',
-'253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253',
-'253,253,253,253,253,253,283,,283,,,,,,,,,,,,,,,,,,,,,,,,283,283,,,,283',
-',,,283,,,,,,,,,,283,,,,,,283,283,283,283,283,283,283,283,283,283,283',
-'283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283',
-'283,283,283,283,283,283,164,,164,,,,,,,,,,,,,,,,,,,,,,,,164,164,,,,164',
-',,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164,164,164',
-'164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164',
-'164,164,164,164,164,164,164,280,,280,,,,,,,,,,,,,,,,,,,,,,,,280,280',
-',,,280,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280,280,280,280,280',
-'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280',
-'280,280,280,280,280,280,280,280,86,,86,,,,,,,,,,,,,,,,,,,,,,,,86,86',
-',,,86,,,,86,,,,,,,,86,,86,,,,,,86,86,86,86,86,86,86,86,86,86,86,86,86',
-'86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,260,',
-'260,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260,,,,,,,,,,260,,,,,,260',
-'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260',
-'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,261',
-',261,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,,,261,,,,,,,,,,261,,,,,',
-'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261',
-'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261',
-'209,,209,,,,,,,,,,,,,,,,,,,,,,,,209,209,,,,209,,,,209,,,,,,,,,,209,',
-',,,,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209',
-'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209',
-'209,246,246,,,,,,,,246,,,,,,,,,,246,,,,,,246,246,246,246,246,246,246',
-'246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246',
-'246,246,246,246,246,246,246,246,246,246,88,88,,,,,,,,88,,,,,,,,,,88',
-',,,,,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88',
-'88,88,88,88,88,88,88,88,88,88,88,88,88,225,225,,,,,,,,225,,,,,,,,,,225',
-',,,,,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225',
-'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,228,228',
-',,,,,,,228,,,,,,,,,,228,,,,,,228,228,228,228,228,228,228,228,228,228',
-'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228',
-'228,228,228,228,92,92,,,,,,,,92,,,,,,,,,,92,,,,,,92,92,92,92,92,92,92',
-'92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92',
-'92,222,222,,,,,,,,222,,,,,,,,,,222,,,,,,222,222,222,222,222,222,222',
-'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222',
-'222,222,222,222,222,222,222,289,,,,,,,,289,,,,,,,,,,289,,,,,,289,289',
-'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
-'289,289,289,289,289,289,289,289,289,289,289,289,268,,,,,,,,268,,,,,',
-',,,,268,,,,,,268,268,268,268,268,268,268,268,268,268,268,268,268,268',
+'305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,,,,,,,,305',
+'17,17,17,17,17,17,17,17,17,17,,,,,17,,,17,17,17,,,17,17,17,17,,,,,,17',
+',17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,,,,,17,,,,130,130,130,130',
+'130,130,130,130,130,130,,,,,130,,,130,130,130,,,130,130,130,,,,,,17',
+'130,17,130,17,130,130,,130,,130,130,290,,290,,130,130,130,130,,,,,,',
+',,,,,,,,,,,,,,290,290,,,,290,,,,290,,,,,,,,,,290,130,,130,,130,290,290',
+'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290',
+'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,,,,,,,,290',
+'291,291,291,291,291,291,291,291,291,291,,,,,291,,,291,291,291,,,291',
+'291,291,,,,,,,291,,291,,291,291,,291,,291,291,,,,,291,291,291,291,291',
+'291,,,,,291,14,14,14,14,14,14,14,14,14,14,,,,,,,,,,,,,,14,14,,,,,,,',
+',291,,291,,291,14,208,,14,268,,268,208,208,208,208,208,208,208,208,208',
+'208,208,208,208,208,208,208,208,208,208,208,208,,,,,268,268,,,,268,',
+',,268,,,,,,,,,,268,14,,14,,14,268,268,268,268,268,268,268,268,268,268',
 '268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268',
-'221,,,,,,,,221,,,,,,,,,,221,,,,,,221,221,221,221,221,221,221,221,221',
-'221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221',
-'221,221,221,221,221,288,,,,,,,,288,,,,,,,,,,288,,,,,,288,288,288,288',
-'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288',
-'288,288,288,288,288,288,288,288,288,288,267,,,,,,,,267,,,,,,,,,,267',
-',,,,,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267',
-'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,82,,,,,',
-',,,,82,,,,,,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82',
-'82,82,82,82,82,82,82,82,82,82,82,210,,,,,,,,,,210,,,,,,210,210,210,210',
-'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210',
-'210,210,210,210,210,210,210,210,210,172,,,,,,,,,,172,,,,,,172,172,172',
-'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172',
-'172,172,172,172,172,172,172,172,172,172,198,,,,,,198,198,198,198,198',
-'198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198',
-'198,198,198,198,198,198,198,198,205,,,,,,205,205,205,205,205,205,205',
-'205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205',
-'205,205,205,205,205,205,211,,,,,,211,211,211,211,211,211,211,211,211',
+'268,268,268,268,268,268,268,313,231,313,,,,,231,231,231,231,231,231',
+'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,313,313',
+',,,313,,,,313,,,,,,,,,,313,,,,,,313,313,313,313,313,313,313,313,313',
+'313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313',
+'313,313,313,313,313,313,313,313,211,239,211,,,,,239,239,239,239,239',
+'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,211',
+'211,,,,211,,,,211,,,,,,,,,,211,,,,,,211,211,211,211,211,211,211,211',
 '211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211',
-'211,211,211,211,202,,,,,,202,202,202,202,202,202,202,202,202,202,202',
-'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202',
-'202,202,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214,214',
-'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214' ]
-        racc_action_check = arr = Array.new(9789, nil)
+'211,211,211,211,211,211,211,211,211,210,242,210,,,,,242,242,242,242',
+'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242',
+'210,210,,,,210,,,,210,,,,,,,,,,210,,,,,,210,210,210,210,210,210,210',
+'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210',
+'210,210,210,210,210,210,210,210,210,210,199,212,199,,,,,212,212,212',
+'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212',
+'212,199,199,,,,199,,,,199,,,,,,,,,,199,,,,,,199,199,199,199,199,199',
+'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199',
+'199,199,199,199,199,199,199,199,199,199,199,303,228,303,,,,,228,228',
+'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228',
+'228,228,303,303,,,,303,,,,303,,,,,,,,,,303,,,,,,303,303,303,303,303',
+'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303',
+'303,303,303,303,303,303,303,303,303,303,303,303,269,,269,,,,,,,,,,,',
+',,,,,,,,,,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269,269,269,269',
+'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269',
+'269,269,269,269,269,269,269,269,269,269,269,269,269,181,,181,,,,,,,',
+',,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181,181',
+'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181',
+'181,181,181,181,181,181,181,181,181,181,181,181,181,181,76,,76,,,,,',
+',,,,,,,,,,,,,,,,,,,,76,76,,,,76,,,,76,,,,,,,,,,76,,,,,,76,76,76,76,76',
+'76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76',
+'76,76,76,76,76,76,174,,174,,,,,,,,,,,,,,,,,,,,,,,,,,174,174,,,,174,',
+',,174,,,,,,,,,,174,,,,,,174,174,174,174,174,174,174,174,174,174,174',
+'174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174',
+'174,174,174,174,174,174,165,,165,,,,,,,,,,,,,,,,,,,,,,,,,,165,165,,',
+',165,,,,165,,,,,,,,165,,165,,,,,,165,165,165,165,165,165,165,165,165',
+'165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165',
+'165,165,165,165,165,165,165,165,164,,164,,,,,,,,,,,,,,,,,,,,,,,,,,164',
+'164,,,,164,,,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164',
+'164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164',
+'164,164,164,164,164,164,164,164,164,257,,257,,,,,,,,,,,,,,,,,,,,,,,',
+',,257,257,,,,257,,,,257,,,,,,,,,,257,,,,,,257,257,257,257,257,257,257',
+'257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257',
+'257,257,257,257,257,257,257,257,257,257,43,,43,,,,,,,,,,,,,,,,,,,,,',
+',,,,43,43,,,,43,,,,43,,,,,,,,,,43,,,,,,43,43,43,43,43,43,43,43,43,43',
+'43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43',
+'43,289,,289,,,,,,,,,,,,,,,,,,,,,,,,,,289,289,,,,289,,,,289,,,,,,,,,',
+'289,,,,,,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
+'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
+'289,289,288,,288,,,,,,,,,,,,,,,,,,,,,,,,,,288,288,,,,288,,,,288,,,,',
+',,,,,288,,,,,,288,288,288,288,288,288,288,288,288,288,288,288,288,288',
+'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288',
+'288,288,288,260,,260,,,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260',
+',,,,,,,,,260,,,,,,260,260,260,260,260,260,260,260,260,260,260,260,260',
+'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260',
+'260,260,260,260,87,,87,,,,,,,,,,,,,,,,,,,,,,,,,,87,87,,,,87,,,,87,,',
+',,,,,87,,87,,,,,,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87',
+'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,218,,218,,,,,,,,',
+',,,,,,,,,,,,,,,,,218,218,,,,218,,,,218,,,,,,,,,,218,,,,,,218,218,218',
+'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218',
+'218,218,218,218,218,218,218,218,218,218,218,218,218,218,99,99,,,,,,',
+',99,,,,,,,,,,99,,,,,,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99',
+'99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,248,248,,,,,,',
+',248,,,,,,,,,,248,,,,,,248,248,248,248,248,248,248,248,248,248,248,248',
+'248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248',
+'248,248,248,248,248,103,103,,,,,,,,103,,,,,,,,,,103,,,,,,103,103,103',
+'103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103',
+'103,103,103,103,103,103,103,103,103,103,103,205,205,,,,,,,,205,,,,,',
+',,,,205,,,,,,205,205,205,205,205,205,205,205,205,205,205,205,205,205',
+'205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205',
+'241,241,,,,,,,,241,,,,,,,,,,241,,,,,,241,241,241,241,241,241,241,241',
+'241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241',
+'241,241,241,241,241,241,238,238,,,,,,,,238,,,,,,,,,,238,,,,,,238,238',
+'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238',
+'238,238,238,238,238,238,238,238,238,238,238,238,237,,,,,,,,237,,,,,',
+',,,,237,,,,,,237,237,237,237,237,237,237,237,237,237,237,237,237,237',
+'237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237',
+'276,,,,,,,,276,,,,,,,,,,276,,,,,,276,276,276,276,276,276,276,276,276',
+'276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276',
+'276,276,276,276,276,275,,,,,,,,275,,,,,,,,,,275,,,,,,275,275,275,275',
+'275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275',
+'275,275,275,275,275,275,275,275,275,275,297,,,,,,,,297,,,,,,,,,,297',
+',,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297',
+'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,296,,,,',
+',,,296,,,,,,,,,,296,,,,,,296,296,296,296,296,296,296,296,296,296,296',
+'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296',
+'296,296,296,77,,,,,,,,,,77,,,,,,77,77,77,77,77,77,77,77,77,77,77,77',
+'77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,94,,,,,,,,,,94',
+',,,,,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94',
+'94,94,94,94,94,94,94,94,94,226,,,,,,,,,,226,,,,,,226,226,226,226,226',
+'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226',
+'226,226,226,226,226,226,226,226,227,,,,,,227,227,227,227,227,227,227',
+'227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227',
+'227,227,227,227,227,227,230,,,,,,230,230,230,230,230,230,230,230,230',
+'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230',
+'230,230,230,230,219,,,,,,219,219,219,219,219,219,219,219,219,219,219',
+'219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219',
+'219,219,215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215',
+'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215',
+'222,,,,,,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222',
+'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222' ]
+        racc_action_check = arr = Array.new(8867, nil)
         idx = 0
         clist.each do |str|
           str.split(',', -1).each do |i|
@@ -707,349 +670,341 @@ clist = [
         end
 
 racc_action_pointer = [
-  4040,   245,   311,   280,   nil,  6866,   212,   nil,   nil,   562,
-   656,  7041,   nil,   844,   253,   nil,   nil,   nil,   nil,   nil,
-   nil,   246,  1126,   nil,   nil,   nil,   nil,   nil,   nil,   141,
-  1314,   nil,   nil,   nil,   143,   113,   nil,  8002,    60,   274,
-   nil,   161,   164,   nil,  2066,   nil,   nil,   nil,  2160,   nil,
-   nil,   nil,   nil,  2254,   nil,   nil,   nil,  2348,   nil,  2442,
-   nil,   nil,   nil,  2536,  2630,   nil,   nil,   nil,  2724,   nil,
-    93,  2912,  3006,   nil,   nil,     9,   115,   nil,   313,   -71,
-   225,   nil,  9434,    73,   156,  3852,  8512,    -2,  8885,   344,
-   114,   295,  9056,  4604,    77,   nil,   nil,   205,   145,  4980,
-    92,  5168,  5262,  5356,  5450,  5544,  5638,  6766,  5826,  5920,
-  6014,    -2,  6202,  6296,  6390,  6484,  6578,  6672,  5732,  6108,
-  3758,  3382,   321,   -40,   750,   468,   374,  5074,   938,  1972,
-  4886,  4792,  4698,  4510,  4416,  4322,   nil,  4228,  4134,   nil,
-   218,   240,   nil,   240,   nil,    -1,   nil,   nil,   nil,   165,
-  3946,   120,   110,  6821,   nil,  3664,   nil,  3570,   nil,   273,
-   257,   197,  7237,   461,  8342,   411,   438,   nil,   nil,   250,
-  3476,  8087,  9526,   232,   257,   204,   126,   nil,  3288,  3194,
-   180,  7917,   nil,   nil,   255,    77,     9,   nil,  7662,   nil,
-    26,  3100,  2818,   -17,  7577,   664,  1134,   208,  9562,  1416,
-   367,  7407,  9670,  1322,   299,  9598,   nil,  1228,   108,  8767,
-  9480,  9634,  1040,  1435,  9706,   476,  1341,   127,   185,   382,
-  1247,  9277,  9112,   570,  1153,  8944,   946,  1526,  9000,   852,
-   304,   758,  1510,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-  6951,   nil,   nil,   187,   167,   175,  8826,   nil,   -13,   nil,
-  1878,  1784,   nil,  8172,   145,   nil,   nil,   nil,   nil,   209,
-  8597,  8682,   nil,   114,   nil,   -16,   nil,  9387,  9222,   nil,
-  1690,  1596,   210,   nil,   nil,    27,  1502,   104,   166,   nil,
-  8427,  1408,  1220,  8257,  1032,   nil,   nil,   nil,  9332,  9167,
-   nil,    -7,  7832,   nil,   231,   nil,   -22,  7747,  7492,  7184,
-  7094,    63,   186,   276,   nil,  6866,   nil,   nil,  7322,   nil,
-   nil ]
+  4315,   227,   190,   269,   nil,   163,   nil,   427,   255,   585,
+   nil,   133,   nil,   nil,  6232,   nil,   822,  5978,   980,   nil,
+   nil,   nil,   164,   nil,   nil,   nil,   181,   nil,   nil,   nil,
+  1217,   nil,   nil,   nil,   nil,   nil,   -41,  1375,   nil,   nil,
+   nil,   172,     4,  7408,   nil,   310,   168,   nil,   nil,  1866,
+   nil,   nil,  1945,   nil,   nil,  2024,   nil,   nil,  2103,   nil,
+   nil,  2182,   nil,  2261,   nil,   nil,   nil,  2340,   nil,  2419,
+     0,   nil,   122,    61,  2735,    67,  6973,  8510,  3051,   nil,
+   nil,   117,   nil,   130,   176,  3367,   nil,  7756,   nil,   289,
+   nil,   287,   140,   145,  8556,  3920,    15,   160,   166,  7902,
+    -2,   319,   294,  8020,  4648,   nil,    61,   nil,   225,   -17,
+  4964,  5043,  5122,   nil,  5201,  5280,   nil,  5359,  5438,  5517,
+  5596,  5675,  4885,  3130,  2814,  2656,   901,   743,   664,   506,
+  6038,   348,  5754,  4806,  4727,  4569,  4490,  4411,  4236,  4157,
+   254,   171,  4078,  3999,  3841,  3762,  3683,  3604,  3525,  3446,
+  3288,   nil,   109,   154,   nil,   nil,   nil,  3209,   nil,    -2,
+   277,    -6,   -36,   -10,  7234,  7147,   293,   262,    92,   -56,
+    43,   nil,   nil,   126,  7060,   nil,  2972,    94,   nil,   103,
+    72,  6886,   nil,   nil,   nil,  5799,   nil,   146,   329,   113,
+   nil,  2577,  2498,   160,   nil,   270,   239,   264,   nil,  6625,
+   nil,   292,  1787,  1708,   -11,  8076,  1462,   751,  6227,   672,
+  6538,  6451,  6579,   356,    87,  8746,   593,   217,  7843,  8710,
+   514,   113,  8782,   nil,   435,   282,  8602,  8638,  6666,   922,
+  8674,  6318,   988,   218,   138,  4323,  1067,  8243,  8188,  6405,
+   909,  8132,  6492,   830,   nil,   nil,   nil,   nil,  7961,    72,
+    75,   nil,   -21,   nil,    -7,   -47,   nil,  7321,  1629,  1550,
+  7669,  1454,    23,   nil,   nil,   nil,   nil,   302,  6277,  6799,
+   nil,    86,   nil,    91,   nil,  8353,  8298,  1296,  1138,   nil,
+    92,   nil,   179,   259,   nil,  1059,   nil,   nil,  7582,  7495,
+  6083,  6175,   nil,   nil,   nil,   nil,  8463,  8408,   nil,   223,
+   nil,   -20,   -46,  6712,   nil,  5886,   253,   nil,   235,  2893,
+   nil,   nil,   nil,  6364 ]
 
 racc_action_default = [
-    -1,  -100,  -118,  -181,   -17,  -181,  -181,   -18,  -126,  -181,
-  -181,   -46,   -19,  -181,  -181,   -34,   -20,   -21,   -47,   -22,
-   -28,  -181,  -181,   -23,   -29,    -2,   -30,   -31,   -32,    -3,
-  -181,  -104,   -35,   -33,  -181,  -181,   -36,    -5,  -181,  -174,
-   -37,    -8,  -181,    -9,  -181,   -98,   -38,   -10,  -181,  -105,
-   -39,   -96,   -11,  -181,  -106,   -40,   -97,  -181,   -12,  -181,
-  -107,  -103,   -26,  -181,  -181,  -108,   -27,   -13,  -181,   -14,
-  -124,  -136,  -181,   -15,   -16,  -181,  -118,  -119,  -181,  -181,
-  -181,   -44,   -56,  -181,  -125,  -136,  -181,  -181,   -45,   -50,
-  -181,  -181,  -150,    -7,  -181,   -25,    -4,  -157,  -181,  -181,
+    -1,  -181,  -136,  -181,   -15,  -124,   -16,  -181,  -118,  -181,
+   -17,  -181,   -18,  -126,  -181,   -19,  -181,   -46,  -181,   -34,
+   -20,   -28,  -181,   -21,   -29,   -31,  -181,   -47,   -22,   -35,
+  -181,    -2,   -30,   -23,   -36,   -32,    -3,  -181,  -104,   -37,
+   -33,  -181,  -181,    -5,   -38,  -174,    -8,   -39,    -9,  -181,
+   -40,   -10,  -181,  -105,  -103,  -181,  -106,   -11,  -181,  -107,
+   -26,  -181,   -12,  -181,  -108,   -27,   -13,  -181,   -14,  -181,
+  -181,   -98,  -100,  -181,  -181,  -181,  -137,   -55,  -136,  -110,
+  -114,  -181,  -129,  -181,  -181,  -181,  -115,  -181,   -44,  -118,
+  -119,  -181,  -181,  -181,   -56,  -136,  -125,  -181,   -50,   -45,
+  -181,  -181,  -181,  -150,    -7,   -25,  -181,    -4,  -157,  -181,
+  -181,  -181,  -181,   -58,  -181,  -181,   -57,  -181,  -181,  -181,
   -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
-  -181,   -93,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
+   -93,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
   -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,  -181,
-  -181,  -181,  -181,  -181,  -181,  -181,   -58,  -181,  -181,   -57,
-  -181,  -181,  -172,  -174,  -176,  -181,  -178,  -114,  -128,  -181,
-  -181,  -181,  -181,  -181,  -115,  -136,  -109,  -181,   -95,   -51,
-   -48,   -49,  -153,   -52,  -181,   -54,   -53,  -129,  -110,  -181,
-  -181,  -137,   -55,  -181,  -181,  -181,  -181,  -117,  -181,  -181,
-  -181,  -137,  -170,  -151,  -181,  -181,  -146,   311,    -6,   -24,
-  -181,  -181,  -181,  -181,  -154,   -81,   -70,   -59,   -83,   -71,
-   -60,  -179,   -84,   -72,   -61,   -85,   -82,   -73,   -62,  -180,
-   -91,   -86,   -74,   -63,   -87,   -75,   -64,  -181,  -181,   -76,
-   -65,   -92,   -88,   -77,   -66,   -89,   -78,   -67,   -90,   -79,
-   -68,   -80,   -69,   -94,   -99,  -173,  -177,  -171,  -175,  -111,
-  -181,  -112,  -113,  -127,  -181,  -181,   -41,  -152,  -181,  -143,
-  -181,  -181,  -135,  -138,  -181,  -101,  -123,  -121,  -120,  -181,
-   -42,   -43,  -132,  -181,  -147,  -181,  -158,  -159,  -160,  -156,
-  -181,  -181,  -155,  -102,  -116,  -130,  -181,  -181,  -181,  -165,
-  -140,  -181,  -181,  -139,  -181,  -122,  -149,  -148,  -162,  -161,
-  -131,  -181,  -144,  -163,  -181,  -166,  -181,  -141,  -142,  -102,
-  -181,  -167,  -181,  -181,  -169,  -181,  -133,  -168,  -145,  -164,
-  -134 ]
+  -181,  -172,  -181,  -174,  -176,  -178,  -109,  -181,  -128,  -181,
+   -51,   -48,   -49,   -52,  -153,  -181,   -54,   -53,  -181,  -181,
+  -181,   -96,   -97,  -181,  -138,  -143,  -181,  -181,  -135,  -181,
+  -181,  -137,  -111,  -112,  -113,  -181,  -170,  -181,  -181,  -181,
+  -117,  -181,  -181,  -181,  -151,  -181,  -181,  -146,   314,    -6,
+   -24,  -181,  -181,  -181,  -181,   -90,   -79,   -68,   -80,   -69,
+  -179,  -154,   -81,   -70,   -59,   -83,   -71,   -60,  -180,   -84,
+   -72,   -61,   -85,   -82,   -73,   -62,   -91,   -86,   -74,   -63,
+   -87,   -75,   -64,  -181,  -181,   -76,   -65,   -92,   -88,   -77,
+   -66,   -89,   -78,   -67,  -171,  -175,  -173,  -177,   -41,  -181,
+  -127,  -152,  -181,   -99,  -181,  -181,   -95,  -140,  -181,  -181,
+  -139,  -181,  -130,  -116,  -123,  -121,  -120,  -181,   -42,   -43,
+  -132,  -181,  -147,  -181,  -158,  -159,  -160,  -181,  -181,  -156,
+  -155,  -102,  -181,  -181,  -165,  -181,   -94,  -101,  -142,  -141,
+  -181,  -102,  -131,  -122,  -149,  -148,  -162,  -161,  -166,  -181,
+  -163,  -181,  -181,  -144,  -133,  -181,  -181,  -169,  -167,  -181,
+  -134,  -164,  -168,  -145 ]
 
 racc_goto_table = [
-    25,    84,    83,   154,   167,   168,    82,   193,    98,   169,
-    78,    29,    86,    87,    88,    81,    89,    21,   167,   168,
-   279,   144,   291,   180,   186,    92,   277,   234,   237,    93,
-   140,   143,   154,   290,    96,   142,   146,   nil,   nil,   nil,
-   nil,    94,   nil,   nil,   nil,   154,   154,   159,   nil,   295,
-   nil,   160,   nil,   nil,   nil,   nil,   161,   nil,   nil,    34,
-   162,   nil,   163,   257,   258,   nil,   164,   165,   304,   nil,
-   nil,   166,   nil,    90,   171,   172,   nil,   nil,   175,   nil,
-   nil,   nil,   nil,   nil,   174,   nil,   nil,   nil,   181,    81,
-   nil,   nil,   nil,   245,    93,   217,   188,   nil,   nil,   nil,
-   nil,   158,   194,   195,   196,   197,   198,   199,   200,   201,
-   202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-   212,   213,   214,   215,   216,   236,   272,   219,   220,   221,
-   222,   223,   224,   225,   226,   227,   228,   229,   230,   235,
-   231,   232,   nil,   nil,   nil,   182,   nil,   285,   nil,   244,
-   243,   nil,   nil,   240,   nil,   nil,   nil,   nil,   181,   nil,
-   246,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   253,   175,   nil,   259,   nil,   167,   168,
-   nil,   260,   261,   nil,   nil,   nil,   nil,   nil,    81,    81,
-   nil,   nil,   nil,   nil,   267,   268,   nil,   nil,   nil,   233,
-   nil,   nil,   nil,   nil,   238,   154,   154,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   247,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   264,   nil,   nil,   nil,   nil,   nil,
-   nil,   281,   269,   280,   283,   nil,   nil,   nil,   nil,   nil,
-   nil,   278,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    81,   288,   289,   nil,   nil,   nil,   296,   292,
-   nil,   nil,   nil,   nil,   297,   298,   nil,   300,   nil,   nil,
-   278,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   307,   305,   nil,   nil,   308,   nil,   nil,   nil,   278,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   286,   nil,   287,   nil,   nil,   nil,   nil,   nil,
+    31,    86,    71,    41,    88,    76,    77,   109,   158,   156,
+    87,    97,    94,    96,   173,    91,   265,   266,    75,    98,
+    99,   100,    26,   302,   284,   101,    36,   282,   197,   244,
+   204,    70,   153,   103,   292,   151,   104,   155,   nil,   nil,
+   nil,   107,    86,   nil,   nil,   nil,   nil,   nil,   nil,   154,
+   nil,   nil,   160,   nil,   298,   161,   nil,   nil,   162,   158,
+   156,   163,   nil,   106,   164,   nil,   165,   nil,   nil,   nil,
+   166,   nil,   167,   307,   nil,   nil,   nil,   174,   nil,   nil,
+   nil,   181,   nil,   nil,   nil,    88,   nil,   nil,   185,   nil,
+   186,   188,    86,    86,   180,   293,   187,   nil,   181,   nil,
+   nil,   nil,   nil,   nil,   nil,   233,   104,   199,   nil,   nil,
+   254,   193,   nil,   205,   206,   207,   nil,   208,   209,   nil,
+   210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+   220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+   230,   231,   232,   246,   nil,   235,   236,   237,   238,   239,
+   240,   241,   242,   243,   280,   245,   250,   247,   249,   nil,
+   248,   nil,   nil,   nil,   nil,   nil,   nil,   251,   nil,   253,
+   nil,   nil,   nil,   nil,   nil,   nil,   256,   259,   nil,   257,
+   260,   nil,   nil,   nil,    88,    88,   nil,   188,   nil,   267,
+   nil,   nil,   nil,   nil,   268,   269,   nil,   nil,   nil,   272,
+   nil,   nil,   nil,   nil,   nil,   275,   276,   279,   nil,   nil,
+   nil,   nil,   158,   156,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   301,   nil,   nil,   303 ]
+   nil,   nil,   nil,   nil,   nil,    86,    86,   nil,   283,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   286,   nil,   nil,
+   nil,   288,   289,    88,   290,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   294,   nil,   295,   nil,   283,   nil,
+   296,   297,   nil,   301,   nil,   nil,   nil,   nil,   303,   nil,
+   nil,   nil,   nil,   nil,   305,   nil,   nil,   283,   nil,   nil,
+   nil,   nil,   306,   nil,   nil,   308,   nil,   nil,   312,   nil,
+   nil,   nil,   313 ]
 
 racc_goto_check = [
-     2,    32,     6,    30,    36,    31,     5,    41,    40,    37,
-    34,     3,     5,     5,     5,    21,     5,     1,    36,    31,
-    43,    47,    38,    37,    39,     5,    42,    26,    44,     2,
-    25,    46,    30,     8,     2,    45,    48,   nil,   nil,   nil,
-   nil,     3,   nil,   nil,   nil,    30,    30,     5,   nil,    43,
-   nil,     5,   nil,   nil,   nil,   nil,     5,   nil,   nil,     4,
-     5,   nil,     5,    23,    23,   nil,     5,     5,    43,   nil,
-   nil,     5,   nil,     4,     5,     5,   nil,   nil,     2,   nil,
-   nil,   nil,   nil,   nil,    34,   nil,   nil,   nil,     5,    21,
-   nil,   nil,   nil,    37,     2,    40,     5,   nil,   nil,   nil,
-   nil,     4,     5,     5,     5,     5,     5,     5,     5,     5,
+     2,    30,    26,     4,    21,     5,     5,    40,    36,    31,
+     5,     6,     5,    32,    25,    34,    23,    23,    37,     5,
+     5,     5,     1,    38,    43,     4,     3,    42,    39,    44,
+    41,    24,    46,     5,     8,    45,     2,    48,   nil,   nil,
+   nil,     2,    30,   nil,   nil,   nil,   nil,   nil,   nil,    47,
+   nil,   nil,     5,   nil,    43,     5,   nil,   nil,     5,    36,
+    31,     5,   nil,     3,     5,   nil,     5,   nil,   nil,   nil,
+     5,   nil,     5,    43,   nil,   nil,   nil,     5,   nil,   nil,
+   nil,     5,   nil,   nil,   nil,    21,   nil,   nil,     5,   nil,
+     4,     2,    30,    30,    37,    23,    34,   nil,     5,   nil,
+   nil,   nil,   nil,   nil,   nil,    40,     2,     5,   nil,   nil,
+    25,    37,   nil,     5,     5,     5,   nil,     5,     5,   nil,
      5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
-     5,     5,     5,     5,     5,    47,    41,     5,     5,     5,
-     5,     5,     5,     5,     5,     5,     5,     5,     5,    45,
-     5,     5,   nil,   nil,   nil,     4,   nil,    23,   nil,    32,
-     6,   nil,   nil,     5,   nil,   nil,   nil,   nil,     5,   nil,
-     5,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,     5,     2,   nil,     2,   nil,    36,    31,
-   nil,     5,     5,   nil,   nil,   nil,   nil,   nil,    21,    21,
+     5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
+     5,     5,     5,    45,   nil,     5,     5,     5,     5,     5,
+     5,     5,     5,     5,    41,     4,     6,    47,    32,   nil,
+     5,   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,    26,
+   nil,   nil,   nil,   nil,   nil,   nil,     4,     2,   nil,     5,
+     5,   nil,   nil,   nil,    21,    21,   nil,     2,   nil,     2,
    nil,   nil,   nil,   nil,     5,     5,   nil,   nil,   nil,     4,
-   nil,   nil,   nil,   nil,     4,    30,    30,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,     4,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,     4,   nil,   nil,   nil,   nil,   nil,
-   nil,     2,     4,     5,     5,   nil,   nil,   nil,   nil,   nil,
-   nil,    21,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    21,     5,     5,   nil,   nil,   nil,     2,     5,
-   nil,   nil,   nil,   nil,     5,     5,   nil,     5,   nil,   nil,
-    21,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,     2,     5,   nil,   nil,     5,   nil,   nil,   nil,    21,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,     4,   nil,     4,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,     5,     5,     4,   nil,   nil,
+   nil,   nil,    36,    31,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-     4,   nil,   nil,     4 ]
+   nil,   nil,   nil,   nil,   nil,    30,    30,   nil,    21,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,     4,   nil,   nil,
+   nil,     5,     5,    21,     5,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,     4,   nil,     4,   nil,    21,   nil,
+     5,     5,   nil,     2,   nil,   nil,   nil,   nil,     5,   nil,
+   nil,   nil,   nil,   nil,     5,   nil,   nil,    21,   nil,   nil,
+   nil,   nil,     4,   nil,   nil,     4,   nil,   nil,     2,   nil,
+   nil,   nil,     5 ]
 
 racc_goto_pointer = [
-   nil,    17,     0,    11,    59,     3,    -3,   nil,  -242,   nil,
+   nil,    22,     0,    26,     3,     3,    -3,   nil,  -228,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    13,   nil,  -112,   nil,    -8,  -114,   nil,   nil,   nil,
-   -38,   -65,    -4,   nil,     8,   nil,   -66,   -62,  -254,   -66,
-   -27,   -91,  -222,  -228,  -117,    -4,    -8,   -18,    -3 ]
+   nil,    -4,   nil,  -172,    30,   -59,     1,   nil,   nil,   nil,
+    -4,   -37,    -1,   nil,     7,   nil,   -38,    16,  -262,   -73,
+   -35,   -79,  -225,  -228,  -123,   -10,   -13,     4,    -8 ]
 
 racc_goto_default = [
-   nil,   nil,   250,   nil,   nil,    37,    41,    43,    47,    52,
-    58,    67,    69,    73,    74,     4,     7,    12,    16,    17,
-    19,    23,    31,    77,    38,    42,    45,    49,    54,    60,
-    65,   156,    70,   147,   nil,     8,   148,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,    39,   nil,   nil,   nil,   nil ]
+   nil,   nil,   176,   nil,   nil,    43,    46,    48,    51,    57,
+    62,    66,    68,     4,     6,    10,    12,    15,    20,    23,
+    28,    33,    38,    90,   nil,   nil,   nil,    53,    56,    59,
+    64,    79,     5,    80,   nil,    13,    82,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    45,   nil,   nil,   nil,   nil ]
 
 racc_reduce_table = [
   0, 0, :racc_error,
-  0, 100, :_reduce_1,
-  1, 100, :_reduce_2,
-  1, 100, :_reduce_3,
-  2, 100, :_reduce_4,
-  1, 102, :_reduce_5,
-  3, 102, :_reduce_6,
-  2, 102, :_reduce_7,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  1, 104, :_reduce_none,
-  3, 103, :_reduce_24,
-  2, 103, :_reduce_25,
-  1, 101, :_reduce_none,
-  1, 101, :_reduce_none,
-  1, 121, :_reduce_28,
-  1, 121, :_reduce_29,
-  1, 121, :_reduce_30,
-  1, 121, :_reduce_31,
-  1, 121, :_reduce_32,
-  1, 121, :_reduce_33,
-  1, 121, :_reduce_34,
-  1, 121, :_reduce_35,
-  1, 121, :_reduce_36,
-  1, 121, :_reduce_37,
-  1, 121, :_reduce_38,
-  1, 121, :_reduce_39,
-  1, 121, :_reduce_40,
-  3, 109, :_reduce_41,
-  3, 122, :_reduce_42,
-  3, 122, :_reduce_43,
-  1, 122, :_reduce_44,
-  2, 113, :_reduce_45,
-  1, 113, :_reduce_46,
-  1, 120, :_reduce_47,
-  2, 108, :_reduce_48,
-  2, 108, :_reduce_49,
-  2, 108, :_reduce_50,
-  2, 108, :_reduce_51,
-  2, 108, :_reduce_52,
-  2, 108, :_reduce_53,
-  2, 108, :_reduce_54,
-  2, 108, :_reduce_55,
-  2, 108, :_reduce_56,
-  2, 108, :_reduce_57,
-  2, 108, :_reduce_58,
-  3, 108, :_reduce_59,
-  3, 108, :_reduce_60,
-  3, 108, :_reduce_61,
-  3, 108, :_reduce_62,
-  3, 108, :_reduce_63,
-  3, 108, :_reduce_64,
-  3, 108, :_reduce_65,
-  3, 108, :_reduce_66,
-  3, 108, :_reduce_67,
-  3, 108, :_reduce_68,
-  3, 108, :_reduce_69,
-  3, 108, :_reduce_70,
-  3, 108, :_reduce_71,
-  3, 108, :_reduce_72,
-  3, 108, :_reduce_73,
-  3, 108, :_reduce_74,
-  3, 108, :_reduce_75,
-  3, 108, :_reduce_76,
-  3, 108, :_reduce_77,
-  3, 108, :_reduce_78,
-  3, 108, :_reduce_79,
-  3, 108, :_reduce_80,
-  3, 108, :_reduce_81,
-  3, 108, :_reduce_82,
-  3, 108, :_reduce_83,
-  3, 108, :_reduce_84,
-  3, 108, :_reduce_85,
-  3, 108, :_reduce_86,
-  3, 108, :_reduce_87,
-  3, 108, :_reduce_88,
-  3, 108, :_reduce_89,
-  3, 108, :_reduce_90,
-  3, 108, :_reduce_91,
-  3, 108, :_reduce_92,
-  2, 119, :_reduce_93,
-  3, 107, :_reduce_94,
-  2, 107, :_reduce_95,
-  1, 124, :_reduce_96,
-  1, 124, :_reduce_97,
-  1, 123, :_reduce_98,
-  3, 123, :_reduce_99,
-  1, 125, :_reduce_none,
-  4, 125, :_reduce_101,
-  4, 118, :_reduce_102,
-  1, 105, :_reduce_103,
-  1, 105, :_reduce_104,
-  1, 105, :_reduce_105,
-  1, 105, :_reduce_106,
-  1, 105, :_reduce_107,
-  1, 105, :_reduce_108,
-  2, 105, :_reduce_109,
-  2, 105, :_reduce_110,
-  2, 130, :_reduce_111,
-  2, 130, :_reduce_112,
-  2, 130, :_reduce_113,
-  1, 130, :_reduce_114,
-  1, 130, :_reduce_115,
-  3, 132, :_reduce_116,
-  3, 127, :_reduce_117,
-  0, 133, :_reduce_118,
-  1, 133, :_reduce_119,
-  3, 133, :_reduce_120,
-  3, 133, :_reduce_121,
-  4, 133, :_reduce_122,
-  3, 133, :_reduce_123,
-  1, 106, :_reduce_124,
-  2, 106, :_reduce_125,
-  1, 106, :_reduce_126,
-  3, 117, :_reduce_127,
-  2, 131, :_reduce_128,
-  2, 131, :_reduce_129,
-  3, 135, :_reduce_130,
-  4, 135, :_reduce_131,
-  4, 134, :_reduce_132,
-  6, 129, :_reduce_133,
-  7, 129, :_reduce_134,
-  3, 126, :_reduce_135,
-  0, 136, :_reduce_136,
-  1, 136, :_reduce_137,
-  2, 136, :_reduce_138,
-  3, 136, :_reduce_139,
-  3, 136, :_reduce_140,
-  4, 136, :_reduce_141,
-  4, 136, :_reduce_142,
-  2, 136, :_reduce_143,
-  1, 137, :_reduce_144,
-  3, 137, :_reduce_145,
-  3, 111, :_reduce_146,
-  4, 111, :_reduce_147,
-  5, 111, :_reduce_148,
-  3, 138, :_reduce_149,
-  2, 112, :_reduce_150,
-  3, 128, :_reduce_151,
-  3, 114, :_reduce_152,
-  2, 114, :_reduce_153,
-  3, 114, :_reduce_154,
-  4, 115, :_reduce_155,
-  4, 115, :_reduce_156,
-  1, 139, :_reduce_157,
-  3, 139, :_reduce_158,
-  2, 140, :_reduce_159,
-  2, 140, :_reduce_160,
-  3, 140, :_reduce_161,
-  3, 140, :_reduce_162,
-  5, 116, :_reduce_163,
-  7, 116, :_reduce_164,
-  1, 141, :_reduce_165,
-  2, 141, :_reduce_166,
-  3, 142, :_reduce_167,
-  4, 142, :_reduce_168,
-  3, 142, :_reduce_169,
-  3, 143, :_reduce_170,
-  2, 144, :_reduce_171,
-  1, 145, :_reduce_172,
-  2, 145, :_reduce_173,
-  0, 146, :_reduce_174,
-  2, 146, :_reduce_175,
-  1, 147, :_reduce_176,
-  2, 147, :_reduce_177,
-  2, 110, :_reduce_178,
-  3, 110, :_reduce_179,
-  3, 110, :_reduce_180 ]
+  0, 102, :_reduce_1,
+  1, 102, :_reduce_2,
+  1, 102, :_reduce_3,
+  2, 102, :_reduce_4,
+  1, 104, :_reduce_5,
+  3, 104, :_reduce_6,
+  2, 104, :_reduce_7,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  1, 106, :_reduce_none,
+  3, 105, :_reduce_24,
+  2, 105, :_reduce_25,
+  1, 103, :_reduce_none,
+  1, 103, :_reduce_none,
+  1, 123, :_reduce_28,
+  1, 123, :_reduce_29,
+  1, 123, :_reduce_30,
+  1, 123, :_reduce_31,
+  1, 123, :_reduce_32,
+  1, 123, :_reduce_33,
+  1, 123, :_reduce_34,
+  1, 123, :_reduce_35,
+  1, 123, :_reduce_36,
+  1, 123, :_reduce_37,
+  1, 123, :_reduce_38,
+  1, 123, :_reduce_39,
+  1, 123, :_reduce_40,
+  3, 111, :_reduce_41,
+  3, 124, :_reduce_42,
+  3, 124, :_reduce_43,
+  1, 124, :_reduce_44,
+  2, 115, :_reduce_45,
+  1, 115, :_reduce_46,
+  1, 122, :_reduce_47,
+  2, 110, :_reduce_48,
+  2, 110, :_reduce_49,
+  2, 110, :_reduce_50,
+  2, 110, :_reduce_51,
+  2, 110, :_reduce_52,
+  2, 110, :_reduce_53,
+  2, 110, :_reduce_54,
+  2, 110, :_reduce_55,
+  2, 110, :_reduce_56,
+  2, 110, :_reduce_57,
+  2, 110, :_reduce_58,
+  3, 110, :_reduce_59,
+  3, 110, :_reduce_60,
+  3, 110, :_reduce_61,
+  3, 110, :_reduce_62,
+  3, 110, :_reduce_63,
+  3, 110, :_reduce_64,
+  3, 110, :_reduce_65,
+  3, 110, :_reduce_66,
+  3, 110, :_reduce_67,
+  3, 110, :_reduce_68,
+  3, 110, :_reduce_69,
+  3, 110, :_reduce_70,
+  3, 110, :_reduce_71,
+  3, 110, :_reduce_72,
+  3, 110, :_reduce_73,
+  3, 110, :_reduce_74,
+  3, 110, :_reduce_75,
+  3, 110, :_reduce_76,
+  3, 110, :_reduce_77,
+  3, 110, :_reduce_78,
+  3, 110, :_reduce_79,
+  3, 110, :_reduce_80,
+  3, 110, :_reduce_81,
+  3, 110, :_reduce_82,
+  3, 110, :_reduce_83,
+  3, 110, :_reduce_84,
+  3, 110, :_reduce_85,
+  3, 110, :_reduce_86,
+  3, 110, :_reduce_87,
+  3, 110, :_reduce_88,
+  3, 110, :_reduce_89,
+  3, 110, :_reduce_90,
+  3, 110, :_reduce_91,
+  3, 110, :_reduce_92,
+  2, 121, :_reduce_93,
+  5, 109, :_reduce_94,
+  4, 109, :_reduce_95,
+  1, 126, :_reduce_96,
+  1, 126, :_reduce_97,
+  1, 125, :_reduce_98,
+  3, 125, :_reduce_99,
+  1, 127, :_reduce_none,
+  4, 127, :_reduce_101,
+  4, 120, :_reduce_102,
+  1, 107, :_reduce_103,
+  1, 107, :_reduce_104,
+  1, 107, :_reduce_105,
+  1, 107, :_reduce_106,
+  1, 107, :_reduce_107,
+  1, 107, :_reduce_108,
+  2, 107, :_reduce_109,
+  2, 107, :_reduce_110,
+  2, 132, :_reduce_111,
+  2, 132, :_reduce_112,
+  2, 132, :_reduce_113,
+  1, 132, :_reduce_114,
+  1, 132, :_reduce_115,
+  3, 134, :_reduce_116,
+  3, 129, :_reduce_117,
+  0, 135, :_reduce_118,
+  1, 135, :_reduce_119,
+  3, 135, :_reduce_120,
+  3, 135, :_reduce_121,
+  4, 135, :_reduce_122,
+  3, 135, :_reduce_123,
+  1, 108, :_reduce_124,
+  2, 108, :_reduce_125,
+  1, 108, :_reduce_126,
+  3, 119, :_reduce_127,
+  2, 133, :_reduce_128,
+  2, 133, :_reduce_129,
+  3, 137, :_reduce_130,
+  4, 137, :_reduce_131,
+  4, 136, :_reduce_132,
+  6, 131, :_reduce_133,
+  7, 131, :_reduce_134,
+  3, 128, :_reduce_135,
+  0, 138, :_reduce_136,
+  1, 138, :_reduce_137,
+  2, 138, :_reduce_138,
+  3, 138, :_reduce_139,
+  3, 138, :_reduce_140,
+  4, 138, :_reduce_141,
+  4, 138, :_reduce_142,
+  2, 138, :_reduce_143,
+  1, 139, :_reduce_144,
+  3, 139, :_reduce_145,
+  3, 113, :_reduce_146,
+  4, 113, :_reduce_147,
+  5, 113, :_reduce_148,
+  3, 140, :_reduce_149,
+  2, 114, :_reduce_150,
+  3, 130, :_reduce_151,
+  3, 116, :_reduce_152,
+  2, 116, :_reduce_153,
+  3, 116, :_reduce_154,
+  4, 117, :_reduce_155,
+  4, 117, :_reduce_156,
+  1, 141, :_reduce_157,
+  3, 141, :_reduce_158,
+  2, 142, :_reduce_159,
+  2, 142, :_reduce_160,
+  3, 142, :_reduce_161,
+  3, 142, :_reduce_162,
+  5, 118, :_reduce_163,
+  7, 118, :_reduce_164,
+  1, 143, :_reduce_165,
+  2, 143, :_reduce_166,
+  3, 144, :_reduce_167,
+  4, 144, :_reduce_168,
+  3, 144, :_reduce_169,
+  3, 145, :_reduce_170,
+  2, 146, :_reduce_171,
+  1, 147, :_reduce_172,
+  2, 147, :_reduce_173,
+  0, 148, :_reduce_174,
+  2, 148, :_reduce_175,
+  1, 149, :_reduce_176,
+  2, 149, :_reduce_177,
+  2, 112, :_reduce_178,
+  3, 112, :_reduce_179,
+  3, 112, :_reduce_180 ]
 
 racc_reduce_n = 181
 
-racc_shift_n = 311
+racc_shift_n = 314
 
 racc_token_table = {
   false => 0,
@@ -1071,88 +1026,90 @@ racc_token_table = {
   :PROTOTYPE_ACCESS => 16,
   :SOAK_ACCESS => 17,
   :CODE => 18,
-  :PARAM => 19,
-  :NEW => 20,
-  :RETURN => 21,
-  :TRY => 22,
-  :CATCH => 23,
-  :FINALLY => 24,
-  :THROW => 25,
-  :BREAK => 26,
-  :CONTINUE => 27,
-  :FOR => 28,
-  :IN => 29,
-  :OF => 30,
-  :BY => 31,
-  :WHEN => 32,
-  :WHILE => 33,
-  :SWITCH => 34,
-  :LEADING_WHEN => 35,
-  :DELETE => 36,
-  :INSTANCEOF => 37,
-  :TYPEOF => 38,
-  :SUPER => 39,
-  :EXTENDS => 40,
-  :ARGUMENTS => 41,
-  :NEWLINE => 42,
-  :COMMENT => 43,
-  :JS => 44,
-  :INDENT => 45,
-  :OUTDENT => 46,
-  "?" => 47,
-  :UMINUS => 48,
-  :NOT => 49,
-  "!" => 50,
-  "!!" => 51,
-  "~" => 52,
-  "++" => 53,
-  "--" => 54,
-  "*" => 55,
-  "/" => 56,
-  "%" => 57,
-  "+" => 58,
-  "-" => 59,
-  "<<" => 60,
-  ">>" => 61,
-  ">>>" => 62,
-  "&" => 63,
-  "|" => 64,
-  "^" => 65,
-  "<=" => 66,
-  "<" => 67,
-  ">" => 68,
-  ">=" => 69,
-  "==" => 70,
-  "!=" => 71,
-  :IS => 72,
-  :ISNT => 73,
-  "&&" => 74,
-  "||" => 75,
-  :AND => 76,
-  :OR => 77,
-  "-=" => 78,
-  "+=" => 79,
-  "/=" => 80,
-  "*=" => 81,
-  "%=" => 82,
-  "." => 83,
-  "||=" => 84,
-  "&&=" => 85,
-  "?=" => 86,
-  :ASSIGN => 87,
-  "=>" => 88,
-  "==>" => 89,
-  "\n" => 90,
-  ";" => 91,
-  "," => 92,
-  "[" => 93,
-  "]" => 94,
-  "{" => 95,
-  "}" => 96,
-  "(" => 97,
-  ")" => 98 }
+  :PARAM_START => 19,
+  :PARAM => 20,
+  :PARAM_END => 21,
+  :NEW => 22,
+  :RETURN => 23,
+  :TRY => 24,
+  :CATCH => 25,
+  :FINALLY => 26,
+  :THROW => 27,
+  :BREAK => 28,
+  :CONTINUE => 29,
+  :FOR => 30,
+  :IN => 31,
+  :OF => 32,
+  :BY => 33,
+  :WHEN => 34,
+  :WHILE => 35,
+  :SWITCH => 36,
+  :LEADING_WHEN => 37,
+  :DELETE => 38,
+  :INSTANCEOF => 39,
+  :TYPEOF => 40,
+  :SUPER => 41,
+  :EXTENDS => 42,
+  :ARGUMENTS => 43,
+  :NEWLINE => 44,
+  :COMMENT => 45,
+  :JS => 46,
+  :INDENT => 47,
+  :OUTDENT => 48,
+  "?" => 49,
+  :UMINUS => 50,
+  :NOT => 51,
+  "!" => 52,
+  "!!" => 53,
+  "~" => 54,
+  "++" => 55,
+  "--" => 56,
+  "*" => 57,
+  "/" => 58,
+  "%" => 59,
+  "+" => 60,
+  "-" => 61,
+  "<<" => 62,
+  ">>" => 63,
+  ">>>" => 64,
+  "&" => 65,
+  "|" => 66,
+  "^" => 67,
+  "<=" => 68,
+  "<" => 69,
+  ">" => 70,
+  ">=" => 71,
+  "==" => 72,
+  "!=" => 73,
+  :IS => 74,
+  :ISNT => 75,
+  "&&" => 76,
+  "||" => 77,
+  :AND => 78,
+  :OR => 79,
+  "-=" => 80,
+  "+=" => 81,
+  "/=" => 82,
+  "*=" => 83,
+  "%=" => 84,
+  "." => 85,
+  "||=" => 86,
+  "&&=" => 87,
+  "?=" => 88,
+  :ASSIGN => 89,
+  "=>" => 90,
+  "==>" => 91,
+  "\n" => 92,
+  ";" => 93,
+  "," => 94,
+  "[" => 95,
+  "]" => 96,
+  "{" => 97,
+  "}" => 98,
+  "(" => 99,
+  ")" => 100 }
 
-racc_nt_base = 99
+racc_nt_base = 101
 
 racc_use_result_var = true
 
@@ -1192,7 +1149,9 @@ Racc_token_to_s_table = [
   "PROTOTYPE_ACCESS",
   "SOAK_ACCESS",
   "CODE",
+  "PARAM_START",
   "PARAM",
+  "PARAM_END",
   "NEW",
   "RETURN",
   "TRY",
@@ -1889,42 +1848,42 @@ module_eval(<<'.,.,', 'grammar.y', 197)
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 202)
-  def _reduce_94(val, _values, result)
-     result = CodeNode.new(val[0], val[2], val[1]) 
-    result
-  end
-.,.,
-
 module_eval(<<'.,.,', 'grammar.y', 203)
-  def _reduce_95(val, _values, result)
-     result = CodeNode.new([], val[1], val[0]) 
+  def _reduce_94(val, _values, result)
+     result = CodeNode.new(val[1], val[4], val[3]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 208)
+module_eval(<<'.,.,', 'grammar.y', 205)
+  def _reduce_95(val, _values, result)
+     result = CodeNode.new([], val[3], val[2]) 
+    result
+  end
+.,.,
+
+module_eval(<<'.,.,', 'grammar.y', 210)
   def _reduce_96(val, _values, result)
      result = :func 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 209)
+module_eval(<<'.,.,', 'grammar.y', 211)
   def _reduce_97(val, _values, result)
      result = :boundfunc 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 214)
+module_eval(<<'.,.,', 'grammar.y', 216)
   def _reduce_98(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 215)
+module_eval(<<'.,.,', 'grammar.y', 217)
   def _reduce_99(val, _values, result)
      result = val[0] << val[2] 
     result
@@ -1933,560 +1892,560 @@ module_eval(<<'.,.,', 'grammar.y', 215)
 
 # reduce 100 omitted
 
-module_eval(<<'.,.,', 'grammar.y', 221)
+module_eval(<<'.,.,', 'grammar.y', 223)
   def _reduce_101(val, _values, result)
      result = SplatNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 226)
+module_eval(<<'.,.,', 'grammar.y', 228)
   def _reduce_102(val, _values, result)
      result = SplatNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 231)
+module_eval(<<'.,.,', 'grammar.y', 233)
   def _reduce_103(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 232)
+module_eval(<<'.,.,', 'grammar.y', 234)
   def _reduce_104(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 233)
+module_eval(<<'.,.,', 'grammar.y', 235)
   def _reduce_105(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 234)
+module_eval(<<'.,.,', 'grammar.y', 236)
   def _reduce_106(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 235)
+module_eval(<<'.,.,', 'grammar.y', 237)
   def _reduce_107(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 236)
+module_eval(<<'.,.,', 'grammar.y', 238)
   def _reduce_108(val, _values, result)
      result = ValueNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 237)
+module_eval(<<'.,.,', 'grammar.y', 239)
   def _reduce_109(val, _values, result)
      result = val[0] << val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 238)
+module_eval(<<'.,.,', 'grammar.y', 240)
   def _reduce_110(val, _values, result)
      result = ValueNode.new(val[0], [val[1]]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 243)
+module_eval(<<'.,.,', 'grammar.y', 245)
   def _reduce_111(val, _values, result)
      result = AccessorNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 244)
+module_eval(<<'.,.,', 'grammar.y', 246)
   def _reduce_112(val, _values, result)
      result = AccessorNode.new(val[1], :prototype) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 245)
+module_eval(<<'.,.,', 'grammar.y', 247)
   def _reduce_113(val, _values, result)
      result = AccessorNode.new(val[1], :soak) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 246)
+module_eval(<<'.,.,', 'grammar.y', 248)
   def _reduce_114(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 247)
+module_eval(<<'.,.,', 'grammar.y', 249)
   def _reduce_115(val, _values, result)
      result = SliceNode.new(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 252)
+module_eval(<<'.,.,', 'grammar.y', 254)
   def _reduce_116(val, _values, result)
      result = IndexNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 257)
+module_eval(<<'.,.,', 'grammar.y', 259)
   def _reduce_117(val, _values, result)
      result = ObjectNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 262)
+module_eval(<<'.,.,', 'grammar.y', 264)
   def _reduce_118(val, _values, result)
      result = [] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 263)
+module_eval(<<'.,.,', 'grammar.y', 265)
   def _reduce_119(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 264)
+module_eval(<<'.,.,', 'grammar.y', 266)
   def _reduce_120(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 265)
+module_eval(<<'.,.,', 'grammar.y', 267)
   def _reduce_121(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 267)
+module_eval(<<'.,.,', 'grammar.y', 269)
   def _reduce_122(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 268)
+module_eval(<<'.,.,', 'grammar.y', 270)
   def _reduce_123(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 273)
+module_eval(<<'.,.,', 'grammar.y', 275)
   def _reduce_124(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 274)
+module_eval(<<'.,.,', 'grammar.y', 276)
   def _reduce_125(val, _values, result)
      result = val[1].new_instance 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 275)
+module_eval(<<'.,.,', 'grammar.y', 277)
   def _reduce_126(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 280)
+module_eval(<<'.,.,', 'grammar.y', 282)
   def _reduce_127(val, _values, result)
      result = ExtendsNode.new(val[0], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 285)
+module_eval(<<'.,.,', 'grammar.y', 287)
   def _reduce_128(val, _values, result)
      result = CallNode.new(val[0], val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 286)
+module_eval(<<'.,.,', 'grammar.y', 288)
   def _reduce_129(val, _values, result)
      result = CallNode.new(val[0], val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 291)
+module_eval(<<'.,.,', 'grammar.y', 293)
   def _reduce_130(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 292)
+module_eval(<<'.,.,', 'grammar.y', 294)
   def _reduce_131(val, _values, result)
      result = val[1] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 297)
+module_eval(<<'.,.,', 'grammar.y', 299)
   def _reduce_132(val, _values, result)
      result = CallNode.new(Value.new('super'), val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 303)
+module_eval(<<'.,.,', 'grammar.y', 305)
   def _reduce_133(val, _values, result)
      result = RangeNode.new(val[1], val[4]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 305)
+module_eval(<<'.,.,', 'grammar.y', 307)
   def _reduce_134(val, _values, result)
      result = RangeNode.new(val[1], val[5], true) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 310)
+module_eval(<<'.,.,', 'grammar.y', 312)
   def _reduce_135(val, _values, result)
      result = ArrayNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 315)
+module_eval(<<'.,.,', 'grammar.y', 317)
   def _reduce_136(val, _values, result)
      result = [] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 316)
+module_eval(<<'.,.,', 'grammar.y', 318)
   def _reduce_137(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 317)
+module_eval(<<'.,.,', 'grammar.y', 319)
   def _reduce_138(val, _values, result)
      result = [val[1]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 318)
+module_eval(<<'.,.,', 'grammar.y', 320)
   def _reduce_139(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 319)
+module_eval(<<'.,.,', 'grammar.y', 321)
   def _reduce_140(val, _values, result)
      result = val[0] << val[2] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 320)
+module_eval(<<'.,.,', 'grammar.y', 322)
   def _reduce_141(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 321)
+module_eval(<<'.,.,', 'grammar.y', 323)
   def _reduce_142(val, _values, result)
      result = val[0] << val[3] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 322)
+module_eval(<<'.,.,', 'grammar.y', 324)
   def _reduce_143(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 327)
+module_eval(<<'.,.,', 'grammar.y', 329)
   def _reduce_144(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 328)
+module_eval(<<'.,.,', 'grammar.y', 330)
   def _reduce_145(val, _values, result)
      result = ([val[0]] << val[2]).flatten 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 333)
+module_eval(<<'.,.,', 'grammar.y', 335)
   def _reduce_146(val, _values, result)
      result = TryNode.new(val[1], val[2][0], val[2][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 334)
+module_eval(<<'.,.,', 'grammar.y', 336)
   def _reduce_147(val, _values, result)
      result = TryNode.new(val[1], nil, nil, val[3]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 336)
+module_eval(<<'.,.,', 'grammar.y', 338)
   def _reduce_148(val, _values, result)
      result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 341)
+module_eval(<<'.,.,', 'grammar.y', 343)
   def _reduce_149(val, _values, result)
      result = [val[1], val[2]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 346)
+module_eval(<<'.,.,', 'grammar.y', 348)
   def _reduce_150(val, _values, result)
      result = ThrowNode.new(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 351)
+module_eval(<<'.,.,', 'grammar.y', 353)
   def _reduce_151(val, _values, result)
      result = ParentheticalNode.new(val[1], val[0].line) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 356)
+module_eval(<<'.,.,', 'grammar.y', 358)
   def _reduce_152(val, _values, result)
      result = WhileNode.new(val[1], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 357)
+module_eval(<<'.,.,', 'grammar.y', 359)
   def _reduce_153(val, _values, result)
      result = WhileNode.new(val[1], nil) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 358)
+module_eval(<<'.,.,', 'grammar.y', 360)
   def _reduce_154(val, _values, result)
      result = WhileNode.new(val[2], Expressions.wrap(val[0])) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 365)
+module_eval(<<'.,.,', 'grammar.y', 367)
   def _reduce_155(val, _values, result)
      result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 366)
+module_eval(<<'.,.,', 'grammar.y', 368)
   def _reduce_156(val, _values, result)
      result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 371)
+module_eval(<<'.,.,', 'grammar.y', 373)
   def _reduce_157(val, _values, result)
      result = val 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 372)
+module_eval(<<'.,.,', 'grammar.y', 374)
   def _reduce_158(val, _values, result)
      result = [val[0], val[2]] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 377)
+module_eval(<<'.,.,', 'grammar.y', 379)
   def _reduce_159(val, _values, result)
      result = {:source => val[1]} 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 378)
+module_eval(<<'.,.,', 'grammar.y', 380)
   def _reduce_160(val, _values, result)
      result = {:source => val[1], :object => true} 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 380)
+module_eval(<<'.,.,', 'grammar.y', 382)
   def _reduce_161(val, _values, result)
      result = val[0].merge(:filter => val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 382)
+module_eval(<<'.,.,', 'grammar.y', 384)
   def _reduce_162(val, _values, result)
      result = val[0].merge(:step => val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 388)
+module_eval(<<'.,.,', 'grammar.y', 390)
   def _reduce_163(val, _values, result)
      result = val[3].rewrite_condition(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 390)
+module_eval(<<'.,.,', 'grammar.y', 392)
   def _reduce_164(val, _values, result)
      result = val[3].rewrite_condition(val[1]).add_else(val[5]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 395)
+module_eval(<<'.,.,', 'grammar.y', 397)
   def _reduce_165(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 396)
+module_eval(<<'.,.,', 'grammar.y', 398)
   def _reduce_166(val, _values, result)
      result = val[0] << val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 401)
+module_eval(<<'.,.,', 'grammar.y', 403)
   def _reduce_167(val, _values, result)
      result = IfNode.new(val[1], val[2], nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 403)
+module_eval(<<'.,.,', 'grammar.y', 405)
   def _reduce_168(val, _values, result)
      result = IfNode.new(val[1], val[2], nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 404)
+module_eval(<<'.,.,', 'grammar.y', 406)
   def _reduce_169(val, _values, result)
      result = val[2].add_comment(val[0]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 409)
+module_eval(<<'.,.,', 'grammar.y', 411)
   def _reduce_170(val, _values, result)
      result = IfNode.new(val[1], val[2]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 414)
+module_eval(<<'.,.,', 'grammar.y', 416)
   def _reduce_171(val, _values, result)
      result = val[1].force_statement 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 419)
+module_eval(<<'.,.,', 'grammar.y', 421)
   def _reduce_172(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 420)
+module_eval(<<'.,.,', 'grammar.y', 422)
   def _reduce_173(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 425)
+module_eval(<<'.,.,', 'grammar.y', 427)
   def _reduce_174(val, _values, result)
      result = nil 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 426)
+module_eval(<<'.,.,', 'grammar.y', 428)
   def _reduce_175(val, _values, result)
      result = val[1] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 431)
+module_eval(<<'.,.,', 'grammar.y', 433)
   def _reduce_176(val, _values, result)
      result = val[0] 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 432)
+module_eval(<<'.,.,', 'grammar.y', 434)
   def _reduce_177(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 437)
+module_eval(<<'.,.,', 'grammar.y', 439)
   def _reduce_178(val, _values, result)
      result = val[0].add_else(val[1]) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 438)
+module_eval(<<'.,.,', 'grammar.y', 440)
   def _reduce_179(val, _values, result)
      result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) 
     result
   end
 .,.,
 
-module_eval(<<'.,.,', 'grammar.y', 439)
+module_eval(<<'.,.,', 'grammar.y', 441)
   def _reduce_180(val, _values, result)
      result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) 
     result
diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb
index 964aa191..bb573e38 100644
--- a/lib/coffee_script/rewriter.rb
+++ b/lib/coffee_script/rewriter.rb
@@ -6,7 +6,7 @@ module CoffeeScript
   class Rewriter
 
     # Tokens that must be balanced.
-    BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT]]
+    BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT], [:PARAM_START, :PARAM_END]]
 
     # Tokens that signal the start of a balanced pair.
     EXPRESSION_START = BALANCED_PAIRS.map {|pair| pair.first }
@@ -19,8 +19,8 @@ module CoffeeScript
 
     # Tokens pairs that, in immediate succession, indicate an implicit call.
     IMPLICIT_FUNC = [:IDENTIFIER, :SUPER]
-    IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n"]
-    IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM,
+    IMPLICIT_END  = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START]
+    IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START,
                      :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS,
                      :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT]
 
@@ -34,7 +34,7 @@ module CoffeeScript
     # Single-line flavors of block expressions that have unclosed endings.
     # The grammar can't disambiguate them, so we insert the implicit indentation.
     SINGLE_LINERS  = [:ELSE, "=>", "==>", :TRY, :FINALLY, :THEN]
-    SINGLE_CLOSERS = ["\n", :CATCH, :FINALLY, :ELSE, :OUTDENT, :LEADING_WHEN]
+    SINGLE_CLOSERS = ["\n", :CATCH, :FINALLY, :ELSE, :OUTDENT, :LEADING_WHEN, :PARAM_START]
 
     # Rewrite the token stream in multiple passes, one logical filter at
     # a time. This could certainly be changed into a single pass through the
@@ -138,7 +138,8 @@ module CoffeeScript
           if (!tok || SINGLE_CLOSERS.include?(tok[0]) ||
               (tok[0] == ')' && parens == 0)) &&
               !(starter == :ELSE && tok[0] == :ELSE)
-            @tokens.insert(idx, [:OUTDENT, Value.new(2, line)])
+            insertion = @tokens[idx - 1][0] == "," ? idx - 1 : idx
+            @tokens.insert(insertion, [:OUTDENT, Value.new(2, line)])
             break
           end
           parens += 1 if tok[0] == '('
@@ -164,7 +165,7 @@ module CoffeeScript
         next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0])
         @tokens.insert(i, ['(', Value.new('(', token[1].line)])
         open = true
-        next 2
+        next token[0] == :PARAM_START ? 1 : 2
       end
     end
 
@@ -188,7 +189,7 @@ module CoffeeScript
     end
 
     # We'd like to support syntax like this:
-    #    el.click(event =>
+    #    el.click((event) =>
     #      el.hide())
     # In order to accomplish this, move outdents that follow closing parens
     # inwards, safely. The steps to accomplish this are:
diff --git a/test/fixtures/execution/test_arguments.coffee b/test/fixtures/execution/test_arguments.coffee
index dcfb7d28..32b61e1a 100644
--- a/test/fixtures/execution/test_arguments.coffee
+++ b/test/fixtures/execution/test_arguments.coffee
@@ -1,4 +1,4 @@
-area: x, y, x1, y1 =>
+area: (x, y, x1, y1) =>
   (x - x1) * (x - y1)
 
 x:  y:  10
@@ -18,14 +18,14 @@ print(area(
 
 
 # Arguments are turned into arrays.
-curried: =>
+curried: () =>
   print area.apply(this, arguments.concat(20, 20)) is 100
 
 curried 10, 10
 
 
 # Arguments is not a special keyword -- it can be assigned to:
-func: =>
+func: () =>
   arguments: 25
   arguments
 
diff --git a/test/fixtures/execution/test_array_comprehension.coffee b/test/fixtures/execution/test_array_comprehension.coffee
index b5005bd6..f0ab48c3 100644
--- a/test/fixtures/execution/test_array_comprehension.coffee
+++ b/test/fixtures/execution/test_array_comprehension.coffee
@@ -34,7 +34,7 @@ methods: ['one', 'two', 'three']
 
 for method in methods
   name: method
-  obj[name]: =>
+  obj[name]: () =>
     "I'm " + name
 
 print obj.one()   is "I'm one"
diff --git a/test/fixtures/execution/test_assignment.coffee b/test/fixtures/execution/test_assignment.coffee
index c1b5d127..ff25e765 100644
--- a/test/fixtures/execution/test_assignment.coffee
+++ b/test/fixtures/execution/test_assignment.coffee
@@ -12,7 +12,7 @@ print result is true and result2 is true
 
 # Assign to conditional.
 
-get_x: => 10
+get_x: () => 10
 
 if x: get_x() then 100
 
diff --git a/test/fixtures/execution/test_blocks.coffee b/test/fixtures/execution/test_blocks.coffee
index 720d82af..4be80c69 100644
--- a/test/fixtures/execution/test_blocks.coffee
+++ b/test/fixtures/execution/test_blocks.coffee
@@ -1,4 +1,4 @@
-results: [1, 2, 3].map() x =>
+results: [1, 2, 3].map() (x) =>
   x * x
 
 print results.join(' ') is '1 4 9'
\ No newline at end of file
diff --git a/test/fixtures/execution/test_calling_super.coffee b/test/fixtures/execution/test_calling_super.coffee
index c2f619ce..e57baebc 100644
--- a/test/fixtures/execution/test_calling_super.coffee
+++ b/test/fixtures/execution/test_calling_super.coffee
@@ -1,21 +1,21 @@
-Base: =>
-Base::func: string =>
+Base: () =>
+Base::func: (string) =>
   'zero/' + string
 
-FirstChild: =>
+FirstChild: () =>
 FirstChild extends Base
-FirstChild::func: string =>
+FirstChild::func: (string) =>
   super('one/') + string
 
-SecondChild: =>
+SecondChild: () =>
 SecondChild extends FirstChild
-SecondChild::func: string =>
+SecondChild::func: (string) =>
   super('two/') + string
 
-ThirdChild: =>
+ThirdChild: () =>
   this.array: [1, 2, 3]
 ThirdChild extends SecondChild
-ThirdChild::func: string =>
+ThirdChild::func: (string) =>
   super('three/') + string
 
 result: (new ThirdChild()).func 'four'
@@ -23,13 +23,13 @@ result: (new ThirdChild()).func 'four'
 print result is 'zero/one/two/three/four'
 
 
-TopClass: arg =>
+TopClass: (arg) =>
   this.prop: 'top-' + arg
 
-SuperClass: arg =>
+SuperClass: (arg) =>
   super 'super-' + arg
 
-SubClass: =>
+SubClass: () =>
   super 'sub'
 
 SuperClass extends TopClass
diff --git a/test/fixtures/execution/test_chained_calls.coffee b/test/fixtures/execution/test_chained_calls.coffee
index 1355015c..6d3725ae 100644
--- a/test/fixtures/execution/test_chained_calls.coffee
+++ b/test/fixtures/execution/test_chained_calls.coffee
@@ -1,4 +1,5 @@
-identity_wrap: x => => x
+identity_wrap: (x) =>
+  () => x
 
 result: identity_wrap(identity_wrap(true))()()
 
diff --git a/test/fixtures/execution/test_everything.coffee b/test/fixtures/execution/test_everything.coffee
index 7a482e5a..cc986018 100644
--- a/test/fixtures/execution/test_everything.coffee
+++ b/test/fixtures/execution/test_everything.coffee
@@ -1,4 +1,4 @@
-func: =>
+func: () =>
   a: 3
   b: []
 
@@ -9,7 +9,7 @@ func: =>
   c: {
     "text": b
     other: null
-    something_else: x => x + 5
+    something_else: (x) => x + 5
   }
 
   c: 'error' unless 42 > 41
diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee
index 16c64c74..a0438aa9 100644
--- a/test/fixtures/execution/test_existence.coffee
+++ b/test/fixtures/execution/test_existence.coffee
@@ -26,7 +26,7 @@ print z is null and x is "EX"
 # Only evaluate once.
 
 counter: 0
-get_next_node: =>
+get_next_node: () =>
   throw "up" if counter
   counter++
 
diff --git a/test/fixtures/execution/test_expressions.coffee b/test/fixtures/execution/test_expressions.coffee
index 1760e341..042ea59c 100644
--- a/test/fixtures/execution/test_expressions.coffee
+++ b/test/fixtures/execution/test_expressions.coffee
@@ -5,7 +5,7 @@ items: [1, 2, 3, "bacon", 4, 5]
 for item in items
   break if item is "bacon"
 
-findit: items =>
+findit: (items) =>
   for item in items
     return item if item is "bacon"
 
@@ -17,7 +17,7 @@ print findit(items) is "bacon"
 
 obj: {
   num: 5
-  func: =>
+  func: () =>
     this.result: if false
       10
     else
diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee
index bc85e206..4dde028c 100644
--- a/test/fixtures/execution/test_functions.coffee
+++ b/test/fixtures/execution/test_functions.coffee
@@ -1,6 +1,6 @@
 x: 1
 y: {}
-y.x: => 3
+y.x: () => 3
 
 print x is 1
 print typeof(y.x) is 'function'
@@ -9,17 +9,17 @@ print y.x.name is 'x'
 
 
 # The empty function should not cause a syntax error.
-=>
+() =>
 
 
 obj: {
   name: "Fred"
 
-  bound: =>
-    (==> print(this.name is "Fred"))()
+  bound: () =>
+    (() ==> print(this.name is "Fred"))()
 
-  unbound: =>
-    (=> print(!this.name?))()
+  unbound: () =>
+    (() => print(!this.name?))()
 }
 
 obj.unbound()
@@ -29,18 +29,18 @@ obj.bound()
 # The named function should be cleared out before a call occurs:
 
 # Python decorator style wrapper that memoizes any function
-memoize: fn =>
+memoize: (fn) =>
   cache: {}
   self: this
-  args... =>
+  (args...) =>
     key: args.toString()
     return cache[key] if cache[key]
     cache[key] = fn.apply(self, args)
 
 Math: {
-  Add: a, b => a + b
-  AnonymousAdd: (a, b => a + b)
-  FastAdd: memoize a, b => a + b
+  Add: (a, b) => a + b
+  AnonymousAdd: ((a, b) => a + b)
+  FastAdd: memoize (a, b) => a + b
 }
 
 print Math.Add(5, 5) is 10
diff --git a/test/fixtures/execution/test_funky_comments.coffee b/test/fixtures/execution/test_funky_comments.coffee
index 8acaafd8..72652431 100644
--- a/test/fixtures/execution/test_funky_comments.coffee
+++ b/test/fixtures/execution/test_funky_comments.coffee
@@ -1,5 +1,5 @@
   # comment
-func: =>
+func: () =>
 # comment
   false
   false   # comment
@@ -14,7 +14,7 @@ switch 'string'
   when null
     something_else()
 
-=>
+() =>
   code()
   # comment
 
diff --git a/test/fixtures/execution/test_literals.coffee b/test/fixtures/execution/test_literals.coffee
index 4dfb3b8c..923014b5 100644
--- a/test/fixtures/execution/test_literals.coffee
+++ b/test/fixtures/execution/test_literals.coffee
@@ -1,4 +1,4 @@
-a: [(x => x), (x => x * x)]
+a: [(x) => x, (x) => x * x]
 
 print a.length is 2
 
@@ -14,7 +14,7 @@ neg: (3 -4)
 print neg is -1
 
 
-func: =>
+func: () =>
   return if true
 
 print func() is null
diff --git a/test/fixtures/execution/test_operations.coffee b/test/fixtures/execution/test_operations.coffee
index 9f0d51db..e9de9324 100644
--- a/test/fixtures/execution/test_operations.coffee
+++ b/test/fixtures/execution/test_operations.coffee
@@ -13,6 +13,6 @@ print 50 > 10 > 5 is parseInt('5', 10)
 # more than once.
 
 i: 0
-func: => i++
+func: () => i++
 
 print 1 > func() < 1
diff --git a/test/fixtures/execution/test_splats.coffee b/test/fixtures/execution/test_splats.coffee
index c00cf116..58338adc 100644
--- a/test/fixtures/execution/test_splats.coffee
+++ b/test/fixtures/execution/test_splats.coffee
@@ -1,4 +1,4 @@
-func: first, second, rest... =>
+func: (first, second, rest...) =>
   rest.join ' '
 
 result: func 1, 2, 3, 4, 5
@@ -8,7 +8,7 @@ print result is "3 4 5"
 
 gold: silver: bronze: the_field: null
 
-medalists: first, second, third, rest... =>
+medalists: (first, second, third, rest...) =>
   gold:       first
   silver:     second
   bronze:     third
diff --git a/test/fixtures/execution/test_switch.coffee b/test/fixtures/execution/test_switch.coffee
index 80535cd0..a978faf9 100644
--- a/test/fixtures/execution/test_switch.coffee
+++ b/test/fixtures/execution/test_switch.coffee
@@ -16,7 +16,7 @@ result: switch num
 
 print result
 
-func: num =>
+func: (num) =>
   switch num
     when 2, 4, 6
       true
diff --git a/test/fixtures/generation/each.coffee b/test/fixtures/generation/each.coffee
index 89bade61..544f96ed 100644
--- a/test/fixtures/generation/each.coffee
+++ b/test/fixtures/generation/each.coffee
@@ -1,6 +1,6 @@
 # The cornerstone, an each implementation.
 # Handles objects implementing forEach, arrays, and raw objects.
-_.each: obj, iterator, context =>
+_.each: (obj, iterator, context) =>
   index: 0
   try
     if obj.forEach
diff --git a/test/fixtures/generation/each.tokens b/test/fixtures/generation/each.tokens
index aa5d853e..9244f37d 100644
--- a/test/fixtures/generation/each.tokens
+++ b/test/fixtures/generation/each.tokens
@@ -1 +1 @@
-[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]]
\ No newline at end of file
+[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM_START, "("], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], [:PARAM_END, ")"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]]
\ No newline at end of file
diff --git a/test/fixtures/generation/statements_as_expressions.coffee b/test/fixtures/generation/statements_as_expressions.coffee
index 0541d95f..a9ddccb0 100644
--- a/test/fixtures/generation/statements_as_expressions.coffee
+++ b/test/fixtures/generation/statements_as_expressions.coffee
@@ -10,7 +10,7 @@ catch error
   3
 )
 
-func: x =>
+func: (x) =>
   return throw x
 
 print(x * x for x in [1..100])
\ No newline at end of file
diff --git a/test/fixtures/generation/whitespace.coffee b/test/fixtures/generation/whitespace.coffee
index 450fd9e5..94f816d4 100644
--- a/test/fixtures/generation/whitespace.coffee
+++ b/test/fixtures/generation/whitespace.coffee
@@ -1,20 +1,20 @@
 # test
-f1: x =>
+f1: (x) =>
   x * x
-  f2: y =>
+  f2: (y) =>
     y * x
   f3: 3
 
 # Parens can close on the proper level.
-elements.each(el =>
-  el.click(event =>
+elements.each((el) =>
+  el.click((event) =>
     el.reset()
     el.show() if event.active
   )
 )
 
 # Or, parens can close blocks early.
-elements.each(el =>
-  el.click(event =>
+elements.each((el) =>
+  el.click((event) =>
     el.reset()
     el.show() if event.active))
\ No newline at end of file
diff --git a/test/unit/test_lexer.rb b/test/unit/test_lexer.rb
index ec08df01..e9f10ac9 100644
--- a/test/unit/test_lexer.rb
+++ b/test/unit/test_lexer.rb
@@ -25,8 +25,9 @@ class LexerTest < Test::Unit::TestCase
   end
 
   def test_lexing_function_definition
-    code = "x, y => x * y"
-    assert @lex.tokenize(code) == [[:PARAM, "x"], [",", ","], [:PARAM, "y"],
+    code = "(x, y) => x * y"
+    assert @lex.tokenize(code) == [[:PARAM_START, "("], [:PARAM, "x"],
+      [",", ","], [:PARAM, "y"], [:PARAM_END, ")"],
       ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "x"], ["*", "*"],
       [:IDENTIFIER, "y"], [:OUTDENT, 2], ["\n", "\n"]]
   end
diff --git a/test/unit/test_parser.rb b/test/unit/test_parser.rb
index fc0ae6aa..8e8738ff 100644
--- a/test/unit/test_parser.rb
+++ b/test/unit/test_parser.rb
@@ -29,7 +29,7 @@ class ParserTest < Test::Unit::TestCase
   end
 
   def test_parsing_an_function_definition
-    code = @par.parse("x, y => x * y").expressions.first
+    code = @par.parse("(x, y) => x * y").expressions.first
     assert code.params == ['x', 'y']
     body = code.body.expressions.first
     assert body.is_a?(OpNode)